Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPascal Rapicault (JBoss)2013-05-09 03:59:58 +0000
committerPascal Rapicault2013-05-09 03:59:58 +0000
commit220fb52a9b325af429abec698baf0082be4dab47 (patch)
tree8bb0f45b1733916b4c57956b2eaf84ecb26087ef /bundles/org.eclipse.equinox.p2.operations
parent068ab26bafe68f32e32e9cd81b93cd038f980969 (diff)
downloadrt.equinox.p2-220fb52a9b325af429abec698baf0082be4dab47.tar.gz
rt.equinox.p2-220fb52a9b325af429abec698baf0082be4dab47.tar.xz
rt.equinox.p2-220fb52a9b325af429abec698baf0082be4dab47.zip
Bug 406984 - [ui][remediation] Rework presentation of the solutions
Diffstat (limited to 'bundles/org.eclipse.equinox.p2.operations')
-rw-r--r--bundles/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/p2/operations/RemediationOperation.java81
-rw-r--r--bundles/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/p2/operations/Remedy.java25
-rw-r--r--bundles/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/p2/operations/RemedyIUDetail.java68
3 files changed, 172 insertions, 2 deletions
diff --git a/bundles/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/p2/operations/RemediationOperation.java b/bundles/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/p2/operations/RemediationOperation.java
index ae024008b..d64dc6792 100644
--- a/bundles/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/p2/operations/RemediationOperation.java
+++ b/bundles/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/p2/operations/RemediationOperation.java
@@ -15,6 +15,8 @@ import org.eclipse.core.runtime.*;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.equinox.internal.p2.director.ProfileChangeRequest;
import org.eclipse.equinox.internal.p2.operations.*;
+import org.eclipse.equinox.p2.metadata.IInstallableUnit;
+import org.eclipse.equinox.p2.metadata.Version;
import org.eclipse.equinox.p2.planner.IPlanner;
import org.eclipse.equinox.p2.planner.IProfileChangeRequest;
import org.eclipse.equinox.p2.repository.IRunnableWithProgress;
@@ -137,7 +139,7 @@ public class RemediationOperation extends ProfileChangeOperation {
}
private Remedy computeRemedy(RemedyConfig configuration, IProgressMonitor monitor) {
- Remedy remedy = new Remedy();
+ Remedy remedy = new Remedy(originalRequest);
remedy.setConfig(configuration);
IPlanner planner = session.getPlanner();
RequestFlexer av = new RequestFlexer(planner);
@@ -168,6 +170,7 @@ public class RemediationOperation extends ProfileChangeOperation {
} else {
remedy.setBeingInstalledRelaxedWeight(ZERO_WEIGHT);
}
+ computeRemedyDetails(remedy);
return remedy;
}
@@ -230,4 +233,80 @@ public class RemediationOperation extends ProfileChangeOperation {
return super.getResolutionResult();
return remedies.size() > 0 ? Status.OK_STATUS : new Status(IStatus.ERROR, Activator.ID, Messages.RemediationOperation_NoRemedyFound);
}
+
+ private void computeRemedyDetails(Remedy remedy) {
+ ArrayList<String> updateIds = new ArrayList<String>();
+ for (IInstallableUnit addedIU : remedy.getRequest().getAdditions()) {
+ for (IInstallableUnit removedIU : remedy.getRequest().getRemovals()) {
+ if (removedIU.getId().equals(addedIU.getId())) {
+ createModificationRemedyDetail(addedIU, removedIU, remedy);
+ updateIds.add(addedIU.getId());
+ break;
+ }
+ }
+ if (!updateIds.contains(addedIU.getId())) {
+ createAdditionRemedyDetail(addedIU, remedy);
+ }
+ }
+
+ for (IInstallableUnit removedIU : remedy.getRequest().getRemovals()) {
+ if (!updateIds.contains(removedIU.getId())) {
+ createRemovalRemedyDetail(removedIU, remedy);
+ }
+ }
+
+ for (IInstallableUnit addedIUinOriginalRequest : originalRequest.getAdditions()) {
+ boolean found = false;
+ for (IInstallableUnit addedIU : remedy.getRequest().getAdditions()) {
+ if (addedIU.getId().equals(addedIUinOriginalRequest.getId())) {
+ found = true;
+ break;
+ }
+ }
+ if (!found) {
+ createNotAddedRemedyDetail(addedIUinOriginalRequest, remedy);
+ found = false;
+ }
+ }
+
+ }
+
+ private void createNotAddedRemedyDetail(IInstallableUnit iu, Remedy remedy) {
+ RemedyIUDetail iuDetail = new RemedyIUDetail(iu);
+ iuDetail.setStatus(RemedyIUDetail.STATUS_NOT_ADDED);
+ iuDetail.setRequestedVersion(iu.getVersion());
+ remedy.addRemedyIUDetail(iuDetail);
+ }
+
+ private void createRemovalRemedyDetail(IInstallableUnit iu, Remedy remedy) {
+ RemedyIUDetail iuDetail = new RemedyIUDetail(iu);
+ iuDetail.setStatus(RemedyIUDetail.STATUS_REMOVED);
+ iuDetail.setInstalledVersion(iu.getVersion());
+ remedy.addRemedyIUDetail(iuDetail);
+ }
+
+ private void createAdditionRemedyDetail(IInstallableUnit iu, Remedy remedy) {
+ RemedyIUDetail iuDetail = new RemedyIUDetail(iu);
+ iuDetail.setStatus(RemedyIUDetail.STATUS_ADDED);
+ iuDetail.setBeingInstalledVersion(iu.getVersion());
+ iuDetail.setRequestedVersion(searchInOriginalRequest(iu.getId()));
+ remedy.addRemedyIUDetail(iuDetail);
+ }
+
+ private void createModificationRemedyDetail(IInstallableUnit beingInstalledIU, IInstallableUnit installedIU, Remedy remedy) {
+ RemedyIUDetail iuDetail = new RemedyIUDetail(beingInstalledIU);
+ iuDetail.setStatus(RemedyIUDetail.STATUS_CHANGED);
+ iuDetail.setBeingInstalledVersion(beingInstalledIU.getVersion());
+ iuDetail.setInstalledVersion(installedIU.getVersion());
+ iuDetail.setRequestedVersion(searchInOriginalRequest(beingInstalledIU.getId()));
+ remedy.addRemedyIUDetail(iuDetail);
+ }
+
+ private Version searchInOriginalRequest(String id) {
+ for (IInstallableUnit iu : originalRequest.getAdditions()) {
+ if (iu.getId() == id)
+ return iu.getVersion();
+ }
+ return null;
+ }
}
diff --git a/bundles/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/p2/operations/Remedy.java b/bundles/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/p2/operations/Remedy.java
index 4c2e0dd12..02ad85a78 100644
--- a/bundles/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/p2/operations/Remedy.java
+++ b/bundles/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/p2/operations/Remedy.java
@@ -10,7 +10,10 @@
*******************************************************************************/
package org.eclipse.equinox.p2.operations;
+import java.util.ArrayList;
+import java.util.List;
import org.eclipse.equinox.internal.p2.director.ProfileChangeRequest;
+import org.eclipse.equinox.p2.planner.IProfileChangeRequest;
/**
* <p>
@@ -27,6 +30,22 @@ public class Remedy {
private ProfileChangeRequest request;
private int beingInstalledRelaxedWeight;
private int installationRelaxedWeight;
+ private IProfileChangeRequest originalRequest;
+ private List<RemedyIUDetail> iusDetails;
+
+ public List<RemedyIUDetail> getIusDetails() {
+ return iusDetails;
+ }
+
+ public IProfileChangeRequest getOriginalRequest() {
+ return originalRequest;
+
+ }
+
+ public Remedy(IProfileChangeRequest originalRequest) {
+ this.originalRequest = originalRequest;
+ this.iusDetails = new ArrayList<RemedyIUDetail>();
+ }
public RemedyConfig getConfig() {
return config;
@@ -60,4 +79,8 @@ public class Remedy {
this.installationRelaxedWeight = installationRelaxedWeight;
}
-}
+ public void addRemedyIUDetail(RemedyIUDetail iuDetail) {
+ iusDetails.add(iuDetail);
+ }
+
+} \ No newline at end of file
diff --git a/bundles/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/p2/operations/RemedyIUDetail.java b/bundles/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/p2/operations/RemedyIUDetail.java
new file mode 100644
index 000000000..1d060a528
--- /dev/null
+++ b/bundles/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/p2/operations/RemedyIUDetail.java
@@ -0,0 +1,68 @@
+/*******************************************************************************
+ * Copyright (c) 2013 Red Hat, Inc. and others
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Red Hat, Inc. - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.p2.operations;
+
+import org.eclipse.equinox.p2.metadata.IInstallableUnit;
+import org.eclipse.equinox.p2.metadata.Version;
+
+public class RemedyIUDetail {
+
+ public static final int STATUS_ADDED = 1;
+ public static final int STATUS_REMOVED = 2;
+ public static final int STATUS_NOT_ADDED = 3;
+ public static final int STATUS_CHANGED = 4;
+
+ private int status;
+ private Version installedVersion;
+ private Version requestedVersion;
+ private Version beingInstalledVersion;
+ private IInstallableUnit iu;
+
+ public RemedyIUDetail(IInstallableUnit iu) {
+ this.iu = iu;
+ }
+
+ public void setStatus(int status) {
+ this.status = status;
+ }
+
+ public int getStatus() {
+ return status;
+ }
+
+ public Version getRequestedVersion() {
+ return requestedVersion;
+ }
+
+ public void setRequestedVersion(Version requestedVersion) {
+ this.requestedVersion = requestedVersion;
+ }
+
+ public Version getBeingInstalledVersion() {
+ return beingInstalledVersion;
+ }
+
+ public void setBeingInstalledVersion(Version beingInstalledVersion) {
+ this.beingInstalledVersion = beingInstalledVersion;
+ }
+
+ public IInstallableUnit getIu() {
+ return iu;
+ }
+
+ public Version getInstalledVersion() {
+ return installedVersion;
+ }
+
+ public void setInstalledVersion(Version installedVersion) {
+ this.installedVersion = installedVersion;
+ }
+}

Back to the top