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/18 16:54:11 UTC

svn commit: r1524434 - in /sling/branches/tooling-ide-vlt/tooling/ide: api/src/org/apache/sling/ide/serialization/ eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/ eclipse-ui/src/org/apache/sling/ide/eclipse/ui/internal/ impl-resource-test/...

Author: stefanegli
Date: Wed Sep 18 14:54:11 2013
New Revision: 1524434

URL: http://svn.apache.org/r1524434
Log:
SLING-3074 : introduced SerializationDataBuilder - which you get from the factory-method SerializationManager.newBuilder() - and you're supposed to destroy() it, once done. This refactoring allows to reuse the vault's filesystem object and speed-up import substantially

Added:
    sling/branches/tooling-ide-vlt/tooling/ide/api/src/org/apache/sling/ide/serialization/SerializationDataBuilder.java   (with props)
    sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/serialization/VltSerializationDataBuilder.java   (with props)
Modified:
    sling/branches/tooling-ide-vlt/tooling/ide/api/src/org/apache/sling/ide/serialization/SerializationManager.java
    sling/branches/tooling-ide-vlt/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingLaunchpadBehaviour.java
    sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/internal/ImportRepositoryContentAction.java
    sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/internal/ImportWizard.java
    sling/branches/tooling-ide-vlt/tooling/ide/impl-resource-test/src/test/java/org/apache/sling/ide/impl/resource/serialization/SimpleXmlSerializationManagerTest.java
    sling/branches/tooling-ide-vlt/tooling/ide/impl-resource/src/org/apache/sling/ide/impl/resource/serialization/SimpleXmlSerializationManager.java
    sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/serialization/VltSerializationManager.java

