diff options
author | Pascal Rapicault (JBoss) | 2013-05-09 03:59:58 +0000 |
---|---|---|
committer | Pascal Rapicault | 2013-05-09 03:59:58 +0000 |
commit | 220fb52a9b325af429abec698baf0082be4dab47 (patch) | |
tree | 8bb0f45b1733916b4c57956b2eaf84ecb26087ef /bundles/org.eclipse.equinox.p2.operations | |
parent | 068ab26bafe68f32e32e9cd81b93cd038f980969 (diff) | |
download | rt.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')
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; + } +} |