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/20 10:44:28 UTC
svn commit: r1524945 - in
/sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui: ./
src/org/apache/sling/ide/eclipse/ui/nav/
src/org/apache/sling/ide/eclipse/ui/nav/model/
Author: stefanegli
Date: Fri Sep 20 08:44:28 2013
New Revision: 1524945
URL: http://svn.apache.org/r1524945
Log:
SLING-2985 : content-browser improvement: fixed ordering of nodes - it now respects the order as contained in .content.xml (vs alphabetic ordering before)
Added:
sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/Sorter.java (with props)
Modified:
sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/plugin.xml
sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/JcrContentContentProvider.java
sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/DirNode.java
sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/GenericJcrRootFile.java
sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/JcrNode.java
Modified: sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/plugin.xml
URL: http://svn.apache.org/viewvc/sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/plugin.xml?rev=1524945&r1=1524944&r2=1524945&view=diff
==============================================================================
--- sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/plugin.xml (original)
+++ sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/plugin.xml Fri Sep 20 08:44:28 2013
@@ -220,6 +220,16 @@
policy="InvokeAlwaysRegardlessOfSuppressedExt"
suppressedExtensionId="org.eclipse.ui.navigator.resourceContent">
</override>
+ <commonSorter
+ class="org.apache.sling.ide.eclipse.ui.nav.Sorter">
+ <parentExpression>
+ <or>
+ <adapt
+ type="org.apache.sling.ide.eclipse.ui.nav.model.JcrNode">
+ </adapt>
+ </or>
+ </parentExpression>
+ </commonSorter>
</navigatorContent>
</extension>
Modified: sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/JcrContentContentProvider.java
URL: http://svn.apache.org/viewvc/sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/JcrContentContentProvider.java?rev=1524945&r1=1524944&r2=1524945&view=diff
==============================================================================
--- sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/JcrContentContentProvider.java (original)
+++ sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/JcrContentContentProvider.java Fri Sep 20 08:44:28 2013
@@ -114,7 +114,7 @@ public class JcrContentContentProvider i
return projectGetChildren((IProject)parentElement);
} else if (parentElement instanceof JcrNode) {
JcrNode node = (JcrNode)parentElement;
- return node.getChildren();
+ return node.getChildren(true);
} else {
return null;
}
Added: sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/Sorter.java
URL: http://svn.apache.org/viewvc/sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/Sorter.java?rev=1524945&view=auto
==============================================================================
--- sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/Sorter.java (added)
+++ sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/Sorter.java Fri Sep 20 08:44:28 2013
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sling.ide.eclipse.ui.nav;
+
+import java.text.Collator;
+
+import org.apache.sling.ide.eclipse.ui.nav.model.JcrNode;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerSorter;
+
+public class Sorter extends ViewerSorter {
+
+ public Sorter() {
+ }
+
+ public Sorter(Collator collator) {
+ super(collator);
+ }
+
+ @Override
+ public int compare(Viewer viewer, Object e1, Object e2) {
+ if (!(e1 instanceof JcrNode) || !(e2 instanceof JcrNode)) {
+ return super.compare(viewer, e1, e2);
+ }
+ JcrNode node1 = (JcrNode) e1;
+ JcrNode node2 = (JcrNode) e2;
+ JcrNode parent = node1.getParent();
+ Object[] children = parent.getChildren(false);
+ for (int i = 0; i < children.length; i++) {
+ Object aChild = children[i];
+ if (aChild==node1) {
+ return -1;
+ } else if (aChild==node2) {
+ return 1;
+ }
+ }
+ return 0;
+ }
+
+}
Propchange: sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/Sorter.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/DirNode.java
URL: http://svn.apache.org/viewvc/sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/DirNode.java?rev=1524945&r1=1524944&r2=1524945&view=diff
==============================================================================
--- sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/DirNode.java (original)
+++ sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/DirNode.java Fri Sep 20 08:44:28 2013
@@ -85,7 +85,7 @@ public class DirNode extends JcrNode {
@Override
protected void addChild(JcrNode jcrNode) {
JcrNode effectiveSibling = getEffectiveSibling();
- if (effectiveSibling!=null) {
+ if (effectiveSibling!=this && effectiveSibling!=null) {
// excellent, the parent contains a child which
// matches the .dir/_jcr_content pattern, so add this child there
effectiveSibling.addChild(jcrNode);
@@ -113,14 +113,7 @@ public class DirNode extends JcrNode {
}
nonDirNodeParent = nonDirNodeParent.parent;
}
- Set<JcrNode> c = new HashSet<JcrNode>(nonDirNodeParent.children);
- for (Iterator<JcrNode> it = c.iterator(); it.hasNext();) {
- JcrNode node = it.next();
- if (node.getName().equals(decodedName)) {
- return node;
- }
- }
- return null;
+ return nonDirNodeParent.getChild(decodedName);
}
@Override
Modified: sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/GenericJcrRootFile.java
URL: http://svn.apache.org/viewvc/sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/GenericJcrRootFile.java?rev=1524945&r1=1524944&r2=1524945&view=diff
==============================================================================
--- sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/GenericJcrRootFile.java (original)
+++ sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/GenericJcrRootFile.java Fri Sep 20 08:44:28 2013
@@ -148,14 +148,6 @@ public class GenericJcrRootFile extends
// ignore
return;
}
- if (domNode.getAttributes().getLength() == 0) {
- // then ignore this empty node
- // either there is a file or a folder corresponding to this element
- // (in which case it will show up again anyway)
- // or just an empty node without any further attributes such
- // as primaryType doesn't help a lot
- return;
- }
JcrNode childJcrNode = new JcrNode(parent, domNode, this, null);
handleProperties(domNode, childJcrNode.properties);
NodeList children = domNode.getChildNodes();
Modified: sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/JcrNode.java
URL: http://svn.apache.org/viewvc/sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/JcrNode.java?rev=1524945&r1=1524944&r2=1524945&view=diff
==============================================================================
--- sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/JcrNode.java (original)
+++ sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/JcrNode.java Fri Sep 20 08:44:28 2013
@@ -100,7 +100,7 @@ public class JcrNode implements IAdaptab
JcrNode parent;
- final Set<JcrNode> children = new HashSet<JcrNode>();
+ final List<JcrNode> children = new LinkedList<JcrNode>();
Node domNode;
@@ -140,7 +140,7 @@ public class JcrNode implements IAdaptab
@Override
public String toString() {
- return "JcrNode[dom:"+domNode+", file:"+resource+"]";
+ return "JcrNode[dom:"+domNode+", file:"+resource+", jcrPath:"+getJcrPath()+"]";
}
@Override
@@ -201,7 +201,19 @@ public class JcrNode implements IAdaptab
}
protected void addChild(JcrNode jcrNode) {
- children.add(jcrNode);
+ if (!children.contains(jcrNode)) {
+ // check to see if there is a same-named node though
+ // that is the dom/resource case
+ for (Iterator<JcrNode> it = children.iterator(); it.hasNext();) {
+ JcrNode existingChild = it.next();
+ if (existingChild.getName().equals(jcrNode.getName())) {
+ // then merge the two
+ existingChild.setResource(jcrNode.resource);
+ return;
+ }
+ }
+ children.add(jcrNode);
+ }
}
/** shown in the navigator (project explorer) as the label of this element **/
@@ -236,26 +248,60 @@ public class JcrNode implements IAdaptab
hiddenChildren.add(node);
}
- Object[] filterHiddenChildren(final Collection<JcrNode> collection) {
- final Collection<JcrNode> values = new HashSet<JcrNode>(collection);
+ Object[] filterHiddenChildren(final Collection<JcrNode> collection, boolean hideEmptyNodes) {
+ final Collection<JcrNode> values = new LinkedList<JcrNode>(collection);
for (Iterator<JcrNode> it = hiddenChildren.iterator(); it.hasNext();) {
final JcrNode hiddenNode = it.next();
values.remove(hiddenNode);
}
+ if (hideEmptyNodes) {
+ for (Iterator<JcrNode> it = values.iterator(); it.hasNext();) {
+ JcrNode jcrNode = it.next();
+ if (jcrNode.isEmptyNode()) {
+ it.remove();
+ }
+ }
+ }
return values.toArray();
}
- public Object[] getChildren() {
+ private boolean isEmptyNode() {
+ if (resource!=null) {
+ return false;
+ }
+ if (children.size()!=0) {
+ return false;
+ }
+ if (domNode==null) {
+ return true;
+ }
+ if (domNode.hasChildNodes()) {
+ return false;
+ }
+ if (domNode.getAttributes().getLength()!=0) {
+ return false;
+ }
+ return true;
+ }
+
+ public Object[] getChildren(boolean hideEmptyNodes) {
+ if (!resourceChildrenAdded) {
+ initChildren();
+ }
+ return filterHiddenChildren(children, true);
+ }
+
+ void initChildren() {
try {
if (resourceChildrenAdded) {
- return filterHiddenChildren(children);
+ throw new IllegalStateException("Children already loaded");
}
- Map<String,JcrNode> resultMap = new HashMap<String, JcrNode>();
+ Set<String> childrenNames = new HashSet<String>();
for (Iterator it = children.iterator(); it.hasNext();) {
JcrNode node = (JcrNode) it.next();
- resultMap.put(node.getName(), node);
+ childrenNames.add(node.getName());
}
if (resource!=null && resource instanceof IFolder) {
@@ -276,14 +322,15 @@ public class JcrNode implements IAdaptab
for (Iterator it3 = children.iterator(); it3
.hasNext();) {
JcrNode node = (JcrNode) it3.next();
- if (!resultMap.containsKey(node.getName())) {
- resultMap.put(node.getName(), node);
+ if (!childrenNames.contains(node.getName())) {
+ childrenNames.add(node.getName());
}
}
continue outerLoop;
}
}
+ List<JcrNode> newNodes = new LinkedList<JcrNode>();
for (Iterator it = membersList.iterator(); it.hasNext();) {
IResource iResource = (IResource) it.next();
JcrNode node;
@@ -292,29 +339,27 @@ public class JcrNode implements IAdaptab
} else {
node = new JcrNode(this, (Node)null, iResource);
}
-// node.setResource(iResource);
- // load the children - to make sure we get vault files loaded too
- node.getChildren();
- resultMap.put(node.getName(), node);
+ childrenNames.add(node.getName());
+ newNodes.add(node);
it.remove();
}
+ for (Iterator<JcrNode> it = newNodes.iterator(); it
+ .hasNext();) {
+ JcrNode jcrNode = it.next();
+ // load the children - to make sure we get vault files loaded too
+ jcrNode.initChildren();
+ }
}
}
resourceChildrenAdded = true;
-
- 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];
}
}
@@ -401,7 +446,7 @@ public class JcrNode implements IAdaptab
}
private String getJcrContentProperty(String propertyKey) {
- final Object[] chldrn = getChildren();
+ final Object[] chldrn = getChildren(false);
for (int i = 0; i < chldrn.length; i++) {
JcrNode jcrNode = (JcrNode) chldrn[i];
if ("jcr:content".equals(jcrNode.getName())) {
@@ -601,7 +646,17 @@ public class JcrNode implements IAdaptab
public JcrNode getParent() {
return parent;
}
-
+
+ JcrNode getChild(String name) {
+ for (Iterator<JcrNode> it = children.iterator(); it.hasNext();) {
+ JcrNode aChild = it.next();
+ if (aChild.getName().equals(name)) {
+ return aChild;
+ }
+ }
+ return null;
+ }
+
IResource getResource() {
return resource;
}