You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by st...@apache.org on 2014/05/26 15:38:24 UTC

svn commit: r1597582 - in /sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui: actions/ nav/model/

Author: stefanegli
Date: Mon May 26 13:38:24 2014
New Revision: 1597582

URL: http://svn.apache.org/r1597582
Log:
SLING-3238 : support all variants of nodes' deletion and remaming

Modified:
    sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/actions/JcrNodeDeleteAction.java
    sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/actions/JcrNodeRenameAction.java
    sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/DirNode.java
    sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/GenericJcrRootFile.java
    sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/JcrNode.java
    sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/SyncDir.java

Modified: sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/actions/JcrNodeDeleteAction.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/actions/JcrNodeDeleteAction.java?rev=1597582&r1=1597581&r2=1597582&view=diff
==============================================================================
--- sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/actions/JcrNodeDeleteAction.java (original)
+++ sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/actions/JcrNodeDeleteAction.java Mon May 26 13:38:24 2014
@@ -52,7 +52,7 @@ public class JcrNodeDeleteAction impleme
 		if (this.node==null) {
 			return;
 		}
-		if (!MessageDialog.openConfirm(shell, "Delete JCR node", "Do you really want to delete '"+node.getName()+"'?")) {
+		if (!MessageDialog.openConfirm(shell, "Delete JCR node", "Do you really want to delete '"+node.getLabel()+"'?")) {
 			return;
 		}
 		node.delete();
@@ -71,7 +71,7 @@ public class JcrNodeDeleteAction impleme
 			Object element = iss.getFirstElement();
 			if (element instanceof JcrNode) {
 				final JcrNode n = (JcrNode)element;
-				if (n.canBeRenamed()) {
+				if (n.canBeDeleted()) {
 					action.setEnabled(true);
 					this.node = n;
 					return;

Modified: sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/actions/JcrNodeRenameAction.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/actions/JcrNodeRenameAction.java?rev=1597582&r1=1597581&r2=1597582&view=diff
==============================================================================
--- sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/actions/JcrNodeRenameAction.java (original)
+++ sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/actions/JcrNodeRenameAction.java Mon May 26 13:38:24 2014
@@ -52,7 +52,7 @@ public class JcrNodeRenameAction impleme
 			return;
 		}
 		InputDialog id = new InputDialog(shell, "Change JCR node name", 
-				"Enter new name for JCR node '"+node.getDescription()+"':", node.getName(), new IInputValidator() {
+				"Enter new name for JCR node '"+node.getDescription()+"':", node.getLabel(), new IInputValidator() {
 					
 					@Override
 					public String isValid(String newText) {

Modified: sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/DirNode.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/DirNode.java?rev=1597582&r1=1597581&r2=1597582&view=diff
==============================================================================
--- sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/DirNode.java (original)
+++ sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/DirNode.java Mon May 26 13:38:24 2014
@@ -132,4 +132,9 @@ public class DirNode extends JcrNode {
 		return false;
 	}
 	
+	@Override
+	public boolean canBeDeleted() {
+	    return false;
+	}
+	
 }

Modified: sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/GenericJcrRootFile.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/GenericJcrRootFile.java?rev=1597582&r1=1597581&r2=1597582&view=diff
==============================================================================
--- sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/GenericJcrRootFile.java (original)
+++ sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/GenericJcrRootFile.java Mon May 26 13:38:24 2014
@@ -25,6 +25,7 @@ import java.util.List;
 import javax.xml.parsers.ParserConfigurationException;
 
 import org.apache.commons.io.IOUtils;
+import org.apache.sling.ide.eclipse.core.internal.Activator;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.CoreException;
@@ -93,6 +94,7 @@ public class GenericJcrRootFile extends 
 				DirNode dirNodeParent = (DirNode)parent;
 				JcrNode dirNodeParentParent = dirNodeParent.getParent();
 				JcrNode effectiveSibling = dirNodeParent.getEffectiveSibling();
+				effectiveSibling.dirSibling = dirNodeParent;
 				handleProperties(element, effectiveSibling.properties);
 				effectiveParent = parent;
 				dirNodeParentParent.hide(parent);
@@ -209,4 +211,32 @@ public class GenericJcrRootFile extends 
 		SyncDirManager.syncDirChanged(getSyncDir());
 	}
 	
+	@Override
+	public boolean canBeRenamed() {
+	    return true;
+	}
+	
+	@Override
+	public boolean canBeDeleted() {
+	    return true;
+	}
+	
+	@Override
+	public void rename(String string) {
+        try {
+            file.move(file.getParent().getFullPath().append(string+".xml"), true, new NullProgressMonitor());
+        } catch (CoreException e) {
+            Activator.getDefault().getPluginLogger().error("Error renaming resource ("+file+"): "+e, e);
+        }
+	}
+	
+	@Override
+	public void delete() {
+        try {
+            file.delete(true, new NullProgressMonitor());
+        } catch (CoreException e) {
+            Activator.getDefault().getPluginLogger().error("Error deleting resource ("+file+"): "+e, e);
+        }
+	}
+	
 }

Modified: sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/JcrNode.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/JcrNode.java?rev=1597582&r1=1597581&r2=1597582&view=diff
==============================================================================
--- sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/JcrNode.java (original)
+++ sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/JcrNode.java Mon May 26 13:38:24 2014
@@ -59,11 +59,14 @@ import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IFolder;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IWorkspaceRunnable;
+import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.resources.mapping.ResourceMapping;
 import org.eclipse.core.resources.mapping.ResourceMappingContext;
 import org.eclipse.core.resources.mapping.ResourceTraversal;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.jface.dialogs.MessageDialog;
@@ -122,6 +125,8 @@ public class JcrNode implements IAdaptab
 	final GenericJcrRootFile underlying;
 
 	JcrNode parent;
+	
+	DirNode dirSibling;
 
 	final List<JcrNode> children = new LinkedList<JcrNode>();
 
@@ -699,21 +704,41 @@ public class JcrNode implements IAdaptab
 		return null;
 	}
 
-	public void rename(String string) {
+	public void rename(final String string) {
 		if (domElement!=null && underlying!=null) {
 			domElement.setName(string);
 			underlying.save();
 		}
+		if (resource!=null) {
+		    IWorkspaceRunnable r = new IWorkspaceRunnable() {
+
+                @Override
+                public void run(IProgressMonitor monitor) throws CoreException {
+                    final IPath fileRenamePath = resource.getParent().getFullPath().append(string);
+                    resource.move(fileRenamePath, true, monitor);
+                    if (dirSibling!=null) {
+                        final IPath dirRenamePath = dirSibling.getResource().getParent().getFullPath().append(string+".dir");
+                        dirSibling.getResource().move(dirRenamePath, true, monitor);
+                    }
+                }
+		    };
+		    try {
+                ResourcesPlugin.getWorkspace().run(r, null);
+            } catch (CoreException e) {
+                Activator.getDefault().getPluginLogger().error("Error renaming resource ("+resource+"): "+e, e);
+            }
+		}
 	}
 
 	public boolean canBeRenamed() {
-		if (resource!=null) {
-			return false;
-		}
+        if (parent==null) {
+            return false;
+        }
+	    if (resource!=null) {
+            // can be a file or a folder (project is virtually impossible)
+	        return true;
+	    }
 		if (domElement!=null && underlying!=null) {
-			if (getDomName().equals("jcr:content")) {
-				return false;
-			}
 			return true;
 		}
 		return false;
@@ -875,12 +900,43 @@ public class JcrNode implements IAdaptab
 		effectiveUnderlying.save();
 	}
 
+	public boolean canBeDeleted() {
+	    if (parent==null) {
+	        return false;
+	    }
+	    if (resource!=null) {
+	        // can be a file or a folder (project is virtually impossible)
+	        return true;
+	    }
+        if (domElement!=null && underlying!=null) {
+            return true;
+        }
+        return false;
+    }
+	
 	public void delete() {
 		if (parent==null) {
 			// then I dont know how to delete
 			return;
 		}
 		parent.children.remove(this);
+		if (resource!=null) {
+            IWorkspaceRunnable r = new IWorkspaceRunnable() {
+
+                @Override
+                public void run(IProgressMonitor monitor) throws CoreException {
+                    resource.delete(true, monitor);
+                    if (dirSibling!=null) {
+                        dirSibling.getResource().delete(true, monitor);
+                    }
+                }
+            };
+            try {
+                ResourcesPlugin.getWorkspace().run(r, null);
+            } catch (CoreException e) {
+                Activator.getDefault().getPluginLogger().error("Error renaming resource ("+resource+"): "+e, e);
+            }
+		}
 		if (domElement!=null) {
 			Element parentNode = domElement.getParentElement();
 			domElement.remove();
@@ -906,7 +962,9 @@ public class JcrNode implements IAdaptab
 				}
 			}
 		}
-		underlying.save();
+		if (underlying!=null) {
+		    underlying.save();
+		}
 	}
 
 	public IProject getProject() {

Modified: sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/SyncDir.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/SyncDir.java?rev=1597582&r1=1597581&r2=1597582&view=diff
==============================================================================
--- sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/SyncDir.java (original)
+++ sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/SyncDir.java Mon May 26 13:38:24 2014
@@ -99,4 +99,14 @@ public class SyncDir extends JcrNode {
 	    return node;
 	}
 	
+	@Override
+	public boolean canBeRenamed() {
+	    return false;
+	}
+	
+	@Override
+	public boolean canBeDeleted() {
+	    return false;
+	}
+	
 }