Author: rombert Date: Fri Sep 13 13:33:29 2013 New Revision: 1522920 URL: http://svn.apache.org/r1522920 Log: SLING-2989 - [Tooling] integrate with vlt once available
Make the SerializationKindManager part of the api bundle and make the SerializationManager stateful. Added: sling/branches/tooling-ide-vlt/tooling/ide/api/src/org/apache/sling/ide/serialization/SerializationException.java - copied, changed from r1522919, sling/branches/tooling-ide-vlt/tooling/ide/api/src/org/apache/sling/ide/serialization/SerializationManager.java sling/branches/tooling-ide-vlt/tooling/ide/api/src/org/apache/sling/ide/serialization/SerializationKind.java (with props) sling/branches/tooling-ide-vlt/tooling/ide/api/src/org/apache/sling/ide/serialization/SerializationKindManager.java (contents, props changed) - copied, changed from r1522919, sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/internal/SerializationKindManager.java Removed: sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/internal/SerializationKindManager.java 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 Copied: sling/branches/tooling-ide-vlt/tooling/ide/api/src/org/apache/sling/ide/serialization/SerializationException.java (from r1522919, 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/SerializationException.java?p2=sling/branches/tooling-ide-vlt/tooling/ide/api/src/org/apache/sling/ide/serialization/SerializationException.java&p1=sling/branches/tooling-ide-vlt/tooling/ide/api/src/org/apache/sling/ide/serialization/SerializationManager.java&r1=1522919&r2=1522920&rev=1522920&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/SerializationException.java Fri Sep 13 13:33:29 2013 @@ -16,24 +16,24 @@ */ package org.apache.sling.ide.serialization; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.util.Map; +public class SerializationException extends Exception { -import org.apache.sling.ide.transport.RepositoryInfo; -import org.apache.sling.ide.transport.ResourceProxy; + private static final long serialVersionUID = 1L; -public interface SerializationManager { + public SerializationException() { + super(); + } - boolean isSerializationFile(String filePath); + public SerializationException(String message, Throwable cause) { + super(message, cause); + } - String getBaseResourcePath(String serializationFilePath); + public SerializationException(String message) { + super(message); + } - String getSerializationFilePath(String baseFilePath); + public SerializationException(Throwable cause) { + super(cause); + } - String buildSerializationData(File contentSyncRoot, ResourceProxy resource, RepositoryInfo repositoryInfo) - throws IOException; - - Map<String, Object> readSerializationData(InputStream source) throws IOException; } Added: sling/branches/tooling-ide-vlt/tooling/ide/api/src/org/apache/sling/ide/serialization/SerializationKind.java URL: http://svn.apache.org/viewvc/sling/branches/tooling-ide-vlt/tooling/ide/api/src/org/apache/sling/ide/serialization/SerializationKind.java?rev=1522920&view=auto ============================================================================== --- sling/branches/tooling-ide-vlt/tooling/ide/api/src/org/apache/sling/ide/serialization/SerializationKind.java (added) +++ sling/branches/tooling-ide-vlt/tooling/ide/api/src/org/apache/sling/ide/serialization/SerializationKind.java Fri Sep 13 13:33:29 2013 @@ -0,0 +1,9 @@ +package org.apache.sling.ide.serialization; + +/** + * The <tt>SerializationKind</tt> lists the various rules for serializing repository content on disk + * + */ +public enum SerializationKind { + FILE, FOLDER, METADATA_PARTIAL, METADATA_FULL; +} \ No newline at end of file Propchange: sling/branches/tooling-ide-vlt/tooling/ide/api/src/org/apache/sling/ide/serialization/SerializationKind.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: sling/branches/tooling-ide-vlt/tooling/ide/api/src/org/apache/sling/ide/serialization/SerializationKind.java ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Rev URL Copied: sling/branches/tooling-ide-vlt/tooling/ide/api/src/org/apache/sling/ide/serialization/SerializationKindManager.java (from r1522919, sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/internal/SerializationKindManager.java) URL: http://svn.apache.org/viewvc/sling/branches/tooling-ide-vlt/tooling/ide/api/src/org/apache/sling/ide/serialization/SerializationKindManager.java?p2=sling/branches/tooling-ide-vlt/tooling/ide/api/src/org/apache/sling/ide/serialization/SerializationKindManager.java&p1=sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/internal/SerializationKindManager.java&r1=1522919&r2=1522920&rev=1522920&view=diff ============================================================================== --- sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/internal/SerializationKindManager.java (original) +++ sling/branches/tooling-ide-vlt/tooling/ide/api/src/org/apache/sling/ide/serialization/SerializationKindManager.java Fri Sep 13 13:33:29 2013 @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.sling.ide.eclipse.ui.internal; +package org.apache.sling.ide.serialization; import java.util.HashMap; import java.util.HashSet; @@ -27,7 +27,11 @@ import org.apache.sling.ide.transport.Re import org.apache.sling.ide.transport.Result; import org.apache.sling.ide.util.PathUtil; -// TODO this should be made API after merging the vlt branch back to trunk +/** + * The <tt>SerializationKindManager</tt> is a helper class which implements common logic dealing with how to serialize + * repository contents on disk + * + */ public class SerializationKindManager { private final Set<String> fullMetadataNodeTypes = new HashSet<String>(); @@ -121,8 +125,4 @@ public class SerializationKindManager { return SerializationKind.METADATA_PARTIAL; } - - enum SerializationKind { - FILE, FOLDER, METADATA_PARTIAL, METADATA_FULL; - } } Propchange: sling/branches/tooling-ide-vlt/tooling/ide/api/src/org/apache/sling/ide/serialization/SerializationKindManager.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: sling/branches/tooling-ide-vlt/tooling/ide/api/src/org/apache/sling/ide/serialization/SerializationKindManager.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=1522920&r1=1522919&r2=1522920&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:29 2013 @@ -21,11 +21,16 @@ import java.io.IOException; import java.io.InputStream; import java.util.Map; +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); String getBaseResourcePath(String serializationFilePath); @@ -33,7 +38,9 @@ public interface SerializationManager { String getSerializationFilePath(String baseFilePath); String buildSerializationData(File contentSyncRoot, ResourceProxy resource, RepositoryInfo repositoryInfo) - throws IOException; + throws SerializationException; Map<String, Object> readSerializationData(InputStream source) throws IOException; + + SerializationKind getSerializationKind(String primaryType); } 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=1522920&r1=1522919&r2=1522920&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 Fri Sep 13 13:33:29 2013 @@ -26,6 +26,7 @@ import java.util.LinkedList; import java.util.List; import java.util.Map; + import org.apache.commons.httpclient.Credentials; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; @@ -40,11 +41,11 @@ 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.SerializationException; import org.apache.sling.ide.serialization.SerializationManager; import org.apache.sling.ide.transport.Command; import org.apache.sling.ide.transport.FileInfo; import org.apache.sling.ide.transport.Repository; -import org.apache.sling.ide.transport.RepositoryInfo; import org.apache.sling.ide.transport.ResourceProxy; import org.apache.sling.ide.transport.Result; import org.eclipse.core.resources.IFile; @@ -169,16 +170,27 @@ public class SlingLaunchpadBehaviour ext System.out.println(trace.toString()); - if (ProjectHelper.isBundleProject(module[0].getProject())) { - String serverMode = getServer().getMode(); - if (!serverMode.equals(ILaunchManager.DEBUG_MODE)) { - // in debug mode, we rely on the hotcode replacement feature of eclipse/jvm - // otherwise, for run and profile modes we explicitly publish the bundle module - // TODO: make this configurable as part of the server config - publishBundleModule(module, monitor); - } - } else if (ProjectHelper.isContentProject(module[0].getProject())) { - publishContentModule(kind, deltaKind, module, monitor); + try { + if (ProjectHelper.isBundleProject(module[0].getProject())) { + String serverMode = getServer().getMode(); + if (!serverMode.equals(ILaunchManager.DEBUG_MODE)) { + // in debug mode, we rely on the hotcode replacement feature of eclipse/jvm + // otherwise, for run and profile modes we explicitly publish the bundle module + // TODO: make this configurable as part of the server config + publishBundleModule(module, monitor); + } + } else if (ProjectHelper.isContentProject(module[0].getProject())) { + try { + publishContentModule(kind, deltaKind, module, monitor); + } catch (SerializationException e) { + throw new CoreException(new Status(IStatus.ERROR, Activator.PLUGIN_ID, "Serialization error for " + + trace.toString(), e)); + } + } + } finally { + if (serializationManager != null) { + serializationManager.destroy(); + } } } @@ -250,7 +262,7 @@ public class SlingLaunchpadBehaviour ext } private void publishContentModule(int kind, int deltaKind, - IModule[] module, IProgressMonitor monitor) throws CoreException { + IModule[] module, IProgressMonitor monitor) throws CoreException, SerializationException { if (runLaunchesIfExist(kind, deltaKind, module, monitor)) { return; @@ -391,16 +403,24 @@ public class SlingLaunchpadBehaviour ext throw new CoreException(new Status(Status.ERROR, "some.plugin", result.toString())); } - private Command<?> addFileCommand(Repository repository, IModuleResource resource) throws CoreException { + private Command<?> addFileCommand(Repository repository, IModuleResource resource) throws CoreException, + SerializationException { FileInfo info = createFileInfo(resource, repository); + IResource res = getResource(resource); + if (res == null) { + return null; + } + System.out.println("For " + resource + " build fileInfo " + info); if (info == null) { return null; } - if (serializationManager().isSerializationFile(info.getLocation())) { + File syncDirectoryAsFile = ProjectUtil.getSyncDirectoryFullPath(res.getProject()).toFile(); + + if (serializationManager(repository, syncDirectoryAsFile).isSerializationFile(info.getLocation())) { // TODO - we don't support files with different names, see the docview file ( ui.xml ) pathological case if (!info.getName().equals(".content.xml")) { @@ -409,7 +429,8 @@ public class SlingLaunchpadBehaviour ext try { IFile file = (IFile) resource.getAdapter(IFile.class); InputStream contents = file.getContents(); - Map<String, Object> serializationData = serializationManager().readSerializationData(contents); + Map<String, Object> serializationData = serializationManager(repository, syncDirectoryAsFile) + .readSerializationData(contents); return repository.newUpdateContentNodeCommand(info, serializationData); } catch (IOException e) { // TODO logging @@ -421,17 +442,10 @@ public class SlingLaunchpadBehaviour ext } } - private FileInfo createFileInfo(IModuleResource resource, Repository repository) { - - IResource file = (IFile) resource.getAdapter(IFile.class); - if (file == null) { - file = (IFolder) resource.getAdapter(IFolder.class); - } + private FileInfo createFileInfo(IModuleResource resource, Repository repository) throws SerializationException { + IResource file = getResource(resource); if (file == null) { - // Usually happens on server startup, it seems to be safe to ignore for now - System.out.println("Got null '" + IFile.class.getSimpleName() + "' and '" + IFolder.class.getSimpleName() - + "' for " + resource); return null; } @@ -450,7 +464,7 @@ public class SlingLaunchpadBehaviour ext if (filter != null) { FilterResult filterResult = getFilterResult(resource, filter, syncDirectoryAsFile, - repository.getRepositoryInfo()); + repository); if (filterResult == FilterResult.DENY) { return null; } @@ -465,20 +479,37 @@ public class SlingLaunchpadBehaviour ext return info; } + private IResource getResource(IModuleResource resource) { + + IResource file = (IFile) resource.getAdapter(IFile.class); + if (file == null) { + file = (IFolder) resource.getAdapter(IFolder.class); + } + + if (file == null) { + // Usually happens on server startup, it seems to be safe to ignore for now + System.out.println("Got null '" + IFile.class.getSimpleName() + "' and '" + IFolder.class.getSimpleName() + + "' for " + resource); + return null; + } + + return file; + } + private FilterResult getFilterResult(IModuleResource resource, Filter filter, File contentSyncRoot, - RepositoryInfo repositoryInfo) { + Repository repository) throws SerializationException { String filePath = resource.getModuleRelativePath().toOSString(); - if (serializationManager().isSerializationFile(filePath)) { + if (serializationManager(repository, contentSyncRoot).isSerializationFile(filePath)) { filePath = serializationManager.getBaseResourcePath(filePath); } System.out.println("Filtering by " + filePath + " for " + resource); - return filter.filter(contentSyncRoot, filePath, repositoryInfo); + return filter.filter(contentSyncRoot, filePath, repository.getRepositoryInfo()); } - private Command<?> removeFileCommand(Repository repository, IModuleResource resource) { + private Command<?> removeFileCommand(Repository repository, IModuleResource resource) throws SerializationException { FileInfo info = createFileInfo(resource, repository); @@ -517,9 +548,11 @@ public class SlingLaunchpadBehaviour ext return filter; } - private SerializationManager serializationManager() { + private SerializationManager serializationManager(Repository repository, File contentSyncRoot) + throws SerializationException { if (serializationManager == null) { serializationManager = Activator.getDefault().getSerializationManager(); + 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=1522920&r1=1522919&r2=1522920&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:29 2013 @@ -25,10 +25,12 @@ import java.lang.reflect.InvocationTarge import org.apache.sling.ide.eclipse.core.ISlingLaunchpadServer; import org.apache.sling.ide.eclipse.core.ProjectUtil; import org.apache.sling.ide.eclipse.core.ServerUtil; -import org.apache.sling.ide.eclipse.ui.internal.SerializationKindManager.SerializationKind; 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.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.Command; import org.apache.sling.ide.transport.Repository; @@ -136,7 +138,7 @@ public class ImportRepositoryContentActi // we create the root node and assume this is a folder createRoot(project, projectRelativePath, repositoryPath); - crawlChildrenAndImport(repository, filter, repositoryPath, project, projectRelativePath, skm); + crawlChildrenAndImport(repository, filter, repositoryPath, project, projectRelativePath); monitor.setTaskName("Import Complete"); monitor.worked(100); @@ -169,7 +171,6 @@ public class ImportRepositoryContentActi * @param project the project to create resources in * @param projectRelativePath the path, relative to the project root, where the resources should be * created - * @param skm * @param tracer * @throws JSONException * @throws RepositoryException @@ -178,8 +179,8 @@ public class ImportRepositoryContentActi */ // TODO: This probably should be pushed into the service layer private void crawlChildrenAndImport(Repository repository, Filter filter, String path, - IProject project, IPath projectRelativePath, SerializationKindManager skm) - throws RepositoryException, CoreException, IOException { + IProject project, IPath projectRelativePath) + throws RepositoryException, CoreException, IOException, SerializationException { File contentSyncRoot = ProjectUtil.getSyncDirectoryFullPath(project).toFile(); @@ -189,7 +190,7 @@ public class ImportRepositoryContentActi ResourceProxy resource = executeCommand(repository.newListChildrenNodeCommand(path)); String primaryType = (String) resource.getProperties().get(Repository.JCR_PRIMARY_TYPE); - SerializationKind serializationKind = skm.getSerializationKind(primaryType); + SerializationKind serializationKind = serializationManager.getSerializationKind(primaryType); System.out.println(primaryType + " -> " + serializationKind); // TODO we should know all node types for which to create files and folders @@ -282,7 +283,7 @@ public class ImportRepositoryContentActi } } - crawlChildrenAndImport(repository, filter, child.getPath(), project, projectRelativePath, skm); + crawlChildrenAndImport(repository, filter, child.getPath(), project, projectRelativePath); } } 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=1522920&r1=1522919&r2=1522920&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 Fri Sep 13 13:33:29 2013 @@ -18,7 +18,11 @@ 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; @@ -64,7 +68,7 @@ public class ImportWizard extends Wizard final IServer server = mainPage.getServer(); IPath destinationPath = mainPage.getResourcePath(); - + final IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(destinationPath.segments()[0]); final IPath projectRelativePath = destinationPath.removeFirstSegments(1); final String repositoryPath = mainPage.getRepositoryPath(); @@ -72,10 +76,21 @@ public class ImportWizard extends Wizard IRunnableWithProgress runnable = new IRunnableWithProgress() { @Override public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { - new ImportRepositoryContentAction(repositoryPath, server, filterFile, projectRelativePath, project, - serializationManager).run(monitor); + + try { + Repository repository = ServerUtil.getRepository(server, monitor); + serializationManager.init(repository, ProjectUtil.getSyncDirectoryFullPath(project).toFile()); + + new ImportRepositoryContentAction(repositoryPath, server, filterFile, projectRelativePath, project, + serializationManager).run(monitor); + } catch (SerializationException e) { + throw new InvocationTargetException(e); + } finally { + serializationManager.destroy(); + } } }; + try { getContainer().run(false, true, runnable); } catch (InvocationTargetException 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=1522920&r1=1522919&r2=1522920&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 Fri Sep 13 13:33:29 2013 @@ -12,6 +12,7 @@ import java.io.StringReader; import java.util.HashMap; import java.util.Map; +import org.apache.sling.ide.serialization.SerializationException; import org.apache.sling.ide.transport.ResourceProxy; import org.custommonkey.xmlunit.XMLUnit; import org.junit.Before; @@ -35,7 +36,7 @@ public class SimpleXmlSerializationManag } @Test - public void emptySerializedData() throws IOException, SAXException { + public void emptySerializedData() throws SerializationException, SAXException { String serializationData = sm.buildSerializationData(null, newResourceWithProperties(new HashMap<String, Object>()), null); @@ -51,7 +52,7 @@ public class SimpleXmlSerializationManag } @Test - public void nullSerializedData() throws IOException, SAXException { + public void nullSerializedData() throws SerializationException, SAXException { String serializationData = sm.buildSerializationData(null, null, null); @@ -59,7 +60,7 @@ public class SimpleXmlSerializationManag } @Test - public void stringSerializedData() throws IOException, SAXException { + public void stringSerializedData() throws SerializationException, SAXException, IOException { Map<String, Object> data = new HashMap<String, Object>(); data.put("jcr:createdBy", "admin"); @@ -72,7 +73,8 @@ public class SimpleXmlSerializationManag assertXmlOutputIsEqualTo(serializationData, methodName); } - private void assertXmlOutputIsEqualTo(String serializationData, String methodName) throws SAXException, IOException { + private void assertXmlOutputIsEqualTo(String serializationData, String methodName) throws SAXException, + SerializationException, IOException { InputStream doc = readSerializationDataFile(methodName); @@ -88,7 +90,7 @@ public class SimpleXmlSerializationManag } @Test - public void serializedDataIsEscaped() throws IOException, SAXException { + public void serializedDataIsEscaped() throws SerializationException, SAXException, IOException { Map<String, Object> data = new HashMap<String, Object>(); data.put("jcr:description", "<p class=\"active\">Welcome</p>"); 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=1522920&r1=1522919&r2=1522920&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:29 2013 @@ -34,6 +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.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; @@ -98,7 +100,8 @@ public class SimpleXmlSerializationManag } @Override - public String buildSerializationData(File contentSyncRoot, ResourceProxy resource, RepositoryInfo repositoryInfo) throws IOException { + public String buildSerializationData(File contentSyncRoot, ResourceProxy resource, RepositoryInfo repositoryInfo) + throws SerializationException { if (resource == null) { return null; @@ -165,6 +168,24 @@ public class SimpleXmlSerializationManag handler.endElement("", tagName, tagName); } + /* (non-Javadoc) + * @see org.apache.sling.ide.serialization.SerializationManager#destroy() + */ + 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 { + } + + @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/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=1522920&r1=1522919&r2=1522920&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:29 2013 @@ -54,6 +54,9 @@ 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.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; @@ -89,6 +92,24 @@ 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() { + + } @Override public boolean isSerializationFile(String filePath) { @@ -153,7 +174,8 @@ public class VltSerializationManager imp // TODO - the return type could look like (byte[] contents, String nameHint, SerializationKind sk) @Override - public String buildSerializationData(File contentSyncRoot, ResourceProxy resource, RepositoryInfo repositoryInfo) throws IOException { + public String buildSerializationData(File contentSyncRoot, ResourceProxy resource, RepositoryInfo repositoryInfo) + throws SerializationException { // 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' @@ -233,9 +255,11 @@ public class VltSerializationManager imp return stringResult; } catch (RepositoryException e) { - throw new RuntimeException(e); + throw new SerializationException(e); } catch (ConfigurationException e) { - throw new RuntimeException(e); + throw new SerializationException(e); + } catch (IOException e) { + throw new SerializationException(e); } finally { if (session != null) { session.logout(); @@ -265,6 +289,10 @@ public class VltSerializationManager imp // TODO proper error handling throw new IOException(e); } + } + @Override + public SerializationKind getSerializationKind(String primaryType) { + return skm.getSerializationKind(primaryType); } }