From 0aa018490724c67daaba105f9e23c7341798cc2f Mon Sep 17 00:00:00 2001 From: Neil McErlean Date: Thu, 10 Jun 2010 11:24:23 +0000 Subject: [PATCH] iDay. Indexing and WebPreviewing of Archive (currently zip) files. I've added 2 transformers: zip to text/plain and zip to pdf. This means that zip files will be indexable and therefore searchable. They will also now have webpreviews. In each transformer it is the names of the entries in the zip file that are output. Therefore the webpreview will show a listing of the zip contents (not recursive for zips in zips) and the searching will be against entry names within zips but not within the content of those entries. Also added a test class and a quick.zip file for testing. These changes required some extension points in AbstractContentTransformerTest to support the zip transformation testing. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@20580 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- config/alfresco/content-services-context.xml | 16 ++- config/alfresco/swf-transform-context.xml | 19 +++ .../AbstractContentTransformerTest.java | 32 ++++- .../transform/ArchiveContentTransformer.java | 123 ++++++++++++++++++ .../ArchiveContentTransformerTest.java | 66 ++++++++++ source/test-resources/quick/quick.zip | Bin 0 -> 47055 bytes 6 files changed, 252 insertions(+), 4 deletions(-) create mode 100644 source/java/org/alfresco/repo/content/transform/ArchiveContentTransformer.java create mode 100644 source/java/org/alfresco/repo/content/transform/ArchiveContentTransformerTest.java create mode 100644 source/test-resources/quick/quick.zip diff --git a/config/alfresco/content-services-context.xml b/config/alfresco/content-services-context.xml index 6b14146146..9aead1462d 100644 --- a/config/alfresco/content-services-context.xml +++ b/config/alfresco/content-services-context.xml @@ -165,7 +165,7 @@ - + @@ -471,4 +471,18 @@ + + + + + + application/zip + text/plain + + + + + diff --git a/config/alfresco/swf-transform-context.xml b/config/alfresco/swf-transform-context.xml index bc0a8f759c..436e26ca44 100644 --- a/config/alfresco/swf-transform-context.xml +++ b/config/alfresco/swf-transform-context.xml @@ -57,4 +57,23 @@ + + + + + + + + + + + + text/plain + application/pdf + + + + diff --git a/source/java/org/alfresco/repo/content/transform/AbstractContentTransformerTest.java b/source/java/org/alfresco/repo/content/transform/AbstractContentTransformerTest.java index 57fb2317b9..5e7dad0c6b 100644 --- a/source/java/org/alfresco/repo/content/transform/AbstractContentTransformerTest.java +++ b/source/java/org/alfresco/repo/content/transform/AbstractContentTransformerTest.java @@ -229,7 +229,7 @@ public abstract class AbstractContentTransformerTest extends TestCase transformer.transform(sourceReader.getReader(), targetWriter); // if the target format is any type of text, then it must contain the 'quick' phrase - if (targetMimetype.equals(MimetypeMap.MIMETYPE_TEXT_PLAIN)) + if (isQuickPhraseExpected(targetMimetype)) { ContentReader targetReader = targetWriter.getReader(); String checkContent = targetReader.getContentString(); @@ -239,7 +239,7 @@ public abstract class AbstractContentTransformerTest extends TestCase " target: " + targetWriter, checkContent.contains(QUICK_CONTENT)); } - else if (targetMimetype.startsWith(StringExtractingContentTransformer.PREFIX_TEXT)) + else if (isQuickWordsExpected(targetMimetype)) { ContentReader targetReader = targetWriter.getReader(); String checkContent = targetReader.getContentString(); @@ -280,7 +280,33 @@ public abstract class AbstractContentTransformerTest extends TestCase outputWriter.setEncoding("UTF8"); outputWriter.putContent(sb.toString()); } - + + /** + * This method is an extension point for enabling/disabling an assertion that the "quick brown fox" + * phrase is present in the transformed content. + * By default, the phrase is expected in all text/plain outputs. + * + * @param targetMimetype mimetype of the target of the transformation + * @return true if phrase is expected else false. + */ + protected boolean isQuickPhraseExpected(String targetMimetype) + { + return targetMimetype.equals(MimetypeMap.MIMETYPE_TEXT_PLAIN); + } + + /** + * This method is an extension point for enabling/disabling an assertion that the "quick brown fox" + * words are each present in the transformed content. + * By default, the words in the phrase are expected in all text/* outputs. + * + * @param targetMimetype mimetype of the target of the transformation + * @return true if each word is expected else false. + */ + protected boolean isQuickWordsExpected(String targetMimetype) + { + return targetMimetype.startsWith(StringExtractingContentTransformer.PREFIX_TEXT); + } + /** * This method is an extension point for excluding certain transformations in a subclass. * The default implementation returns false for all mime type pairs. diff --git a/source/java/org/alfresco/repo/content/transform/ArchiveContentTransformer.java b/source/java/org/alfresco/repo/content/transform/ArchiveContentTransformer.java new file mode 100644 index 0000000000..5396939664 --- /dev/null +++ b/source/java/org/alfresco/repo/content/transform/ArchiveContentTransformer.java @@ -0,0 +1,123 @@ +/* + * Copyright (C) 2005-2010 Alfresco Software Limited. + * + * This file is part of Alfresco + * + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Alfresco is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + */ +package org.alfresco.repo.content.transform; + +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; + +import org.alfresco.repo.content.MimetypeMap; +import org.alfresco.service.cmr.repository.ContentReader; +import org.alfresco.service.cmr.repository.ContentWriter; +import org.alfresco.service.cmr.repository.TransformationOptions; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * This class transforms archive files (currently only ZIPs) to text, which enables indexing + * and searching of archives as well as webpreviewing. + * The transformation simply lists the names of the entries within the zip file and does not consider their content. + * + * @author Neil McErlean + * @since Swift + */ +public class ArchiveContentTransformer extends AbstractContentTransformer2 +{ + /** + * The logger + */ + private static Log logger = LogFactory.getLog(ArchiveContentTransformer.class); + + /** + * Currently the only transformation performed is that of text extraction from PDF documents. + */ + public boolean isTransformable(String sourceMimetype, String targetMimetype, TransformationOptions options) + { + // TODO: Expand to other archive types e.g. tar. + if (!MimetypeMap.MIMETYPE_ZIP.equals(sourceMimetype) || + !MimetypeMap.MIMETYPE_TEXT_PLAIN.equals(targetMimetype)) + { + // Currently only support ZIP -> Text + return false; + } + else + { + return true; + } + } + + protected void transformInternal( + ContentReader reader, + ContentWriter writer, + TransformationOptions options) throws Exception + { + InputStream is = null; + try + { + is = reader.getContentInputStream(); + + List zipEntryNames = new ArrayList(); + ZipInputStream zin = new ZipInputStream(is); + + // Enumerate each entry + ZipEntry nextZipEntry = null; + while ((nextZipEntry = zin.getNextEntry()) != null) + { + String entryName = nextZipEntry.getName(); + zipEntryNames.add(entryName); + + // Currently we do not recurse into 'zips within zips'. + } + + if (logger.isDebugEnabled()) + { + StringBuilder msg = new StringBuilder(); + msg.append("Transformed ") + .append(zipEntryNames.size()) + .append(zipEntryNames.size() == 1 ? " zip entry" : " zip entries"); + logger.debug(msg.toString()); + } + + String text = createTextContentFrom(zipEntryNames); + + // dump it all to the writer + writer.putContent(text); + } + finally + { + if (is != null) + { + try { is.close(); } catch (Throwable e) {e.printStackTrace(); } + } + } + } + + private String createTextContentFrom(List zipEntryNames) + { + StringBuilder result = new StringBuilder(); + for (String entryName : zipEntryNames) + { + result.append(entryName) + .append('\n'); + } + return result.toString(); + } +} diff --git a/source/java/org/alfresco/repo/content/transform/ArchiveContentTransformerTest.java b/source/java/org/alfresco/repo/content/transform/ArchiveContentTransformerTest.java new file mode 100644 index 0000000000..0bfc128a3b --- /dev/null +++ b/source/java/org/alfresco/repo/content/transform/ArchiveContentTransformerTest.java @@ -0,0 +1,66 @@ +/* + * Copyright (C) 2005-2010 Alfresco Software Limited. + * + * This file is part of Alfresco + * + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Alfresco is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + */ +package org.alfresco.repo.content.transform; + +import org.alfresco.repo.content.MimetypeMap; +import org.alfresco.service.cmr.repository.TransformationOptions; + +/** + * Test class for ArchiveContentTransformer. + * + * @see org.alfresco.repo.content.transform.ArchiveContentTransformer + * + * @author Neil McErlean + */ +public class ArchiveContentTransformerTest extends AbstractContentTransformerTest +{ + private ContentTransformer transformer; + + @Override + public void setUp() throws Exception + { + super.setUp(); + + transformer = new ArchiveContentTransformer(); + } + + protected ContentTransformer getTransformer(String sourceMimetype, String targetMimetype) + { + return transformer; + } + + public void testIsTransformable() throws Exception + { + assertTrue(transformer.isTransformable(MimetypeMap.MIMETYPE_ZIP, MimetypeMap.MIMETYPE_TEXT_PLAIN, new TransformationOptions())); + } + + @Override + protected boolean isQuickPhraseExpected(String targetMimetype) + { + // The Zip transformer produces names of the entries, not their contents. + return false; + } + + @Override + protected boolean isQuickWordsExpected(String targetMimetype) + { + // The Zip transformer produces names of the entries, not their contents. + return false; + } +} diff --git a/source/test-resources/quick/quick.zip b/source/test-resources/quick/quick.zip new file mode 100644 index 0000000000000000000000000000000000000000..168109f4a3ca3ae8a2fb6a9711e1cfd0e5eb59d6 GIT binary patch literal 47055 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 literal 0 HcmV?d00001