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 2013/09/05 15:40:34 UTC
svn commit: r1520309 - in /sling/trunk/tooling/ide:
eclipse-core/src/org/apache/sling/ide/eclipse/core/
eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/
eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/
Author: stefanegli
Date: Thu Sep 5 13:40:34 2013
New Revision: 1520309
URL: http://svn.apache.org/r1520309
Log:
SLING-2985 : improvements in the content-browser : double click on a jcr node opens the corresponding .content.xml in the editor - editing and saving the .content.xml updates the tree in the project explorer automatically
Modified:
sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/ProjectUtil.java
sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/JcrContentContentProvider.java
sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/PackageExplorerOpenActionProvider.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-core/src/org/apache/sling/ide/eclipse/core/ProjectUtil.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/ProjectUtil.java?rev=1520309&r1=1520308&r2=1520309&view=diff
==============================================================================
--- sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/ProjectUtil.java (original)
+++ sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/ProjectUtil.java Thu Sep 5 13:40:34 2013
@@ -17,7 +17,10 @@
package org.apache.sling.ide.eclipse.core;
import org.apache.sling.ide.eclipse.core.internal.Activator;
+import org.apache.sling.ide.eclipse.core.internal.ProjectHelper;
+import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.QualifiedName;
@@ -28,6 +31,26 @@ public abstract class ProjectUtil {
private static final String PROPERTY_SYNC_ROOT = "sync_root";
private static final String PROPERTY_SYNC_ROOT_DEFAULT_VALUE = "jcr_root";
+ public static IFolder getSyncDirectory(IProject project) {
+ if (project==null) {
+ return null;
+ }
+ if (!project.isOpen()) {
+ return null;
+ } else if (!ProjectHelper.isContentProject(project)) {
+ return null;
+ }
+ String syncDirectoryValue = ProjectUtil.getSyncDirectoryValue(project);
+ if (syncDirectoryValue==null || syncDirectoryValue.length()==0) {
+ return null;
+ }
+ IResource syncDir = project.findMember(syncDirectoryValue);
+ if (syncDir==null || !(syncDir instanceof IFolder)) {
+ return null;
+ }
+ return (IFolder) syncDir;
+ }
+
/**
* Returns the value of the sync directory configured for a project.
*
Modified: sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/JcrContentContentProvider.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/JcrContentContentProvider.java?rev=1520309&r1=1520308&r2=1520309&view=diff
==============================================================================
--- sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/JcrContentContentProvider.java (original)
+++ sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/JcrContentContentProvider.java Thu Sep 5 13:40:34 2013
@@ -18,17 +18,27 @@ package org.apache.sling.ide.eclipse.ui.
import java.util.Arrays;
import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
import java.util.Set;
import org.apache.sling.ide.eclipse.core.ProjectUtil;
import org.apache.sling.ide.eclipse.core.internal.ProjectHelper;
import org.apache.sling.ide.eclipse.ui.nav.model.JcrNode;
import org.apache.sling.ide.eclipse.ui.nav.model.SyncDir;
+import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IResourceChangeListener;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.IResourceDeltaVisitor;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
import org.eclipse.jdt.core.IPackageFragmentRoot;
import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.ui.IMemento;
import org.eclipse.ui.navigator.ICommonContentExtensionSite;
@@ -37,16 +47,60 @@ import org.eclipse.ui.navigator.Pipeline
import org.eclipse.ui.navigator.PipelinedViewerUpdate;
/** WIP: content provider for content package view in project explorer **/
-public class JcrContentContentProvider implements ITreeContentProvider, IPipelinedTreeContentProvider2 {
+public class JcrContentContentProvider implements ITreeContentProvider, IPipelinedTreeContentProvider2, IResourceChangeListener {
+
+ private Object input;
+ private TreeViewer viewer;
@Override
+ public void resourceChanged(IResourceChangeEvent event) {
+ try {
+ final List<IResource> toBeRefreshed = new LinkedList<IResource>();
+ event.getDelta().accept(new IResourceDeltaVisitor() {
+
+ @Override
+ public boolean visit(IResourceDelta delta) throws CoreException {
+ if (delta.getResource() instanceof IContainer) {
+ return true;
+ }
+ IProject p = delta.getResource().getProject();
+ IFolder syncDir = getSyncDir(p);
+ if (syncDir==null) {
+ return false;
+ }
+ toBeRefreshed.add(syncDir.getProject());
+ return true;
+ }
+ });
+ if (toBeRefreshed.size()==0) {
+ return;
+ }
+ for (Iterator<IResource> it = toBeRefreshed.iterator(); it
+ .hasNext();) {
+ final IResource iResource = it.next();
+ viewer.getTree().getDisplay().asyncExec(new Runnable() {
+
+ @Override
+ public void run() {
+ viewer.refresh(iResource.getProject(), true);
+ }
+ });
+ }
+ } catch (CoreException e) {
+ //TODO proper logging
+ e.printStackTrace();
+ }
+ }
+
+ @Override
public void dispose() {
// nothing to be done here
}
@Override
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
- // nothing to be done here
+ this.input = newInput;
+ this.viewer = (TreeViewer)viewer;
}
@Override
@@ -106,13 +160,7 @@ public class JcrContentContentProvider i
}
private IFolder getSyncDir(IProject project) {
- if (!project.isOpen()) {
- return null;
- } else if (!ProjectHelper.isContentProject(project)) {
- return null;
- }
- IResource syncDir = project.findMember(ProjectUtil.getSyncDirectoryValue(project));
- return (IFolder) syncDir;
+ return ProjectUtil.getSyncDirectory(project);
}
@Override
@@ -165,7 +213,9 @@ public class JcrContentContentProvider i
@Override
public void init(ICommonContentExtensionSite aConfig) {
- // nothing to do here
+ ResourcesPlugin.getWorkspace().addResourceChangeListener(
+ this,
+ IResourceChangeEvent.POST_CHANGE);
}
Modified: sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/PackageExplorerOpenActionProvider.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/PackageExplorerOpenActionProvider.java?rev=1520309&r1=1520308&r2=1520309&view=diff
==============================================================================
--- sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/PackageExplorerOpenActionProvider.java (original)
+++ sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/PackageExplorerOpenActionProvider.java Thu Sep 5 13:40:34 2013
@@ -17,6 +17,7 @@
package org.apache.sling.ide.eclipse.ui.nav;
import org.apache.sling.ide.eclipse.ui.nav.model.JcrNode;
+import org.eclipse.core.resources.IFile;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
@@ -25,9 +26,11 @@ import org.eclipse.ui.IActionBars;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.actions.ActionContext;
import org.eclipse.ui.actions.OpenFileAction;
+import org.eclipse.ui.ide.IDE;
import org.eclipse.ui.navigator.CommonActionProvider;
import org.eclipse.ui.navigator.ICommonActionConstants;
import org.eclipse.ui.navigator.ICommonActionExtensionSite;
@@ -57,12 +60,22 @@ private TreeViewer treeViewer;
if (selection instanceof IStructuredSelection) {
IStructuredSelection iss = (IStructuredSelection)selection;
if (iss.getFirstElement() instanceof JcrNode) {
- JcrNode node = (JcrNode)iss.getFirstElement();
- if (node.canBeOpenedInEditor()) {
- actionBars.setGlobalActionHandler(ICommonActionConstants.OPEN, action);
- } else {
- return;
+ final JcrNode node = (JcrNode)iss.getFirstElement();
+ final IFile file = node.getFileForEditor();
+ if (file!=null) {
+ actionBars.setGlobalActionHandler(ICommonActionConstants.OPEN, new OpenFileAction(getActivePage()) {
+ @Override
+ public void run() {
+ try {
+ IDE.openEditor(getActivePage(), file, true);
+ } catch (PartInitException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+ });
}
+ return;
}
}
// fOpenGroup.fillActionBars(actionBars);
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=1520309&r1=1520308&r2=1520309&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 Thu Sep 5 13:40:34 2013
@@ -21,6 +21,7 @@ import java.util.Iterator;
import java.util.Set;
import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IResource;
import org.w3c.dom.Node;
@@ -82,8 +83,8 @@ public class DirNode extends JcrNode {
}
@Override
- public boolean canBeOpenedInEditor() {
- return false;
+ public IFile getFileForEditor() {
+ return null;
}
@Override
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=1520309&r1=1520308&r2=1520309&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 Thu Sep 5 13:40:34 2013
@@ -178,10 +178,10 @@ public class GenericJcrRootFile extends
}
@Override
- public boolean canBeOpenedInEditor() {
- return false;
+ public IFile getFileForEditor() {
+ return file;
}
-
+
public void save() {
try {
TransformerFactory transformerFactory = TransformerFactory.newInstance();
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=1520309&r1=1520308&r2=1520309&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 Thu Sep 5 13:40:34 2013
@@ -32,6 +32,7 @@ import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.apache.sling.ide.eclipse.ui.WhitelabelSupport;
+import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
@@ -292,12 +293,16 @@ public class JcrNode implements IAdaptab
return filterHiddenChildren(resultMap.values());
} catch (CoreException e) {
+ e.printStackTrace();
return new Object[0];
} catch (ParserConfigurationException e) {
+ e.printStackTrace();
return new Object[0];
} catch (SAXException e) {
+ e.printStackTrace();
return new Object[0];
} catch (IOException e) {
+ e.printStackTrace();
return new Object[0];
}
}
@@ -434,9 +439,9 @@ public class JcrNode implements IAdaptab
return null;
}
} else if (adapter == IContributorResourceAdapter.class) {
- if (resource==null) {
- return null;
- }
+ //if (resource==null) {
+ // return null;
+ //}
return new IContributorResourceAdapter() {
@Override
@@ -447,34 +452,46 @@ public class JcrNode implements IAdaptab
JcrNode node = (JcrNode)adaptable;
if (node.resource!=null) {
return node.resource;
+ } else {
+ return node.underlying.file;
}
- return null;
+// return null;
}
};
} else if (adapter == IResource.class) {
- return resource;
+ if (resource!=null) {
+ return resource;
+ } else {
+ return null;//underlying.file;
+ }
} else if (adapter == ResourceMapping.class) {
boolean t = true;
if (!t) {
return null;
}
- if (resource==null) {
- return null;
- }
+// if (resource==null) {
+// return null;
+// }
return new ResourceMapping() {
@Override
public ResourceTraversal[] getTraversals(ResourceMappingContext context,
IProgressMonitor monitor) throws CoreException {
- return new ResourceTraversal[] { new ResourceTraversal(new IResource[] { resource }, IResource.DEPTH_INFINITE, IResource.NONE) };
+ if (resource!=null) {
+ return new ResourceTraversal[] { new ResourceTraversal(new IResource[] { resource }, IResource.DEPTH_INFINITE, IResource.NONE) };
+ } else {
+ return new ResourceTraversal[] { new ResourceTraversal(new IResource[] { underlying.file }, IResource.DEPTH_INFINITE, IResource.NONE) };
+ }
}
@Override
public IProject[] getProjects() {
if (resource!=null) {
return new IProject[] {resource.getProject()};
+ } else {
+ return new IProject[] {underlying.file.getProject()};
}
- return null;
+// return null;
}
@Override
@@ -484,42 +501,28 @@ public class JcrNode implements IAdaptab
@Override
public Object getModelObject() {
- return resource;
+ if (resource!=null) {
+ return resource;
+ } else {
+ return underlying.file;
+ }
}
};
}
return null;
}
- public boolean canBeOpenedInEditor() {
- if (resource==null) {
- return false;
- }
-
- if (resource instanceof IFolder) {
- return false;
+ public IFile getFileForEditor() {
+ if (resource instanceof IFile) {
+// if (!isVaultFile(resource)) {
+ return (IFile)resource;
+ } else if (resource instanceof IContainer) {
+ return null;
+ } else if (underlying!=null && underlying.file!=null) {
+ return underlying.file;
} else {
- try {
- if (!isVaultFile(resource)) {
- return true;
- } else {
- return false;
- }
- } catch (ParserConfigurationException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (SAXException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (CoreException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
+ return null;
}
- return false;
}
public void rename(String string) {
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=1520309&r1=1520308&r2=1520309&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 Thu Sep 5 13:40:34 2013
@@ -17,6 +17,7 @@
package org.apache.sling.ide.eclipse.ui.nav.model;
import org.apache.sling.ide.eclipse.ui.internal.SharedImages;
+import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.swt.graphics.Image;
@@ -71,8 +72,8 @@ public class SyncDir extends JcrNode {
}
@Override
- public boolean canBeOpenedInEditor() {
- return false;
+ public IFile getFileForEditor() {
+ return null;
}
}