Author: rombert
Date: Thu Sep  5 13:40:48 2013
New Revision: 1520311

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

First implementation of the AddNodeCommand.

Added:
    
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/AddNodeCommand.java
   (with props)
Modified:
    
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/AddNodeCommand.java
URL: 
http://svn.apache.org/viewvc/sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/AddNodeCommand.java?rev=1520311&view=auto
==============================================================================
--- 
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/AddNodeCommand.java
 (added)
+++ 
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/AddNodeCommand.java
 Thu Sep  5 13:40:48 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 static org.apache.jackrabbit.vault.util.JcrConstants.*;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+
+import javax.jcr.Binary;
+import javax.jcr.Credentials;
+import javax.jcr.Node;
+import javax.jcr.Repository;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+
+import org.apache.jackrabbit.vault.util.PathUtil;
+import org.apache.jackrabbit.vault.util.Text;
+import org.apache.sling.ide.transport.FileInfo;
+
+public class AddNodeCommand extends JcrCommand<Void> {
+
+    private final FileInfo fileInfo;
+
+    public AddNodeCommand(Repository repository, Credentials credentials, 
FileInfo fileInfo) {
+
+        super(repository, credentials, 
PathUtil.makePath(fileInfo.getRelativeLocation(), fileInfo.getName()));
+
+        this.fileInfo = fileInfo;
+    }
+
+    @Override
+    protected Void execute0(Session session) throws RepositoryException, 
IOException {
+
+        // TODO - avoid IO
+        File file = new File(fileInfo.getLocation());
+        boolean isDirectory = file.isDirectory();
+
+        boolean nodeExists = session.nodeExists(getPath());
+        Node node;
+        if ( nodeExists ) {
+            node = session.getNode(getPath());
+        } else {
+
+            String parentLocation = Text.getAbsoluteParent(getPath(), 1);
+            if ( !session.nodeExists(parentLocation)) {
+                throw new RepositoryException("No parent found at " + 
parentLocation
+                        + " ; it's needed to create node at " + getPath());
+            }
+            
+            // TODO - we probably need to .content.xml as well and do all 
operations in one shot
+            // and set the primary type properly
+            String primaryType = file.isDirectory() ? NT_FOLDER : NT_FILE;
+
+            node = session.getNode(parentLocation).addNode(fileInfo.getName(), 
primaryType);
+        }
+
+        if (!isDirectory) {
+            Node contentNode;
+            
+            if ( node.hasNode(JCR_CONTENT)) {
+                contentNode = node.getNode(JCR_CONTENT);
+            } else {
+                contentNode = node.addNode(JCR_CONTENT, NT_RESOURCE);
+            }
+            
+            Binary binary = session.getValueFactory().createBinary(new 
FileInputStream(file));
+            contentNode.setProperty(JCR_DATA, binary);
+        }
+
+        return null;
+    }
+
+}

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

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

Modified: 
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=1520311&r1=1520310&r2=1520311&view=diff
==============================================================================
--- 
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/VltRepository.java
 (original)
+++ 
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/VltRepository.java
 Thu Sep  5 13:40:48 2013
@@ -48,8 +48,7 @@ public class VltRepository implements Re
 
     @Override
     public Command<Void> newAddNodeCommand(FileInfo fileInfo) {
-        // TODO implement
-        return new NoOpCommand<Void>(jcrRepo, credentials);
+        return TracingCommand.wrap(new AddNodeCommand(jcrRepo, credentials, 
fileInfo), eventAdmin);
     }
 
     @Override


Reply via email to