loadProperties = getLoadProperties(inputFile);
-
- XComponent document = null;
- try {
- document = loader.loadComponentFromURL(toUrl(inputFile), "_blank", 0, toUnoProperties(loadProperties));
- } catch (IllegalArgumentException illegalArgumentException) {
- throw new OfficeException("could not load document: " + inputFile.getName(), illegalArgumentException);
- } catch (ErrorCodeIOException errorCodeIOException) {
- throw new OfficeException("could not load document: " + inputFile.getName() + "; errorCode: " + errorCodeIOException.ErrCode, errorCodeIOException);
- } catch (IOException ioException) {
- throw new OfficeException("could not load document: " + inputFile.getName(), ioException);
- }
- if (document == null) {
- throw new OfficeException("could not load document: " + inputFile.getName());
- }
- return document;
- }
-
- /**
- * Override to modify the document after it has been loaded and before it gets
- * saved in the new format.
- *
- * Does nothing by default.
- *
- * @param document
- * @throws OfficeException
- */
- protected void modifyDocument(XComponent document) throws OfficeException {
- // noop
- }
-
- private void storeDocument(XComponent document, File outputFile) throws OfficeException {
- Map storeProperties = getStoreProperties(outputFile, document);
- if (storeProperties == null) {
- throw new OfficeException("unsupported conversion");
- }
- try {
- cast(XStorable.class, document).storeToURL(toUrl(outputFile), toUnoProperties(storeProperties));
- } catch (ErrorCodeIOException errorCodeIOException) {
- throw new OfficeException("could not store document: " + outputFile.getName() + "; errorCode: " + errorCodeIOException.ErrCode, errorCodeIOException);
- } catch (IOException ioException) {
- throw new OfficeException("could not store document: " + outputFile.getName(), ioException);
- }
- }
-
-}
diff --git a/office-plugin/src/main/java/org/artofsolving/jodconverter/OfficeDocumentConverter.java b/office-plugin/src/main/java/org/artofsolving/jodconverter/OfficeDocumentConverter.java
deleted file mode 100644
index b1cb702e..00000000
--- a/office-plugin/src/main/java/org/artofsolving/jodconverter/OfficeDocumentConverter.java
+++ /dev/null
@@ -1,83 +0,0 @@
-//
-// JODConverter - Java OpenDocument Converter
-// Copyright 2004-2012 Mirko Nasato and contributors
-//
-// JODConverter is Open Source software, you can redistribute it and/or
-// modify it under either (at your option) of the following licenses
-//
-// 1. The GNU Lesser General Public License v3 (or later)
-// -> http://www.gnu.org/licenses/lgpl-3.0.txt
-// 2. The Apache License, Version 2.0
-// -> http://www.apache.org/licenses/LICENSE-2.0.txt
-//
-package org.artofsolving.jodconverter;
-
-import com.sun.star.document.UpdateDocMode;
-import org.apache.commons.io.FilenameUtils;
-import org.artofsolving.jodconverter.document.DefaultDocumentFormatRegistry;
-import org.artofsolving.jodconverter.document.DocumentFormat;
-import org.artofsolving.jodconverter.document.DocumentFormatRegistry;
-import org.artofsolving.jodconverter.model.FileProperties;
-import org.artofsolving.jodconverter.office.OfficeException;
-import org.artofsolving.jodconverter.office.OfficeManager;
-
-import java.io.File;
-import java.util.HashMap;
-import java.util.Map;
-
-public class OfficeDocumentConverter {
-
- private final OfficeManager officeManager;
- private final DocumentFormatRegistry formatRegistry;
-
- private Map defaultLoadProperties = createDefaultLoadProperties();
-
- public OfficeDocumentConverter(OfficeManager officeManager) {
- this(officeManager, new DefaultDocumentFormatRegistry());
- }
-
- public OfficeDocumentConverter(OfficeManager officeManager, DocumentFormatRegistry formatRegistry) {
- this.officeManager = officeManager;
- this.formatRegistry = formatRegistry;
- }
-
- private Map createDefaultLoadProperties() {
- Map loadProperties = new HashMap();
- loadProperties.put("Hidden", true);
- loadProperties.put("ReadOnly", true);
- loadProperties.put("UpdateDocMode", UpdateDocMode.QUIET_UPDATE);
- return loadProperties;
- }
-
- public void setDefaultLoadProperties(Map defaultLoadProperties) {
- this.defaultLoadProperties = defaultLoadProperties;
- }
-
- public DocumentFormatRegistry getFormatRegistry() {
- return formatRegistry;
- }
-
- public void convert(File inputFile, File outputFile) throws OfficeException {
- String outputExtension = FilenameUtils.getExtension(outputFile.getName());
- DocumentFormat outputFormat = formatRegistry.getFormatByExtension(outputExtension);
- convert(inputFile, outputFile, outputFormat, null);
- }
-
- public void convert(File inputFile, File outputFile, FileProperties fileProperties) throws OfficeException {
- String outputExtension = FilenameUtils.getExtension(outputFile.getName());
- DocumentFormat outputFormat = formatRegistry.getFormatByExtension(outputExtension);
- convert(inputFile, outputFile, outputFormat, fileProperties);
- }
-
- public void convert(File inputFile, File outputFile, DocumentFormat outputFormat, FileProperties fileProperties) throws OfficeException {
- String inputExtension = FilenameUtils.getExtension(inputFile.getName());
- DocumentFormat inputFormat = formatRegistry.getFormatByExtension(inputExtension);
- Map properties = fileProperties.toMap();
- properties.putAll(defaultLoadProperties);
- StandardConversionTask conversionTask = new StandardConversionTask(inputFile, outputFile, outputFormat);
- conversionTask.setDefaultLoadProperties(properties);
- conversionTask.setInputFormat(inputFormat);
- officeManager.execute(conversionTask);
- }
-
-}
diff --git a/office-plugin/src/main/java/org/artofsolving/jodconverter/OfficeDocumentUtils.java b/office-plugin/src/main/java/org/artofsolving/jodconverter/OfficeDocumentUtils.java
deleted file mode 100644
index 59375651..00000000
--- a/office-plugin/src/main/java/org/artofsolving/jodconverter/OfficeDocumentUtils.java
+++ /dev/null
@@ -1,47 +0,0 @@
-//
-// JODConverter - Java OpenDocument Converter
-// Copyright 2004-2012 Mirko Nasato and contributors
-//
-// JODConverter is Open Source software, you can redistribute it and/or
-// modify it under either (at your option) of the following licenses
-//
-// 1. The GNU Lesser General Public License v3 (or later)
-// -> http://www.gnu.org/licenses/lgpl-3.0.txt
-// 2. The Apache License, Version 2.0
-// -> http://www.apache.org/licenses/LICENSE-2.0.txt
-//
-package org.artofsolving.jodconverter;
-
-import static org.artofsolving.jodconverter.office.OfficeUtils.*;
-
-import org.artofsolving.jodconverter.document.DocumentFamily;
-import org.artofsolving.jodconverter.office.OfficeException;
-
-
-import com.sun.star.lang.XComponent;
-import com.sun.star.lang.XServiceInfo;
-
-class OfficeDocumentUtils {
-
- private OfficeDocumentUtils() {
- throw new AssertionError("utility class must not be instantiated");
- }
-
- public static DocumentFamily getDocumentFamily(XComponent document) throws OfficeException {
- XServiceInfo serviceInfo = cast(XServiceInfo.class, document);
- if (serviceInfo.supportsService("com.sun.star.text.GenericTextDocument")) {
- // NOTE: a GenericTextDocument is either a TextDocument, a WebDocument, or a GlobalDocument
- // but this further distinction doesn't seem to matter for conversions
- return DocumentFamily.TEXT;
- } else if (serviceInfo.supportsService("com.sun.star.sheet.SpreadsheetDocument")) {
- return DocumentFamily.SPREADSHEET;
- } else if (serviceInfo.supportsService("com.sun.star.presentation.PresentationDocument")) {
- return DocumentFamily.PRESENTATION;
- } else if (serviceInfo.supportsService("com.sun.star.drawing.DrawingDocument")) {
- return DocumentFamily.DRAWING;
- } else {
- throw new OfficeException("document of unknown family: " + serviceInfo.getImplementationName());
- }
- }
-
-}
diff --git a/office-plugin/src/main/java/org/artofsolving/jodconverter/StandardConversionTask.java b/office-plugin/src/main/java/org/artofsolving/jodconverter/StandardConversionTask.java
deleted file mode 100644
index 761a339d..00000000
--- a/office-plugin/src/main/java/org/artofsolving/jodconverter/StandardConversionTask.java
+++ /dev/null
@@ -1,74 +0,0 @@
-//
-// JODConverter - Java OpenDocument Converter
-// Copyright 2004-2012 Mirko Nasato and contributors
-//
-// JODConverter is Open Source software, you can redistribute it and/or
-// modify it under either (at your option) of the following licenses
-//
-// 1. The GNU Lesser General Public License v3 (or later)
-// -> http://www.gnu.org/licenses/lgpl-3.0.txt
-// 2. The Apache License, Version 2.0
-// -> http://www.apache.org/licenses/LICENSE-2.0.txt
-//
-package org.artofsolving.jodconverter;
-
-import static org.artofsolving.jodconverter.office.OfficeUtils.cast;
-
-import java.io.File;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.artofsolving.jodconverter.document.DocumentFamily;
-import org.artofsolving.jodconverter.document.DocumentFormat;
-import org.artofsolving.jodconverter.office.OfficeException;
-
-import com.sun.star.lang.XComponent;
-import com.sun.star.util.XRefreshable;
-
-public class StandardConversionTask extends AbstractConversionTask {
-
- private final DocumentFormat outputFormat;
-
- private Map defaultLoadProperties;
- private DocumentFormat inputFormat;
-
- public StandardConversionTask(File inputFile, File outputFile, DocumentFormat outputFormat) {
- super(inputFile, outputFile);
- this.outputFormat = outputFormat;
- }
-
- public void setDefaultLoadProperties(Map defaultLoadProperties) {
- this.defaultLoadProperties = defaultLoadProperties;
- }
-
- public void setInputFormat(DocumentFormat inputFormat) {
- this.inputFormat = inputFormat;
- }
-
- @Override
- protected void modifyDocument(XComponent document) throws OfficeException {
- XRefreshable refreshable = cast(XRefreshable.class, document);
- if (refreshable != null) {
- refreshable.refresh();
- }
- }
-
- @Override
- protected Map getLoadProperties(File inputFile) {
- Map loadProperties = new HashMap();
- if (defaultLoadProperties != null) {
- loadProperties.putAll(defaultLoadProperties);
- }
- if (inputFormat != null && inputFormat.getLoadProperties() != null) {
- loadProperties.putAll(inputFormat.getLoadProperties());
- }
- return loadProperties;
- }
-
- @Override
- protected Map getStoreProperties(File outputFile, XComponent document) {
- DocumentFamily family = OfficeDocumentUtils.getDocumentFamily(document);
- return outputFormat.getStoreProperties(family);
- }
-
-}
diff --git a/office-plugin/src/main/java/org/artofsolving/jodconverter/cli/Convert.java b/office-plugin/src/main/java/org/artofsolving/jodconverter/cli/Convert.java
deleted file mode 100644
index 33118111..00000000
--- a/office-plugin/src/main/java/org/artofsolving/jodconverter/cli/Convert.java
+++ /dev/null
@@ -1,127 +0,0 @@
-//
-// JODConverter - Java OpenDocument Converter
-// Copyright 2004-2012 Mirko Nasato and contributors
-//
-// JODConverter is Open Source software, you can redistribute it and/or
-// modify it under either (at your option) of the following licenses
-//
-// 1. The GNU Lesser General Public License v3 (or later)
-// -> http://www.gnu.org/licenses/lgpl-3.0.txt
-// 2. The Apache License, Version 2.0
-// -> http://www.apache.org/licenses/LICENSE-2.0.txt
-//
-package org.artofsolving.jodconverter.cli;
-
-import java.io.File;
-import java.io.IOException;
-import java.nio.charset.Charset;
-
-import org.apache.commons.cli.CommandLine;
-import org.apache.commons.cli.CommandLineParser;
-import org.apache.commons.cli.HelpFormatter;
-import org.apache.commons.cli.Option;
-import org.apache.commons.cli.Options;
-import org.apache.commons.cli.ParseException;
-import org.apache.commons.cli.PosixParser;
-import org.apache.commons.io.FileUtils;
-import org.apache.commons.io.FilenameUtils;
-import org.artofsolving.jodconverter.OfficeDocumentConverter;
-import org.artofsolving.jodconverter.document.DefaultDocumentFormatRegistry;
-import org.artofsolving.jodconverter.document.DocumentFormatRegistry;
-import org.artofsolving.jodconverter.document.JsonDocumentFormatRegistry;
-import org.artofsolving.jodconverter.office.OfficeManager;
-import org.artofsolving.jodconverter.office.DefaultOfficeManagerConfiguration;
-import org.json.JSONException;
-
-/**
- * Command line interface executable.
- */
-public class Convert {
-
- public static final int STATUS_OK = 0;
- public static final int STATUS_MISSING_INPUT_FILE = 1;
- public static final int STATUS_INVALID_ARGUMENTS = 255;
-
- private static final Option OPTION_OUTPUT_FORMAT = new Option("o", "output-format", true, "output format (e.g. pdf)");
- private static final Option OPTION_PORT = new Option("p", "port", true, "office socket port (optional; defaults to 2002)");
- private static final Option OPTION_REGISTRY = new Option("r", "registry", true, "document formats registry configuration file (optional)");
- private static final Option OPTION_TIMEOUT = new Option("t", "timeout", true, "maximum conversion time in seconds (optional; defaults to 120)");
- private static final Option OPTION_USER_PROFILE = new Option("u", "user-profile", true, "use settings from the given user installation dir (optional)");
- private static final Options OPTIONS = initOptions();
-
- private static final int DEFAULT_OFFICE_PORT = 2002;
-
- private static Options initOptions() {
- Options options = new Options();
- options.addOption(OPTION_OUTPUT_FORMAT);
- options.addOption(OPTION_PORT);
- options.addOption(OPTION_REGISTRY);
- options.addOption(OPTION_TIMEOUT);
- options.addOption(OPTION_USER_PROFILE);
- return options;
- }
-
- public static void main(String[] arguments) throws ParseException, JSONException, IOException {
- CommandLineParser commandLineParser = new PosixParser();
- CommandLine commandLine = commandLineParser.parse(OPTIONS, arguments);
-
- String outputFormat = null;
- if (commandLine.hasOption(OPTION_OUTPUT_FORMAT.getOpt())) {
- outputFormat = commandLine.getOptionValue(OPTION_OUTPUT_FORMAT.getOpt());
- }
-
- int port = DEFAULT_OFFICE_PORT;
- if (commandLine.hasOption(OPTION_PORT.getOpt())) {
- port = Integer.parseInt(commandLine.getOptionValue(OPTION_PORT.getOpt()));
- }
-
- String[] fileNames = commandLine.getArgs();
- if ((outputFormat == null && fileNames.length != 2) || fileNames.length < 1) {
- String syntax = "java -jar jodconverter-core.jar [options] input-file output-file\n"
- + "or [options] -o output-format input-file [input-file...]";
- HelpFormatter helpFormatter = new HelpFormatter();
- helpFormatter.printHelp(syntax, OPTIONS);
- System.exit(STATUS_INVALID_ARGUMENTS);
- }
-
- DocumentFormatRegistry registry;
- if (commandLine.hasOption(OPTION_REGISTRY.getOpt())) {
- File registryFile = new File(commandLine.getOptionValue(OPTION_REGISTRY.getOpt()));
- registry = new JsonDocumentFormatRegistry(FileUtils.readFileToString(registryFile, Charset.defaultCharset()));
- } else {
- registry = new DefaultDocumentFormatRegistry();
- }
-
- DefaultOfficeManagerConfiguration configuration = new DefaultOfficeManagerConfiguration();
- configuration.setPortNumber(port);
- if (commandLine.hasOption(OPTION_TIMEOUT.getOpt())) {
- int timeout = Integer.parseInt(commandLine.getOptionValue(OPTION_TIMEOUT.getOpt()));
- configuration.setTaskExecutionTimeout(timeout * 1000);
- }
- if (commandLine.hasOption(OPTION_USER_PROFILE.getOpt())) {
- String templateProfileDir = commandLine.getOptionValue(OPTION_USER_PROFILE.getOpt());
- configuration.setTemplateProfileDir(new File(templateProfileDir));
- }
-
- OfficeManager officeManager = configuration.buildOfficeManager();
- officeManager.start();
- OfficeDocumentConverter converter = new OfficeDocumentConverter(officeManager, registry);
- try {
- if (outputFormat == null) {
- File inputFile = new File(fileNames[0]);
- File outputFile = new File(fileNames[1]);
- converter.convert(inputFile, outputFile);
- } else {
- for (int i = 0; i < fileNames.length; i++) {
- File inputFile = new File(fileNames[i]);
- String outputName = FilenameUtils.getBaseName(fileNames[i]) + "." + outputFormat;
- File outputFile = new File(FilenameUtils.getFullPath(fileNames[i]) + outputName);
- converter.convert(inputFile, outputFile);
- }
- }
- } finally {
- officeManager.stop();
- }
- }
-
-}
diff --git a/office-plugin/src/main/java/org/artofsolving/jodconverter/document/DefaultDocumentFormatRegistry.java b/office-plugin/src/main/java/org/artofsolving/jodconverter/document/DefaultDocumentFormatRegistry.java
deleted file mode 100644
index 5aa75ba7..00000000
--- a/office-plugin/src/main/java/org/artofsolving/jodconverter/document/DefaultDocumentFormatRegistry.java
+++ /dev/null
@@ -1,157 +0,0 @@
-//
-// JODConverter - Java OpenDocument Converter
-// Copyright 2004-2012 Mirko Nasato and contributors
-//
-// JODConverter is Open Source software, you can redistribute it and/or
-// modify it under either (at your option) of the following licenses
-//
-// 1. The GNU Lesser General Public License v3 (or later)
-// -> http://www.gnu.org/licenses/lgpl-3.0.txt
-// 2. The Apache License, Version 2.0
-// -> http://www.apache.org/licenses/LICENSE-2.0.txt
-//
-package org.artofsolving.jodconverter.document;
-
-import java.util.Collections;
-import java.util.LinkedHashMap;
-import java.util.Map;
-
-public class DefaultDocumentFormatRegistry extends SimpleDocumentFormatRegistry {
-
- public DefaultDocumentFormatRegistry() {
- DocumentFormat pdf = new DocumentFormat("Portable Document Format", "pdf", "application/pdf");
- pdf.setStoreProperties(DocumentFamily.TEXT, Collections.singletonMap("FilterName", "writer_pdf_Export"));
- pdf.setStoreProperties(DocumentFamily.SPREADSHEET, Collections.singletonMap("FilterName", "calc_pdf_Export"));
- pdf.setStoreProperties(DocumentFamily.PRESENTATION, Collections.singletonMap("FilterName", "impress_pdf_Export"));
- pdf.setStoreProperties(DocumentFamily.DRAWING, Collections.singletonMap("FilterName", "draw_pdf_Export"));
- addFormat(pdf);
-
- DocumentFormat swf = new DocumentFormat("Macromedia Flash", "swf", "application/x-shockwave-flash");
- swf.setStoreProperties(DocumentFamily.PRESENTATION, Collections.singletonMap("FilterName", "impress_flash_Export"));
- swf.setStoreProperties(DocumentFamily.DRAWING, Collections.singletonMap("FilterName", "draw_flash_Export"));
- addFormat(swf);
-
- // disabled because it's not always available
- //DocumentFormat xhtml = new DocumentFormat("XHTML", "xhtml", "application/xhtml+xml");
- //xhtml.setStoreProperties(DocumentFamily.TEXT, Collections.singletonMap("FilterName", "XHTML Writer File"));
- //xhtml.setStoreProperties(DocumentFamily.SPREADSHEET, Collections.singletonMap("FilterName", "XHTML Calc File"));
- //xhtml.setStoreProperties(DocumentFamily.PRESENTATION, Collections.singletonMap("FilterName", "XHTML Impress File"));
- //addFormat(xhtml);
-
- DocumentFormat html = new DocumentFormat("HTML", "html", "text/html");
- // HTML is treated as Text when supplied as input, but as an output it is also
- // available for exporting Spreadsheet and Presentation formats
- html.setInputFamily(DocumentFamily.TEXT);
- html.setStoreProperties(DocumentFamily.TEXT, Collections.singletonMap("FilterName", "HTML (StarWriter)"));
- html.setStoreProperties(DocumentFamily.SPREADSHEET, Collections.singletonMap("FilterName", "HTML (StarCalc)"));
- html.setStoreProperties(DocumentFamily.PRESENTATION, Collections.singletonMap("FilterName", "impress_html_Export"));
- addFormat(html);
-
- DocumentFormat odt = new DocumentFormat("OpenDocument Text", "odt", "application/vnd.oasis.opendocument.text");
- odt.setInputFamily(DocumentFamily.TEXT);
- odt.setStoreProperties(DocumentFamily.TEXT, Collections.singletonMap("FilterName", "writer8"));
- addFormat(odt);
-
- DocumentFormat sxw = new DocumentFormat("OpenOffice.org 1.0 Text Document", "sxw", "application/vnd.sun.xml.writer");
- sxw.setInputFamily(DocumentFamily.TEXT);
- sxw.setStoreProperties(DocumentFamily.TEXT, Collections.singletonMap("FilterName", "StarOffice XML (Writer)"));
- addFormat(sxw);
-
- DocumentFormat doc = new DocumentFormat("Microsoft Word", "doc", "application/msword");
- doc.setInputFamily(DocumentFamily.TEXT);
- doc.setStoreProperties(DocumentFamily.TEXT, Collections.singletonMap("FilterName", "MS Word 97"));
- addFormat(doc);
-
- DocumentFormat docx = new DocumentFormat("Microsoft Word 2007 XML", "docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document");
- docx.setInputFamily(DocumentFamily.TEXT);
- addFormat(docx);
-
- DocumentFormat rtf = new DocumentFormat("Rich Text Format", "rtf", "text/rtf");
- rtf.setInputFamily(DocumentFamily.TEXT);
- rtf.setStoreProperties(DocumentFamily.TEXT, Collections.singletonMap("FilterName", "Rich Text Format"));
- addFormat(rtf);
-
- DocumentFormat wpd = new DocumentFormat("WordPerfect", "wpd", "application/wordperfect");
- wpd.setInputFamily(DocumentFamily.TEXT);
- addFormat(wpd);
-
- DocumentFormat txt = new DocumentFormat("Plain Text", "txt", "text/plain");
- txt.setInputFamily(DocumentFamily.TEXT);
- Map txtLoadAndStoreProperties = new LinkedHashMap();
- txtLoadAndStoreProperties.put("FilterName", "Text (encoded)");
- txtLoadAndStoreProperties.put("FilterOptions", "utf8");
- txt.setLoadProperties(txtLoadAndStoreProperties);
- txt.setStoreProperties(DocumentFamily.TEXT, txtLoadAndStoreProperties);
- addFormat(txt);
-
- DocumentFormat wikitext = new DocumentFormat("MediaWiki wikitext", "wiki", "text/x-wiki");
- wikitext.setStoreProperties(DocumentFamily.TEXT, Collections.singletonMap("FilterName", "MediaWiki"));
- //addFormat(wikitext);
-
- DocumentFormat ods = new DocumentFormat("OpenDocument Spreadsheet", "ods", "application/vnd.oasis.opendocument.spreadsheet");
- ods.setInputFamily(DocumentFamily.SPREADSHEET);
- ods.setStoreProperties(DocumentFamily.SPREADSHEET, Collections.singletonMap("FilterName", "calc8"));
- addFormat(ods);
-
- DocumentFormat sxc = new DocumentFormat("OpenOffice.org 1.0 Spreadsheet", "sxc", "application/vnd.sun.xml.calc");
- sxc.setInputFamily(DocumentFamily.SPREADSHEET);
- sxc.setStoreProperties(DocumentFamily.SPREADSHEET, Collections.singletonMap("FilterName", "StarOffice XML (Calc)"));
- addFormat(sxc);
-
- DocumentFormat xls = new DocumentFormat("Microsoft Excel", "xls", "application/vnd.ms-excel");
- xls.setInputFamily(DocumentFamily.SPREADSHEET);
- xls.setStoreProperties(DocumentFamily.SPREADSHEET, Collections.singletonMap("FilterName", "MS Excel 97"));
- addFormat(xls);
-
- DocumentFormat xlsx = new DocumentFormat("Microsoft Excel 2007 XML", "xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
- xlsx.setInputFamily(DocumentFamily.SPREADSHEET);
- addFormat(xlsx);
-
- DocumentFormat csv = new DocumentFormat("Comma Separated Values", "csv", "text/csv");
- csv.setInputFamily(DocumentFamily.SPREADSHEET);
- Map csvLoadAndStoreProperties = new LinkedHashMap();
- csvLoadAndStoreProperties.put("FilterName", "Text - txt - csv (StarCalc)");
- csvLoadAndStoreProperties.put("FilterOptions", "44,34,0"); // Field Separator: ','; Text Delimiter: '"'
- csv.setLoadProperties(csvLoadAndStoreProperties);
- csv.setStoreProperties(DocumentFamily.SPREADSHEET, csvLoadAndStoreProperties);
- addFormat(csv);
-
- DocumentFormat tsv = new DocumentFormat("Tab Separated Values", "tsv", "text/tab-separated-values");
- tsv.setInputFamily(DocumentFamily.SPREADSHEET);
- Map tsvLoadAndStoreProperties = new LinkedHashMap();
- tsvLoadAndStoreProperties.put("FilterName", "Text - txt - csv (StarCalc)");
- tsvLoadAndStoreProperties.put("FilterOptions", "9,34,0"); // Field Separator: '\t'; Text Delimiter: '"'
- tsv.setLoadProperties(tsvLoadAndStoreProperties);
- tsv.setStoreProperties(DocumentFamily.SPREADSHEET, tsvLoadAndStoreProperties);
- addFormat(tsv);
-
- DocumentFormat odp = new DocumentFormat("OpenDocument Presentation", "odp", "application/vnd.oasis.opendocument.presentation");
- odp.setInputFamily(DocumentFamily.PRESENTATION);
- odp.setStoreProperties(DocumentFamily.PRESENTATION, Collections.singletonMap("FilterName", "impress8"));
- addFormat(odp);
-
- DocumentFormat sxi = new DocumentFormat("OpenOffice.org 1.0 Presentation", "sxi", "application/vnd.sun.xml.impress");
- sxi.setInputFamily(DocumentFamily.PRESENTATION);
- sxi.setStoreProperties(DocumentFamily.PRESENTATION, Collections.singletonMap("FilterName", "StarOffice XML (Impress)"));
- addFormat(sxi);
-
- DocumentFormat ppt = new DocumentFormat("Microsoft PowerPoint", "ppt", "application/vnd.ms-powerpoint");
- ppt.setInputFamily(DocumentFamily.PRESENTATION);
- ppt.setStoreProperties(DocumentFamily.PRESENTATION, Collections.singletonMap("FilterName", "MS PowerPoint 97"));
- addFormat(ppt);
-
- DocumentFormat pptx = new DocumentFormat("Microsoft PowerPoint 2007 XML", "pptx", "application/vnd.openxmlformats-officedocument.presentationml.presentation");
- pptx.setInputFamily(DocumentFamily.PRESENTATION);
- addFormat(pptx);
-
- DocumentFormat odg = new DocumentFormat("OpenDocument Drawing", "odg", "application/vnd.oasis.opendocument.graphics");
- odg.setInputFamily(DocumentFamily.DRAWING);
- odg.setStoreProperties(DocumentFamily.DRAWING, Collections.singletonMap("FilterName", "draw8"));
- addFormat(odg);
-
- DocumentFormat svg = new DocumentFormat("Scalable Vector Graphics", "svg", "image/svg+xml");
- svg.setStoreProperties(DocumentFamily.DRAWING, Collections.singletonMap("FilterName", "draw_svg_Export"));
- addFormat(svg);
- }
-
-}
diff --git a/office-plugin/src/main/java/org/artofsolving/jodconverter/document/DocumentFamily.java b/office-plugin/src/main/java/org/artofsolving/jodconverter/document/DocumentFamily.java
deleted file mode 100644
index 5af67efc..00000000
--- a/office-plugin/src/main/java/org/artofsolving/jodconverter/document/DocumentFamily.java
+++ /dev/null
@@ -1,19 +0,0 @@
-//
-// JODConverter - Java OpenDocument Converter
-// Copyright 2004-2012 Mirko Nasato and contributors
-//
-// JODConverter is Open Source software, you can redistribute it and/or
-// modify it under either (at your option) of the following licenses
-//
-// 1. The GNU Lesser General Public License v3 (or later)
-// -> http://www.gnu.org/licenses/lgpl-3.0.txt
-// 2. The Apache License, Version 2.0
-// -> http://www.apache.org/licenses/LICENSE-2.0.txt
-//
-package org.artofsolving.jodconverter.document;
-
-public enum DocumentFamily {
-
- TEXT, SPREADSHEET, PRESENTATION, DRAWING
-
-}
diff --git a/office-plugin/src/main/java/org/artofsolving/jodconverter/document/DocumentFormat.java b/office-plugin/src/main/java/org/artofsolving/jodconverter/document/DocumentFormat.java
deleted file mode 100644
index c77f2eb2..00000000
--- a/office-plugin/src/main/java/org/artofsolving/jodconverter/document/DocumentFormat.java
+++ /dev/null
@@ -1,99 +0,0 @@
-//
-// JODConverter - Java OpenDocument Converter
-// Copyright 2004-2012 Mirko Nasato and contributors
-//
-// JODConverter is Open Source software, you can redistribute it and/or
-// modify it under either (at your option) of the following licenses
-//
-// 1. The GNU Lesser General Public License v3 (or later)
-// -> http://www.gnu.org/licenses/lgpl-3.0.txt
-// 2. The Apache License, Version 2.0
-// -> http://www.apache.org/licenses/LICENSE-2.0.txt
-//
-package org.artofsolving.jodconverter.document;
-
-import java.util.HashMap;
-import java.util.Map;
-
-public class DocumentFormat {
-
- private String name;
- private String extension;
- private String mediaType;
- private DocumentFamily inputFamily;
- private Map loadProperties;
- private Map> storePropertiesByFamily;
-
- public DocumentFormat() {
- // default
- }
-
- public DocumentFormat(String name, String extension, String mediaType) {
- this.name = name;
- this.extension = extension;
- this.mediaType = mediaType;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public String getExtension() {
- return extension;
- }
-
- public void setExtension(String extension) {
- this.extension = extension;
- }
-
- public String getMediaType() {
- return mediaType;
- }
-
- public void setMediaType(String mediaType) {
- this.mediaType = mediaType;
- }
-
- public DocumentFamily getInputFamily() {
- return inputFamily;
- }
-
- public void setInputFamily(DocumentFamily documentFamily) {
- this.inputFamily = documentFamily;
- }
-
- public Map getLoadProperties() {
- return loadProperties;
- }
-
- public void setLoadProperties(Map loadProperties) {
- this.loadProperties = loadProperties;
- }
-
- public Map> getStorePropertiesByFamily() {
- return storePropertiesByFamily;
- }
-
- public void setStorePropertiesByFamily(Map> storePropertiesByFamily) {
- this.storePropertiesByFamily = storePropertiesByFamily;
- }
-
- public void setStoreProperties(DocumentFamily family, Map storeProperties) {
- if (storePropertiesByFamily == null) {
- storePropertiesByFamily = new HashMap>();
- }
- storePropertiesByFamily.put(family, storeProperties);
- }
-
- public Map getStoreProperties(DocumentFamily family) {
- if (storePropertiesByFamily == null) {
- return null;
- }
- return storePropertiesByFamily.get(family);
- }
-
-}
diff --git a/office-plugin/src/main/java/org/artofsolving/jodconverter/document/DocumentFormatRegistry.java b/office-plugin/src/main/java/org/artofsolving/jodconverter/document/DocumentFormatRegistry.java
deleted file mode 100644
index 0b3bc253..00000000
--- a/office-plugin/src/main/java/org/artofsolving/jodconverter/document/DocumentFormatRegistry.java
+++ /dev/null
@@ -1,25 +0,0 @@
-//
-// JODConverter - Java OpenDocument Converter
-// Copyright 2004-2012 Mirko Nasato and contributors
-//
-// JODConverter is Open Source software, you can redistribute it and/or
-// modify it under either (at your option) of the following licenses
-//
-// 1. The GNU Lesser General Public License v3 (or later)
-// -> http://www.gnu.org/licenses/lgpl-3.0.txt
-// 2. The Apache License, Version 2.0
-// -> http://www.apache.org/licenses/LICENSE-2.0.txt
-//
-package org.artofsolving.jodconverter.document;
-
-import java.util.Set;
-
-public interface DocumentFormatRegistry {
-
- public DocumentFormat getFormatByExtension(String extension);
-
- public DocumentFormat getFormatByMediaType(String mediaType);
-
- public Set getOutputFormats(DocumentFamily family);
-
-}
diff --git a/office-plugin/src/main/java/org/artofsolving/jodconverter/document/JsonDocumentFormatRegistry.java b/office-plugin/src/main/java/org/artofsolving/jodconverter/document/JsonDocumentFormatRegistry.java
deleted file mode 100644
index 086dee01..00000000
--- a/office-plugin/src/main/java/org/artofsolving/jodconverter/document/JsonDocumentFormatRegistry.java
+++ /dev/null
@@ -1,74 +0,0 @@
-//
-// JODConverter - Java OpenDocument Converter
-// Copyright 2004-2012 Mirko Nasato and contributors
-//
-// JODConverter is Open Source software, you can redistribute it and/or
-// modify it under either (at your option) of the following licenses
-//
-// 1. The GNU Lesser General Public License v3 (or later)
-// -> http://www.gnu.org/licenses/lgpl-3.0.txt
-// 2. The Apache License, Version 2.0
-// -> http://www.apache.org/licenses/LICENSE-2.0.txt
-//
-package org.artofsolving.jodconverter.document;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.charset.Charset;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.commons.io.IOUtils;
-import org.json.JSONArray;
-import org.json.JSONException;
-import org.json.JSONObject;
-
-public class JsonDocumentFormatRegistry extends SimpleDocumentFormatRegistry {
-
- public JsonDocumentFormatRegistry(InputStream input) throws JSONException, IOException {
- readJsonArray(IOUtils.toString(input, Charset.defaultCharset()));
- }
-
- public JsonDocumentFormatRegistry(String source) throws JSONException {
- readJsonArray(source);
- }
-
- private void readJsonArray(String source) throws JSONException {
- JSONArray array = new JSONArray(source);
- for (int i = 0; i < array.length(); i++) {
- JSONObject jsonFormat = array.getJSONObject(i);
- DocumentFormat format = new DocumentFormat();
- format.setName(jsonFormat.getString("name"));
- format.setExtension(jsonFormat.getString("extension"));
- format.setMediaType(jsonFormat.getString("mediaType"));
- if (jsonFormat.has("inputFamily")) {
- format.setInputFamily(DocumentFamily.valueOf(jsonFormat.getString("inputFamily")));
- }
- if (jsonFormat.has("loadProperties")) {
- format.setLoadProperties(toJavaMap(jsonFormat.getJSONObject("loadProperties")));
- }
- if (jsonFormat.has("storePropertiesByFamily")) {
- JSONObject jsonStorePropertiesByFamily = jsonFormat.getJSONObject("storePropertiesByFamily");
- for (String key : JSONObject.getNames(jsonStorePropertiesByFamily)) {
- Map storeProperties = toJavaMap(jsonStorePropertiesByFamily.getJSONObject(key));
- format.setStoreProperties(DocumentFamily.valueOf(key), storeProperties);
- }
- }
- addFormat(format);
- }
- }
-
- private Map toJavaMap(JSONObject jsonMap) throws JSONException {
- Map map = new HashMap();
- for (String key : JSONObject.getNames(jsonMap)) {
- Object value = jsonMap.get(key);
- if (value instanceof JSONObject) {
- map.put(key, toJavaMap((JSONObject) value));
- } else {
- map.put(key, value);
- }
- }
- return map;
- }
-
-}
diff --git a/office-plugin/src/main/java/org/artofsolving/jodconverter/document/SimpleDocumentFormatRegistry.java b/office-plugin/src/main/java/org/artofsolving/jodconverter/document/SimpleDocumentFormatRegistry.java
deleted file mode 100644
index d05dd392..00000000
--- a/office-plugin/src/main/java/org/artofsolving/jodconverter/document/SimpleDocumentFormatRegistry.java
+++ /dev/null
@@ -1,65 +0,0 @@
-//
-// JODConverter - Java OpenDocument Converter
-// Copyright 2004-2012 Mirko Nasato and contributors
-//
-// JODConverter is Open Source software, you can redistribute it and/or
-// modify it under either (at your option) of the following licenses
-//
-// 1. The GNU Lesser General Public License v3 (or later)
-// -> http://www.gnu.org/licenses/lgpl-3.0.txt
-// 2. The Apache License, Version 2.0
-// -> http://www.apache.org/licenses/LICENSE-2.0.txt
-//
-package org.artofsolving.jodconverter.document;
-
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-public class SimpleDocumentFormatRegistry implements DocumentFormatRegistry {
-
- private List documentFormats = new ArrayList();
-
- public void addFormat(DocumentFormat documentFormat) {
- documentFormats.add(documentFormat);
- }
-
- public DocumentFormat getFormatByExtension(String extension) {
- if (extension == null) {
- return null;
- }
- String lowerExtension = extension.toLowerCase();
- //TODO keep a documentByExtension map instead
- for (DocumentFormat format : documentFormats) {
- if (format.getExtension().equals(lowerExtension)) {
- return format;
- }
- }
- return null;
- }
-
- public DocumentFormat getFormatByMediaType(String mediaType) {
- if (mediaType == null) {
- return null;
- }
- //TODO keep a documentByMediaType map instead
- for (DocumentFormat format : documentFormats) {
- if (format.getMediaType().equals(mediaType)) {
- return format;
- }
- }
- return null;
- }
-
- public Set getOutputFormats(DocumentFamily family) {
- Set formats = new HashSet();
- for (DocumentFormat format : documentFormats) {
- if (format.getStoreProperties(family) != null) {
- formats.add(format);
- }
- }
- return formats;
- }
-
-}
diff --git a/office-plugin/src/main/java/org/artofsolving/jodconverter/model/FileProperties.java b/office-plugin/src/main/java/org/artofsolving/jodconverter/model/FileProperties.java
deleted file mode 100644
index 1f03cf27..00000000
--- a/office-plugin/src/main/java/org/artofsolving/jodconverter/model/FileProperties.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package org.artofsolving.jodconverter.model;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Created by kl on 2018/1/17.
- * Content :
- */
-public class FileProperties {
-
- private String filePassword;
-
- public FileProperties() {
- }
-
- public Map toMap() {
- Map map = new HashMap<>();
- if (filePassword != null) {
- map.put("Password", filePassword);
- }
-
- return map;
- }
-
- public String getFilePassword() {
- return filePassword;
- }
-
- public void setFilePassword(String filePassword) {
- this.filePassword = filePassword;
- }
-
-}
diff --git a/office-plugin/src/main/java/org/artofsolving/jodconverter/office/DefaultOfficeManagerConfiguration.java b/office-plugin/src/main/java/org/artofsolving/jodconverter/office/DefaultOfficeManagerConfiguration.java
deleted file mode 100644
index 38c81a7e..00000000
--- a/office-plugin/src/main/java/org/artofsolving/jodconverter/office/DefaultOfficeManagerConfiguration.java
+++ /dev/null
@@ -1,223 +0,0 @@
-//
-// JODConverter - Java OpenDocument Converter
-// Copyright 2004-2012 Mirko Nasato and contributors
-//
-// JODConverter is Open Source software, you can redistribute it and/or
-// modify it under either (at your option) of the following licenses
-//
-// 1. The GNU Lesser General Public License v3 (or later)
-// -> http://www.gnu.org/licenses/lgpl-3.0.txt
-// 2. The Apache License, Version 2.0
-// -> http://www.apache.org/licenses/LICENSE-2.0.txt
-//
-package org.artofsolving.jodconverter.office;
-
-import java.io.File;
-
-import org.artofsolving.jodconverter.process.ProcessManager;
-import org.artofsolving.jodconverter.process.PureJavaProcessManager;
-import org.artofsolving.jodconverter.process.LinuxProcessManager;
-import org.artofsolving.jodconverter.process.SigarProcessManager;
-import org.artofsolving.jodconverter.util.PlatformUtils;
-
-public class DefaultOfficeManagerConfiguration {
-
- public static final long DEFAULT_RETRY_TIMEOUT = 120000L;
-
- private File officeHome = OfficeUtils.getDefaultOfficeHome();
- private OfficeConnectionProtocol connectionProtocol = OfficeConnectionProtocol.SOCKET;
- private int[] portNumbers = new int[] { 2002 };
- private String[] pipeNames = new String[] { "office" };
- private String[] runAsArgs = null;
- private File templateProfileDir = null;
- private File workDir = new File(System.getProperty("java.io.tmpdir"));
- private long taskQueueTimeout = 30000L; // 30 seconds
- private long taskExecutionTimeout = 120000L; // 2 minutes
- private int maxTasksPerProcess = 200;
- private long retryTimeout = DEFAULT_RETRY_TIMEOUT;
-
- private ProcessManager processManager = null; // lazily initialised
-
- public DefaultOfficeManagerConfiguration setOfficeHome(String officeHome) throws NullPointerException, IllegalArgumentException {
- checkArgumentNotNull("officeHome", officeHome);
- return setOfficeHome(new File(officeHome));
- }
-
- public DefaultOfficeManagerConfiguration setOfficeHome(File officeHome) throws NullPointerException, IllegalArgumentException {
- checkArgumentNotNull("officeHome", officeHome);
- checkArgument("officeHome", officeHome.isDirectory(), "must exist and be a directory");
- this.officeHome = officeHome;
- return this;
- }
-
- public DefaultOfficeManagerConfiguration setConnectionProtocol(OfficeConnectionProtocol connectionProtocol) throws NullPointerException {
- checkArgumentNotNull("connectionProtocol", connectionProtocol);
- this.connectionProtocol = connectionProtocol;
- return this;
- }
-
- public DefaultOfficeManagerConfiguration setPortNumber(int portNumber) {
- this.portNumbers = new int[] { portNumber };
- return this;
- }
-
- public DefaultOfficeManagerConfiguration setPortNumbers(int... portNumbers) throws NullPointerException, IllegalArgumentException {
- checkArgumentNotNull("portNumbers", portNumbers);
- checkArgument("portNumbers", portNumbers.length > 0, "must not be empty");
- this.portNumbers = portNumbers;
- return this;
- }
-
- public DefaultOfficeManagerConfiguration setPipeName(String pipeName) throws NullPointerException {
- checkArgumentNotNull("pipeName", pipeName);
- this.pipeNames = new String[] { pipeName };
- return this;
- }
-
- public DefaultOfficeManagerConfiguration setPipeNames(String... pipeNames) throws NullPointerException, IllegalArgumentException {
- checkArgumentNotNull("pipeNames", pipeNames);
- checkArgument("pipeNames", pipeNames.length > 0, "must not be empty");
- this.pipeNames = pipeNames;
- return this;
- }
-
- public DefaultOfficeManagerConfiguration setRunAsArgs(String... runAsArgs) {
- this.runAsArgs = runAsArgs;
- return this;
- }
-
- public DefaultOfficeManagerConfiguration setTemplateProfileDir(File templateProfileDir) throws IllegalArgumentException {
- if (templateProfileDir != null) {
- checkArgument("templateProfileDir", templateProfileDir.isDirectory(), "must exist and be a directory");
- }
- this.templateProfileDir = templateProfileDir;
- return this;
- }
-
- /**
- * Sets the directory where temporary office profiles will be created.
- *
- * Defaults to the system temporary directory as specified by the java.io.tmpdir system property.
- *
- * @param workDir
- * @return
- */
- public DefaultOfficeManagerConfiguration setWorkDir(File workDir) {
- checkArgumentNotNull("workDir", workDir);
- this.workDir = workDir;
- return this;
- }
-
- public DefaultOfficeManagerConfiguration setTaskQueueTimeout(long taskQueueTimeout) {
- this.taskQueueTimeout = taskQueueTimeout;
- return this;
- }
-
- public DefaultOfficeManagerConfiguration setTaskExecutionTimeout(long taskExecutionTimeout) {
- this.taskExecutionTimeout = taskExecutionTimeout;
- return this;
- }
-
- public DefaultOfficeManagerConfiguration setMaxTasksPerProcess(int maxTasksPerProcess) {
- this.maxTasksPerProcess = maxTasksPerProcess;
- return this;
- }
-
- /**
- * Provide a specific {@link ProcessManager} implementation
- *
- * The default is to use {@link SigarProcessManager} if sigar.jar is
- * available in the classpath, otherwise {@link LinuxProcessManager}
- * on Linux and {@link PureJavaProcessManager} on other platforms.
- *
- * @param processManager
- * @return
- * @throws NullPointerException
- */
- public DefaultOfficeManagerConfiguration setProcessManager(ProcessManager processManager) throws NullPointerException {
- checkArgumentNotNull("processManager", processManager);
- this.processManager = processManager;
- return this;
- }
-
- /**
- * Retry timeout set in milliseconds. Used for retrying office process calls.
- * If not set, it defaults to 2 minutes
- *
- * @param retryTimeout in milliseconds
- * @return
- */
- public DefaultOfficeManagerConfiguration setRetryTimeout(long retryTimeout) {
- this.retryTimeout = retryTimeout;
- return this;
- }
-
- public OfficeManager buildOfficeManager() throws IllegalStateException {
- if (officeHome == null) {
- throw new IllegalStateException("officeHome not set and could not be auto-detected");
- } else if (!officeHome.isDirectory()) {
- throw new IllegalStateException("officeHome doesn't exist or is not a directory: " + officeHome);
- } else if (!OfficeUtils.getOfficeExecutable(officeHome).isFile()) {
- throw new IllegalStateException("invalid officeHome: it doesn't contain soffice.bin: " + officeHome);
- }
- if (templateProfileDir != null && !isValidProfileDir(templateProfileDir)) {
- throw new IllegalStateException("templateProfileDir doesn't appear to contain a user profile: " + templateProfileDir);
- }
- if (!workDir.isDirectory()) {
- throw new IllegalStateException("workDir doesn't exist or is not a directory: " + workDir);
- }
-
- if (processManager == null) {
- processManager = findBestProcessManager();
- }
-
- int numInstances = connectionProtocol == OfficeConnectionProtocol.PIPE ? pipeNames.length : portNumbers.length;
- UnoUrl[] unoUrls = new UnoUrl[numInstances];
- for (int i = 0; i < numInstances; i++) {
- unoUrls[i] = (connectionProtocol == OfficeConnectionProtocol.PIPE) ? UnoUrl.pipe(pipeNames[i]) : UnoUrl.socket(portNumbers[i]);
- }
- return new ProcessPoolOfficeManager(officeHome, unoUrls, runAsArgs, templateProfileDir, workDir, retryTimeout, taskQueueTimeout, taskExecutionTimeout, maxTasksPerProcess, processManager);
- }
-
- private ProcessManager findBestProcessManager() {
- if (isSigarAvailable()) {
- return new SigarProcessManager();
- } else if (PlatformUtils.isLinux()) {
- LinuxProcessManager processManager = new LinuxProcessManager();
- if (runAsArgs != null) {
- processManager.setRunAsArgs(runAsArgs);
- }
- return processManager;
- } else {
- // NOTE: UnixProcessManager can't be trusted to work on Solaris
- // because of the 80-char limit on ps output there
- return new PureJavaProcessManager();
- }
- }
-
- private boolean isSigarAvailable() {
- try {
- Class.forName("org.hyperic.sigar.Sigar", false, getClass().getClassLoader());
- return true;
- } catch (ClassNotFoundException classNotFoundException) {
- return false;
- }
- }
-
- private void checkArgumentNotNull(String argName, Object argValue) throws NullPointerException {
- if (argValue == null) {
- throw new NullPointerException(argName + " must not be null");
- }
- }
-
- private void checkArgument(String argName, boolean condition, String message) throws IllegalArgumentException {
- if (!condition) {
- throw new IllegalArgumentException(argName + " " + message);
- }
- }
-
- private boolean isValidProfileDir(File profileDir) {
- return new File(profileDir, "user").isDirectory();
- }
-
-}
diff --git a/office-plugin/src/main/java/org/artofsolving/jodconverter/office/ExternalOfficeManager.java b/office-plugin/src/main/java/org/artofsolving/jodconverter/office/ExternalOfficeManager.java
deleted file mode 100644
index fa86bb33..00000000
--- a/office-plugin/src/main/java/org/artofsolving/jodconverter/office/ExternalOfficeManager.java
+++ /dev/null
@@ -1,86 +0,0 @@
-//
-// JODConverter - Java OpenDocument Converter
-// Copyright 2004-2012 Mirko Nasato and contributors
-//
-// JODConverter is Open Source software, you can redistribute it and/or
-// modify it under either (at your option) of the following licenses
-//
-// 1. The GNU Lesser General Public License v3 (or later)
-// -> http://www.gnu.org/licenses/lgpl-3.0.txt
-// 2. The Apache License, Version 2.0
-// -> http://www.apache.org/licenses/LICENSE-2.0.txt
-//
-package org.artofsolving.jodconverter.office;
-
-import java.net.ConnectException;
-
-/**
- * {@link OfficeManager} implementation that connects to an external Office process.
- *
- * The external Office process needs to be started manually, e.g. from the command line with
- *
- *
- * soffice -accept="socket,host=127.0.0.1,port=2002;urp;"
- *
- *
- * Since this implementation does not manage the Office process, it does not support auto-restarting the process if it exits unexpectedly.
- *
- * It will however auto-reconnect to the external process if the latter is manually restarted.
- *
- * This {@link OfficeManager} implementation basically provides the same behaviour as JODConverter 2.x, including using synchronized blocks for serialising office
- * operations.
- */
-class ExternalOfficeManager implements OfficeManager {
-
- private final OfficeConnection connection;
- private final boolean connectOnStart;
-
- /**
- * @param unoUrl
- * @param connectOnStart
- * should a connection be attempted on {@link #start()}? Default is true. If false, a connection will only be attempted the first time an
- * {@link OfficeTask} is executed.
- */
- public ExternalOfficeManager(UnoUrl unoUrl, boolean connectOnStart) {
- connection = new OfficeConnection(unoUrl);
- this.connectOnStart = connectOnStart;
- }
-
- public void start() throws OfficeException {
- if (connectOnStart) {
- synchronized (connection) {
- connect();
- }
- }
- }
-
- public void stop() {
- synchronized (connection) {
- if (connection.isConnected()) {
- connection.disconnect();
- }
- }
- }
-
- public void execute(OfficeTask task) throws OfficeException {
- synchronized (connection) {
- if (!connection.isConnected()) {
- connect();
- }
- task.execute(connection);
- }
- }
-
- private void connect() {
- try {
- connection.connect();
- } catch (ConnectException connectException) {
- throw new OfficeException("could not connect to external office process", connectException);
- }
- }
-
- public boolean isRunning() {
- return connection.isConnected();
- }
-
-}
diff --git a/office-plugin/src/main/java/org/artofsolving/jodconverter/office/ExternalOfficeManagerConfiguration.java b/office-plugin/src/main/java/org/artofsolving/jodconverter/office/ExternalOfficeManagerConfiguration.java
deleted file mode 100644
index dfa86c0d..00000000
--- a/office-plugin/src/main/java/org/artofsolving/jodconverter/office/ExternalOfficeManagerConfiguration.java
+++ /dev/null
@@ -1,47 +0,0 @@
-//
-// JODConverter - Java OpenDocument Converter
-// Copyright 2004-2012 Mirko Nasato and contributors
-//
-// JODConverter is Open Source software, you can redistribute it and/or
-// modify it under either (at your option) of the following licenses
-//
-// 1. The GNU Lesser General Public License v3 (or later)
-// -> http://www.gnu.org/licenses/lgpl-3.0.txt
-// 2. The Apache License, Version 2.0
-// -> http://www.apache.org/licenses/LICENSE-2.0.txt
-//
-package org.artofsolving.jodconverter.office;
-
-public class ExternalOfficeManagerConfiguration {
-
- private OfficeConnectionProtocol connectionProtocol = OfficeConnectionProtocol.SOCKET;
- private int portNumber = 2002;
- private String pipeName = "office";
- private boolean connectOnStart = true;
-
- public ExternalOfficeManagerConfiguration setConnectionProtocol(OfficeConnectionProtocol connectionProtocol) {
- this.connectionProtocol = connectionProtocol;
- return this;
- }
-
- public ExternalOfficeManagerConfiguration setPortNumber(int portNumber) {
- this.portNumber = portNumber;
- return this;
- }
-
- public ExternalOfficeManagerConfiguration setPipeName(String pipeName) {
- this.pipeName = pipeName;
- return this;
- }
-
- public ExternalOfficeManagerConfiguration setConnectOnStart(boolean connectOnStart) {
- this.connectOnStart = connectOnStart;
- return this;
- }
-
- public OfficeManager buildOfficeManager() {
- UnoUrl unoUrl = connectionProtocol == OfficeConnectionProtocol.SOCKET ? UnoUrl.socket(portNumber) : UnoUrl.pipe(pipeName);
- return new ExternalOfficeManager(unoUrl, connectOnStart);
- }
-
-}
diff --git a/office-plugin/src/main/java/org/artofsolving/jodconverter/office/ManagedOfficeProcess.java b/office-plugin/src/main/java/org/artofsolving/jodconverter/office/ManagedOfficeProcess.java
deleted file mode 100644
index ef8314dc..00000000
--- a/office-plugin/src/main/java/org/artofsolving/jodconverter/office/ManagedOfficeProcess.java
+++ /dev/null
@@ -1,176 +0,0 @@
-//
-// JODConverter - Java OpenDocument Converter
-// Copyright 2004-2012 Mirko Nasato and contributors
-//
-// JODConverter is Open Source software, you can redistribute it and/or
-// modify it under either (at your option) of the following licenses
-//
-// 1. The GNU Lesser General Public License v3 (or later)
-// -> http://www.gnu.org/licenses/lgpl-3.0.txt
-// 2. The Apache License, Version 2.0
-// -> http://www.apache.org/licenses/LICENSE-2.0.txt
-//
-package org.artofsolving.jodconverter.office;
-
-import java.net.ConnectException;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.Future;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import com.sun.star.frame.XDesktop;
-import com.sun.star.lang.DisposedException;
-
-class ManagedOfficeProcess {
-
- private static final Integer EXIT_CODE_NEW_INSTALLATION = Integer.valueOf(81);
-
- private final ManagedOfficeProcessSettings settings;
-
- private final OfficeProcess process;
- private final OfficeConnection connection;
-
- private ExecutorService executor = Executors.newSingleThreadExecutor(new NamedThreadFactory("OfficeProcessThread"));
-
- private final Logger logger = Logger.getLogger(getClass().getName());
-
- public ManagedOfficeProcess(ManagedOfficeProcessSettings settings) throws OfficeException {
- this.settings = settings;
- process = new OfficeProcess(settings.getOfficeHome(), settings.getUnoUrl(), settings.getRunAsArgs(), settings.getTemplateProfileDir(), settings.getWorkDir(), settings
- .getProcessManager());
- connection = new OfficeConnection(settings.getUnoUrl());
- }
-
- public OfficeConnection getConnection() {
- return connection;
- }
-
- public void startAndWait() throws OfficeException {
- Future> future = executor.submit(new Runnable() {
- public void run() {
- doStartProcessAndConnect();
- }
- });
- try {
- future.get();
- } catch (Exception exception) {
- throw new OfficeException("failed to start and connect", exception);
- }
- }
-
- public void stopAndWait() throws OfficeException {
- Future> future = executor.submit(new Runnable() {
- public void run() {
- doStopProcess();
- }
- });
- try {
- future.get();
- } catch (Exception exception) {
- throw new OfficeException("failed to start and connect", exception);
- }
- }
-
- public void restartAndWait() {
- Future> future = executor.submit(new Runnable() {
- public void run() {
- doStopProcess();
- doStartProcessAndConnect();
- }
- });
- try {
- future.get();
- } catch (Exception exception) {
- throw new OfficeException("failed to restart", exception);
- }
- }
-
- public void restartDueToTaskTimeout() {
- executor.execute(new Runnable() {
- public void run() {
- doTerminateProcess();
- // will cause unexpected disconnection and subsequent restart
- }
- });
- }
-
- public void restartDueToLostConnection() {
- executor.execute(new Runnable() {
- public void run() {
- try {
- doEnsureProcessExited();
- doStartProcessAndConnect();
- } catch (OfficeException officeException) {
- logger.log(Level.SEVERE, "could not restart process", officeException);
- }
- }
- });
- }
-
- private void doStartProcessAndConnect() throws OfficeException {
- try {
- process.start();
- new Retryable() {
- protected void attempt() throws TemporaryException, Exception {
- try {
- connection.connect();
- } catch (ConnectException connectException) {
- Integer exitCode = process.getExitCode();
- if (exitCode == null) {
- // process is running; retry later
- throw new TemporaryException(connectException);
- } else if (exitCode.equals(EXIT_CODE_NEW_INSTALLATION)) {
- // restart and retry later
- // see http://code.google.com/p/jodconverter/issues/detail?id=84
- logger.log(Level.WARNING, "office process died with exit code 81; restarting it");
- process.start(true);
- throw new TemporaryException(connectException);
- } else {
- throw new OfficeException("office process died with exit code " + exitCode);
- }
- }
- }
- }.execute(settings.getRetryInterval(), settings.getRetryTimeout());
- } catch (Exception exception) {
- throw new OfficeException("could not establish connection", exception);
- }
- }
-
- private void doStopProcess() {
- try {
- XDesktop desktop = OfficeUtils.cast(XDesktop.class, connection.getService(OfficeUtils.SERVICE_DESKTOP));
- desktop.terminate();
- } catch (DisposedException disposedException) {
- // expected
- } catch (Exception exception) {
- // in case we can't get hold of the desktop
- doTerminateProcess();
- }
- doEnsureProcessExited();
- }
-
- private void doEnsureProcessExited() throws OfficeException {
- try {
- int exitCode = process.getExitCode(settings.getRetryInterval(), settings.getRetryTimeout());
- logger.info("process exited with code " + exitCode);
- } catch (RetryTimeoutException retryTimeoutException) {
- doTerminateProcess();
- }
- process.deleteProfileDir();
- }
-
- private void doTerminateProcess() throws OfficeException {
- try {
- int exitCode = process.forciblyTerminate(settings.getRetryInterval(), settings.getRetryTimeout());
- logger.info("process forcibly terminated with code " + exitCode);
- } catch (Exception exception) {
- throw new OfficeException("could not terminate process", exception);
- }
- }
-
- boolean isConnected() {
- return connection.isConnected();
- }
-
-}
diff --git a/office-plugin/src/main/java/org/artofsolving/jodconverter/office/ManagedOfficeProcessSettings.java b/office-plugin/src/main/java/org/artofsolving/jodconverter/office/ManagedOfficeProcessSettings.java
deleted file mode 100644
index a6fe6bf9..00000000
--- a/office-plugin/src/main/java/org/artofsolving/jodconverter/office/ManagedOfficeProcessSettings.java
+++ /dev/null
@@ -1,97 +0,0 @@
-//
-// JODConverter - Java OpenDocument Converter
-// Copyright 2004-2012 Mirko Nasato and contributors
-//
-// JODConverter is Open Source software, you can redistribute it and/or
-// modify it under either (at your option) of the following licenses
-//
-// 1. The GNU Lesser General Public License v3 (or later)
-// -> http://www.gnu.org/licenses/lgpl-3.0.txt
-// 2. The Apache License, Version 2.0
-// -> http://www.apache.org/licenses/LICENSE-2.0.txt
-//
-package org.artofsolving.jodconverter.office;
-
-import java.io.File;
-
-import org.artofsolving.jodconverter.process.ProcessManager;
-import org.artofsolving.jodconverter.process.PureJavaProcessManager;
-
-class ManagedOfficeProcessSettings {
-
- public static final long DEFAULT_RETRY_INTERVAL = 250L;
-
- private final UnoUrl unoUrl;
- private File officeHome = OfficeUtils.getDefaultOfficeHome();
- private String[] runAsArgs;
- private File templateProfileDir;
- private File workDir = new File(System.getProperty("java.io.tmpdir"));
- private ProcessManager processManager = new PureJavaProcessManager();
- private long retryTimeout = DefaultOfficeManagerConfiguration.DEFAULT_RETRY_TIMEOUT;
- private long retryInterval = DEFAULT_RETRY_INTERVAL;
-
- public ManagedOfficeProcessSettings(UnoUrl unoUrl) {
- this.unoUrl = unoUrl;
- }
-
- public UnoUrl getUnoUrl() {
- return unoUrl;
- }
-
- public File getOfficeHome() {
- return officeHome;
- }
-
- public void setOfficeHome(File officeHome) {
- this.officeHome = officeHome;
- }
-
- public String[] getRunAsArgs() {
- return runAsArgs;
- }
-
- public void setRunAsArgs(String[] runAsArgs) {
- this.runAsArgs = runAsArgs;
- }
-
- public File getTemplateProfileDir() {
- return templateProfileDir;
- }
-
- public void setTemplateProfileDir(File templateProfileDir) {
- this.templateProfileDir = templateProfileDir;
- }
-
- public File getWorkDir() {
- return workDir;
- }
-
- public void setWorkDir(File workDir) {
- this.workDir = workDir;
- }
-
- public ProcessManager getProcessManager() {
- return processManager;
- }
-
- public void setProcessManager(ProcessManager processManager) {
- this.processManager = processManager;
- }
-
- public long getRetryTimeout() {
- return retryTimeout;
- }
-
- public void setRetryTimeout(long retryTimeout) {
- this.retryTimeout = retryTimeout;
- }
-
- public long getRetryInterval() {
- return retryInterval;
- }
-
- public void setRetryInterval(long retryInterval) {
- this.retryInterval = retryInterval;
- }
-
-}
diff --git a/office-plugin/src/main/java/org/artofsolving/jodconverter/office/NamedThreadFactory.java b/office-plugin/src/main/java/org/artofsolving/jodconverter/office/NamedThreadFactory.java
deleted file mode 100644
index aca5afeb..00000000
--- a/office-plugin/src/main/java/org/artofsolving/jodconverter/office/NamedThreadFactory.java
+++ /dev/null
@@ -1,43 +0,0 @@
-//
-// JODConverter - Java OpenDocument Converter
-// Copyright 2004-2012 Mirko Nasato and contributors
-//
-// JODConverter is Open Source software, you can redistribute it and/or
-// modify it under either (at your option) of the following licenses
-//
-// 1. The GNU Lesser General Public License v3 (or later)
-// -> http://www.gnu.org/licenses/lgpl-3.0.txt
-// 2. The Apache License, Version 2.0
-// -> http://www.apache.org/licenses/LICENSE-2.0.txt
-//
-package org.artofsolving.jodconverter.office;
-
-import java.util.concurrent.ThreadFactory;
-import java.util.concurrent.atomic.AtomicInteger;
-
-/**
- * A {@link ThreadFactory} that allows for custom thread names
- */
-class NamedThreadFactory implements ThreadFactory {
-
- private static final AtomicInteger threadIndex = new AtomicInteger(0);
-
- private final String baseName;
- private final boolean daemon;
-
- public NamedThreadFactory(String baseName) {
- this(baseName, true);
- }
-
- public NamedThreadFactory(String baseName, boolean daemon) {
- this.baseName = baseName;
- this.daemon = daemon;
- }
-
- public Thread newThread(Runnable runnable) {
- Thread thread = new Thread(runnable, baseName + "-" + threadIndex.getAndIncrement());
- thread.setDaemon(daemon);
- return thread;
- }
-
-}
diff --git a/office-plugin/src/main/java/org/artofsolving/jodconverter/office/OfficeConnection.java b/office-plugin/src/main/java/org/artofsolving/jodconverter/office/OfficeConnection.java
deleted file mode 100644
index 2d494f1b..00000000
--- a/office-plugin/src/main/java/org/artofsolving/jodconverter/office/OfficeConnection.java
+++ /dev/null
@@ -1,117 +0,0 @@
-//
-// JODConverter - Java OpenDocument Converter
-// Copyright 2004-2012 Mirko Nasato and contributors
-//
-// JODConverter is Open Source software, you can redistribute it and/or
-// modify it under either (at your option) of the following licenses
-//
-// 1. The GNU Lesser General Public License v3 (or later)
-// -> http://www.gnu.org/licenses/lgpl-3.0.txt
-// 2. The Apache License, Version 2.0
-// -> http://www.apache.org/licenses/LICENSE-2.0.txt
-//
-package org.artofsolving.jodconverter.office;
-
-import java.net.ConnectException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.atomic.AtomicInteger;
-import java.util.logging.Logger;
-
-import com.sun.star.beans.XPropertySet;
-import com.sun.star.bridge.XBridge;
-import com.sun.star.bridge.XBridgeFactory;
-import com.sun.star.comp.helper.Bootstrap;
-import com.sun.star.connection.NoConnectException;
-import com.sun.star.connection.XConnection;
-import com.sun.star.connection.XConnector;
-import com.sun.star.lang.EventObject;
-import com.sun.star.lang.XComponent;
-import com.sun.star.lang.XEventListener;
-import com.sun.star.lang.XMultiComponentFactory;
-import com.sun.star.uno.XComponentContext;
-
-class OfficeConnection implements OfficeContext {
-
- private static AtomicInteger bridgeIndex = new AtomicInteger();
-
- private final UnoUrl unoUrl;
-
- private XComponent bridgeComponent;
- private XMultiComponentFactory serviceManager;
- private XComponentContext componentContext;
-
- private final List connectionEventListeners = new ArrayList();
-
- private volatile boolean connected = false;
-
- private XEventListener bridgeListener = new XEventListener() {
- public void disposing(EventObject event) {
- if (connected) {
- connected = false;
- logger.info(String.format("disconnected: '%s'", unoUrl));
- OfficeConnectionEvent connectionEvent = new OfficeConnectionEvent(OfficeConnection.this);
- for (OfficeConnectionEventListener listener : connectionEventListeners) {
- listener.disconnected(connectionEvent);
- }
- }
- // else we tried to connect to a server that doesn't speak URP
- }
- };
-
- private final Logger logger = Logger.getLogger(getClass().getName());
-
- public OfficeConnection(UnoUrl unoUrl) {
- this.unoUrl = unoUrl;
- }
-
- public void addConnectionEventListener(OfficeConnectionEventListener connectionEventListener) {
- connectionEventListeners.add(connectionEventListener);
- }
-
- public void connect() throws ConnectException {
- logger.fine(String.format("connecting with connectString '%s'", unoUrl));
- try {
- XComponentContext localContext = Bootstrap.createInitialComponentContext(null);
- XMultiComponentFactory localServiceManager = localContext.getServiceManager();
- XConnector connector = OfficeUtils.cast(XConnector.class, localServiceManager.createInstanceWithContext("com.sun.star.connection.Connector", localContext));
- XConnection connection = connector.connect(unoUrl.getConnectString());
- XBridgeFactory bridgeFactory = OfficeUtils.cast(XBridgeFactory.class, localServiceManager.createInstanceWithContext("com.sun.star.bridge.BridgeFactory", localContext));
- String bridgeName = "jodconverter_" + bridgeIndex.getAndIncrement();
- XBridge bridge = bridgeFactory.createBridge(bridgeName, "urp", connection, null);
- bridgeComponent = OfficeUtils.cast(XComponent.class, bridge);
- bridgeComponent.addEventListener(bridgeListener);
- serviceManager = OfficeUtils.cast(XMultiComponentFactory.class, bridge.getInstance("StarOffice.ServiceManager"));
- XPropertySet properties = OfficeUtils.cast(XPropertySet.class, serviceManager);
- componentContext = OfficeUtils.cast(XComponentContext.class, properties.getPropertyValue("DefaultContext"));
- connected = true;
- logger.info(String.format("connected: '%s'", unoUrl));
- OfficeConnectionEvent connectionEvent = new OfficeConnectionEvent(this);
- for (OfficeConnectionEventListener listener : connectionEventListeners) {
- listener.connected(connectionEvent);
- }
- } catch (NoConnectException connectException) {
- throw new ConnectException(String.format("connection failed: '%s'; %s", unoUrl, connectException.getMessage()));
- } catch (Exception exception) {
- throw new OfficeException("connection failed: "+ unoUrl, exception);
- }
- }
-
- public boolean isConnected() {
- return connected;
- }
-
- public synchronized void disconnect() {
- logger.fine(String.format("disconnecting: '%s'", unoUrl));
- bridgeComponent.dispose();
- }
-
- public Object getService(String serviceName) {
- try {
- return serviceManager.createInstanceWithContext(serviceName, componentContext);
- } catch (Exception exception) {
- throw new OfficeException(String.format("failed to obtain service '%s'", serviceName), exception);
- }
- }
-
-}
diff --git a/office-plugin/src/main/java/org/artofsolving/jodconverter/office/OfficeConnectionEvent.java b/office-plugin/src/main/java/org/artofsolving/jodconverter/office/OfficeConnectionEvent.java
deleted file mode 100644
index c3608df3..00000000
--- a/office-plugin/src/main/java/org/artofsolving/jodconverter/office/OfficeConnectionEvent.java
+++ /dev/null
@@ -1,25 +0,0 @@
-//
-// JODConverter - Java OpenDocument Converter
-// Copyright 2004-2012 Mirko Nasato and contributors
-//
-// JODConverter is Open Source software, you can redistribute it and/or
-// modify it under either (at your option) of the following licenses
-//
-// 1. The GNU Lesser General Public License v3 (or later)
-// -> http://www.gnu.org/licenses/lgpl-3.0.txt
-// 2. The Apache License, Version 2.0
-// -> http://www.apache.org/licenses/LICENSE-2.0.txt
-//
-package org.artofsolving.jodconverter.office;
-
-import java.util.EventObject;
-
-class OfficeConnectionEvent extends EventObject {
-
- private static final long serialVersionUID = 2060652797570876077L;
-
- public OfficeConnectionEvent(OfficeConnection source) {
- super(source);
- }
-
-}
diff --git a/office-plugin/src/main/java/org/artofsolving/jodconverter/office/OfficeConnectionEventListener.java b/office-plugin/src/main/java/org/artofsolving/jodconverter/office/OfficeConnectionEventListener.java
deleted file mode 100644
index 19b5b320..00000000
--- a/office-plugin/src/main/java/org/artofsolving/jodconverter/office/OfficeConnectionEventListener.java
+++ /dev/null
@@ -1,23 +0,0 @@
-//
-// JODConverter - Java OpenDocument Converter
-// Copyright 2004-2012 Mirko Nasato and contributors
-//
-// JODConverter is Open Source software, you can redistribute it and/or
-// modify it under either (at your option) of the following licenses
-//
-// 1. The GNU Lesser General Public License v3 (or later)
-// -> http://www.gnu.org/licenses/lgpl-3.0.txt
-// 2. The Apache License, Version 2.0
-// -> http://www.apache.org/licenses/LICENSE-2.0.txt
-//
-package org.artofsolving.jodconverter.office;
-
-import java.util.EventListener;
-
-interface OfficeConnectionEventListener extends EventListener {
-
- void connected(OfficeConnectionEvent event);
-
- void disconnected(OfficeConnectionEvent event);
-
-}
diff --git a/office-plugin/src/main/java/org/artofsolving/jodconverter/office/OfficeConnectionProtocol.java b/office-plugin/src/main/java/org/artofsolving/jodconverter/office/OfficeConnectionProtocol.java
deleted file mode 100644
index b3265521..00000000
--- a/office-plugin/src/main/java/org/artofsolving/jodconverter/office/OfficeConnectionProtocol.java
+++ /dev/null
@@ -1,15 +0,0 @@
-//
-// JODConverter - Java OpenDocument Converter
-// Copyright 2004-2012 Mirko Nasato and contributors
-//
-// JODConverter is Open Source software, you can redistribute it and/or
-// modify it under either (at your option) of the following licenses
-//
-// 1. The GNU Lesser General Public License v3 (or later)
-// -> http://www.gnu.org/licenses/lgpl-3.0.txt
-// 2. The Apache License, Version 2.0
-// -> http://www.apache.org/licenses/LICENSE-2.0.txt
-//
-package org.artofsolving.jodconverter.office;
-
-public enum OfficeConnectionProtocol { PIPE, SOCKET }
\ No newline at end of file
diff --git a/office-plugin/src/main/java/org/artofsolving/jodconverter/office/OfficeContext.java b/office-plugin/src/main/java/org/artofsolving/jodconverter/office/OfficeContext.java
deleted file mode 100644
index 80b9bac6..00000000
--- a/office-plugin/src/main/java/org/artofsolving/jodconverter/office/OfficeContext.java
+++ /dev/null
@@ -1,19 +0,0 @@
-//
-// JODConverter - Java OpenDocument Converter
-// Copyright 2004-2012 Mirko Nasato and contributors
-//
-// JODConverter is Open Source software, you can redistribute it and/or
-// modify it under either (at your option) of the following licenses
-//
-// 1. The GNU Lesser General Public License v3 (or later)
-// -> http://www.gnu.org/licenses/lgpl-3.0.txt
-// 2. The Apache License, Version 2.0
-// -> http://www.apache.org/licenses/LICENSE-2.0.txt
-//
-package org.artofsolving.jodconverter.office;
-
-public interface OfficeContext {
-
- Object getService(String serviceName);
-
-}
diff --git a/office-plugin/src/main/java/org/artofsolving/jodconverter/office/OfficeException.java b/office-plugin/src/main/java/org/artofsolving/jodconverter/office/OfficeException.java
deleted file mode 100644
index 8311755b..00000000
--- a/office-plugin/src/main/java/org/artofsolving/jodconverter/office/OfficeException.java
+++ /dev/null
@@ -1,26 +0,0 @@
-//
-// JODConverter - Java OpenDocument Converter
-// Copyright 2004-2012 Mirko Nasato and contributors
-//
-// JODConverter is Open Source software, you can redistribute it and/or
-// modify it under either (at your option) of the following licenses
-//
-// 1. The GNU Lesser General Public License v3 (or later)
-// -> http://www.gnu.org/licenses/lgpl-3.0.txt
-// 2. The Apache License, Version 2.0
-// -> http://www.apache.org/licenses/LICENSE-2.0.txt
-//
-package org.artofsolving.jodconverter.office;
-
-public class OfficeException extends RuntimeException {
-
- private static final long serialVersionUID = 1L;
-
- public OfficeException(String message) {
- super(message);
- }
-
- public OfficeException(String message, Throwable cause) {
- super(message, cause);
- }
-}
diff --git a/office-plugin/src/main/java/org/artofsolving/jodconverter/office/OfficeManager.java b/office-plugin/src/main/java/org/artofsolving/jodconverter/office/OfficeManager.java
deleted file mode 100644
index fb4cba09..00000000
--- a/office-plugin/src/main/java/org/artofsolving/jodconverter/office/OfficeManager.java
+++ /dev/null
@@ -1,30 +0,0 @@
-//
-// JODConverter - Java OpenDocument Converter
-// Copyright 2004-2012 Mirko Nasato and contributors
-//
-// JODConverter is Open Source software, you can redistribute it and/or
-// modify it under either (at your option) of the following licenses
-//
-// 1. The GNU Lesser General Public License v3 (or later)
-// -> http://www.gnu.org/licenses/lgpl-3.0.txt
-// 2. The Apache License, Version 2.0
-// -> http://www.apache.org/licenses/LICENSE-2.0.txt
-//
-package org.artofsolving.jodconverter.office;
-
-/**
- * An OfficeManager knows how to execute {@link OfficeTask}s.
- *
- * An OfficeManager implementation will typically manage one or more
- * {@link OfficeConnection}s.
- */
-public interface OfficeManager {
-
- void execute(OfficeTask task) throws OfficeException;
-
- void start() throws OfficeException;
-
- void stop() throws OfficeException;
-
- boolean isRunning();
-}
diff --git a/office-plugin/src/main/java/org/artofsolving/jodconverter/office/OfficeProcess.java b/office-plugin/src/main/java/org/artofsolving/jodconverter/office/OfficeProcess.java
deleted file mode 100644
index 105681d8..00000000
--- a/office-plugin/src/main/java/org/artofsolving/jodconverter/office/OfficeProcess.java
+++ /dev/null
@@ -1,210 +0,0 @@
-//
-// JODConverter - Java OpenDocument Converter
-// Copyright 2004-2012 Mirko Nasato and contributors
-//
-// JODConverter is Open Source software, you can redistribute it and/or
-// modify it under either (at your option) of the following licenses
-//
-// 1. The GNU Lesser General Public License v3 (or later)
-// -> http://www.gnu.org/licenses/lgpl-3.0.txt
-// 2. The Apache License, Version 2.0
-// -> http://www.apache.org/licenses/LICENSE-2.0.txt
-//
-package org.artofsolving.jodconverter.office;
-
-import static org.artofsolving.jodconverter.process.ProcessManager.PID_NOT_FOUND;
-import static org.artofsolving.jodconverter.process.ProcessManager.PID_UNKNOWN;
-import java.io.File;
-import java.io.IOException;
-import java.nio.charset.Charset;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-import java.util.logging.Logger;
-
-import org.apache.commons.io.FileUtils;
-import org.artofsolving.jodconverter.process.ProcessManager;
-import org.artofsolving.jodconverter.process.ProcessQuery;
-import org.artofsolving.jodconverter.util.PlatformUtils;
-
-class OfficeProcess {
-
- private final File officeHome;
- private final UnoUrl unoUrl;
- private final String[] runAsArgs;
- private final File templateProfileDir;
- private final File instanceProfileDir;
- private final ProcessManager processManager;
-
- private Process process;
- private long pid = PID_UNKNOWN;
-
- private final Logger logger = Logger.getLogger(getClass().getName());
-
- public OfficeProcess(File officeHome, UnoUrl unoUrl, String[] runAsArgs, File templateProfileDir, File workDir, ProcessManager processManager) {
- this.officeHome = officeHome;
- this.unoUrl = unoUrl;
- this.runAsArgs = runAsArgs;
- this.templateProfileDir = templateProfileDir;
- this.instanceProfileDir = getInstanceProfileDir(workDir, unoUrl);
- this.processManager = processManager;
- }
-
- public void start() throws IOException {
- start(false);
- }
-
- public void start(boolean restart) throws IOException {
- ProcessQuery processQuery = new ProcessQuery("soffice.bin", unoUrl.getAcceptString());
- long existingPid = processManager.findPid(processQuery);
- if (!(existingPid == PID_NOT_FOUND || existingPid == PID_UNKNOWN)) {
- throw new IllegalStateException(String.format("a process with acceptString '%s' is already running; pid %d",
- unoUrl.getAcceptString(), existingPid));
- }
- if (!restart) {
- prepareInstanceProfileDir();
- }
- List command = new ArrayList();
- File executable = OfficeUtils.getOfficeExecutable(officeHome);
- if (runAsArgs != null) {
- command.addAll(Arrays.asList(runAsArgs));
- }
- command.add(executable.getAbsolutePath());
- command.add("-accept=" + unoUrl.getAcceptString() + ";urp;");
- command.add("-env:UserInstallation=" + OfficeUtils.toUrl(instanceProfileDir));
- command.add("-headless");
- command.add("-nocrashreport");
- command.add("-nodefault");
- command.add("-nofirststartwizard");
- command.add("-nolockcheck");
- command.add("-nologo");
- command.add("-norestore");
- ProcessBuilder processBuilder = new ProcessBuilder(command);
- if (PlatformUtils.isWindows()) {
- addBasisAndUrePaths(processBuilder);
- }
- logger.info(String.format("starting process with acceptString '%s' and profileDir '%s'", unoUrl, instanceProfileDir));
- process = processBuilder.start();
- pid = processManager.findPid(processQuery);
- if (pid == PID_NOT_FOUND) {
- throw new IllegalStateException(String.format("process with acceptString '%s' started but its pid could not be found",
- unoUrl.getAcceptString()));
- }
- logger.info("started process" + (pid != PID_UNKNOWN ? "; pid = " + pid : ""));
- }
-
- private File getInstanceProfileDir(File workDir, UnoUrl unoUrl) {
- String dirName = ".jodconverter_" + unoUrl.getAcceptString().replace(',', '_').replace('=', '-');
- return new File(workDir, dirName);
- }
-
- private void prepareInstanceProfileDir() throws OfficeException {
- if (instanceProfileDir.exists()) {
- logger.warning(String.format("profile dir '%s' already exists; deleting", instanceProfileDir));
- deleteProfileDir();
- }
- if (templateProfileDir != null) {
- try {
- FileUtils.copyDirectory(templateProfileDir, instanceProfileDir);
- } catch (IOException ioException) {
- throw new OfficeException("failed to create profileDir", ioException);
- }
- }
- }
-
- public void deleteProfileDir() {
- if (instanceProfileDir != null) {
- try {
- FileUtils.deleteDirectory(instanceProfileDir);
- } catch (IOException ioException) {
- File oldProfileDir = new File(instanceProfileDir.getParentFile(), instanceProfileDir.getName() + ".old." + System.currentTimeMillis());
- if (instanceProfileDir.renameTo(oldProfileDir)) {
- logger.warning("could not delete profileDir: " + ioException.getMessage() + "; renamed it to " + oldProfileDir);
- } else {
- logger.severe("could not delete profileDir: " + ioException.getMessage());
- }
- }
- }
- }
-
- private void addBasisAndUrePaths(ProcessBuilder processBuilder) throws IOException {
- // see http://wiki.services.openoffice.org/wiki/ODF_Toolkit/Efforts/Three-Layer_OOo
- File basisLink = new File(officeHome, "basis-link");
- if (!basisLink.isFile()) {
- logger.fine("no %OFFICE_HOME%/basis-link found; assuming it's OOo 2.x and we don't need to append URE and Basic paths");
- return;
- }
- String basisLinkText = FileUtils.readFileToString(basisLink, Charset.defaultCharset()).trim();
- File basisHome = new File(officeHome, basisLinkText);
- File basisProgram = new File(basisHome, "program");
- File ureLink = new File(basisHome, "ure-link");
- String ureLinkText = FileUtils.readFileToString(ureLink, Charset.defaultCharset()).trim();
- File ureHome = new File(basisHome, ureLinkText);
- File ureBin = new File(ureHome, "bin");
- Map environment = processBuilder.environment();
- // Windows environment variables are case insensitive but Java maps are not :-/
- // so let's make sure we modify the existing key
- String pathKey = "PATH";
- for (String key : environment.keySet()) {
- if ("PATH".equalsIgnoreCase(key)) {
- pathKey = key;
- }
- }
- String path = environment.get(pathKey) + ";" + ureBin.getAbsolutePath() + ";" + basisProgram.getAbsolutePath();
- logger.fine(String.format("setting %s to \"%s\"", pathKey, path));
- environment.put(pathKey, path);
- }
-
- public boolean isRunning() {
- if (process == null) {
- return false;
- }
- return getExitCode() == null;
- }
-
- private class ExitCodeRetryable extends Retryable {
-
- private int exitCode;
-
- protected void attempt() throws TemporaryException, Exception {
- try {
- exitCode = process.exitValue();
- } catch (IllegalThreadStateException illegalThreadStateException) {
- throw new TemporaryException(illegalThreadStateException);
- }
- }
-
- public int getExitCode() {
- return exitCode;
- }
-
- }
-
- public Integer getExitCode() {
- try {
- return process.exitValue();
- } catch (IllegalThreadStateException exception) {
- return null;
- }
- }
-
- public int getExitCode(long retryInterval, long retryTimeout) throws RetryTimeoutException {
- try {
- ExitCodeRetryable retryable = new ExitCodeRetryable();
- retryable.execute(retryInterval, retryTimeout);
- return retryable.getExitCode();
- } catch (RetryTimeoutException retryTimeoutException) {
- throw retryTimeoutException;
- } catch (Exception exception) {
- throw new OfficeException("could not get process exit code", exception);
- }
- }
-
- public int forciblyTerminate(long retryInterval, long retryTimeout) throws IOException, RetryTimeoutException {
- logger.info(String.format("trying to forcibly terminate process: '" + unoUrl + "'" + (pid != PID_UNKNOWN ? " (pid " + pid + ")" : "")));
- processManager.kill(process, pid);
- return getExitCode(retryInterval, retryTimeout);
- }
-
-}
diff --git a/office-plugin/src/main/java/org/artofsolving/jodconverter/office/OfficeTask.java b/office-plugin/src/main/java/org/artofsolving/jodconverter/office/OfficeTask.java
deleted file mode 100644
index bca8d588..00000000
--- a/office-plugin/src/main/java/org/artofsolving/jodconverter/office/OfficeTask.java
+++ /dev/null
@@ -1,19 +0,0 @@
-//
-// JODConverter - Java OpenDocument Converter
-// Copyright 2004-2012 Mirko Nasato and contributors
-//
-// JODConverter is Open Source software, you can redistribute it and/or
-// modify it under either (at your option) of the following licenses
-//
-// 1. The GNU Lesser General Public License v3 (or later)
-// -> http://www.gnu.org/licenses/lgpl-3.0.txt
-// 2. The Apache License, Version 2.0
-// -> http://www.apache.org/licenses/LICENSE-2.0.txt
-//
-package org.artofsolving.jodconverter.office;
-
-public interface OfficeTask {
-
- void execute(OfficeContext context) throws OfficeException;
-
-}
diff --git a/office-plugin/src/main/java/org/artofsolving/jodconverter/office/OfficeUtils.java b/office-plugin/src/main/java/org/artofsolving/jodconverter/office/OfficeUtils.java
deleted file mode 100644
index 5d567a57..00000000
--- a/office-plugin/src/main/java/org/artofsolving/jodconverter/office/OfficeUtils.java
+++ /dev/null
@@ -1,172 +0,0 @@
-//
-// JODConverter - Java OpenDocument Converter
-// Copyright 2004-2012 Mirko Nasato and contributors
-//
-// JODConverter is Open Source software, you can redistribute it and/or
-// modify it under either (at your option) of the following licenses
-//
-// 1. The GNU Lesser General Public License v3 (or later)
-// -> http://www.gnu.org/licenses/lgpl-3.0.txt
-// 2. The Apache License, Version 2.0
-// -> http://www.apache.org/licenses/LICENSE-2.0.txt
-//
-package org.artofsolving.jodconverter.office;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileReader;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Properties;
-
-import org.artofsolving.jodconverter.util.ConfigUtils;
-import org.artofsolving.jodconverter.util.PlatformUtils;
-
-import com.sun.star.beans.PropertyValue;
-import com.sun.star.uno.UnoRuntime;
-
-public class OfficeUtils {
-
- public static final String SERVICE_DESKTOP = "com.sun.star.frame.Desktop";
- public static final String OFFICE_HOME_KEY = "office.home";
- public static final String DEFAULT_OFFICE_HOME_VALUE = "default";
-
- private OfficeUtils() {
- throw new AssertionError("utility class must not be instantiated");
- }
-
- public static T cast(Class type, Object object) {
- return (T) UnoRuntime.queryInterface(type, object);
- }
-
- public static PropertyValue property(String name, Object value) {
- PropertyValue propertyValue = new PropertyValue();
- propertyValue.Name = name;
- propertyValue.Value = value;
- return propertyValue;
- }
-
- @SuppressWarnings("unchecked")
- public static PropertyValue[] toUnoProperties(Map properties) {
- PropertyValue[] propertyValues = new PropertyValue[properties.size()];
- int i = 0;
- for (Map.Entry entry : properties.entrySet()) {
- Object value = entry.getValue();
- if (value instanceof Map) {
- Map subProperties = (Map) value;
- value = toUnoProperties(subProperties);
- }
- propertyValues[i++] = property(entry.getKey(), value);
- }
- return propertyValues;
- }
-
- public static String toUrl(File file) {
- String path = file.toURI().getRawPath();
- String url = path.startsWith("//") ? "file:" + path : "file://" + path;
- return url.endsWith("/") ? url.substring(0, url.length() - 1) : url;
- }
-
- public static File getDefaultOfficeHome() {
- Properties properties = new Properties();
- String customizedConfigPath = ConfigUtils.getCustomizedConfigPath();
- try {
- BufferedReader bufferedReader = new BufferedReader(new FileReader(customizedConfigPath));
- properties.load(bufferedReader);
- restorePropertiesFromEnvFormat(properties);
- } catch (Exception e) {}
- String officeHome = properties.getProperty(OFFICE_HOME_KEY);
- if (officeHome != null && !DEFAULT_OFFICE_HOME_VALUE.equals(officeHome)) {
- return new File(officeHome);
- }
- if (PlatformUtils.isWindows()) {
- // %ProgramFiles(x86)% on 64-bit machines; %ProgramFiles% on 32-bit ones
- String officePluginPath = ConfigUtils.getOfficePluginPath();
- String programFiles = System.getenv("ProgramFiles(x86)");
- if (programFiles == null) {
- programFiles = System.getenv("ProgramFiles");
- }
- return findOfficeHome(
- officePluginPath + File.separator + "windows-office",
- programFiles + File.separator + "LibreOffice",
- programFiles + File.separator + "OpenOffice 4",
- programFiles + File.separator + "LibreOffice 4"
- );
- } else if (PlatformUtils.isMac()) {
- return findOfficeHome(
- "/Applications/OpenOffice.org.app/Contents",
- "/Applications/OpenOffice.app/Contents",
- "/Applications/LibreOffice.app/Contents"
- );
- } else {
- // Linux or other *nix variants
- return findOfficeHome(
- "/opt/openoffice.org3",
- "/opt/openoffice",
- "/opt/libreoffice",
- "/opt/libreoffice6.0",
- "/opt/libreoffice6.1",
- "/opt/libreoffice6.2",
- "/opt/libreoffice6.3",
- "/opt/libreoffice6.4",
- "/opt/libreoffice7.0",
- "/opt/libreoffice7.1",
- "/opt/libreoffice7.2",
- "/opt/libreoffice7.3",
- "/opt/libreoffice7.4",
- "/opt/openoffice4",
- "/usr/lib/openoffice",
- "/usr/lib/libreoffice"
- );
- }
- }
-
- private static File findOfficeHome(String... knownPaths) {
- for (String path : knownPaths) {
- File home = new File(path);
- if (getOfficeExecutable(home).isFile()) {
- return home;
- }
- }
- return null;
- }
-
- public static File getOfficeExecutable(File officeHome) {
- if (PlatformUtils.isMac()) {
- return new File(officeHome, "MacOS/soffice");
- } else {
- return new File(officeHome, "program/soffice.bin");
- }
- }
-
-
-
- /**
- * SpringBoot application.properties 支持从环境变量获取值
- * @param properties
- */
- public synchronized static void restorePropertiesFromEnvFormat(Properties properties) {
- Iterator> iterator = properties.entrySet().iterator();
- while (iterator.hasNext()) {
- Map.Entry