From f89817cf129480d609f9105e8703f677abe9ae83 Mon Sep 17 00:00:00 2001 From: David Caruana Date: Fri, 9 Dec 2005 13:44:37 +0000 Subject: [PATCH] 1) Do not import copied from references 2) ACP zip file now contains content files with appropriate extension for easy viewing of content git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@2018 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- config/alfresco/action-services-context.xml | 3 ++ .../executer/ExporterActionExecuter.java | 18 ++++++++++- .../exporter/ACPExportPackageHandler.java | 27 +++++++++++++++-- .../exporter/FileExportPackageHandler.java | 25 ++++++++++++++-- .../repo/importer/view/NodeContext.java | 30 ++++++++++++++----- source/java/org/alfresco/tools/Export.java | 14 +++++---- 6 files changed, 97 insertions(+), 20 deletions(-) diff --git a/config/alfresco/action-services-context.xml b/config/alfresco/action-services-context.xml index 7550045a0d..08a116d4d3 100644 --- a/config/alfresco/action-services-context.xml +++ b/config/alfresco/action-services-context.xml @@ -288,6 +288,9 @@ + + + diff --git a/source/java/org/alfresco/repo/action/executer/ExporterActionExecuter.java b/source/java/org/alfresco/repo/action/executer/ExporterActionExecuter.java index c4f13c01fd..b5f0581c79 100644 --- a/source/java/org/alfresco/repo/action/executer/ExporterActionExecuter.java +++ b/source/java/org/alfresco/repo/action/executer/ExporterActionExecuter.java @@ -37,6 +37,7 @@ import org.alfresco.service.cmr.dictionary.DataTypeDefinition; import org.alfresco.service.cmr.repository.ChildAssociationRef; import org.alfresco.service.cmr.repository.ContentService; import org.alfresco.service.cmr.repository.ContentWriter; +import org.alfresco.service.cmr.repository.MimetypeService; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.repository.StoreRef; @@ -69,6 +70,11 @@ public class ExporterActionExecuter extends ActionExecuterAbstractBase */ private ExporterService exporterService; + /** + * The Mime type service + */ + private MimetypeService mimetypeService; + /** * The node service */ @@ -89,6 +95,16 @@ public class ExporterActionExecuter extends ActionExecuterAbstractBase this.exporterService = exporterService; } + /** + * Sets the MimetypeService to use + * + * @param mimetypeService + */ + public void setMimetypeService(MimetypeService mimetypeService) + { + this.mimetypeService = mimetypeService; + } + /** * Sets the NodeService to use * @@ -124,7 +140,7 @@ public class ExporterActionExecuter extends ActionExecuterAbstractBase // create a temporary file to hold the zip zipFile = TempFileProvider.createTempFile(TEMP_FILE_PREFIX, ACPExportPackageHandler.ACP_EXTENSION); ACPExportPackageHandler zipHandler = new ACPExportPackageHandler(new FileOutputStream(zipFile), - dataFile, contentDir); + dataFile, contentDir, mimetypeService); ExporterCrawlerParameters params = new ExporterCrawlerParameters(); boolean includeChildren = true; diff --git a/source/java/org/alfresco/repo/exporter/ACPExportPackageHandler.java b/source/java/org/alfresco/repo/exporter/ACPExportPackageHandler.java index 439d3fd785..45c8fad015 100644 --- a/source/java/org/alfresco/repo/exporter/ACPExportPackageHandler.java +++ b/source/java/org/alfresco/repo/exporter/ACPExportPackageHandler.java @@ -26,7 +26,9 @@ import java.io.OutputStream; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; +import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.service.cmr.repository.ContentData; +import org.alfresco.service.cmr.repository.MimetypeService; import org.alfresco.service.cmr.view.ExportPackageHandler; import org.alfresco.service.cmr.view.ExporterException; import org.alfresco.util.TempFileProvider; @@ -43,6 +45,7 @@ public class ACPExportPackageHandler /** ACP File Extension */ public final static String ACP_EXTENSION = "acp"; + protected MimetypeService mimetypeService; protected OutputStream outputStream; protected File dataFile; protected File contentDir; @@ -60,7 +63,7 @@ public class ACPExportPackageHandler * @param dataFile * @param contentDir */ - public ACPExportPackageHandler(File destDir, File zipFile, File dataFile, File contentDir, boolean overwrite) + public ACPExportPackageHandler(File destDir, File zipFile, File dataFile, File contentDir, boolean overwrite, MimetypeService mimetypeService) { try { @@ -86,6 +89,7 @@ public class ACPExportPackageHandler this.outputStream = new FileOutputStream(absZipFile); this.dataFile = dataFile; this.contentDir = contentDir; + this.mimetypeService = mimetypeService; } catch (FileNotFoundException e) { @@ -100,11 +104,12 @@ public class ACPExportPackageHandler * @param dataFile * @param contentDir */ - public ACPExportPackageHandler(OutputStream outputStream, File dataFile, File contentDir) + public ACPExportPackageHandler(OutputStream outputStream, File dataFile, File contentDir, MimetypeService mimetypeService) { this.outputStream = outputStream; this.dataFile = dataFile; this.contentDir = contentDir; + this.mimetypeService = mimetypeService; } /* (non-Javadoc) @@ -143,7 +148,23 @@ public class ACPExportPackageHandler { contentDirPath = contentDirPath.substring(0, contentDirPath.indexOf(".")); } - File file = new File(contentDirPath, "content" + iFileCnt++ + ".bin"); + String extension = "bin"; + if (mimetypeService != null) + { + String mimetype = contentData.getMimetype(); + if (mimetype != null && mimetype.length() > 0) + { + try + { + extension = mimetypeService.getExtension(mimetype); + } + catch(AlfrescoRuntimeException e) + { + // use default extension + } + } + } + File file = new File(contentDirPath, "content" + iFileCnt++ + "." + extension); try { diff --git a/source/java/org/alfresco/repo/exporter/FileExportPackageHandler.java b/source/java/org/alfresco/repo/exporter/FileExportPackageHandler.java index 1754e66e9d..046d54ca8d 100644 --- a/source/java/org/alfresco/repo/exporter/FileExportPackageHandler.java +++ b/source/java/org/alfresco/repo/exporter/FileExportPackageHandler.java @@ -23,7 +23,9 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.service.cmr.repository.ContentData; +import org.alfresco.service.cmr.repository.MimetypeService; import org.alfresco.service.cmr.view.ExportPackageHandler; import org.alfresco.service.cmr.view.ExporterException; import org.alfresco.util.TempFileProvider; @@ -37,6 +39,7 @@ import org.alfresco.util.TempFileProvider; public class FileExportPackageHandler implements ExportPackageHandler { + protected MimetypeService mimetypeService = null; protected File contentDir; protected File absContentDir; protected File absDataFile; @@ -50,13 +53,15 @@ public class FileExportPackageHandler * @param dataFile filename of data file (relative to destDir) * @param packageDir directory for content (relative to destDir) * @param overwrite force overwrite of existing package directory + * @param mimetypeService (optional) mimetype service */ - public FileExportPackageHandler(File destDir, File dataFile, File contentDir, boolean overwrite) + public FileExportPackageHandler(File destDir, File dataFile, File contentDir, boolean overwrite, MimetypeService mimetypeService) { this.contentDir = contentDir; this.absContentDir = new File(destDir, contentDir.getPath()); this.absDataFile = new File(destDir, dataFile.getPath()); this.overwrite = overwrite; + this.mimetypeService = mimetypeService; } /* (non-Javadoc) @@ -119,7 +124,23 @@ public class FileExportPackageHandler } // Create file in package directory to hold exported content - File outputFile = TempFileProvider.createTempFile("export", ".bin", absContentDir); + String extension = "bin"; + if (mimetypeService != null) + { + String mimetype = contentData.getMimetype(); + if (mimetype != null && mimetype.length() > 0) + { + try + { + extension = mimetypeService.getExtension(mimetype); + } + catch(AlfrescoRuntimeException e) + { + // use default extension + } + } + } + File outputFile = TempFileProvider.createTempFile("export", "." + extension, absContentDir); try { diff --git a/source/java/org/alfresco/repo/importer/view/NodeContext.java b/source/java/org/alfresco/repo/importer/view/NodeContext.java index 31bf3149c3..ac4d5d7676 100644 --- a/source/java/org/alfresco/repo/importer/view/NodeContext.java +++ b/source/java/org/alfresco/repo/importer/view/NodeContext.java @@ -137,16 +137,15 @@ public class NodeContext extends ElementContext */ public void addPropertyCollection(QName property) { - // Do not import properties of sys:referenceable or cm:versionable + // Do not import properties of sys:referenceable or cm:versionable or cm:copiedfrom // TODO: Make this configurable... PropertyDefinition propDef = getDictionaryService().getProperty(property); ClassDefinition classDef = (propDef == null) ? null : propDef.getContainerClass(); if (classDef != null) { - if (classDef.getName().equals(ContentModel.ASPECT_REFERENCEABLE) || - classDef.getName().equals(ContentModel.ASPECT_VERSIONABLE)) + if (!isImportableClass(classDef.getName())) { - return; + return; } } @@ -170,10 +169,9 @@ public class NodeContext extends ElementContext ClassDefinition classDef = (propDef == null) ? null : propDef.getContainerClass(); if (classDef != null) { - if (classDef.getName().equals(ContentModel.ASPECT_REFERENCEABLE) || - classDef.getName().equals(ContentModel.ASPECT_VERSIONABLE)) + if (!isImportableClass(classDef.getName())) { - return; + return; } } @@ -234,7 +232,10 @@ public class NodeContext extends ElementContext */ public void addAspect(AspectDefinition aspect) { - nodeAspects.put(aspect.getName(), aspect); + if (isImportableClass(aspect.getName())) + { + nodeAspects.put(aspect.getName(), aspect); + } } /* (non-Javadoc) @@ -328,6 +329,19 @@ public class NodeContext extends ElementContext return def; } + /** + * Determine if the provided class name is to be imported + * + * @param className class to check (type or aspect) + * @return true => import, false => ignore on import + */ + private boolean isImportableClass(QName className) + { + return !(className.equals(ContentModel.ASPECT_REFERENCEABLE) || + className.equals(ContentModel.ASPECT_COPIEDFROM) || + className.equals(ContentModel.ASPECT_VERSIONABLE)); + } + /* (non-Javadoc) * @see java.lang.Object#toString() */ diff --git a/source/java/org/alfresco/tools/Export.java b/source/java/org/alfresco/tools/Export.java index da6bb3b67e..ba8050b8c8 100644 --- a/source/java/org/alfresco/tools/Export.java +++ b/source/java/org/alfresco/tools/Export.java @@ -23,6 +23,7 @@ import java.util.Collection; import org.alfresco.repo.exporter.FileExportPackageHandler; import org.alfresco.repo.exporter.ACPExportPackageHandler; import org.alfresco.service.cmr.repository.ContentData; +import org.alfresco.service.cmr.repository.MimetypeService; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.StoreRef; import org.alfresco.service.cmr.view.ExportPackageHandler; @@ -212,16 +213,17 @@ public final class Export extends Tool void execute() throws ToolException { ExporterService exporter = getServiceRegistry().getExporterService(); + MimetypeService mimetypeService = getServiceRegistry().getMimetypeService(); // create export package handler ExportPackageHandler exportHandler = null; if (context.zipped) { - exportHandler = new ZipHandler(context.getDestDir(), context.getZipFile(), context.getPackageFile(), context.getPackageDir(), context.overwrite); + exportHandler = new ZipHandler(context.getDestDir(), context.getZipFile(), context.getPackageFile(), context.getPackageDir(), context.overwrite, mimetypeService); } else { - exportHandler = new FileHandler(context.getDestDir(), context.getPackageFile(), context.getPackageDir(), context.overwrite); + exportHandler = new FileHandler(context.getDestDir(), context.getPackageFile(), context.getPackageDir(), context.overwrite, mimetypeService); } // export Repository content to export package @@ -255,9 +257,9 @@ public final class Export extends Tool * @param contentDir * @param overwrite */ - public FileHandler(File destDir, File dataFile, File contentDir, boolean overwrite) + public FileHandler(File destDir, File dataFile, File contentDir, boolean overwrite, MimetypeService mimetypeService) { - super(destDir, dataFile, contentDir, overwrite); + super(destDir, dataFile, contentDir, overwrite, mimetypeService); } /** @@ -286,9 +288,9 @@ public final class Export extends Tool * @param dataFile * @param contentDir */ - public ZipHandler(File destDir, File zipFile, File dataFile, File contentDir, boolean overwrite) + public ZipHandler(File destDir, File zipFile, File dataFile, File contentDir, boolean overwrite, MimetypeService mimetypeService) { - super(destDir, zipFile, dataFile, contentDir, overwrite); + super(destDir, zipFile, dataFile, contentDir, overwrite, mimetypeService); } /**