| /******************************************************************************* |
| * Copyright (c) 2008-2009 IBM Corporation 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: |
| * IBM Corporation - initial API and implementation |
| ******************************************************************************/ |
| package org.eclipse.equinox.internal.provisional.p2.director; |
| |
| import java.util.*; |
| import org.eclipse.core.runtime.Status; |
| import org.eclipse.equinox.internal.p2.director.*; |
| import org.eclipse.equinox.internal.p2.director.Explanation.IUInstalled; |
| import org.eclipse.equinox.internal.p2.director.Explanation.IUToInstall; |
| import org.eclipse.equinox.p2.metadata.IInstallableUnit; |
| import org.eclipse.osgi.util.NLS; |
| |
| public class RequestStatus extends Status { |
| public static final byte ADDED = 0; |
| public static final byte REMOVED = 1; |
| |
| private byte initialRequestType; |
| private IInstallableUnit iu; |
| private Set<Explanation> explanation; |
| private Explanation detailedExplanation; |
| private Set<IInstallableUnit> conflictingRootIUs; |
| private Set<IInstallableUnit> conflictingInstalledIUs; |
| |
| public RequestStatus(IInstallableUnit iu, byte initialRequesType, int severity, Set<Explanation> explanation) { |
| super(severity, DirectorActivator.PI_DIRECTOR, NLS.bind(Messages.RequestStatus_message, iu)); |
| this.iu = iu; |
| this.initialRequestType = initialRequesType; |
| this.explanation = explanation; |
| conflictingRootIUs = new HashSet<IInstallableUnit>(); |
| conflictingInstalledIUs = new HashSet<IInstallableUnit>(); |
| if (explanation != null) { |
| Iterator<Explanation> iterator = explanation.iterator(); |
| Explanation o = null; |
| while (iterator.hasNext() && ((o = iterator.next()) instanceof Explanation.IUToInstall)) { |
| conflictingRootIUs.add(((IUToInstall) o).iu); |
| } |
| if (o instanceof Explanation.IUInstalled) { |
| conflictingInstalledIUs.add(((IUInstalled) o).iu); |
| while (iterator.hasNext() && ((o = iterator.next()) instanceof Explanation.IUInstalled)) { |
| conflictingInstalledIUs.add(((IUInstalled) o).iu); |
| } |
| } |
| detailedExplanation = o; |
| } |
| } |
| |
| public byte getInitialRequestType() { |
| return initialRequestType; |
| } |
| |
| public IInstallableUnit getIu() { |
| return iu; |
| } |
| |
| //Return the already installed roots with which this IU is in conflict |
| //Return an empty set if there is no conflict |
| public Set<IInstallableUnit> getConflictsWithInstalledRoots() { |
| return conflictingRootIUs; |
| } |
| |
| //Return the already installed roots with which this IU is in conflict |
| //Return an empty set if there is no conflict |
| public Set<IInstallableUnit> getConflictsWithAnyRoots() { |
| return conflictingInstalledIUs; |
| } |
| |
| //Return an explanation as to why this IU can not be resolved. |
| public Set<Explanation> getExplanations() { |
| //To start with, this does not have to return the most specific explanation. If it simply returns an global explanation it is good enough. |
| return explanation; |
| } |
| |
| public int getShortExplanation() { |
| return detailedExplanation.shortAnswer(); |
| } |
| |
| public Explanation getExplanationDetails() { |
| return detailedExplanation; |
| } |
| } |