Added: sling/branches/tooling-ide-vlt/tooling/ide/api/src/org/apache/sling/ide/serialization/SerializationDataBuilder.java
URL: http://svn.apache.org/viewvc/sling/branches/tooling-ide-vlt/tooling/ide/api/src/org/apache/sling/ide/serialization/SerializationDataBuilder.java?rev=1524434&view=auto
==============================================================================
--- sling/branches/tooling-ide-vlt/tooling/ide/api/src/org/apache/sling/ide/serialization/SerializationDataBuilder.java (added)
+++ sling/branches/tooling-ide-vlt/tooling/ide/api/src/org/apache/sling/ide/serialization/SerializationDataBuilder.java Wed Sep 18 14:54:11 2013
@@ -0,0 +1,30 @@
+/*
+ * 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.serialization;
+
+import java.io.File;
+
+import org.apache.sling.ide.transport.ResourceProxy;
+
+public interface SerializationDataBuilder {
+
+    SerializationData buildSerializationData(File contentSyncRoot, ResourceProxy resource)
+            throws SerializationException;
+
+    void destroy();
+    
+}

Propchange: sling/branches/tooling-ide-vlt/tooling/ide/api/src/org/apache/sling/ide/serialization/SerializationDataBuilder.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: sling/branches/tooling-ide-vlt/tooling/ide/api/src/org/apache/sling/ide/serialization/SerializationManager.java
URL: http://svn.apache.org/viewvc/sling/branches/tooling-ide-vlt/tooling/ide/api/src/org/apache/sling/ide/serialization/SerializationManager.java?rev=1524434&r1=1524433&r2=1524434&view=diff
==============================================================================
--- sling/branches/tooling-ide-vlt/tooling/ide/api/src/org/apache/sling/ide/serialization/SerializationManager.java (original)
+++ sling/branches/tooling-ide-vlt/tooling/ide/api/src/org/apache/sling/ide/serialization/SerializationManager.java Wed Sep 18 14:54:11 2013
@@ -21,13 +21,10 @@ import java.io.IOException;
 import java.io.InputStream;
 
 import org.apache.sling.ide.transport.Repository;
-import org.apache.sling.ide.transport.RepositoryInfo;
 import org.apache.sling.ide.transport.ResourceProxy;
 
 public interface SerializationManager {
 
-    void init(Repository repository, File contentSyncRoot) throws SerializationException;
-
     void destroy();
 
     boolean isSerializationFile(String filePath);
@@ -36,8 +33,7 @@ public interface SerializationManager {
 
     String getSerializationFilePath(String baseFilePath);
 
-    SerializationData buildSerializationData(File contentSyncRoot, ResourceProxy resource, RepositoryInfo repositoryInfo)
-            throws SerializationException;
+    SerializationDataBuilder newBuilder(Repository repository, File contentSyncRoot) throws SerializationException;
 
     ResourceProxy readSerializationData(String filePath, InputStream source) throws IOException;
 }

Modified: sling/branches/tooling-ide-vlt/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingLaunchpadBehaviour.java
URL: http://svn.apache.org/viewvc/sling/branches/tooling-ide-vlt/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingLaunchpadBehaviour.java?rev=1524434&r1=1524433&r2=1524434&view=diff
==============================================================================
--- sling/branches/tooling-ide-vlt/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingLaunchpadBehaviour.java (original)
+++ sling/branches/tooling-ide-vlt/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingLaunchpadBehaviour.java Wed Sep 18 14:54:11 2013
@@ -623,7 +623,7 @@ public class SlingLaunchpadBehaviour ext
             throws SerializationException {
         if (serializationManager == null) {
             serializationManager = Activator.getDefault().getSerializationManager();
-            serializationManager.init(repository, contentSyncRoot);
+//            serializationManager.init(repository, contentSyncRoot);
         }
 
         return serializationManager;

Modified: sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/internal/ImportRepositoryContentAction.java
URL: http://svn.apache.org/viewvc/sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/internal/ImportRepositoryContentAction.java?rev=1524434&r1=1524433&r2=1524434&view=diff
==============================================================================
--- sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/internal/ImportRepositoryContentAction.java (original)
+++ sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/internal/ImportRepositoryContentAction.java Wed Sep 18 14:54:11 2013
@@ -29,6 +29,7 @@ import org.apache.sling.ide.filter.Filte
 import org.apache.sling.ide.filter.FilterLocator;
 import org.apache.sling.ide.filter.FilterResult;
 import org.apache.sling.ide.serialization.SerializationData;
+import org.apache.sling.ide.serialization.SerializationDataBuilder;
 import org.apache.sling.ide.serialization.SerializationException;
 import org.apache.sling.ide.serialization.SerializationKind;
 import org.apache.sling.ide.serialization.SerializationKindManager;
@@ -56,6 +57,7 @@ public class ImportRepositoryContentActi
     private final IPath projectRelativePath;
     private final IProject project;
     private SerializationManager serializationManager;
+	private SerializationDataBuilder builder;
 
     /**
      * @param repositoryPath
@@ -63,9 +65,10 @@ public class ImportRepositoryContentActi
      * @param filterFile
      * @param projectRelativePath
      * @param project
+     * @throws SerializationException 
      */
     public ImportRepositoryContentAction(String repositoryPath, IServer server, IFile filterFile,
-            IPath projectRelativePath, IProject project, SerializationManager serializationManager) {
+            IPath projectRelativePath, IProject project, SerializationManager serializationManager) throws SerializationException {
         this.repositoryPath = repositoryPath;
         this.server = server;
         this.filterFile = filterFile;
@@ -74,9 +77,12 @@ public class ImportRepositoryContentActi
         this.serializationManager = serializationManager;
     }
 
-    public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
+    public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException, SerializationException {
         Repository repository = ServerUtil.getRepository(server, monitor);
 
+        this.builder = serializationManager.newBuilder(
+        		repository, ProjectUtil.getSyncDirectoryFile(project));
+
         monitor.setTaskName("Loading configuration...");
         ISlingLaunchpadServer launchpad = (ISlingLaunchpadServer) server.loadAdapter(
                 ISlingLaunchpadServer.class, monitor);
@@ -144,6 +150,10 @@ public class ImportRepositoryContentActi
             if (oldPublishState != ISlingLaunchpadServer.PUBLISH_STATE_NEVER) {
                 launchpad.setPublishState(oldPublishState, monitor);
             }
+            if (builder!=null) {
+            	builder.destroy();
+            	builder = null;
+            }
             monitor.done();
         }
 
@@ -186,8 +196,7 @@ public class ImportRepositoryContentActi
         ResourceProxy resource = executeCommand(repository.newListChildrenNodeCommand(path));
 
         // TODO we should know all node types for which to create files and folders
