Merged HEAD-BUG-FIX (5.1/Cloud) to HEAD (5.1/Cloud)

89429: ACE-2649: Merged V4.2-BUG-FIX (4.2.4) to HEAD-BUG-FIX (5.0/Cloud)
      89386: Merged DEV to 4.2-BUG-FIX (4.2.4)
         85587: MNT-11279: Docx Preview: FileName in the document header not previewing correctly
            - Keep original name during convertion.
            - Add unit test 


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@94626 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Alan Davis
2015-01-31 10:40:19 +00:00
parent 8828e5f284
commit b8709f0961
3 changed files with 68 additions and 6 deletions

View File

@@ -27,6 +27,7 @@ import java.io.InputStreamReader;
import java.io.OutputStreamWriter; import java.io.OutputStreamWriter;
import java.io.Reader; import java.io.Reader;
import java.io.Writer; import java.io.Writer;
import java.util.Date;
import com.sun.star.task.ErrorCodeIOException; import com.sun.star.task.ErrorCodeIOException;
import net.sf.jooreports.converter.DocumentFamily; import net.sf.jooreports.converter.DocumentFamily;
@@ -42,6 +43,7 @@ import org.alfresco.service.cmr.repository.ContentReader;
import org.alfresco.service.cmr.repository.ContentWriter; import org.alfresco.service.cmr.repository.ContentWriter;
import org.alfresco.service.cmr.repository.MimetypeService; import org.alfresco.service.cmr.repository.MimetypeService;
import org.alfresco.service.cmr.repository.TransformationOptions; import org.alfresco.service.cmr.repository.TransformationOptions;
import org.alfresco.util.GUID;
import org.alfresco.util.TempFileProvider; import org.alfresco.util.TempFileProvider;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.pdfbox.exceptions.COSVisitorException; import org.apache.pdfbox.exceptions.COSVisitorException;
@@ -336,13 +338,27 @@ public abstract class OOoContentTransformerHelper extends ContentTransformerHelp
" writer: " + writer); " writer: " + writer);
} }
// MNT-11279 fix. Because of the creating temp files for transformations the document's header with file name field
// could be changed to temporary file's name.
// Get the original file name which was on upload.
String origFileName = getOriginalFileName(options);
if (origFileName == null)
{
origFileName = "TemporaryFile-" + GUID.generate();
}
// Create a temp folder and put source and target files into it. (i.e. tempFromFile and tempToFile will be placed
// into such folder)
File tempSubfolder = new File(TempFileProvider.getTempDir() + File.separator +
origFileName + "-" + getTempFilePrefix() + "-"
+ getTempFilePrefix() + "-" + new Date().getTime());
tempSubfolder.mkdir();
// create temporary files to convert from and to // create temporary files to convert from and to
File tempFromFile = TempFileProvider.createTempFile( // The source file should have the name which was on upload
getTempFilePrefix()+"-source-", File tempFromFile = new File(tempSubfolder, origFileName );
"." + sourceExtension);
File tempToFile = TempFileProvider.createTempFile( File tempToFile = TempFileProvider.createTempFile(
getTempFilePrefix()+"-target-", origFileName + "-" + getTempFilePrefix()+"-target-",
"." + targetExtension); "." + targetExtension, tempSubfolder);
// There is a bug (reported in ALF-219) whereby JooConverter (the Alfresco Community Edition's 3rd party // There is a bug (reported in ALF-219) whereby JooConverter (the Alfresco Community Edition's 3rd party
// OpenOffice connector library) struggles to handle zero-size files being transformed to pdf. // OpenOffice connector library) struggles to handle zero-size files being transformed to pdf.
@@ -415,7 +431,12 @@ public abstract class OOoContentTransformerHelper extends ContentTransformerHelp
getLogger().debug("transformation successful"); getLogger().debug("transformation successful");
} }
} }
private String getOriginalFileName(TransformationOptions options)
{
return transformerDebug == null ? null : transformerDebug.getFileName(options, true, -1);
}
private boolean temporaryMsFile(TransformationOptions options) private boolean temporaryMsFile(TransformationOptions options)
{ {
String fileName = transformerDebug == null ? null : transformerDebug.getFileName(options, true, -1); String fileName = transformerDebug == null ? null : transformerDebug.getFileName(options, true, -1);

View File

@@ -134,6 +134,47 @@ public class OpenOfficeContentTransformerTest extends AbstractContentTransformer
transformer.transform(reader, writer); transformer.transform(reader, writer);
} }
/**
* MNT-11279. Transform docx document that contains head with value "documentName" to pdf.
*
*/
public void testDocxFieldToPdf()
{
if (!worker.isAvailable())
{
// no connection
return;
}
URL docxUrl = this.getClass().getClassLoader().getResource("misc/Test-Header-Office-2010.docx");
assertNotNull("URL was unexpectedly null", docxUrl);
File docxSourceFile = new File(docxUrl.getFile());
assertTrue("Test file does not exist.", docxSourceFile.exists());
File pdfTargetFile = TempFileProvider.createTempFile(getName() + "-target-", ".pdf");
ContentReader reader = new FileContentReader(docxSourceFile);
reader.setMimetype(MimetypeMap.MIMETYPE_WORD);
ContentWriter writer = new FileContentWriter(pdfTargetFile);
writer.setMimetype(MimetypeMap.MIMETYPE_PDF);
transformer.transform(reader, writer);
//Transform to txt for checking content
reader = new FileContentReader(pdfTargetFile);
reader.setMimetype(MimetypeMap.MIMETYPE_PDF);
File txtTargetFile = TempFileProvider.createTempFile(getName() + "-target-", ".txt");
writer = new FileContentWriter(txtTargetFile);
writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN);
transformer.transform(reader, writer);
String txtContent = writer.getReader().getContentString();
assertTrue("Transformed document must contains real document name", txtContent.contains("Document File Name: Test-Header-Office-2010Test-Header-Office-2010"));
}
/** /**
* Some transformations fail intermittently within OOo on our test server. * Some transformations fail intermittently within OOo on our test server.
* Rather than exclude these transformations from product code, where they * Rather than exclude these transformations from product code, where they