diff options
author | Matthias Sohn | 2013-01-26 00:22:04 +0000 |
---|---|---|
committer | Gerrit Code Review @ Eclipse.org | 2013-01-26 00:22:04 +0000 |
commit | 09dc5c54829bac3cd591711e1118582bf6ebf682 (patch) | |
tree | 41200e321862c5ed04650dabc69896ac33a270c9 /org.eclipse.egit.ui | |
parent | a1f3f5b18aa972c3905d8f204381731e565bf591 (diff) | |
parent | 9b872b4f7eadc4b179b16052c32ff3d1a2621ee9 (diff) | |
download | egit-09dc5c54829bac3cd591711e1118582bf6ebf682.tar.gz egit-09dc5c54829bac3cd591711e1118582bf6ebf682.tar.xz egit-09dc5c54829bac3cd591711e1118582bf6ebf682.zip |
Merge "Make all methods and states of RepositoryState testable properties"
Diffstat (limited to 'org.eclipse.egit.ui')
3 files changed, 81 insertions, 16 deletions
diff --git a/org.eclipse.egit.ui/plugin.xml b/org.eclipse.egit.ui/plugin.xml index f9c1172f6f..7a6e358eb4 100644 --- a/org.eclipse.egit.ui/plugin.xml +++ b/org.eclipse.egit.ui/plugin.xml @@ -4351,14 +4351,14 @@ class="org.eclipse.egit.ui.internal.repository.tree.RepositoriesViewPropertyTester" id="org.eclipse.egit.ui.RepositoryTester" namespace="GitRepository" - properties="isBare,isSafe,isRefCheckedOut,isLocalBranch,fetchExists,pushExists,canMerge,canAbortRebase,isSubmodule,containsHead" + properties="isBare,isSafe,canCommit,canAmend,canResetHead,isRefCheckedOut,isLocalBranch,fetchExists,pushExists,canMerge,canAbortRebase,isSubmodule,containsHead" type="org.eclipse.egit.ui.internal.repository.tree.RepositoryTreeNode"> </propertyTester> <propertyTester class="org.eclipse.egit.ui.internal.ResourcePropertyTester" id="org.eclipse.egit.ui.ResourceTester" namespace="GitResource" - properties="isShared,isSafe,isContainer" + properties="isShared,isContainer,isSafe,canCommit,canAmend,canResetHead" type="org.eclipse.core.resources.IResource"> </propertyTester> </extension> diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/ResourcePropertyTester.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/ResourcePropertyTester.java index 778a667142..95ff4af59c 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/ResourcePropertyTester.java +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/ResourcePropertyTester.java @@ -11,15 +11,48 @@ *******************************************************************************/ package org.eclipse.egit.ui.internal; -import static org.eclipse.jgit.lib.RepositoryState.SAFE; +import java.lang.reflect.Method; import org.eclipse.core.expressions.PropertyTester; import org.eclipse.core.resources.IResource; import org.eclipse.egit.core.project.RepositoryMapping; import org.eclipse.egit.ui.internal.trace.GitTraceLocation; +import org.eclipse.jgit.lib.Repository; +import org.eclipse.jgit.lib.RepositoryState; /** - * Resource-based property tester + * Resource-based property tester. + * <p> + * Supported properties: + * <ul> + * <li>isShared <code>true</code> if the resource is mapped to EGit. EGit may + * still affect a resource if it belongs to the workspace of some shared + * project.</li> + * <li>isContainer <code>true</code> if the resource is a project or a folder</li> + * <li>is<em>repository state</em> + * <ul> + * <li>isSafe - see {@link RepositoryState#SAFE}</li> + * <li>isReverting - see {@link RepositoryState#REVERTING}</li> + * <li>isRevertingResolved - see {@link RepositoryState#REVERTING_RESOLVED}</li> + * <li>isCherryPicking - see {@link RepositoryState#CHERRY_PICKING}</li> + * <li>isCherryPickingResolved - see + * {@link RepositoryState#CHERRY_PICKING_RESOLVED}</li> + * <li>isMerging - see {@link RepositoryState#MERGING}</li> + * <li>isMergingResolved - see {@link RepositoryState#MERGING_RESOLVED}</li> + * <li>isRebasing - see {@link RepositoryState#REBASING}</li> + * <li>isRebasingRebasing - see {@link RepositoryState#REBASING_REBASING}</li> + * <li>isRebasingMerge - see {@link RepositoryState#REBASING_MERGE}</li> + * <li>isRebasingInteractive - see {@link RepositoryState#REBASING_INTERACTIVE}</li> + * <li>isApply - see {@link RepositoryState#APPLY}</li> + * <li>isBisecting - see {@link RepositoryState#BISECTING}</li> + * </ul> + * <li>Capabilities/properties of the current state:<ul> + * <li>canCheckout - see {@link RepositoryState#canCheckout()}</li> + * <li>canAmend - see {@link RepositoryState#canAmend()}</li> + * <li>canCommit - see {@link RepositoryState#canCommit()}</li> + * <li>canResetHead - see {@link RepositoryState#canResetHead()}</li> + * </ul> + * </ul> */ public class ResourcePropertyTester extends PropertyTester { @@ -39,19 +72,50 @@ public class ResourcePropertyTester extends PropertyTester { if (!(receiver instanceof IResource)) return false; IResource res = (IResource) receiver; - if ("isShared".equals(property)) { //$NON-NLS-1$ - RepositoryMapping mapping = RepositoryMapping.getMapping(res - .getProject()); - return mapping != null && mapping.getRepository() != null; - } else if ("isSafe".equals(property)) { //$NON-NLS-1$ - RepositoryMapping mapping = RepositoryMapping.getMapping(res - .getProject()); - return mapping != null - && SAFE == mapping.getRepository().getRepositoryState(); - } else if ("isContainer".equals(property)) { //$NON-NLS-1$ + if ("isContainer".equals(property)) { //$NON-NLS-1$ int type = res.getType(); return type == IResource.FOLDER || type == IResource.PROJECT; } + + RepositoryMapping mapping = RepositoryMapping.getMapping(res + .getProject()); + if (mapping != null) { + Repository repository = mapping.getRepository(); + return testRepositoryState(repository, property); + } + return false; + } + + /** + * @param repository + * @param property + * @return true if the repository is in an appropriate state. See + * {@link ResourcePropertyTester} + */ + public static boolean testRepositoryState(Repository repository, String property) { + if ("isShared".equals(property)) //$NON-NLS-1$ + return repository != null; + if (repository != null) { + // isSTATE checks repository state where STATE is the CamelCase version + // of the RepositoryState enum values. + RepositoryState state = repository.getRepositoryState(); + if (property.length() > 3 && property.startsWith("is")) { //$NON-NLS-1$ + // e.g. isCherryPickingResolved => CHERRY_PICKING_RESOLVED + String lookFor = property.substring(2,3) + property.substring(3).replaceAll("([A-Z])","_$1").toUpperCase(); //$NON-NLS-1$//$NON-NLS-2$ + if (state.toString().equals(lookFor)) + return true; + } + // invokes test methods of RepositoryState, canCommit etc + try { + Method method = RepositoryState.class.getMethod(property); + if (method.getReturnType() == boolean.class) { + Boolean ret = (Boolean) method.invoke(state); + return ret.booleanValue(); + } + } catch (Exception e) { + // ignore + } + } return false; } diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/RepositoriesViewPropertyTester.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/RepositoriesViewPropertyTester.java index 96568a9f5d..63225bcb34 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/RepositoriesViewPropertyTester.java +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/RepositoriesViewPropertyTester.java @@ -14,6 +14,7 @@ import java.io.IOException; import java.net.URISyntaxException; import org.eclipse.core.expressions.PropertyTester; +import org.eclipse.egit.ui.internal.ResourcePropertyTester; import org.eclipse.egit.ui.internal.trace.GitTraceLocation; import org.eclipse.jgit.lib.Constants; import org.eclipse.jgit.lib.Ref; @@ -51,8 +52,8 @@ public class RepositoriesViewPropertyTester extends PropertyTester { if (property.equals("containsHead")) //$NON-NLS-1$ return containsHead(node); - if (property.equals("isSafe")) //$NON-NLS-1$ - return node.getRepository().getRepositoryState() == RepositoryState.SAFE; + if (ResourcePropertyTester.testRepositoryState(node.getRepository(), property)) + return true; if (property.equals("isRefCheckedOut")) { //$NON-NLS-1$ if (!(node.getObject() instanceof Ref)) |