Make StagingEntry a PlatformObject

Since we already have an IAdapterFactory for StagingEntry, move all
adapter logic there so that it is in one place. Also make StagingEntry
adaptable to Repository; this is prerequisite for resolving bug 481682
properly.

Change-Id: Ib71278000fd2e5f74d71e9289698917de8ce9c76
Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
diff --git a/org.eclipse.egit.ui/plugin.xml b/org.eclipse.egit.ui/plugin.xml
index 9f74938..c0e1780 100644
--- a/org.eclipse.egit.ui/plugin.xml
+++ b/org.eclipse.egit.ui/plugin.xml
@@ -296,6 +296,13 @@
             class="org.eclipse.egit.ui.internal.factories.GitAdapterFactory">
          <adapter type="org.eclipse.ui.part.IShowInSource"/>
       </factory>
+      <factory
+            adaptableType="org.eclipse.egit.ui.internal.staging.StagingEntry"
+            class="org.eclipse.egit.ui.internal.staging.StagingEntryAdapterFactory">
+         <adapter type="org.eclipse.core.resources.IResource"/>
+         <adapter type="org.eclipse.core.runtime.IPath"/>
+         <adapter type="org.eclipse.jgit.lib.Repository"/>
+      </factory>
    </extension>
 
    <extension
@@ -5830,16 +5837,6 @@
             id="org.eclipse.egit.ui.internal.commit.CommitEditorInputFactory">
       </factory>
    </extension>
-   <extension
-		point="org.eclipse.core.runtime.adapters">
-	      <factory
-	            adaptableType="org.eclipse.egit.ui.internal.staging.StagingEntry"
-				            class="org.eclipse.egit.ui.internal.staging.StagingEntryAdapterFactory">
-	         <adapter
-	               type="org.eclipse.core.resources.IResource">
-	         </adapter>
-	      </factory>
-	</extension>
     <extension point="org.eclipse.search.searchPages">
       <page
             class="org.eclipse.egit.ui.internal.search.CommitSearchPage"
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/staging/StagingEntry.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/staging/StagingEntry.java
index da604bc..e4da163 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/staging/StagingEntry.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/staging/StagingEntry.java
@@ -18,9 +18,9 @@
 import org.eclipse.core.resources.IMarker;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.PlatformObject;
 import org.eclipse.egit.core.internal.util.ResourceUtil;
 import org.eclipse.egit.ui.internal.decorators.IDecoratableResource;
 import org.eclipse.egit.ui.internal.decorators.IProblemDecoratable;
@@ -30,7 +30,8 @@
 /**
  * A staged/unstaged entry in the table
  */
-public class StagingEntry implements IAdaptable, IProblemDecoratable, IDecoratableResource {
+public class StagingEntry extends PlatformObject
+		implements IProblemDecoratable, IDecoratableResource {
 
 	/**
 	 * State of the node
@@ -228,15 +229,6 @@
 	}
 
 	@Override
-	public Object getAdapter(Class adapter) {
-		if (adapter == IResource.class)
-			return getFile();
-		else if (adapter == IPath.class)
-			return getLocation();
-		return null;
-	}
-
-	@Override
 	public int getType() {
 		return IResource.FILE;
 	}
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/staging/StagingEntryAdapterFactory.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/staging/StagingEntryAdapterFactory.java
index e7e39b9..86bcb17 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/staging/StagingEntryAdapterFactory.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/staging/StagingEntryAdapterFactory.java
@@ -10,7 +10,8 @@
 
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.IAdapterFactory;
-import org.eclipse.egit.ui.internal.CommonUtils;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.jgit.lib.Repository;
 
 /**
  * An adapter factory for <code>StagingEntry</code>s so that the property page
@@ -20,12 +21,22 @@
 
 	@Override
 	public Object getAdapter(Object adaptableObject, Class adapterType) {
-		return CommonUtils.getAdapter(((StagingEntry)adaptableObject), IResource.class);
+		if (adaptableObject != null) {
+			StagingEntry entry = (StagingEntry) adaptableObject;
+			if (adapterType == IResource.class) {
+				return entry.getFile();
+			} else if (adapterType == IPath.class) {
+				return entry.getLocation();
+			} else if (adapterType == Repository.class) {
+				return entry.getRepository();
+			}
+		}
+		return null;
 	}
 
 	@Override
 	public Class[] getAdapterList() {
-		return new Class[] { IResource.class };
+		return new Class[] { IResource.class, IPath.class, Repository.class };
 	}
 
 }