You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2013/09/15 00:39:37 UTC

svn commit: r1523349 - in /sling/branches/tooling-ide-vlt/tooling/ide: impl-vlt-test/src/test/java/org/apache/sling/ide/impl/vlt/serialization/ impl-vlt-test/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/ impl-vlt/src/org/apache/sling/...

Author: rombert
Date: Sat Sep 14 22:39:37 2013
New Revision: 1523349

URL: http://svn.apache.org/r1523349
Log:
SLING-2989 - [Tooling] integrate with vlt once available

Read all the nested node information from a full coverage xml file.

Added:
    sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt-test/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/full-coverage.xml   (with props)
Removed:
    sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt-test/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/name-content.xml
    sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt-test/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/path-content.xml
    sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt-test/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/reference-content.xml
Modified:
    sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt-test/src/test/java/org/apache/sling/ide/impl/vlt/serialization/ContentXmlHandlerTest.java
    sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/serialization/ContentXmlHandler.java
    sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/serialization/VltSerializationManager.java

Modified: sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt-test/src/test/java/org/apache/sling/ide/impl/vlt/serialization/ContentXmlHandlerTest.java
URL: http://svn.apache.org/viewvc/sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt-test/src/test/java/org/apache/sling/ide/impl/vlt/serialization/ContentXmlHandlerTest.java?rev=1523349&r1=1523348&r2=1523349&view=diff
==============================================================================
--- sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt-test/src/test/java/org/apache/sling/ide/impl/vlt/serialization/ContentXmlHandlerTest.java (original)
+++ sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt-test/src/test/java/org/apache/sling/ide/impl/vlt/serialization/ContentXmlHandlerTest.java Sat Sep 14 22:39:37 2013
@@ -30,11 +30,11 @@ import javax.xml.parsers.ParserConfigura
 import javax.xml.parsers.SAXParser;
 import javax.xml.parsers.SAXParserFactory;
 
+import org.apache.sling.ide.transport.ResourceProxy;
 import org.hamcrest.Description;
 import org.hamcrest.Matcher;
 import org.hamcrest.Matchers;
 import org.hamcrest.TypeSafeMatcher;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
@@ -71,37 +71,10 @@ public class ContentXmlHandlerTest {
         factory.setNamespaceAware(true);
         factory.setFeature("http://xml.org/sax/features/namespace-prefixes", false);
         SAXParser parser = factory.newSAXParser();
-        ContentXmlHandler handler = new ContentXmlHandler();
+        ContentXmlHandler handler = new ContentXmlHandler("/");
         parser.parse(source, handler);
 
-        return handler.getProperties();
-    }
-
-    @Test
-    @Ignore("Not implemented")
-    public void parseNameProperty() throws ParserConfigurationException, SAXException, IOException {
-
-        Map<String, Object> properties = parseContentXmlFile("name-content.xml");
-
-        assertThat("properties.size", properties.size(), is(2));
-    }
-
-    @Test
-    @Ignore("Not implemented")
-    public void parsePathProperty() throws ParserConfigurationException, SAXException, IOException {
-
-        Map<String, Object> properties = parseContentXmlFile("path-content.xml");
-
-        assertThat("properties.size", properties.size(), is(2));
-    }
-
-    @Test
-    @Ignore("Not implemented")
-    public void parseReferenceProperties() throws ParserConfigurationException, SAXException, IOException {
-        
-        Map<String, Object> properties = parseContentXmlFile("reference-content.xml");
-        
-        assertThat("properties.size", properties.size(), is(3));
+        return handler.getRoot().getProperties();
     }
 
     @Test
@@ -124,9 +97,42 @@ public class ContentXmlHandlerTest {
         assertThat("properties[dates]", (Calendar[]) properties.get("dates"), array(
                 millis(1377982800000l), millis(1378242000000l)));
     }
-    
+
+    @Test
+    public void parseFullCoverageXmlFile() throws ParserConfigurationException, SAXException, IOException {
+
+        InputSource source = new InputSource(getClass().getResourceAsStream("full-coverage.xml"));
+
+        SAXParserFactory factory = SAXParserFactory.newInstance();
+        factory.setNamespaceAware(true);
+        factory.setFeature("http://xml.org/sax/features/namespace-prefixes", false);
+        SAXParser parser = factory.newSAXParser();
+        ContentXmlHandler handler = new ContentXmlHandler("/apps/full-coverage");
+        parser.parse(source, handler);
+
+        ResourceProxy root = handler.getRoot();
+
+        assertThat("full-coverage path", root.getPath(), is("/apps/full-coverage"));
+        assertThat("full-coverage properties.size", root.getProperties().size(), is(3));
+        assertThat("full-coverage properties[jcr:title]", root.getProperties(),
+                hasEntry("jcr:title", (Object) "Full coverage parent"));
+        assertThat("full-coverage children.size", root.getChildren().size(), is(2));
+
+        ResourceProxy parent1 = root.getChildren().get(0);
+        assertThat("parent-1 path", parent1.getPath(), is("/apps/full-coverage/parent-1"));
+        assertThat("parent-1 properties[jcr:title]", parent1.getProperties(),
+                hasEntry("jcr:title", (Object) "Parent 1"));
+        assertThat("parent-1 children.size", parent1.getChildren().size(), is(2));
+
+        ResourceProxy child11 = parent1.getChildren().get(0);
+        assertThat("child-1-1 path", child11.getPath(), is("/apps/full-coverage/parent-1/child-1-1"));
+        assertThat("child-1-1 properties[jcr:title]", child11.getProperties(),
+                hasEntry("jcr:title", (Object) "Child 1-1"));
+
+    }
+
     private static Matcher<Calendar> millis(long millis) {
-        
+
         return new CalendarTimeInMillisMatcher(millis);
     }
 

