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