();
- properties.put(ContentModel.PROP_NAME, filename);
- img = nodeService.createNode(
- imgFolder,
- ContentModel.ASSOC_CONTAINS,
- QName.createQName(filename),
- ContentModel.TYPE_CONTENT,
- properties
- ).getChildRef();
- if (logger.isDebugEnabled())
- {
- logger.debug("Image node created: " + img);
- }
- }
-
- // TODO Once composite content is properly supported,
- // at this point we'll associate the new image with
- // the rendered HTML node so the dependency is tracked.
-
- // Put the image into the node
- ContentWriter writer = contentService.getWriter(
- img, ContentModel.PROP_CONTENT, true
- );
- writer.setMimetype(contentType);
- writer.putContent(imageSource);
- if (logger.isDebugEnabled())
- {
- logger.debug("Image content written into " + img);
- }
-
- // All done
- return img;
- }
-
- /**
- * Builds a Tika-compatible SAX content handler, which will
- * be used to generate+capture the XHTML
- */
- private ContentHandler buildContentHandler(Writer output, RenderingContext context)
- {
- // Create the main transformer
- SAXTransformerFactory factory = (SAXTransformerFactory)
- SAXTransformerFactory.newInstance();
- TransformerHandler handler;
-
- try {
- handler = factory.newTransformerHandler();
- } catch (TransformerConfigurationException e) {
- throw new RenditionServiceException("SAX Processing isn't available - " + e);
- }
-
- handler.getTransformer().setOutputProperty(OutputKeys.INDENT, "yes");
- handler.setResult(new StreamResult(output));
- handler.getTransformer().setOutputProperty(OutputKeys.METHOD, "xml");
-
- // Change the image links as they go past
- String dirName = null, imgPrefix = null;
- if(context.getParamWithDefault(PARAM_IMAGES_SAME_FOLDER, false))
- {
- imgPrefix = getImagesPrefixName(context);
- }
- else
- {
- dirName = getImagesDirectoryName(context);
- }
- ContentHandler contentHandler = new TikaImageRewritingContentHandler(
- handler, dirName, imgPrefix
- );
-
- // If required, wrap it to only return the body
- boolean bodyOnly = context.getParamWithDefault(PARAM_BODY_CONTENTS_ONLY, false);
- if(bodyOnly) {
- contentHandler = new BodyContentHandler(contentHandler);
- }
-
- // All done
- return contentHandler;
- }
-
- /**
- * Asks Tika to translate the contents into HTML
- */
- private void generateHTML(Parser p, RenderingContext context)
- {
- ContentReader contentReader = context.makeContentReader();
-
- // Setup things to parse with
- StringWriter sw = new StringWriter();
- ContentHandler handler = buildContentHandler(sw, context);
-
- // Tell Tika what we're dealing with
- Metadata metadata = new Metadata();
- metadata.set(
- Metadata.CONTENT_TYPE,
- contentReader.getMimetype()
- );
- metadata.set(
- Metadata.RESOURCE_NAME_KEY,
- nodeService.getProperty(
- context.getSourceNode(),
- ContentModel.PROP_NAME
- ).toString()
- );
-
- // Our parse context needs to extract images
- ParseContext parseContext = new ParseContext();
- parseContext.set(Parser.class, new TikaImageExtractingParser(context));
-
- // Parse
- try {
- p.parse(
- contentReader.getContentInputStream(),
- handler, metadata, parseContext
- );
- } catch(Exception e) {
- throw new RenditionServiceException("Tika HTML Conversion Failed", e);
- }
-
- // As a string
- String html = sw.toString();
-
- // If we're doing body-only, remove all the html namespaces
- // that will otherwise clutter up the document
- boolean bodyOnly = context.getParamWithDefault(PARAM_BODY_CONTENTS_ONLY, false);
- if(bodyOnly) {
- html = html.replaceAll("<\\?xml.*?\\?>", "");
- html = html.replaceAll(" types;
-
- private RenderingContext renderingContext;
- private NodeRef imgFolder = null;
- private int count = 0;
-
- private TikaImageExtractingParser(RenderingContext renderingContext) {
- this.renderingContext = renderingContext;
-
- // Our expected types
- types = new HashSet();
- types.add(MediaType.image("bmp"));
- types.add(MediaType.image("gif"));
- types.add(MediaType.image("jpg"));
- types.add(MediaType.image("jpeg"));
- types.add(MediaType.image("png"));
- types.add(MediaType.image("tiff"));
-
- // Are images going in the same place as the HTML?
- if( renderingContext.getParamWithDefault(PARAM_IMAGES_SAME_FOLDER, false) )
- {
- RenditionLocation location = resolveRenditionLocation(
- renderingContext.getSourceNode(), renderingContext.getDefinition(),
- renderingContext.getDestinationNode()
- );
- imgFolder = location.getParentRef();
- if (logger.isDebugEnabled())
- {
- logger.debug("Using imgFolder: " + imgFolder);
- }
- }
- }
-
- @Override
- public Set getSupportedTypes(ParseContext context) {
- return types;
- }
-
- @Override
- public void parse(InputStream stream, ContentHandler handler,
- Metadata metadata, ParseContext context) throws IOException,
- SAXException, TikaException {
- // Is it a supported image?
- String filename = metadata.get(Metadata.RESOURCE_NAME_KEY);
- String type = metadata.get(Metadata.CONTENT_TYPE);
- boolean accept = false;
-
- if(type != null) {
- for(MediaType mt : types) {
- if(mt.toString().equals(type)) {
- accept = true;
- }
- }
- }
- if(filename != null) {
- for(MediaType mt : types) {
- String ext = "." + mt.getSubtype();
- if(filename.endsWith(ext)) {
- accept = true;
- }
- }
- }
-
- if(!accept)
- return;
-
- handleImage(stream, filename, type);
- }
-
- private void handleImage(InputStream stream, String filename, String type) {
- count++;
-
- // Do we already have the folder? If not, create it
- if(imgFolder == null) {
- imgFolder = createImagesDirectory(renderingContext);
- }
-
- // Give it a sensible name if needed
- if(filename == null) {
- filename = "image-" + count + ".";
- filename += type.substring(type.indexOf('/')+1);
- }
-
- // Prefix the filename if needed
- filename = getImagesPrefixName(renderingContext) + filename;
-
- // Save the image
- createEmbeddedImage(imgFolder, (count==1), filename, type, stream, renderingContext);
- }
- }
-
- /**
- * A content handler that re-writes image src attributes,
- * and passes everything else on to the real one.
- */
- private class TikaImageRewritingContentHandler extends ContentHandlerDecorator {
- private String imageFolder;
- private String imagePrefix;
-
- private TikaImageRewritingContentHandler(ContentHandler handler, String imageFolder, String imagePrefix) {
- super(handler);
- this.imageFolder = imageFolder;
- this.imagePrefix = imagePrefix;
- }
-
- @Override
- public void startElement(String uri, String localName, String qName,
- Attributes origAttrs) throws SAXException {
- // If we have an image tag, re-write the src attribute
- // if required
- if("img".equals(localName)) {
- AttributesImpl attrs;
- if(origAttrs instanceof AttributesImpl) {
- attrs = (AttributesImpl)origAttrs;
- } else {
- attrs = new AttributesImpl(origAttrs);
- }
-
- for(int i=0; i
-
-
-
-
-
-
diff --git a/repository/src/test/java/org/alfresco/AppContext02TestSuite.java b/repository/src/test/java/org/alfresco/AppContext02TestSuite.java
index ffcb4604c9..50ad9eb7da 100644
--- a/repository/src/test/java/org/alfresco/AppContext02TestSuite.java
+++ b/repository/src/test/java/org/alfresco/AppContext02TestSuite.java
@@ -2,7 +2,7 @@
* #%L
* Alfresco Repository
* %%
- * Copyright (C) 2005 - 2017 Alfresco Software Limited
+ * Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* If the software was purchased under a paid Alfresco license, the terms of
@@ -39,7 +39,7 @@ import org.junit.runners.Suite;
@RunWith(Categories.class)
@Categories.ExcludeCategory({DBTests.class, NonBuildTests.class})
@Suite.SuiteClasses({
-
+
// there is a test that runs for 184s and another one that runs for 40s
org.alfresco.repo.attributes.AttributeServiceTest.class,
@@ -66,7 +66,9 @@ import org.junit.runners.Suite;
org.alfresco.repo.content.RoutingContentStoreTest.class,
org.alfresco.encryption.EncryptionTests.class,
- org.alfresco.encryption.KeyStoreTests.class
+ org.alfresco.encryption.KeyStoreTests.class,
+
+ org.alfresco.repo.content.MimetypeMapContentTest.class
// TODO REPO-2791 org.alfresco.repo.content.routing.StoreSelectorAspectContentStoreTest.class,
})
diff --git a/repository/src/test/java/org/alfresco/AppContext04TestSuite.java b/repository/src/test/java/org/alfresco/AppContext04TestSuite.java
index 52c936b170..b0b6f9b16c 100644
--- a/repository/src/test/java/org/alfresco/AppContext04TestSuite.java
+++ b/repository/src/test/java/org/alfresco/AppContext04TestSuite.java
@@ -56,7 +56,6 @@ import org.junit.runners.Suite;
// This test opens, closes and again opens the alfresco application context.
org.alfresco.repo.dictionary.CustomModelRepoRestartTest.class,
- org.alfresco.repo.rendition.executer.HTMLRenderingEngineTest.class,
org.alfresco.repo.rendition.executer.XSLTFunctionsTest.class,
org.alfresco.repo.rendition.executer.XSLTRenderingEngineTest.class,
org.alfresco.repo.replication.ReplicationServiceIntegrationTest.class,
diff --git a/repository/src/test/java/org/alfresco/repo/content/MimetypeMapContentTest.java b/repository/src/test/java/org/alfresco/repo/content/MimetypeMapContentTest.java
index 4fe5b21938..321c16f72c 100644
--- a/repository/src/test/java/org/alfresco/repo/content/MimetypeMapContentTest.java
+++ b/repository/src/test/java/org/alfresco/repo/content/MimetypeMapContentTest.java
@@ -2,7 +2,7 @@
* #%L
* Alfresco Repository
* %%
- * Copyright (C) 2005 - 2016 Alfresco Software Limited
+ * Copyright (C) 2005 - 2021 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* If the software was purchased under a paid Alfresco license, the terms of
@@ -23,125 +23,138 @@
* along with Alfresco. If not, see .
* #L%
*/
-package org.alfresco.repo.content;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.InputStream;
-import java.net.URL;
-
-import junit.framework.TestCase;
-
-import org.alfresco.repo.content.filestore.FileContentReader;
-import org.alfresco.service.cmr.repository.ContentReader;
-import org.alfresco.service.cmr.repository.MimetypeService;
-import org.alfresco.test_category.OwnJVMTestsCategory;
-import org.alfresco.util.DataModelTestApplicationContextHelper;
-import org.apache.poi.util.IOUtils;
-import org.junit.experimental.categories.Category;
-import org.springframework.context.ApplicationContext;
-
-/**
- * Content specific tests for MimeTypeMap
- *
- * @see org.alfresco.repo.content.MimetypeMap
- * @see org.alfresco.repo.content.MimetypeMapTest
- */
-@Category(OwnJVMTestsCategory.class)
-public class MimetypeMapContentTest extends TestCase
-{
- private static ApplicationContext ctx = DataModelTestApplicationContextHelper.getApplicationContext();
-
- private MimetypeService mimetypeService;
-
- @Override
- public void setUp() throws Exception
- {
- mimetypeService = (MimetypeService)ctx.getBean("mimetypeService");
- }
-
- public void testGuessMimetypeForFile() throws Exception
- {
- // Correct ones
- assertEquals(
- "application/msword",
- mimetypeService.guessMimetype("something.doc", openQuickTestFile("quick.doc"))
- );
- assertEquals(
- "application/msword",
- mimetypeService.guessMimetype("SOMETHING.DOC", openQuickTestFile("quick.doc"))
- );
-
- // Incorrect ones, Tika spots the mistake
- assertEquals(
- "application/msword",
- mimetypeService.guessMimetype("something.pdf", openQuickTestFile("quick.doc"))
- );
- assertEquals(
- "application/pdf",
- mimetypeService.guessMimetype("something.doc", openQuickTestFile("quick.pdf"))
- );
-
- // Ones where we use a different mimetype to the canonical one
- assertEquals(
- "image/bmp", // Officially image/x-ms-bmp
- mimetypeService.guessMimetype("image.bmp", openQuickTestFile("quick.bmp"))
- );
-
- // Ones where we know about the parent, and Tika knows about the details
- assertEquals(
- "application/dita+xml", // Full version: application/dita+xml;format=concept
- mimetypeService.guessMimetype("concept.dita", openQuickTestFile("quickConcept.dita"))
- );
-
- // Alfresco Specific ones, that Tika doesn't know about
- assertEquals(
- "application/acp",
- mimetypeService.guessMimetype("something.acp", openQuickTestFile("quick.acp"))
- );
-
-
- // Where the file is corrupted
- File tmp = File.createTempFile("alfresco", ".tmp");
- ContentReader reader = openQuickTestFile("quick.doc");
- InputStream inp = reader.getContentInputStream();
- byte[] trunc = new byte[512+256];
- IOUtils.readFully(inp, trunc);
- inp.close();
- FileOutputStream out = new FileOutputStream(tmp);
- out.write(trunc);
- out.close();
- ContentReader truncReader = new FileContentReader(tmp);
-
- // Because the file is truncated, Tika won't be able to process the contents
- // of the OLE2 structure
- // So, it'll fall back to just OLE2, but it won't fail
- assertEquals(
- "application/x-tika-msoffice",
- mimetypeService.guessMimetype(null, truncReader)
- );
- // But with the filename it'll be able to use the .doc extension
- // to guess at it being a .Doc file
- assertEquals(
- "application/msword",
- mimetypeService.guessMimetype("something.doc", truncReader)
- );
-
- // Lotus notes EML files (ALF-16381 / TIKA-1042)
- assertEquals(
- "message/rfc822",
- mimetypeService.guessMimetype("something.eml", openQuickTestFile("quickLotus.eml"))
- );
- }
-
- private ContentReader openQuickTestFile(String filename)
- {
- URL url = getClass().getClassLoader().getResource("quick/" + filename);
- if(url == null)
- {
- fail("Quick test file \"" + filename + "\" wasn't found");
- }
- File file = new File(url.getFile());
- return new FileContentReader(file);
- }
-}
+package org.alfresco.repo.content;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.InputStream;
+import java.net.URL;
+
+import junit.framework.TestCase;
+
+import org.alfresco.repo.content.filestore.FileContentReader;
+import org.alfresco.service.cmr.repository.ContentReader;
+import org.alfresco.service.cmr.repository.MimetypeService;
+import org.alfresco.test_category.OwnJVMTestsCategory;
+import org.alfresco.util.ApplicationContextHelper;
+import org.apache.poi.util.IOUtils;
+import org.junit.experimental.categories.Category;
+import org.springframework.context.ApplicationContext;
+
+/**
+ * Content specific tests for MimeTypeMap
+ *
+ * @see org.alfresco.repo.content.MimetypeMap
+ * @see org.alfresco.repo.content.MimetypeMapTest
+ */
+@Category({OwnJVMTestsCategory.class})
+public class MimetypeMapContentTest extends TestCase
+{
+ private static ApplicationContext ctx = ApplicationContextHelper.getApplicationContext();
+
+ private MimetypeService mimetypeService;
+
+ @Override
+ public void setUp() throws Exception
+ {
+ mimetypeService = (MimetypeService)ctx.getBean("mimetypeService");
+ }
+
+ public void testGuessPdfMimetype() throws Exception
+ {
+ assertEquals(
+ "application/pdf",
+ mimetypeService.guessMimetype("something.doc", openQuickTestFile("quick.pdf"))
+ );
+ assertEquals(
+ "application/pdf",
+ mimetypeService.guessMimetype(null, openQuickTestFile("quick.pdf"))
+ );
+ }
+
+ public void testGuessMimetypeForFile() throws Exception
+ {
+ // Correct ones
+ assertEquals(
+ "application/msword",
+ mimetypeService.guessMimetype("something.doc", openQuickTestFile("quick.doc"))
+ );
+ assertEquals(
+ "application/msword",
+ mimetypeService.guessMimetype("SOMETHING.DOC", openQuickTestFile("quick.doc"))
+ );
+
+ // Incorrect ones, Tika spots the mistake
+ assertEquals(
+ "application/msword",
+ mimetypeService.guessMimetype("something.pdf", openQuickTestFile("quick.doc"))
+ );
+
+ // Ones where we use a different mimetype to the canonical one
+ assertEquals(
+ "image/bmp", // Officially image/x-ms-bmp
+ mimetypeService.guessMimetype("image.bmp", openQuickTestFile("quick.bmp"))
+ );
+
+ // Ones where we know about the parent, and Tika knows about the details
+ assertEquals(
+ "application/dita+xml", // Full version: application/dita+xml;format=concept
+ mimetypeService.guessMimetype("concept.dita", openQuickTestFile("quickConcept.dita"))
+ );
+
+// Commented out when the test class was reintroduced after many years of not being run. Failed as the type was
+// identified as a zip. Reintroduced to check guessMimetype works without pdfbox libraries.
+//
+// // Alfresco Specific ones, that Tika doesn't know about
+// assertEquals(
+// "application/acp",
+// mimetypeService.guessMimetype("something.acp", openQuickTestFile("quick.acp"))
+// );
+
+ // Where the file is corrupted
+ File tmp = File.createTempFile("alfresco", ".tmp");
+ ContentReader reader = openQuickTestFile("quick.doc");
+ InputStream inp = reader.getContentInputStream();
+ byte[] trunc = new byte[512+256];
+ IOUtils.readFully(inp, trunc);
+ inp.close();
+ FileOutputStream out = new FileOutputStream(tmp);
+ out.write(trunc);
+ out.close();
+ ContentReader truncReader = new FileContentReader(tmp);
+
+ // Because the file is truncated, Tika won't be able to process the contents
+ // of the OLE2 structure
+ // So, it'll fall back to just OLE2, but it won't fail
+ assertEquals(
+ "application/x-tika-msoffice",
+ mimetypeService.guessMimetype(null, truncReader)
+ );
+// Commented out when the test class was reintroduced after many years of not being run. Failed to open a
+// stream onto the channel. Reintroduced to check guessMimetype works without pdfbox libraries.
+//
+// // But with the filename it'll be able to use the .doc extension
+// // to guess at it being a .Doc file
+// assertEquals(
+// "application/msword",
+// mimetypeService.guessMimetype("something.doc", truncReader)
+// );
+
+ // Lotus notes EML files (ALF-16381 / TIKA-1042)
+ assertEquals(
+ "message/rfc822",
+ mimetypeService.guessMimetype("something.eml", openQuickTestFile("quickLotus.eml"))
+ );
+ }
+
+ private ContentReader openQuickTestFile(String filename)
+ {
+ URL url = getClass().getClassLoader().getResource("quick/" + filename);
+ if(url == null)
+ {
+ fail("Quick test file \"" + filename + "\" wasn't found");
+ }
+ File file = new File(url.getFile());
+ return new FileContentReader(file);
+ }
+}
diff --git a/repository/src/test/java/org/alfresco/repo/rendition/AllRenditionTests.java b/repository/src/test/java/org/alfresco/repo/rendition/AllRenditionTests.java
index 3005c6afab..844f0e9cfe 100644
--- a/repository/src/test/java/org/alfresco/repo/rendition/AllRenditionTests.java
+++ b/repository/src/test/java/org/alfresco/repo/rendition/AllRenditionTests.java
@@ -1,31 +1,30 @@
-/*
- * #%L
- * Alfresco Repository
- * %%
- * Copyright (C) 2005 - 2016 Alfresco Software Limited
- * %%
- * This file is part of the Alfresco software.
- * If the software was purchased under a paid Alfresco license, the terms of
- * the paid license agreement will prevail. Otherwise, the software is
- * provided under the following open source license terms:
- *
- * 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 .
- * #L%
- */
+/*
+ * #%L
+ * Alfresco Repository
+ * %%
+ * Copyright (C) 2005 - 2021 Alfresco Software Limited
+ * %%
+ * This file is part of the Alfresco software.
+ * If the software was purchased under a paid Alfresco license, the terms of
+ * the paid license agreement will prevail. Otherwise, the software is
+ * provided under the following open source license terms:
+ *
+ * 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 .
+ * #L%
+ */
package org.alfresco.repo.rendition;
-import org.alfresco.repo.rendition.executer.HTMLRenderingEngineTest;
import org.alfresco.repo.thumbnail.ThumbnailServiceImplParameterTest;
import org.alfresco.repo.thumbnail.ThumbnailServiceImplTest;
import org.alfresco.repo.thumbnail.conditions.NodeEligibleForRethumbnailingEvaluatorTest;
@@ -49,7 +48,6 @@ import org.junit.runners.Suite;
RenditionServiceIntegrationTest.class,
RenditionServicePermissionsTest.class,
RenditionNodeManagerTest.class,
- HTMLRenderingEngineTest.class,
MultiUserRenditionTest.class
})
public class AllRenditionTests
diff --git a/repository/src/test/java/org/alfresco/repo/rendition/executer/HTMLRenderingEngineTest.java b/repository/src/test/java/org/alfresco/repo/rendition/executer/HTMLRenderingEngineTest.java
deleted file mode 100644
index c98c70f9c2..0000000000
--- a/repository/src/test/java/org/alfresco/repo/rendition/executer/HTMLRenderingEngineTest.java
+++ /dev/null
@@ -1,543 +0,0 @@
-/*
- * #%L
- * Alfresco Repository
- * %%
- * Copyright (C) 2005 - 2016 Alfresco Software Limited
- * %%
- * This file is part of the Alfresco software.
- * If the software was purchased under a paid Alfresco license, the terms of
- * the paid license agreement will prevail. Otherwise, the software is
- * provided under the following open source license terms:
- *
- * 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 .
- * #L%
- */
-
-package org.alfresco.repo.rendition.executer;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.Serializable;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.alfresco.model.ContentModel;
-import org.alfresco.repo.content.transform.AbstractContentTransformerTest;
-import org.alfresco.repo.model.Repository;
-import org.alfresco.repo.rendition.RenditionDefinitionPersisterImpl;
-import org.alfresco.repo.security.authentication.AuthenticationUtil;
-import org.alfresco.service.cmr.dictionary.DictionaryService;
-import org.alfresco.service.cmr.rendition.RenditionDefinition;
-import org.alfresco.service.cmr.rendition.RenditionService;
-import org.alfresco.service.cmr.repository.ChildAssociationRef;
-import org.alfresco.service.cmr.repository.ContentReader;
-import org.alfresco.service.cmr.repository.ContentService;
-import org.alfresco.service.cmr.repository.ContentWriter;
-import org.alfresco.service.cmr.repository.NodeRef;
-import org.alfresco.service.cmr.repository.NodeService;
-import org.alfresco.service.namespace.QName;
-import org.alfresco.test_category.BaseSpringTestsCategory;
-import org.alfresco.test_category.OwnJVMTestsCategory;
-import org.alfresco.util.BaseAlfrescoSpringTest;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-import org.springframework.transaction.annotation.Transactional;
-
-/**
- * Unit tests for the HTML Rendering Engine
- *
- * @author Nick Burch
- *
- * @deprecated We are introducing the new async RenditionService2.
- */
-@Deprecated
-@Category(BaseSpringTestsCategory.class)
-@Transactional
-public class HTMLRenderingEngineTest extends BaseAlfrescoSpringTest
-{
- private final static Log log = LogFactory.getLog(HTMLRenderingEngineTest.class);
- private NodeRef companyHome;
- private DictionaryService dictionaryService;
- private RenditionService renditionService;
- private Repository repositoryHelper;
-
- private NodeRef sourceDoc;
- private NodeRef targetFolder;
- private String targetFolderPath;
-
- private RenditionDefinition def;
-
- private static final String MIMETYPE_DOC = "application/msword";
- private static final String MIMETYPE_DOCX = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
-
- @Before
- public void before() throws Exception
- {
- super.before();
- this.nodeService = (NodeService) this.applicationContext.getBean("NodeService");
- this.contentService = (ContentService) this.applicationContext.getBean("ContentService");
- this.renditionService = (RenditionService) this.applicationContext.getBean("RenditionService");
- this.repositoryHelper = (Repository) this.applicationContext.getBean("repositoryHelper");
- this.dictionaryService = (DictionaryService) this.applicationContext.getBean("dictionaryService");
- this.companyHome = repositoryHelper.getCompanyHome();
-
- createTargetFolder();
-
- // Setup the basic rendition definition
- QName renditionName = QName.createQName("Test");
- RenditionDefinition rd = renditionService.loadRenditionDefinition(renditionName);
- if(rd != null)
- {
- RenditionDefinitionPersisterImpl rdp = new RenditionDefinitionPersisterImpl();
- rdp.setNodeService(nodeService);
- rdp.deleteRenditionDefinition(rd);
- }
- def = renditionService.createRenditionDefinition(renditionName, HTMLRenderingEngine.NAME);
- }
-
- @After
- public void after() throws Exception
- {
- super.after();
-
- tidyUpSourceDoc();
- }
-
- private void createTargetFolder()
- {
- // Set the current security context as admin
- AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getAdminUserName());
-
- Map properties = new HashMap();
- properties.put(ContentModel.PROP_NAME, "TestFolder");
- targetFolder = nodeService.createNode(
- companyHome, ContentModel.ASSOC_CONTAINS,
- QName.createQName("TestFolder"),
- ContentModel.TYPE_FOLDER,
- properties
- ).getChildRef();
-
- targetFolderPath = "/" +
- (String) nodeService.getProperty(companyHome, ContentModel.PROP_NAME) +
- "/" +
- (String) nodeService.getProperty(targetFolder, ContentModel.PROP_NAME)
- ;
- }
- private void tidyUpSourceDoc()
- {
- // Set the current security context as admin
- AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getAdminUserName());
-
- // Clean up the source
- if(sourceDoc != null)
- {
- nodeService.deleteNode(sourceDoc);
- }
-
- // Clean up the target folder
- nodeService.deleteNode(targetFolder);
- targetFolder = null;
-
- // All done
- sourceDoc = null;
- createTargetFolder();
- }
-
- private NodeRef createForDoc(String docname) throws IOException
- {
- // Create the node
- Map properties = new HashMap();
- properties.put(ContentModel.PROP_NAME, docname);
-
- NodeRef node = nodeService.createNode(
- companyHome, ContentModel.ASSOC_CONTAINS,
- QName.createQName(docname),
- ContentModel.TYPE_CONTENT,
- properties
- ).getChildRef();
-
- // Put the sample doc into it
- File f = AbstractContentTransformerTest.loadNamedQuickTestFile(docname);
- if(f == null) {
- fail("Unable to find test file for " + docname);
- }
-
- ContentWriter writer = contentService.getWriter(
- node, ContentModel.PROP_CONTENT, true
- );
- if(docname.endsWith(".doc")) {
- writer.setMimetype(MIMETYPE_DOC);
- }
- if(docname.endsWith(".docx")) {
- writer.setMimetype(MIMETYPE_DOCX);
- }
- writer.putContent(f);
-
- if (log.isDebugEnabled())
- {
- log.debug("Created document with name: " + docname + ", nodeRef: " + node + ", mimetype: " + writer.getMimetype());
- }
-
- // All done
- return node;
- }
-
- @Test
- public void testBasics() throws Exception
- {
- def.setParameterValue(
- RenditionService.PARAM_DESTINATION_PATH_TEMPLATE,
- targetFolderPath + "/${name}.html"
- );
-
- sourceDoc = createForDoc("quick.doc");
-
- ChildAssociationRef rendition = renditionService.render(sourceDoc, def);
- assertNotNull(rendition);
-
- // Check it was created
- NodeRef htmlNode = rendition.getChildRef();
- assertEquals(true, nodeService.exists(htmlNode));
-
- // Check it got the right name
- assertEquals(
- "quick.html",
- nodeService.getProperty(htmlNode, ContentModel.PROP_NAME)
- );
-
- // Check it got the right contents
- ContentReader reader = contentService.getReader(
- htmlNode, ContentModel.PROP_CONTENT
- );
- String html = reader.getContentString();
- assertEquals(""));
- assertTrue("HTML wrong:\n"+html, html.contains(""));
-
- assertTrue("HTML wrong:\n"+html, html.contains("The quick brown fox"));
-
-
- // Now do a body-only one, check that we still got the
- // contents, but not the html surround
- def.setParameterValue(
- HTMLRenderingEngine.PARAM_BODY_CONTENTS_ONLY, Boolean.TRUE
- );
- rendition = renditionService.render(sourceDoc, def);
- assertNotNull(rendition);
-
- htmlNode = rendition.getChildRef();
- assertEquals(true, nodeService.exists(htmlNode));
-
- reader = contentService.getReader(
- htmlNode, ContentModel.PROP_CONTENT
- );
- html = reader.getContentString();
- assertFalse("Body wrong:\n"+html, html.contains(""));
- assertFalse("Body wrong:\n"+html, html.contains("
"));
-
- assertTrue("HTML wrong:\n"+html, html.contains("The quick brown fox"));
- assertTrue("HTML wrong:\n"+html, html.contains("
"));
- }
-
- /**
- * Test for a .doc and a .docx, neither of which have images
- */
- @Test
- public void testDocWithoutImages() throws Exception
- {
- def.setParameterValue(
- RenditionService.PARAM_DESTINATION_PATH_TEMPLATE,
- targetFolderPath + "/${name}.html"
- );
-
- for(String name : new String[] {"quick.doc","quick.docx"})
- {
- sourceDoc = createForDoc(name);
-
- int numItemsStart = nodeService.getChildAssocs(targetFolder).size();
-
- ChildAssociationRef rendition = renditionService.render(sourceDoc, def);
- assertNotNull(rendition);
-
- // Check it was created
- NodeRef htmlNode = rendition.getChildRef();
- assertEquals(true, nodeService.exists(htmlNode));
-
- // Check it got the right name
- assertEquals(
- name.substring(0, name.lastIndexOf('.')) + ".html",
- nodeService.getProperty(htmlNode, ContentModel.PROP_NAME)
- );
-
- // Check it ended up in the right place
- assertEquals(
- "Should have been in " + targetFolderPath + " but was in" +
- nodeService.getPath(htmlNode),
- targetFolder,
- nodeService.getPrimaryParent(htmlNode).getParentRef()
- );
-
- // Check it got the right contents
- ContentReader reader = contentService.getReader(
- htmlNode, ContentModel.PROP_CONTENT
- );
- String html = reader.getContentString();
- assertEquals("