Added: sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt-test/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/full-coverage.xml
URL: http://svn.apache.org/viewvc/sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt-test/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/full-coverage.xml?rev=1523349&view=auto
==============================================================================
--- sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt-test/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/full-coverage.xml (added)
+++ sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt-test/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/full-coverage.xml Sat Sep 14 22:39:37 2013
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<jcr:root xmlns:sling="http://sling.apache.org/jcr/sling/1.0" xmlns:vlt="http://www.day.com/jcr/vault/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0"
+    jcr:mixinTypes="[vlt:FullCoverage]"
+    jcr:primaryType="sling:Folder"
+    jcr:title="Full coverage parent">
+    <parent-1
+        jcr:primaryType="sling:Folder"
+        jcr:title="Parent 1">
+        <child-1-1
+            jcr:primaryType="sling:Folder"
+            jcr:title="Child 1-1"/>
+        <child-1-2
+            jcr:primaryType="sling:Folder"
+            jcr:title="Child 1-2"/>
+    </parent-1>
+    <parent-2
+        jcr:primaryType="sling:Folder"
+        jcr:title="Parent 2">
+        <child-2-1
+            jcr:primaryType="sling:Folder"
+            jcr:title="Child 2-1"/>
+        <child-2-2
+            jcr:primaryType="sling:Folder"
+            jcr:title="Child 2-2"/>
+    </parent-2>
+</jcr:root>

Propchange: sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt-test/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/full-coverage.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt-test/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/full-coverage.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml

Modified: sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/serialization/ContentXmlHandler.java
URL: http://svn.apache.org/viewvc/sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/serialization/ContentXmlHandler.java?rev=1523349&r1=1523348&r2=1523349&view=diff
==============================================================================
--- sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/serialization/ContentXmlHandler.java (original)
+++ sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/serialization/ContentXmlHandler.java Sat Sep 14 22:39:37 2013
@@ -18,12 +18,13 @@ package org.apache.sling.ide.impl.vlt.se
 
 import java.math.BigDecimal;
 import java.util.Calendar;
+import java.util.Deque;
 import java.util.EnumSet;
-import java.util.HashMap;
-import java.util.Map;
+import java.util.LinkedList;
 import java.util.UUID;
 
 import org.apache.jackrabbit.util.ISO8601;
+import org.apache.sling.ide.transport.ResourceProxy;
 import org.xml.sax.Attributes;
 import org.xml.sax.SAXException;
 import org.xml.sax.helpers.DefaultHandler;
@@ -31,12 +32,24 @@ import org.xml.sax.helpers.DefaultHandle
 // TODO - worth investigating whether we can properly use org.apache.jackrabbit.vault.util.DocViewProperty instead
 public class ContentXmlHandler extends DefaultHandler {
 
-    private final Map<String, Object> properties = new HashMap<String, Object>();
+    private static final String JCR_ROOT = "jcr:root";
+    private final ResourceProxy root;
+    private final Deque<ResourceProxy> queue = new LinkedList<ResourceProxy>();
+
+    public ContentXmlHandler(String rootResourcePath) {
+        root = new ResourceProxy(rootResourcePath);
+    }
 
     @Override
     public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
-        if (!qName.equals("jcr:root")) {
-            return;
+
+        ResourceProxy current;
+        if (qName.equals(JCR_ROOT)) {
+            current = root;
+        } else {
+            ResourceProxy parent = queue.peekLast();
+            current = new ResourceProxy(parent.getPath() + "/" + qName);
+            parent.addChild(current);
         }
 
         for (int i = 0; i < attributes.getLength(); i++) {
@@ -45,16 +58,23 @@ public class ContentXmlHandler extends D
             String value = attributes.getValue(i);
             Object typedValue = TypeHint.parsePossiblyTypedValue(value);
             
-            properties.put(attributeQName, typedValue);
+            current.addProperty(attributeQName, typedValue);
         }
+
+        queue.add(current);
+    }
+
+    @Override
+    public void endElement(String uri, String localName, String qName) throws SAXException {
+
+        queue.removeLast();
     }
 
-    public Map<String, Object> getProperties() {
-        return properties;
+    public ResourceProxy getRoot() {
+        return root;
     }
     
     // TODO - validate that this is comprehensive
-    // TODO - does not handle correctly multi-valued properties which just one value - do we need to?
     static enum TypeHint {
         BOOLEAN("Boolean") {
             @Override

Modified: sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/serialization/VltSerializationManager.java
URL: http://svn.apache.org/viewvc/sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/serialization/VltSerializationManager.java?rev=1523349&r1=1523348&r2=1523349&view=diff
==============================================================================
--- sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/serialization/VltSerializationManager.java (original)
+++ sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/serialization/VltSerializationManager.java Sat Sep 14 22:39:37 2013
@@ -319,10 +319,10 @@ public class VltSerializationManager imp
             factory.setNamespaceAware(true);
             factory.setFeature("http://xml.org/sax/features/namespace-prefixes", false);
             SAXParser parser = factory.newSAXParser();
-            ContentXmlHandler handler = new ContentXmlHandler();
+            ContentXmlHandler handler = new ContentXmlHandler(repositoryPath);
             parser.parse(source, handler);
 
-            return new ResourceProxy(repositoryPath, handler.getProperties());
+            return handler.getRoot();
         } catch (SAXException e) {
             // TODO proper error handling
             throw new IOException(e);