Add getResolutionReportMessage to ResolutionReport
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/Module.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/Module.java
index b84134b..e623ca1 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/Module.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/Module.java
@@ -418,7 +418,7 @@
 				if (State.ACTIVE.equals(getState()))
 					return;
 				if (getState().equals(State.INSTALLED)) {
-					String reportMessage = ModuleResolutionReport.getResolutionReport("", getCurrentRevision(), report.getEntries()); //$NON-NLS-1$
+					String reportMessage = report.getResolutionReportMessage(getCurrentRevision());
 					throw new BundleException(Msg.Module_ResolveError + reportMessage, BundleException.RESOLVE_ERROR, e);
 				}
 			}
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/ModuleResolutionReport.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/ModuleResolutionReport.java
index f5a9d5c..7d447f0 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/ModuleResolutionReport.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/ModuleResolutionReport.java
@@ -13,7 +13,6 @@
 import java.util.*;
 import org.eclipse.osgi.internal.messages.Msg;
 import org.eclipse.osgi.report.resolution.ResolutionReport;
-import org.osgi.framework.Bundle;
 import org.osgi.framework.wiring.BundleRevision;
 import org.osgi.resource.*;
 import org.osgi.service.resolver.ResolutionException;
@@ -84,19 +83,7 @@
 		return resolutionResult;
 	}
 
-	/**
-	 * Returns a message giving an explanation of a resolution report for the specific bundle revision.
-	 * @param prepend a string to prepend each line in the message.  This is useful if you need to indent the message.
-	 * A value of <code>null</code> is treated as empty string.
-	 * @param revision The bundle revision to get a report for
-	 * @param reportEntries The report entries from a resolution report
-	 * @return The explanation of the resolution report for the specified revision.
-	 */
-	public static String getResolutionReport(String prepend, BundleRevision revision, Map<Resource, List<ResolutionReport.Entry>> reportEntries) {
-		return getResolutionReport0(prepend, revision, reportEntries, null);
-	}
-
-	private static String getResolutionReport0(String prepend, BundleRevision revision, Map<Resource, List<ResolutionReport.Entry>> reportEntries, Set<BundleRevision> visited) {
+	private static String getResolutionReport0(String prepend, ModuleRevision revision, Map<Resource, List<ResolutionReport.Entry>> reportEntries, Set<BundleRevision> visited) {
 		if (prepend == null) {
 			prepend = ""; //$NON-NLS-1$
 		}
@@ -108,15 +95,7 @@
 		}
 		visited.add(revision);
 		StringBuilder result = new StringBuilder();
-		String id = null;
-		if (revision instanceof ModuleRevision) {
-			id = ((ModuleRevision) revision).getRevisions().getModule().getId().toString();
-		} else {
-			Bundle b = revision.getBundle();
-			if (b != null) {
-				id = Long.toString(b.getBundleId());
-			}
-		}
+		String id = revision.getRevisions().getModule().getId().toString();
 		result.append(prepend).append(revision.getSymbolicName()).append(" [").append(id).append("]").append('\n'); //$NON-NLS-1$ //$NON-NLS-2$
 
 		List<ResolutionReport.Entry> revisionEntries = reportEntries.get(revision);
@@ -167,4 +146,9 @@
 				break;
 		}
 	}
+
+	@Override
+	public String getResolutionReportMessage(Resource resource) {
+		return getResolutionReport0(null, (ModuleRevision) resource, getEntries(), null);
+	}
 }
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/SystemModule.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/SystemModule.java
index 66c5066..b99fee2 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/SystemModule.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/SystemModule.java
@@ -10,13 +10,12 @@
  *******************************************************************************/
 package org.eclipse.osgi.container;
 
-import org.eclipse.osgi.internal.messages.Msg;
-
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 import org.eclipse.osgi.container.ModuleContainer.ContainerStartLevel;
 import org.eclipse.osgi.container.ModuleContainerAdaptor.ContainerEvent;
 import org.eclipse.osgi.container.ModuleContainerAdaptor.ModuleEvent;
+import org.eclipse.osgi.internal.messages.Msg;
 import org.osgi.framework.*;
 import org.osgi.service.resolver.ResolutionException;
 
@@ -61,7 +60,7 @@
 				if (ACTIVE_SET.contains(getState()))
 					return;
 				if (getState().equals(State.INSTALLED)) {
-					String reportMessage = ModuleResolutionReport.getResolutionReport("", getCurrentRevision(), report.getEntries()); //$NON-NLS-1$
+					String reportMessage = report.getResolutionReportMessage(getCurrentRevision());
 					throw new BundleException(Msg.Module_ResolveError + reportMessage, BundleException.RESOLVE_ERROR);
 				}
 			}
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/report/resolution/ResolutionReport.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/report/resolution/ResolutionReport.java
index 1e74fa8..7ae7e1a 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/report/resolution/ResolutionReport.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/report/resolution/ResolutionReport.java
@@ -172,4 +172,14 @@
 	 * no resolution exception.
 	 */
 	ResolutionException getResoltuionException();
+
+	/**
+	 * Returns a resolution report message for the given resource.
+	 * The resource must be included as an {@link #getEntries entry} for this resolution report.
+	 * This is a convenience method intended to help display messaged for resolution
+	 * errors.
+	 * @param resource the resource to get the resolution report message for.
+	 * @return a resolution report message.
+	 */
+	String getResolutionReportMessage(Resource resource);
 }