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>