-        SerializationData serializationData = serializationManager.buildSerializationData(contentSyncRoot, resource,
-                repository.getRepositoryInfo());
+        SerializationData serializationData = builder.buildSerializationData(contentSyncRoot, resource);
         System.out.println("For resource at path " + resource.getPath() + " got serialization data "
                 + serializationData);
 

Modified: sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/internal/ImportWizard.java
URL: http://svn.apache.org/viewvc/sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/internal/ImportWizard.java?rev=1524434&r1=1524433&r2=1524434&view=diff
==============================================================================
--- sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/internal/ImportWizard.java (original)
+++ sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/internal/ImportWizard.java Wed Sep 18 14:54:11 2013
@@ -18,11 +18,8 @@ package org.apache.sling.ide.eclipse.ui.
 
 import java.lang.reflect.InvocationTargetException;
 
-import org.apache.sling.ide.eclipse.core.ProjectUtil;
-import org.apache.sling.ide.eclipse.core.ServerUtil;
 import org.apache.sling.ide.serialization.SerializationException;
 import org.apache.sling.ide.serialization.SerializationManager;
-import org.apache.sling.ide.transport.Repository;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.ResourcesPlugin;
@@ -78,9 +75,6 @@ public class ImportWizard extends Wizard
             public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
 
                 try {
-                    Repository repository = ServerUtil.getRepository(server, monitor);
-                    serializationManager.init(repository, ProjectUtil.getSyncDirectoryFile(project));
-
                     new ImportRepositoryContentAction(repositoryPath, server, filterFile, projectRelativePath, project,
                             serializationManager).run(monitor);
                 } catch (SerializationException e) {

Modified: sling/branches/tooling-ide-vlt/tooling/ide/impl-resource-test/src/test/java/org/apache/sling/ide/impl/resource/serialization/SimpleXmlSerializationManagerTest.java
URL: http://svn.apache.org/viewvc/sling/branches/tooling-ide-vlt/tooling/ide/impl-resource-test/src/test/java/org/apache/sling/ide/impl/resource/serialization/SimpleXmlSerializationManagerTest.java?rev=1524434&r1=1524433&r2=1524434&view=diff
==============================================================================
--- sling/branches/tooling-ide-vlt/tooling/ide/impl-resource-test/src/test/java/org/apache/sling/ide/impl/resource/serialization/SimpleXmlSerializationManagerTest.java (original)
+++ sling/branches/tooling-ide-vlt/tooling/ide/impl-resource-test/src/test/java/org/apache/sling/ide/impl/resource/serialization/SimpleXmlSerializationManagerTest.java Wed Sep 18 14:54:11 2013
@@ -1,3 +1,19 @@
+/*
+ * 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.resource.serialization;
 
 import static org.custommonkey.xmlunit.XMLAssert.assertXMLEqual;
@@ -39,8 +55,8 @@ public class SimpleXmlSerializationManag
     @Test
     public void emptySerializedData() throws SerializationException, SAXException {
 
-        SerializationData serializationData = sm.buildSerializationData(null,
-                newResourceWithProperties(new HashMap<String, Object>()), null);
+        SerializationData serializationData = sm.newBuilder(null, null).buildSerializationData(null,
+                newResourceWithProperties(new HashMap<String, Object>()));
 
         assertThat(serializationData, is(nullValue()));
     }
@@ -56,7 +72,7 @@ public class SimpleXmlSerializationManag
     @Test
     public void nullSerializedData() throws SerializationException, SAXException {
 
-        SerializationData serializationData = sm.buildSerializationData(null, null, null);
+        SerializationData serializationData = sm.newBuilder(null, null).buildSerializationData(null, null);
 
         assertThat(serializationData, is(nullValue()));
     }
@@ -68,7 +84,7 @@ public class SimpleXmlSerializationManag
         data.put("jcr:createdBy", "admin");
         data.put("jcr:lastModifiedBy", "author");
 
-        SerializationData serializationData = sm.buildSerializationData(null, newResourceWithProperties(data), null);
+        SerializationData serializationData = sm.newBuilder(null, null).buildSerializationData(null, newResourceWithProperties(data));
 
         String methodName = "stringSerializedData";
 
@@ -97,7 +113,7 @@ public class SimpleXmlSerializationManag
         Map<String, Object> data = new HashMap<String, Object>();
         data.put("jcr:description", "<p class=\"active\">Welcome</p>");
 
-        SerializationData serializationData = sm.buildSerializationData(null, newResourceWithProperties(data), null);
+        SerializationData serializationData = sm.newBuilder(null, null).buildSerializationData(null, newResourceWithProperties(data));
 
         String methodName = "serializedDataIsEscaped";
 

Modified: sling/branches/tooling-ide-vlt/tooling/ide/impl-resource/src/org/apache/sling/ide/impl/resource/serialization/SimpleXmlSerializationManager.java
URL: http://svn.apache.org/viewvc/sling/branches/tooling-ide-vlt/tooling/ide/impl-resource/src/org/apache/sling/ide/impl/resource/serialization/SimpleXmlSerializationManager.java?rev=1524434&r1=1524433&r2=1524434&view=diff
==============================================================================
--- sling/branches/tooling-ide-vlt/tooling/ide/impl-resource/src/org/apache/sling/ide/impl/resource/serialization/SimpleXmlSerializationManager.java (original)
+++ sling/branches/tooling-ide-vlt/tooling/ide/impl-resource/src/org/apache/sling/ide/impl/resource/serialization/SimpleXmlSerializationManager.java Wed Sep 18 14:54:11 2013
@@ -35,9 +35,10 @@ import javax.xml.transform.sax.Transform
 import javax.xml.transform.stream.StreamResult;
 
 import org.apache.sling.ide.serialization.SerializationData;
+import org.apache.sling.ide.serialization.SerializationDataBuilder;
 import org.apache.sling.ide.serialization.SerializationException;
 import org.apache.sling.ide.serialization.SerializationManager;
-import org.apache.sling.ide.transport.RepositoryInfo;
+import org.apache.sling.ide.transport.Repository;
 import org.apache.sling.ide.transport.ResourceProxy;
 import org.xml.sax.Attributes;
 import org.xml.sax.InputSource;
@@ -45,7 +46,7 @@ import org.xml.sax.SAXException;
 import org.xml.sax.helpers.AttributesImpl;
 import org.xml.sax.helpers.DefaultHandler;
 
-public class SimpleXmlSerializationManager implements SerializationManager {
+public class SimpleXmlSerializationManager implements SerializationManager, SerializationDataBuilder {
 
     private static final String TAG_PROPERTY = "property";
     private static final String ATT_PROPERTY_NAME = "name";
@@ -98,10 +99,15 @@ public class SimpleXmlSerializationManag
         }
 
     }
+    
+    @Override
+    public SerializationDataBuilder newBuilder(Repository repository,
+    		File contentSyncRoot) throws SerializationException {
+    	return this;
+    }
 
     @Override
-    public SerializationData buildSerializationData(File contentSyncRoot, ResourceProxy resource,
-            RepositoryInfo repositoryInfo)
+    public SerializationData buildSerializationData(File contentSyncRoot, ResourceProxy resource)
             throws SerializationException {
 
         if (resource == null) {
@@ -176,12 +182,6 @@ public class SimpleXmlSerializationManag
     public void destroy() {
     }
 
-    /* (non-Javadoc)
-     * @see org.apache.sling.ide.serialization.SerializationManager#init(org.apache.sling.ide.transport.Repository, java.io.File)
-     */
-    public void init(org.apache.sling.ide.transport.Repository repository, File contentSyncRoot) throws SerializationException {
-    }
-
     static class SerializationDataHandler extends DefaultHandler {
         private Map<String, Object> result;
         private String propertyName;

Added: sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/serialization/VltSerializationDataBuilder.java
URL: http://svn.apache.org/viewvc/sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/serialization/VltSerializationDataBuilder.java?rev=1524434&view=auto
==============================================================================
--- sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/serialization/VltSerializationDataBuilder.java (added)
+++ sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/serialization/VltSerializationDataBuilder.java Wed Sep 18 14:54:11 2013
@@ -0,0 +1,200 @@
+/*
+ * 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.serialization;
+
+import static org.apache.sling.ide.util.PathUtil.getName;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.IOException;
+
+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.fs.api.Aggregate;
+import org.apache.jackrabbit.vault.fs.api.Aggregator;
+import org.apache.jackrabbit.vault.fs.api.RepositoryAddress;
+import org.apache.jackrabbit.vault.fs.api.VaultFile;
+import org.apache.jackrabbit.vault.fs.api.VaultFileSystem;
+import org.apache.jackrabbit.vault.fs.config.ConfigurationException;
+import org.apache.jackrabbit.vault.fs.impl.aggregator.FileAggregator;
+import org.apache.jackrabbit.vault.fs.impl.aggregator.GenericAggregator;
+import org.apache.jackrabbit.vault.fs.impl.io.DocViewSerializer;
+import org.apache.jackrabbit.vault.util.Constants;
+import org.apache.jackrabbit.vault.util.JcrConstants;
+import org.apache.jackrabbit.vault.util.MimeTypes;
+import org.apache.jackrabbit.vault.util.PlatformNameFormat;
+import org.apache.sling.ide.impl.vlt.RepositoryUtils;
+import org.apache.sling.ide.impl.vlt.VaultFsLocator;
+import org.apache.sling.ide.serialization.SerializationData;
+import org.apache.sling.ide.serialization.SerializationDataBuilder;
+import org.apache.sling.ide.serialization.SerializationException;
+import org.apache.sling.ide.serialization.SerializationKind;
+import org.apache.sling.ide.serialization.SerializationKindManager;
+import org.apache.sling.ide.transport.ResourceProxy;
+
+public class VltSerializationDataBuilder implements SerializationDataBuilder {
+
+    VaultFsLocator fsLocator;
+    private SerializationKindManager skm;
+	private File contentSyncRoot;
+	private org.apache.sling.ide.transport.Repository repo;
+	private Session session;
+	private VaultFileSystem fs;
+
+    public void init(org.apache.sling.ide.transport.Repository repository, File contentSyncRoot)
+            throws SerializationException {
+
+    	this.repo = repository;
+    	
+        try {
+            this.skm = new SerializationKindManager();
+            this.skm.init(repository);
+            if (!contentSyncRoot.exists()) {
+            	throw new IllegalArgumentException("contentSyncRoot does not exist: "+contentSyncRoot);
+            }
+            this.contentSyncRoot = contentSyncRoot;
+
+            Repository jcrRepo = RepositoryUtils.getRepository(repo.getRepositoryInfo());
+            Credentials credentials = RepositoryUtils.getCredentials(repo.getRepositoryInfo());
+            
+            session = jcrRepo.login(credentials);
+
+            RepositoryAddress address = RepositoryUtils.getRepositoryAddress(repo.getRepositoryInfo());
+
+            fs = fsLocator.getFileSystem(address, contentSyncRoot, session);
+        
+        } catch (org.apache.sling.ide.transport.RepositoryException e) {
+            throw new SerializationException(e);
+        } catch (RepositoryException e) {
+            throw new SerializationException(e);
+		} catch (IOException e) {
+            throw new SerializationException(e);
+		} catch (ConfigurationException e) {
+            throw new SerializationException(e);
+		}
+    }
+    
+    @Override
+    public void destroy() {
+        if (session != null) {
+            session.logout();
+        }
+    }
+
+    @Override
+    public SerializationData buildSerializationData(File contentSyncRoot, ResourceProxy resource) throws SerializationException {
+
+        // TODO - there is a small mismatch here since we're doing remote calls to the repository
+        // but taking a resourceProxy - not sure if we'll run into problems down the road or not
+
+        // TODO - there might be a performance problem with getting the session on-demand each time
+        // the resolution might be to have a SerializationManager instance kept per 'transaction'
+        // which is stateful, with init(RepositoryInfo) and destroy() methods
+        try {
+            
+
+            VaultFile vaultFile = fs.getFile(resource.getPath());
+            String platformPath = resource.getPath();
+            if (vaultFile == null) {
+
+                // TODO - not sure why we need to try both ... not a performance impact but ugly nonetheless
+                platformPath = PlatformNameFormat.getPlatformPath(resource.getPath()) + VltSerializationManager.EXTENSION_XML;
+                vaultFile = fs.getFile(platformPath);
+
+                if (vaultFile == null) {
+                    platformPath = PlatformNameFormat.getPlatformPath(resource.getPath());
+                    vaultFile = fs.getFile(platformPath);
+                }
+
+                if (vaultFile == null) {
+                    // TODO proper logging ; discover if this is expected or not and fail hard if it's not
+                    System.err.println("No vaultFile at path " + resource.getPath());
+                    return null;
+                }
+            }
+
+            String nameHint = getName(platformPath);
+            String fileOrFolderPathHint = vaultFile.getPath();
+
+            Aggregate aggregate = vaultFile.getAggregate();
+
+            if (aggregate == null)
+                throw new IllegalArgumentException("No aggregate found for path " + resource.getPath());
+
+            SerializationKind serializationKind = skm.getSerializationKind(aggregate.getNode().getPrimaryNodeType()
+                    .getName());
+
+            if (resource.getPath().equals("/") || serializationKind == SerializationKind.METADATA_PARTIAL
+                    || serializationKind == SerializationKind.FILE || serializationKind == SerializationKind.FOLDER) {
+                nameHint = Constants.DOT_CONTENT_XML;
+            }
+
+            Aggregator aggregator = fs.getAggregateManager().getAggregator(aggregate.getNode(), null);
+            if (aggregator instanceof FileAggregator) {
+                // TODO - copy-pasted from FileAggregator, and really does not belong here...
+                Node content = aggregate.getNode();
+                if (content.isNodeType(JcrConstants.NT_FILE)) {
+                    content = content.getNode(JcrConstants.JCR_CONTENT);
+                }
+                String mimeType = null;
+                if (content.hasProperty(JcrConstants.JCR_MIMETYPE)) {
+                    try {
+                        mimeType = content.getProperty(JcrConstants.JCR_MIMETYPE).getString();
+                    } catch (RepositoryException e) {
+                        // ignore
+                    }
+                }
+                if (mimeType == null) {
+                    // guess mime type from name
+                    mimeType = MimeTypes.getMimeType(aggregate.getNode().getName(), MimeTypes.APPLICATION_OCTET_STREAM);
+                }
+
+                boolean needsDir = !MimeTypes.matches(aggregate.getNode().getName(), mimeType,
+                        MimeTypes.APPLICATION_OCTET_STREAM);
+                if (!needsDir) {
+                    return SerializationData.empty(fileOrFolderPathHint, serializationKind);
+                }
+            } else if (aggregator instanceof GenericAggregator) {
+                // TODO - copy-pasted from GenericAggregator
+                if (aggregate.getNode().getPrimaryNodeType().getName().equals("nt:folder")
+                        && aggregate.getNode().getMixinNodeTypes().length == 0) {
+                    return SerializationData.empty(fileOrFolderPathHint, serializationKind);
+                }
+            }
+
+
+            DocViewSerializer s = new DocViewSerializer(aggregate);
+            ByteArrayOutputStream out = new ByteArrayOutputStream();
+            s.writeContent(out);
+            
+            byte[] result = out.toByteArray();
+
+            return new SerializationData(fileOrFolderPathHint, nameHint, result, serializationKind);
+
+        } catch (RepositoryException e) {
+            throw new SerializationException(e);
+        } catch (IOException e) {
+            throw new SerializationException(e);
+        }
+    }
+
+
+}

Propchange: sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/serialization/VltSerializationDataBuilder.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

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=1524434&r1=1524433&r2=1524434&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 Wed Sep 18 14:54:11 2013
@@ -16,18 +16,13 @@
  */
 package org.apache.sling.ide.impl.vlt.serialization;
 
-import static org.apache.sling.ide.util.PathUtil.getName;
-
 import java.io.BufferedInputStream;
-import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URISyntaxException;
 
-import javax.jcr.Credentials;
-import javax.jcr.Node;
 import javax.jcr.Repository;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
@@ -37,37 +32,25 @@ import javax.xml.parsers.SAXParser;
 import javax.xml.parsers.SAXParserFactory;
 
 import org.apache.jackrabbit.vault.fs.Mounter;
-import org.apache.jackrabbit.vault.fs.api.Aggregate;
-import org.apache.jackrabbit.vault.fs.api.Aggregator;
 import org.apache.jackrabbit.vault.fs.api.RepositoryAddress;
 import org.apache.jackrabbit.vault.fs.api.SerializationType;
 import org.apache.jackrabbit.vault.fs.api.VaultFile;
 import org.apache.jackrabbit.vault.fs.api.VaultFileSystem;
-import org.apache.jackrabbit.vault.fs.config.ConfigurationException;
-import org.apache.jackrabbit.vault.fs.impl.aggregator.FileAggregator;
-import org.apache.jackrabbit.vault.fs.impl.aggregator.GenericAggregator;
-import org.apache.jackrabbit.vault.fs.impl.io.DocViewSerializer;
 import org.apache.jackrabbit.vault.fs.impl.io.XmlAnalyzer;
 import org.apache.jackrabbit.vault.util.Constants;
-import org.apache.jackrabbit.vault.util.JcrConstants;
-import org.apache.jackrabbit.vault.util.MimeTypes;
 import org.apache.jackrabbit.vault.util.PlatformNameFormat;
 import org.apache.jackrabbit.vault.util.RepositoryProvider;
-import org.apache.sling.ide.impl.vlt.RepositoryUtils;
 import org.apache.sling.ide.impl.vlt.VaultFsLocator;
-import org.apache.sling.ide.serialization.SerializationData;
+import org.apache.sling.ide.serialization.SerializationDataBuilder;
 import org.apache.sling.ide.serialization.SerializationException;
-import org.apache.sling.ide.serialization.SerializationKind;
-import org.apache.sling.ide.serialization.SerializationKindManager;
 import org.apache.sling.ide.serialization.SerializationManager;
-import org.apache.sling.ide.transport.RepositoryInfo;
 import org.apache.sling.ide.transport.ResourceProxy;
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
 
 public class VltSerializationManager implements SerializationManager {
 
-    private static final String EXTENSION_XML = ".xml";
+    static final String EXTENSION_XML = ".xml";
 
     public static void main(String[] args) throws RepositoryException, URISyntaxException, IOException {
         RepositoryAddress address = new RepositoryAddress("http://localhost:8080/server/root");
@@ -95,21 +78,6 @@ public class VltSerializationManager imp
 
     }
 
-    private VaultFsLocator fsLocator;
-    private SerializationKindManager skm;
-
-    @Override
-    public void init(org.apache.sling.ide.transport.Repository repository, File contentSyncRoot)
-            throws SerializationException {
-
-        try {
-            this.skm = new SerializationKindManager();
-            this.skm.init(repository);
-        } catch (org.apache.sling.ide.transport.RepositoryException e) {
-            throw new SerializationException(e);
-        }
-    }
-
     @Override
     public void destroy() {
 
@@ -167,125 +135,30 @@ public class VltSerializationManager imp
 
     protected void bindVaultFsLocator(VaultFsLocator fsLocator) {
 
-        this.fsLocator = fsLocator;
+        getBuilder().fsLocator = fsLocator;
     }
 
     protected void unbindVaultFsLocator(VaultFsLocator fsLocator) {
 
-        this.fsLocator = null;
+    	getBuilder().fsLocator = null;
     }
-
-    @Override
-    public SerializationData buildSerializationData(File contentSyncRoot, ResourceProxy resource,
-            RepositoryInfo repositoryInfo) throws SerializationException {
-
-        // TODO - there is a small mismatch here since we're doing remote calls to the repository
-        // but taking a resourceProxy - not sure if we'll run into problems down the road or not
-
-        // TODO - there might be a performance problem with getting the session on-demand each time
-        // the resolution might be to have a SerializationManager instance kept per 'transaction'
-        // which is stateful, with init(RepositoryInfo) and destroy() methods
-        Session session = null;
-        try {
-            
-            Repository repo = RepositoryUtils.getRepository(repositoryInfo);
-            Credentials credentials = RepositoryUtils.getCredentials(repositoryInfo);
-            
-            session = repo.login(credentials);
-
-            RepositoryAddress address = RepositoryUtils.getRepositoryAddress(repositoryInfo);
-
-            VaultFileSystem fs = fsLocator.getFileSystem(address, contentSyncRoot, session);
-
-            VaultFile vaultFile = fs.getFile(resource.getPath());
-            String platformPath = resource.getPath();
-            if (vaultFile == null) {
-
-                // TODO - not sure why we need to try both ... not a performance impact but ugly nonetheless
-                platformPath = PlatformNameFormat.getPlatformPath(resource.getPath()) + EXTENSION_XML;
-                vaultFile = fs.getFile(platformPath);
-
-                if (vaultFile == null) {
-                    platformPath = PlatformNameFormat.getPlatformPath(resource.getPath());
-                    vaultFile = fs.getFile(platformPath);
-                }
-
-                if (vaultFile == null) {
-                    // TODO proper logging ; discover if this is expected or not and fail hard if it's not
-                    System.err.println("No vaultFile at path " + resource.getPath());
-                    return null;
-                }
-            }
-
-            String nameHint = getName(platformPath);
-            String fileOrFolderPathHint = vaultFile.getPath();
-
-            Aggregate aggregate = vaultFile.getAggregate();
-
-            if (aggregate == null)
-                throw new IllegalArgumentException("No aggregate found for path " + resource.getPath());
-
-            SerializationKind serializationKind = skm.getSerializationKind(aggregate.getNode().getPrimaryNodeType()
-                    .getName());
-
-            if (resource.getPath().equals("/") || serializationKind == SerializationKind.METADATA_PARTIAL
-                    || serializationKind == SerializationKind.FILE || serializationKind == SerializationKind.FOLDER) {
-                nameHint = Constants.DOT_CONTENT_XML;
-            }
-
-            Aggregator aggregator = fs.getAggregateManager().getAggregator(aggregate.getNode(), null);
-            if (aggregator instanceof FileAggregator) {
-                // TODO - copy-pasted from FileAggregator, and really does not belong here...
-                Node content = aggregate.getNode();
-                if (content.isNodeType(JcrConstants.NT_FILE)) {
-                    content = content.getNode(JcrConstants.JCR_CONTENT);
-                }
-                String mimeType = null;
-                if (content.hasProperty(JcrConstants.JCR_MIMETYPE)) {
-                    try {
-                        mimeType = content.getProperty(JcrConstants.JCR_MIMETYPE).getString();
-                    } catch (RepositoryException e) {
-                        // ignore
-                    }
-                }
-                if (mimeType == null) {
-                    // guess mime type from name
-                    mimeType = MimeTypes.getMimeType(aggregate.getNode().getName(), MimeTypes.APPLICATION_OCTET_STREAM);
-                }
-
-                boolean needsDir = !MimeTypes.matches(aggregate.getNode().getName(), mimeType,
-                        MimeTypes.APPLICATION_OCTET_STREAM);
-                if (!needsDir) {
-                    return SerializationData.empty(fileOrFolderPathHint, serializationKind);
-                }
-            } else if (aggregator instanceof GenericAggregator) {
-                // TODO - copy-pasted from GenericAggregator
-                if (aggregate.getNode().getPrimaryNodeType().getName().equals("nt:folder")
-                        && aggregate.getNode().getMixinNodeTypes().length == 0) {
-                    return SerializationData.empty(fileOrFolderPathHint, serializationKind);
-                }
-            }
-
-
-            DocViewSerializer s = new DocViewSerializer(aggregate);
-            ByteArrayOutputStream out = new ByteArrayOutputStream();
-            s.writeContent(out);
-            
-            byte[] result = out.toByteArray();
-
-            return new SerializationData(fileOrFolderPathHint, nameHint, result, serializationKind);
-
-        } catch (RepositoryException e) {
-            throw new SerializationException(e);
-        } catch (ConfigurationException e) {
-            throw new SerializationException(e);
-        } catch (IOException e) {
-            throw new SerializationException(e);
-        } finally {
-            if (session != null) {
-                session.logout();
-            }
-        }
+    
+    private VltSerializationDataBuilder builder;
+    
+    private VltSerializationDataBuilder getBuilder() {
+    	if (builder==null) {
+    		builder = new VltSerializationDataBuilder();
+    	}
+    	return builder;
+    }
+    
+    @Override
+    public SerializationDataBuilder newBuilder(
+    		org.apache.sling.ide.transport.Repository repository,
+    		File contentSyncRoot) throws SerializationException {
+    	VltSerializationDataBuilder b = getBuilder();
+    	b.init(repository, contentSyncRoot);
+    	return b;
     }
 
     @Override