private Remedy computeRemedy(RemedyConfig configuration, IProgressMonitor monitor) { Remedy remedy = new Remedy(originalRequest); remedy.setConfig(configuration); IPlanner planner = session.getPlanner(); RequestFlexer av = new RequestFlexer(planner); av.setAllowDifferentVersion(configuration.allowDifferentVersion); av.setAllowInstalledElementChange(configuration.allowInstalledUpdate); av.setAllowInstalledElementRemoval(configuration.allowInstalledRemoval); av.setAllowPartialInstall(configuration.allowPartialInstall); av.setProvisioningContext(getProvisioningContext()); remedy.setRequest( (ProfileChangeRequest) av.getChangeRequest( originalRequest, ((ProfileChangeRequest) originalRequest).getProfile(), monitor)); if (remedy.getRequest() == null) return null; if (configuration.allowInstalledUpdate && !configuration.allowInstalledRemoval) { remedy.setInstallationRelaxedWeight(HIGH_WEIGHT); } else if (!configuration.allowInstalledUpdate && configuration.allowInstalledRemoval) { remedy.setInstallationRelaxedWeight(MEDIUM_WEIGHT); } else if (configuration.allowInstalledUpdate && configuration.allowInstalledRemoval) { remedy.setInstallationRelaxedWeight(LOW_WEIGHT); } else remedy.setInstallationRelaxedWeight(ZERO_WEIGHT); if (configuration.allowDifferentVersion && !configuration.allowPartialInstall) { remedy.setBeingInstalledRelaxedWeight(HIGH_WEIGHT); } else if (!configuration.allowDifferentVersion && configuration.allowPartialInstall) { remedy.setBeingInstalledRelaxedWeight(MEDIUM_WEIGHT); } else if (configuration.allowDifferentVersion && configuration.allowPartialInstall) { remedy.setBeingInstalledRelaxedWeight(LOW_WEIGHT); } else { remedy.setBeingInstalledRelaxedWeight(ZERO_WEIGHT); } computeRemedyDetails(remedy); return remedy; }