code: public void installAssets(Collection<String> assetIds, RepositoryConnectionList loginInfo) throws InstallException {
          fireProgressEvent(InstallProgressEvent.CHECK, 1, Messages.INSTALL_KERNEL_MESSAGES.getLogMessage("STATE_CHECKING_ASSETS"));
  
          if (assetIds == null || assetIds.isEmpty()) {
              throw ExceptionUtils.createByKey("ERROR_ASSETS_LIST_INVALID");
          }
  
          RepositoryConnectionList li = loginInfo == null ? getResolveDirector().getRepositoryConnectionList(null, null, null,
                                                                                                             this.getClass().getCanonicalName() + ".installAssets") : loginInfo;
          Map<String, List<List<RepositoryResource>>> installResources = getResolveDirector().resolveMap(assetIds, li, false);
          if (isEmpty(installResources)) {
              throw ExceptionUtils.createByKey(InstallException.ALREADY_EXISTS, "ASSETS_ALREADY_INSTALLED",
                                               InstallUtils.getShortNames(product.getFeatureDefinitions(), assetIds).toString());
          }
          downloadAssets(installResources, InstallConstants.TO_USER);
      }
docs: Installs the specified assets
  
  @param assetIds Collection of asset Ids
  @param loginInfo RepositoryConnectionList to access repository with assets
  @throws InstallException