Author: rombert
Date: Fri Sep 13 13:33:44 2013
New Revision: 1522921
URL: http://svn.apache.org/r1522921
Log:
SLING-2989 - [Tooling] integrate with vlt once available
Take into account more vlt-supplied information about the serialization
format.
Added:
sling/branches/tooling-ide-vlt/tooling/ide/api/src/org/apache/sling/ide/serialization/SerializationData.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-ui/src/org/apache/sling/ide/eclipse/ui/internal/ImportRepositoryContentAction.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/META-INF/MANIFEST.MF
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/SerializationData.java
URL:
http://svn.apache.org/viewvc/sling/branches/tooling-ide-vlt/tooling/ide/api/src/org/apache/sling/ide/serialization/SerializationData.java?rev=1522921&view=auto
==============================================================================
---
sling/branches/tooling-ide-vlt/tooling/ide/api/src/org/apache/sling/ide/serialization/SerializationData.java
(added)
+++
sling/branches/tooling-ide-vlt/tooling/ide/api/src/org/apache/sling/ide/serialization/SerializationData.java
Fri Sep 13 13:33:44 2013
@@ -0,0 +1,47 @@
+package org.apache.sling.ide.serialization;
+public class SerializationData {
+
+ private final byte[] contents;
+ private final String nameHint;
+ private final SerializationKind serializationKind;
+ private final String fileOrFolderNameHint;
+
+ public static SerializationData empty(String fileOrFolderNameHint,
SerializationKind serializationKind) {
+ return new SerializationData(fileOrFolderNameHint, null, null,
serializationKind);
+ }
+
+ public SerializationData(String fileOrFolderNameHint, String nameHint,
byte[] contents,
+ SerializationKind serializationKind) {
+ this.fileOrFolderNameHint = fileOrFolderNameHint;
+ this.contents = contents;
+ this.nameHint = nameHint;
+ this.serializationKind = serializationKind;
+ }
+
+ public String getFileOrFolderNameHint() {
+ return fileOrFolderNameHint;
+ }
+
+ public byte[] getContents() {
+ return contents;
+ }
+
+ public String getNameHint() {
+ return nameHint;
+ }
+
+ public SerializationKind getSerializationKind() {
+ return serializationKind;
+ }
+
+ public boolean hasContents() {
+
+ return contents != null && contents.length > 0;
+ }
+
+ @Override
+ public String toString() {
+ return "[SerializationData# fileOrFolderNameHint: " +
fileOrFolderNameHint + ", nameHint: " + nameHint
+ + ", serializationKind: " + serializationKind + ", contents?"
+ (hasContents()) + "]";
+ }
+}
\ No newline at end of file
Propchange:
sling/branches/tooling-ide-vlt/tooling/ide/api/src/org/apache/sling/ide/serialization/SerializationData.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
sling/branches/tooling-ide-vlt/tooling/ide/api/src/org/apache/sling/ide/serialization/SerializationData.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision Rev URL
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=1522921&r1=1522920&r2=1522921&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
Fri Sep 13 13:33:44 2013
@@ -37,10 +37,8 @@ public interface SerializationManager {
String getSerializationFilePath(String baseFilePath);
- String buildSerializationData(File contentSyncRoot, ResourceProxy
resource, RepositoryInfo repositoryInfo)
+ SerializationData buildSerializationData(File contentSyncRoot,
ResourceProxy resource, RepositoryInfo repositoryInfo)
throws SerializationException;
Map<String, Object> readSerializationData(InputStream source) throws
IOException;
-
- SerializationKind getSerializationKind(String primaryType);
}
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=1522921&r1=1522920&r2=1522921&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
Fri Sep 13 13:33:44 2013
@@ -28,6 +28,7 @@ import org.apache.sling.ide.eclipse.core
import org.apache.sling.ide.filter.Filter;
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.SerializationException;
import org.apache.sling.ide.serialization.SerializationKind;
import org.apache.sling.ide.serialization.SerializationKindManager;
@@ -37,7 +38,6 @@ import org.apache.sling.ide.transport.Re
import org.apache.sling.ide.transport.RepositoryException;
import org.apache.sling.ide.transport.ResourceProxy;
import org.apache.sling.ide.transport.Result;
-import org.apache.sling.ide.util.PathUtil;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
@@ -45,7 +45,6 @@ import org.eclipse.core.resources.IResou
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.Path;
import org.eclipse.wst.server.core.IServer;
// intentionally does not implement IRunnableWithProgress to cut dependency on
JFace
@@ -188,75 +187,47 @@ public class ImportRepositoryContentActi
+ projectRelativePath + ")");
ResourceProxy resource =
executeCommand(repository.newListChildrenNodeCommand(path));
- String primaryType = (String)
resource.getProperties().get(Repository.JCR_PRIMARY_TYPE);
-
- SerializationKind serializationKind =
serializationManager.getSerializationKind(primaryType);
- System.out.println(primaryType + " -> " + serializationKind);
// TODO we should know all node types for which to create files and
folders
+ SerializationData serializationData =
serializationManager.buildSerializationData(contentSyncRoot, resource,
+ repository.getRepositoryInfo());
+ System.out.println("For resource at path " + resource.getPath() + "
got serialization data "
+ + serializationData);
- String serializationPath =
serializationManager.getSerializationFilePath(path);
- switch (serializationKind) {
- case FILE: {
- importFile(repository, path, project, projectRelativePath);
+ if (serializationData == null) {
+ System.err.println("Skipping resource at " + resource.getPath() +
" since we got no serialization data.");
+ return;
+ }
+
+ IPath fileOrFolderPath =
projectRelativePath.append(serializationData.getFileOrFolderNameHint());
- ResourceProxy resourceToSerialize = executeCommand(repository
- .newGetNodeContentCommand(path));
+ switch (serializationData.getSerializationKind()) {
+ case FILE: {
+ byte[] contents =
executeCommand(repository.newGetNodeCommand(path));
+ importFile(project, fileOrFolderPath, contents);
- String out =
serializationManager.buildSerializationData(contentSyncRoot,
- resourceToSerialize, repository.getRepositoryInfo());
- if (out != null) {
- IPath directoryPath = projectRelativePath.append(path +
".dir");
+ if (serializationData.hasContents()) {
+ // TODO - should we abstract out .dir serialization?
+ IPath directoryPath =
fileOrFolderPath.addFileExtension("dir");
createFolder(project, directoryPath);
- // TODO remove hardcoding of .content.xml name here
- createFile(project, directoryPath.append(".content.xml"),
out.getBytes("UTF-8"));
+ createFile(project,
directoryPath.append(serializationData.getNameHint()),
+ serializationData.getContents());
}
-
break;
}
case FOLDER:
case METADATA_PARTIAL: {
- createFolder(project, projectRelativePath.append(path));
- ResourceProxy resourceToSerialize = executeCommand(repository
- .newGetNodeContentCommand(path));
-
- String out =
serializationManager.buildSerializationData(contentSyncRoot,
- resourceToSerialize, repository.getRepositoryInfo());
- if (out != null) {
- createFile(project,
projectRelativePath.append(serializationPath),
- out.getBytes("UTF-8"));
+ createFolder(project, fileOrFolderPath);
+ if (serializationData.hasContents()) {
+ createFile(project,
fileOrFolderPath.append(serializationData.getNameHint()),
+ serializationData.getContents());
}
break;
}
case METADATA_FULL: {
- ResourceProxy resourceToSerialize = executeCommand(repository
- .newGetNodeContentCommand(path));
-
- String out =
serializationManager.buildSerializationData(contentSyncRoot,
- resourceToSerialize, repository.getRepositoryInfo());
-
- if (out != null) {
- // TODO - picking the base name based on serialization
kind is not supported by the
- // API...
- // so for now this is one big hack to have vlt-compatible
checkouts
- IPath serializationPathPath =
Path.fromPortableString(serializationPath);
- if (!resourceToSerialize.getPath().equals("/")
- && serializationPath.endsWith(".content.xml")) {
- String name = PathUtil.getName(path);
- if (name.indexOf(':') != -1) {
- name = '_' + name.replace(':', '_');
- }
- name += ".xml";
- serializationPath =
serializationPath.replace(".content.xml", name);
-
- // some of the logic should be reused from
AbstractArtifact
- serializationPathPath =
Path.fromPortableString(serializationPath)
- .removeFirstSegments(1);
- }
-
- createFile(project,
projectRelativePath.append(serializationPathPath),
- out.getBytes("UTF-8"));
+ if (serializationData.hasContents()) {
+ createFile(project, fileOrFolderPath,
serializationData.getContents());
}
break;
}
@@ -264,7 +235,7 @@ public class ImportRepositoryContentActi
System.out.println("Children: " + resource.getChildren());
- if (serializationKind == SerializationKind.METADATA_FULL) {
+ if (serializationData.getSerializationKind() ==
SerializationKind.METADATA_FULL) {
return;
}
@@ -293,13 +264,10 @@ public class ImportRepositoryContentActi
return result.get();
}
- private void importFile(Repository repository, String path, IProject
project, IPath destinationPath)
- throws RepositoryException, CoreException {
-
- System.out.println("importFile: " + path + " -> " + destinationPath);
+ private void importFile(IProject project, IPath destinationPath, byte[]
content)
+ throws CoreException {
- byte[] node = executeCommand(repository.newGetNodeCommand(path));
- createFile(project, destinationPath.append(path), node);
+ createFile(project, destinationPath, content);
}
private void createFolder(IProject project, IPath destinationPath) throws
CoreException {
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=1522921&r1=1522920&r2=1522921&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
Fri Sep 13 13:33:44 2013
@@ -16,10 +16,10 @@
*/
package org.apache.sling.ide.impl.resource.serialization;
+import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
-import java.io.StringWriter;
import java.util.HashMap;
import java.util.Map;
@@ -34,8 +34,8 @@ import javax.xml.transform.sax.SAXTransf
import javax.xml.transform.sax.TransformerHandler;
import javax.xml.transform.stream.StreamResult;
+import org.apache.sling.ide.serialization.SerializationData;
import org.apache.sling.ide.serialization.SerializationException;
-import org.apache.sling.ide.serialization.SerializationKind;
import org.apache.sling.ide.serialization.SerializationManager;
import org.apache.sling.ide.transport.RepositoryInfo;
import org.apache.sling.ide.transport.ResourceProxy;
@@ -100,7 +100,8 @@ public class SimpleXmlSerializationManag
}
@Override
- public String buildSerializationData(File contentSyncRoot, ResourceProxy
resource, RepositoryInfo repositoryInfo)
+ public SerializationData buildSerializationData(File contentSyncRoot,
ResourceProxy resource,
+ RepositoryInfo repositoryInfo)
throws SerializationException {
if (resource == null) {
@@ -116,8 +117,8 @@ public class SimpleXmlSerializationManag
try {
SAXTransformerFactory f = (SAXTransformerFactory)
SAXTransformerFactory.newInstance();
- StringWriter sw = new StringWriter();
- StreamResult sr = new StreamResult(sw);
+ ByteArrayOutputStream result = new ByteArrayOutputStream();
+ StreamResult sr = new StreamResult(result);
TransformerHandler handler = f.newTransformerHandler();
Transformer t = handler.getTransformer();
@@ -145,7 +146,8 @@ public class SimpleXmlSerializationManag
endElement(handler, TAG_RESOURCE);
handler.endDocument();
- return sw.toString();
+ // TODO - also add the serialization type
+ return new SerializationData(resource.getPath(), CONTENT_XML,
result.toByteArray(), null);
} catch (TransformerConfigurationException e) {
// TODO proper exception handling
throw new RuntimeException(e);
@@ -180,12 +182,6 @@ public class SimpleXmlSerializationManag
public void init(org.apache.sling.ide.transport.Repository repository,
File contentSyncRoot) throws SerializationException {
}
- @Override
- public SerializationKind getSerializationKind(String primaryType) {
- // TODO - implement
- throw new UnsupportedOperationException("Not implemented");
- }
-
static class SerializationDataHandler extends DefaultHandler {
private Map<String, Object> result;
private String propertyName;
Modified:
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=1522921&r1=1522920&r2=1522921&view=diff
==============================================================================
--- sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/META-INF/MANIFEST.MF
(original)
+++ sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/META-INF/MANIFEST.MF
Fri Sep 13 13:33:44 2013
@@ -19,5 +19,6 @@ Import-Package: javax.jcr,
org.apache.sling.ide.filter,
org.apache.sling.ide.serialization,
org.apache.sling.ide.transport,
+ org.apache.sling.ide.util,
org.osgi.service.event;version="1.3.0"
Service-Component: OSGI-INF/*.xml
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=1522921&r1=1522920&r2=1522921&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
Fri Sep 13 13:33:44 2013
@@ -16,6 +16,8 @@
*/
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;
@@ -54,6 +56,7 @@ import org.apache.jackrabbit.vault.util.
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.SerializationException;
import org.apache.sling.ide.serialization.SerializationKind;
import org.apache.sling.ide.serialization.SerializationKindManager;
@@ -171,11 +174,12 @@ public class VltSerializationManager imp
this.fsLocator = null;
}
- // TODO - the return type could look like (byte[] contents, String
nameHint, SerializationKind sk)
-
@Override
- public String buildSerializationData(File contentSyncRoot, ResourceProxy
resource, RepositoryInfo repositoryInfo)
- throws SerializationException {
+ 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'
@@ -193,24 +197,41 @@ public class VltSerializationManager imp
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
- String platformPath =
PlatformNameFormat.getPlatformPath(resource.getPath()) + ".xml";
+ platformPath =
PlatformNameFormat.getPlatformPath(resource.getPath()) + ".xml";
vaultFile = fs.getFile(platformPath);
if (vaultFile == null) {
- // TODO proper logging ; discover if this is expected or
not
+ 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...
@@ -234,13 +255,13 @@ public class VltSerializationManager imp
boolean needsDir =
!MimeTypes.matches(aggregate.getNode().getName(), mimeType,
MimeTypes.APPLICATION_OCTET_STREAM);
if (!needsDir) {
- return null;
+ 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 null;
+ return SerializationData.empty(fileOrFolderPathHint,
serializationKind);
}
}
@@ -249,10 +270,9 @@ public class VltSerializationManager imp
ByteArrayOutputStream out = new ByteArrayOutputStream();
s.writeContent(out);
- String stringResult = out.toString("UTF-8");
- if (stringResult.isEmpty())
- return null;
- return stringResult;
+ byte[] result = out.toByteArray();
+
+ return new SerializationData(fileOrFolderPathHint, nameHint,
result, serializationKind);
} catch (RepositoryException e) {
throw new SerializationException(e);
@@ -290,9 +310,4 @@ public class VltSerializationManager imp
throw new IOException(e);
}
}
-
- @Override
- public SerializationKind getSerializationKind(String primaryType) {
- return skm.getSerializationKind(primaryType);
- }
}