code: public void installFixes(Collection<String> fixes, String userId, String password) throws InstallException {
          fireProgressEvent(InstallProgressEvent.CHECK, 1, Messages.INSTALL_KERNEL_MESSAGES.getLogMessage("STATE_CHECKING"));
          List<String> fixesToInstall = new ArrayList<String>(fixes.size());
          for (String fix : fixes) {
              fixesToInstall.add(fix);
          }
  
          RepositoryConnectionList loginInfo = getResolveDirector().getRepositoryConnectionList(null, userId, password, this.getClass().getCanonicalName() + ".installFixes");
          Resolver resolver = new Resolver(loginInfo);
          List<IfixResource> ifixResources = resolver.resolveFixResources(fixesToInstall);
  
          if (ifixResources.isEmpty())
              throw ExceptionUtils.createByKey("ERROR_FAILED_TO_RESOLVE_IFIX", InstallUtils.getFeatureListOutput(fixes));
  
          ArrayList<InstallAsset> installAssets = new ArrayList<InstallAsset>();
          int progress = 10;
          int interval = 40 / ifixResources.size();
          for (IfixResource fix : ifixResources) {
              fireProgressEvent(InstallProgressEvent.DOWNLOAD, progress, "STATE_DOWNLOADING", fix);
              progress += interval;
              File d;
              try {
                  d = InstallUtils.download(this.product.getInstallTempDir(), fix);
              } catch (InstallException e) {
                  throw e;
              } catch (Exception e) {
                  throw ExceptionUtils.createByKey(e, "ERROR_FAILED_TO_DOWNLOAD_IFIX", fix.getName(), this.product.getInstallTempDir().getAbsolutePath());
              }
              try {
                  installAssets.add(new FixAsset(fix.getName(), d, true));
              } catch (Exception e) {
                  throw ExceptionUtils.createByKey(e, "ERROR_INVALID_IFIX", fix.getName());
              }
          }
          this.installAssets = new ArrayList<List<InstallAsset>>(1);
          this.installAssets.add(installAssets);
      }
docs: Set Director to install the specified fixes including the following tasks
  - determine to install the fix or not
  - call Resolver to resolve the required fixes
  - call Massive Client to download the assets
  
  @param strings