Author: rombert
Date: Fri Aug 16 15:53:04 2013
New Revision: 1514762

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

Added a impl-vlt which contains a simple read-only implementation of the
Repository. I've verified that this runs against a stock sling launchpad
instance and made sure that it has priority over the resource impl by
giving it a higher service.ranking.

Added:
    sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/
    sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/META-INF/
    sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/META-INF/MANIFEST.MF
    sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/OSGI-INF/
    
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/OSGI-INF/VltRepository.xml  
 (with props)
    sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/build.properties   
(with props)
    sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/pom.xml   (with props)
    sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/
    sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/
    sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/
    sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/
    
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/
    
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/
    
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/
    
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/ConversionUtils.java
   (with props)
    
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/GetNodeCommand.java
   (with props)
    
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/GetNodeContentCommand.java
   (with props)
    
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/JcrCommand.java
   (with props)
    
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/JcrResult.java
   (with props)
    
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/ListChildrenCommand.java
   (with props)
    
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/NoOpCommand.java
   (with props)
    
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/VltRepository.java
   (with props)
Modified:
    sling/branches/tooling-ide-vlt/tooling/ide/pom.xml

Added: sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/META-INF/MANIFEST.MF
URL: 
http://svn.apache.org/viewvc/sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/META-INF/MANIFEST.MF?rev=1514762&view=auto
==============================================================================
--- sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/META-INF/MANIFEST.MF 
(added)
+++ sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/META-INF/MANIFEST.MF 
Fri Aug 16 15:53:04 2013
@@ -0,0 +1,14 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: org.apache.sling.ide.impl-vlt
+Bundle-Version: 0.0.1.qualifier
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Require-Bundle: org.eclipse.equinox.ds;bundle-version="1.2.1",
+ org.eclipse.osgi.services;bundle-version="3.2.100"
+Import-Package: javax.jcr,
+ org.apache.jackrabbit.vault.fs.api,
+ org.apache.jackrabbit.vault.util,
+ org.apache.sling.ide.transport,
+ org.osgi.service.event;version="1.3.0"
+Service-Component: OSGI-INF/*.xml

Added: 
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/OSGI-INF/VltRepository.xml
URL: 
http://svn.apache.org/viewvc/sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/OSGI-INF/VltRepository.xml?rev=1514762&view=auto
==============================================================================
--- 
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/OSGI-INF/VltRepository.xml 
(added)
+++ 
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/OSGI-INF/VltRepository.xml 
Fri Aug 16 15:53:04 2013
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0"; 
immediate="false">
+   <implementation class="org.apache.sling.ide.impl.vlt.VltRepository"/>
+   <service>
+      <provide interface="org.apache.sling.ide.transport.Repository"/>
+   </service>
+   <reference bind="bindEventAdmin" cardinality="1..1" 
interface="org.osgi.service.event.EventAdmin" name="EventAdmin" policy="static" 
unbind="unbindEventAdmin"/>
+</scr:component>

Propchange: 
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/OSGI-INF/VltRepository.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/OSGI-INF/VltRepository.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml

Added: sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/build.properties
URL: 
http://svn.apache.org/viewvc/sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/build.properties?rev=1514762&view=auto
==============================================================================
--- sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/build.properties (added)
+++ sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/build.properties Fri 
Aug 16 15:53:04 2013
@@ -0,0 +1,5 @@
+output.. = bin/
+bin.includes = .,\
+               META-INF/,\
+               OSGI-INF/
+source.. = src/

Propchange: sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/build.properties
------------------------------------------------------------------------------
    svn:eol-style = native

Added: sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/pom.xml
URL: 
http://svn.apache.org/viewvc/sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/pom.xml?rev=1514762&view=auto
==============================================================================
--- sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/pom.xml (added)
+++ sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/pom.xml Fri Aug 16 
15:53:04 2013
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd"; 
xmlns="http://maven.apache.org/POM/4.0.0";
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.apache.sling.ide</groupId>
+    <artifactId>reactor</artifactId>
+    <version>0.0.1-SNAPSHOT</version>
+  </parent>
+  <artifactId>org.apache.sling.ide.impl-vlt</artifactId>
+  <packaging>eclipse-plugin</packaging>
+  <name>Sling IDE Tools: FileVault implementation</name>
+</project>

Propchange: sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/pom.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml

Added: 
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/ConversionUtils.java
URL: 
http://svn.apache.org/viewvc/sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/ConversionUtils.java?rev=1514762&view=auto
==============================================================================
--- 
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/ConversionUtils.java
 (added)
+++ 
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/ConversionUtils.java
 Fri Aug 16 15:53:04 2013
@@ -0,0 +1,89 @@
+/*
+ * 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.impl.vlt;
+
+import javax.jcr.Property;
+import javax.jcr.PropertyType;
+import javax.jcr.RepositoryException;
+import javax.jcr.Value;
+
+public abstract class ConversionUtils {
+
+    public static Object getPropertyValue(Property property) throws 
RepositoryException {
+
+        Object propertyValue = null;
+
+        // TODO - handle isMultiple() == true
+        switch (property.getType()) {
+            case PropertyType.BOOLEAN:
+                propertyValue = property.getBoolean();
+                break;
+
+            case PropertyType.DATE:
+                propertyValue = property.getDate();
+                break;
+
+            case PropertyType.DECIMAL:
+                propertyValue = property.getDecimal();
+                break;
+
+            case PropertyType.DOUBLE:
+                propertyValue = property.getDouble();
+                break;
+
+            case PropertyType.LONG:
+                propertyValue = property.getLong();
+                break;
+
+            case PropertyType.PATH:
+            case PropertyType.STRING:
+            case PropertyType.REFERENCE:
+            case PropertyType.WEAKREFERENCE:
+            case PropertyType.URI:
+            case PropertyType.NAME:
+                if (property.isMultiple()) {
+                    propertyValue = toStringArray(property.getValues());
+                } else {
+                    propertyValue = property.getString();
+                }
+                break;
+
+            case PropertyType.BINARY:
+                // explicitly skip, not part of the ResourceProxy abstraction
+                break;
+
+            default:
+                // TODO warn if property type not known
+                break;
+
+        }
+        return propertyValue;
+    }
+
+    private static String[] toStringArray(Value[] values) throws 
RepositoryException {
+
+        String[] ret = new String[values.length];
+        for (int i = 0; i < values.length; i++) {
+            ret[i] = values[i].getString();
+        }
+        return ret;
+    }
+
+    private ConversionUtils() {
+
+    }
+}

Propchange: 
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/ConversionUtils.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/ConversionUtils.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision Rev URL

Added: 
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/GetNodeCommand.java
URL: 
http://svn.apache.org/viewvc/sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/GetNodeCommand.java?rev=1514762&view=auto
==============================================================================
--- 
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/GetNodeCommand.java
 (added)
+++ 
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/GetNodeCommand.java
 Fri Aug 16 15:53:04 2013
@@ -0,0 +1,76 @@
+/*
+ * 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.impl.vlt;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+import javax.jcr.Binary;
+import javax.jcr.Credentials;
+import javax.jcr.Node;
+import javax.jcr.Property;
+import javax.jcr.PropertyType;
+import javax.jcr.Repository;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+
+public class GetNodeCommand extends JcrCommand<byte[]> {
+    
+    public GetNodeCommand(Repository repository, Credentials credentials, 
String path) {
+        super(repository, credentials, path);
+    }
+
+    @Override
+    protected byte[] execute0(Session session) throws RepositoryException, 
IOException {
+
+        Node node = session.getNode(getPath());
+
+        if (!node.hasNode("jcr:content")) {
+            return null;
+        }
+
+        Node contentNode = node.getNode("jcr:content");
+
+        if (!contentNode.hasProperty("jcr:data")) {
+            return null;
+        }
+
+        Property property = contentNode.getProperty("jcr:data");
+
+        if (property.getType() == PropertyType.BINARY) {
+            Binary binary = property.getBinary();
+            ByteArrayOutputStream out = new ByteArrayOutputStream();
+            try {
+                byte[] buffer = new byte[2048];
+                InputStream stream = binary.getStream();
+                int read;
+                while ((read = stream.read(buffer)) != -1) {
+                    out.write(buffer, 0, read);
+                }
+
+                return out.toByteArray();
+
+            } finally {
+                binary.dispose();
+            }
+        }
+
+        return null;
+    }
+
+}

Propchange: 
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/GetNodeCommand.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/GetNodeCommand.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision Rev URL

Added: 
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/GetNodeContentCommand.java
URL: 
http://svn.apache.org/viewvc/sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/GetNodeContentCommand.java?rev=1514762&view=auto
==============================================================================
--- 
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/GetNodeContentCommand.java
 (added)
+++ 
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/GetNodeContentCommand.java
 Fri Aug 16 15:53:04 2013
@@ -0,0 +1,57 @@
+/*
+ * 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.impl.vlt;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.jcr.Credentials;
+import javax.jcr.Node;
+import javax.jcr.Property;
+import javax.jcr.PropertyIterator;
+import javax.jcr.Repository;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+
+public class GetNodeContentCommand extends JcrCommand<Map<String, Object>> {
+
+    public GetNodeContentCommand(Repository repository, Credentials 
credentials, String path) {
+        super(repository, credentials, path);
+    }
+
+    @Override
+    protected Map<String, Object> execute0(Session session) throws 
RepositoryException {
+
+        Node node = session.getNode(getPath());
+        PropertyIterator properties = node.getProperties();
+
+        Map<String, Object> props = new HashMap<String, Object>();
+
+        while (properties.hasNext()) {
+
+            Property property = properties.nextProperty();
+            Object value = ConversionUtils.getPropertyValue(property);
+            if (value == null) {
+                continue;
+            }
+            props.put(property.getName(), value);
+        }
+
+        return props;
+    }
+
+}

Propchange: 
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/GetNodeContentCommand.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/GetNodeContentCommand.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision Rev URL

Added: 
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/JcrCommand.java
URL: 
http://svn.apache.org/viewvc/sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/JcrCommand.java?rev=1514762&view=auto
==============================================================================
--- 
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/JcrCommand.java
 (added)
+++ 
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/JcrCommand.java
 Fri Aug 16 15:53:04 2013
@@ -0,0 +1,64 @@
+/*
+ * 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.impl.vlt;
+
+import java.io.IOException;
+
+import javax.jcr.Credentials;
+import javax.jcr.LoginException;
+import javax.jcr.Repository;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+
+import org.apache.sling.ide.transport.Command;
+import org.apache.sling.ide.transport.Result;
+
+public abstract class JcrCommand<T> implements Command<T> {
+
+    private final Credentials credentials;
+    private final Repository repository;
+    private final String path;
+
+    public JcrCommand(Repository repository, Credentials credentials, String 
path) {
+
+        this.repository = repository;
+        this.credentials = credentials;
+        this.path = path;
+    }
+
+    @Override
+    public Result<T> execute() {
+
+        try {
+            Session session = repository.login(credentials);
+
+            return JcrResult.success(execute0(session));
+        } catch (LoginException e) {
+            return JcrResult.failure(e);
+        } catch (RepositoryException e) {
+            return JcrResult.failure(e);
+        } catch (IOException e) {
+            return JcrResult.failure(e);
+        }
+    }
+
+    protected abstract T execute0(Session session) throws RepositoryException, 
IOException;
+
+    public String getPath() {
+        return path;
+    }
+}

Propchange: 
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/JcrCommand.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/JcrCommand.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision Rev URL

Added: 
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/JcrResult.java
URL: 
http://svn.apache.org/viewvc/sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/JcrResult.java?rev=1514762&view=auto
==============================================================================
--- 
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/JcrResult.java
 (added)
+++ 
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/JcrResult.java
 Fri Aug 16 15:53:04 2013
@@ -0,0 +1,59 @@
+/*
+ * 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.impl.vlt;
+
+import org.apache.sling.ide.transport.RepositoryException;
+import org.apache.sling.ide.transport.Result;
+
+// TODO largely duplicates AbstractResult
+public class JcrResult<T> implements Result<T> {
+
+    public static <T> JcrResult<T> success(T payload) {
+
+        return new JcrResult<T>(true, payload, null);
+
+    }
+
+    public static <T> JcrResult<T> failure(Throwable t) {
+
+        return new JcrResult<T>(false, null, new RepositoryException(t));
+    }
+
+    private final boolean success;
+    private final RepositoryException exception;
+    private final T payload;
+
+    private JcrResult(boolean success, T payload, RepositoryException 
exception) {
+        this.success = success;
+        this.exception = exception;
+        this.payload = payload;
+    }
+
+    @Override
+    public T get() throws RepositoryException {
+
+        if (success)
+            return payload;
+
+        throw exception;
+    }
+
+    public boolean isSuccess() {
+        return success;
+    }
+
+}

Propchange: 
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/JcrResult.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/JcrResult.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision Rev URL

Added: 
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/ListChildrenCommand.java
URL: 
http://svn.apache.org/viewvc/sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/ListChildrenCommand.java?rev=1514762&view=auto
==============================================================================
--- 
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/ListChildrenCommand.java
 (added)
+++ 
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/ListChildrenCommand.java
 Fri Aug 16 15:53:04 2013
@@ -0,0 +1,77 @@
+/*
+ * 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.impl.vlt;
+
+import javax.jcr.Credentials;
+import javax.jcr.Node;
+import javax.jcr.NodeIterator;
+import javax.jcr.Property;
+import javax.jcr.PropertyIterator;
+import javax.jcr.Repository;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+
+import org.apache.sling.ide.transport.ResourceProxy;
+
+public class ListChildrenCommand extends JcrCommand<ResourceProxy> {
+
+    public ListChildrenCommand(Repository repository, Credentials credentials, 
String path) {
+        super(repository, credentials, path);
+    }
+
+    @Override
+    protected ResourceProxy execute0(Session session) throws 
RepositoryException {
+
+        Node node = session.getNode(getPath());
+        NodeIterator nodes = node.getNodes();
+
+        ResourceProxy parent = nodeToResource(node);
+
+        while (nodes.hasNext()) {
+            Node childNode = nodes.nextNode();
+
+            // do not descend into jcr:system
+            if (childNode.getPath().equals("/jcr:system")) {
+                continue;
+            }
+
+
+            parent.addChild(nodeToResource(childNode));
+        }
+
+        return parent;
+    }
+
+    private ResourceProxy nodeToResource(Node node) throws RepositoryException 
{
+
+        ResourceProxy resource = new ResourceProxy(node.getPath());
+        PropertyIterator properties = node.getProperties();
+        while (properties.hasNext()) {
+            Property property = properties.nextProperty();
+            String propertyName = property.getName();
+            Object propertyValue = ConversionUtils.getPropertyValue(property);
+
+            if (propertyValue != null) {
+                resource.addProperty(propertyName, propertyValue);
+            }
+        }
+
+        return resource;
+
+    }
+
+}

Propchange: 
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/ListChildrenCommand.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/ListChildrenCommand.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision Rev URL

Added: 
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/NoOpCommand.java
URL: 
http://svn.apache.org/viewvc/sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/NoOpCommand.java?rev=1514762&view=auto
==============================================================================
--- 
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/NoOpCommand.java
 (added)
+++ 
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/NoOpCommand.java
 Fri Aug 16 15:53:04 2013
@@ -0,0 +1,37 @@
+/*
+ * 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.impl.vlt;
+
+import java.io.IOException;
+
+import javax.jcr.Credentials;
+import javax.jcr.Repository;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+
+public class NoOpCommand<T> extends JcrCommand<T> {
+
+    public NoOpCommand(Repository repository, Credentials credentials) {
+        super(repository, credentials, null);
+    }
+
+    @Override
+    protected T execute0(Session session) throws RepositoryException, 
IOException {
+        return null;
+    }
+
+}

Propchange: 
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/NoOpCommand.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/NoOpCommand.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision Rev URL

Added: 
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/VltRepository.java
URL: 
http://svn.apache.org/viewvc/sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/VltRepository.java?rev=1514762&view=auto
==============================================================================
--- 
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/VltRepository.java
 (added)
+++ 
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/VltRepository.java
 Fri Aug 16 15:53:04 2013
@@ -0,0 +1,105 @@
+package org.apache.sling.ide.impl.vlt;
+
+import java.net.URISyntaxException;
+import java.util.Map;
+
+import javax.jcr.Credentials;
+import javax.jcr.RepositoryException;
+import javax.jcr.SimpleCredentials;
+
+import org.apache.jackrabbit.vault.fs.api.RepositoryAddress;
+import org.apache.jackrabbit.vault.util.RepositoryProvider;
+import org.apache.sling.ide.transport.Command;
+import org.apache.sling.ide.transport.FileInfo;
+import org.apache.sling.ide.transport.Repository;
+import org.apache.sling.ide.transport.RepositoryInfo;
+import org.apache.sling.ide.transport.ResourceProxy;
+import org.apache.sling.ide.transport.TracingCommand;
+import org.osgi.service.event.EventAdmin;
+
+/**
+ * The <tt>VltRepository</tt> is a Repository implementation backed by 
<tt>FileVault</tt>
+ * 
+ */
+public class VltRepository implements Repository {
+
+    private RepositoryInfo repositoryInfo;
+    private javax.jcr.Repository jcrRepo;
+
+    private EventAdmin eventAdmin;
+
+    private final RepositoryProvider rp = new RepositoryProvider();
+    private Credentials credentials;
+
+    @Override
+    public void setRepositoryInfo(RepositoryInfo repositoryInfo) {
+
+        this.repositoryInfo = repositoryInfo;
+
+        initJcrRepo();
+    }
+
+    private void initJcrRepo() {
+        try {
+            // TODO proper error handling
+            String url = repositoryInfo.getUrl()+ "server/-/jcr:root/";
+            // TODO this should be configurable, or even better - 
automatically discovered
+            RepositoryAddress repositoryAddress = new RepositoryAddress(url);
+            jcrRepo = rp.getRepository(repositoryAddress);
+
+            credentials = new SimpleCredentials(repositoryInfo.getUsername(), 
repositoryInfo.getPassword()
+                    .toCharArray());
+        } catch (URISyntaxException e) {
+            throw new RuntimeException(e);
+        } catch (RepositoryException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    @Override
+    public Command<Void> newAddNodeCommand(FileInfo fileInfo) {
+        // TODO implement
+        return new NoOpCommand<Void>(jcrRepo, credentials);
+    }
+
+    @Override
+    public Command<Void> newUpdateContentNodeCommand(FileInfo fileInfo, 
Map<String, Object> serializationData) {
+        // TODO implement
+        return new NoOpCommand<Void>(jcrRepo, credentials);
+    }
+
+    @Override
+    public Command<Void> newDeleteNodeCommand(FileInfo fileInfo) {
+        // TODO implement
+        return new NoOpCommand<Void>(jcrRepo, credentials);
+    }
+
+    @Override
+    public Command<ResourceProxy> newListChildrenNodeCommand(String path) {
+
+        return TracingCommand.wrap(new ListChildrenCommand(jcrRepo, 
credentials, path), eventAdmin);
+    }
+
+    @Override
+    public Command<Map<String, Object>> newGetNodeContentCommand(String path) {
+
+        return TracingCommand.wrap(new GetNodeContentCommand(jcrRepo, 
credentials, path), eventAdmin);
+    }
+
+    @Override
+    public Command<byte[]> newGetNodeCommand(String path) {
+
+        return TracingCommand.wrap(new GetNodeCommand(jcrRepo, credentials, 
path), eventAdmin);
+    }
+
+    protected void bindEventAdmin(EventAdmin eventAdmin) {
+
+        this.eventAdmin = eventAdmin;
+    }
+
+    protected void unbindEventAdmin(EventAdmin eventAdmin) {
+
+        this.eventAdmin = null;
+    }
+
+}

Propchange: 
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/VltRepository.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/VltRepository.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision Rev URL

Modified: sling/branches/tooling-ide-vlt/tooling/ide/pom.xml
URL: 
http://svn.apache.org/viewvc/sling/branches/tooling-ide-vlt/tooling/ide/pom.xml?rev=1514762&r1=1514761&r2=1514762&view=diff
==============================================================================
--- sling/branches/tooling-ide-vlt/tooling/ide/pom.xml (original)
+++ sling/branches/tooling-ide-vlt/tooling/ide/pom.xml Fri Aug 16 15:53:04 2013
@@ -13,7 +13,8 @@
                <module>api</module>
                <module>impl-resource</module>
         <module>impl-resource-test</module>
-               <module>vlt-wrapper</module>        
+               <module>vlt-wrapper</module>                
+               <module>impl-vlt</module>
                <module>eclipse-core</module>
                <module>eclipse-ui</module>
                <module>feature</module>


Reply via email to