diff options
author | Javier Fernandez <jfernandez@igalia.com> | 2013-03-19 19:02:17 +0000 |
---|---|---|
committer | Michael Meeks <michael.meeks@suse.com> | 2013-03-25 13:23:10 +0000 |
commit | 7be9cd9ca06e8299c686c4c8eeae4ecbc9b1112d (patch) | |
tree | ac916f670bd63968234f6ce6f407a76a8b9aa815 /wizards/com/sun/star | |
parent | 6ddd42768aab98332f80cc8713bd30becbcef2d5 (diff) |
Init: Added new Exporter classes.
Change-Id: I45a0c3a4665581dcd0709d1ae72fbbbf404d7182
Diffstat (limited to 'wizards/com/sun/star')
4 files changed, 199 insertions, 0 deletions
diff --git a/wizards/com/sun/star/wizards/web/export/AbstractExporter.py b/wizards/com/sun/star/wizards/web/export/AbstractExporter.py new file mode 100644 index 000000000000..2dd45c2f7bce --- /dev/null +++ b/wizards/com/sun/star/wizards/web/export/AbstractExporter.py @@ -0,0 +1,106 @@ +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This file incorporates work covered by the following license notice: +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to you under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of +# the License at http://www.apache.org/licenses/LICENSE-2.0 . +# +import traceback +import uno + +from .Exporter import Exporter +from ..TypeDetection import * +from ...common.Desktop import Desktop +from ...common.Properties import Properties +from ...common.FileAccess import FileAccess +from ...document.OfficeDocument import OfficeDocument +from ...text.TextDocument import TextDocument + +from com.sun.star.lang import IllegalArgumentException +from com.sun.star.document.MacroExecMode import NEVER_EXECUTE +from com.sun.star.document.UpdateDocMode import NO_UPDATE + +class AbstractExporter(Exporter): + + exporter = None + fileAccess = None + + def __init__(self, exporter_): + print ("DEBUG !!! AbstractExporter.init - exporter: ", exporter_) + self.exporter = exporter_ + + def storeToURL(self, officeDocument, props, targetUrl, filterName, filterData): + props = Properties() + props["FilterName"] = filterName + if (len(filterData) > 0): + props["FilterData"] = filterData + o = props.getProperties1() + officeDocument.storeToURL(targetUrl, tuple(o)) + + def storeToURL1(self, officeDocument, targetUrl, filterName, filterData): + self.storeToURL(officeDocument, Properties(), targetUrl, filterName, filterData) + + def storeToURL2(self, officeDocument, targetUrl, filterName): + self.storeToURL(officeDocument, Properties(), targetUrl, filterName, []) + + def getArgument(self, name, p): + return p.cp_Arguments.getElement(name).cp_Value + + def openDocument(self, doc, xmsf): + document = None + # open the document. + try: + desktop = Desktop.getDesktop(xmsf) + props = list(range(3)) + props[0] = Properties.createProperty("Hidden", True) + props[1] = Properties.createProperty("MacroExecutionMode", NEVER_EXECUTE) + props[2] = Properties.createProperty("UpdateDocMode", NO_UPDATE) + print ("DEBUG !!! openDocument -- URL: ", doc.cp_URL) + document = desktop.loadComponentFromURL(doc.cp_URL, "_blank", 0, tuple(props)) + except IllegalArgumentException: + traceback.print_exc() + # try to get the number of pages in the document + try: + self.pageCount(doc, document) + except Exception: + traceback.print_exc() + # Here i do nothing since pages is not *so* important. + return document + + def closeDocument(self, doc, xmsf): + try: + doc.close(False) + except Exception: + traceback.print_exc() + + def pageCount(self, doc, document): + if (doc.appType == WRITER_DOC): + doc.pages = TextDocument.getPageCount(document) + elif (doc.appType == IMPRESS_DOC): + doc.pages = OfficeDocument.getSlideCount(document) + elif (doc.appType == DRAW_DOC): + doc.pages = OfficeDocument.getSlideCount(document) + + def getFileAccess(self, xmsf): + if (self.fileAccess == None): + try: + self.fileAccess = FileAccess(xmsf) + except Exception: + traceback.print_exc() + return self.fileAccess + + def calcFileSize(self, doc, url, xmsf): + # if the exporter exports to a + # binary format, get the size of the destination. + if (self.exporter.cp_Binary): + doc.sizeBytes = self.getFileAccess(xmsf).getSize(url) diff --git a/wizards/com/sun/star/wizards/web/export/CopyExporter.py b/wizards/com/sun/star/wizards/web/export/CopyExporter.py new file mode 100644 index 000000000000..862c0455977a --- /dev/null +++ b/wizards/com/sun/star/wizards/web/export/CopyExporter.py @@ -0,0 +1,52 @@ +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This file incorporates work covered by the following license notice: +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to you under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of +# the License at http://www.apache.org/licenses/LICENSE-2.0 . +# +import traceback + +from .AbstractExporter import AbstractExporter +from ...common.FileAccess import FileAccess + +class CopyExporter(AbstractExporter): + + # @see com.sun.star.wizards.web.export.Exporter#export(java.lang.Object, java.io.File, com.sun.star.wizards.web.data.CGSettings, com.sun.star.lang.XMultiServiceFactory) + def export(self, source, target, xmsf, task): + try: + task.advance(True) + + # this will open the document, and calculate the pages/slides number + # in it. + if (self.exporter.cp_PageType > 0): + self.closeDocument(self.openDocument(source, xmsf), xmsf) + + task.advance(True) + + print ("WARNING !!! CopyExporter (creating newtarget) - source.urlFilename: ", source.urlFilename) + + newTarget = FileAccess.connectURLs( + FileAccess.getParentDir(target), source.urlFilename) + + print ("WARNING !!! CopyExporter (export) - source, target: ", source.cp_URL, newTarget) + b = self.getFileAccess(xmsf).copy(source.cp_URL, newTarget) + + task.advance(True) + + self.calcFileSize(source, newTarget, xmsf) + + return b + except Exception: + traceback.print_exc() + return False diff --git a/wizards/com/sun/star/wizards/web/export/Exporter.py b/wizards/com/sun/star/wizards/web/export/Exporter.py new file mode 100644 index 000000000000..5f5c7ecee0c3 --- /dev/null +++ b/wizards/com/sun/star/wizards/web/export/Exporter.py @@ -0,0 +1,40 @@ +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This file incorporates work covered by the following license notice: +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to you under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of +# the License at http://www.apache.org/licenses/LICENSE-2.0 . +# +from ..abc import abstractmethod + +class Exporter: + + # This method exports a document with a specified filter.<br/> + # The method is responsible for exporting the given source document + # to the given target directory. + # The exporter *must* also set the given CGDocument sizeBytes field to the + # size of the converted document, *if* the target document is + # of a binary format. + # always use source.urlFilename as destination filename. + # @param source is a CGDocument object. + # @param targetDirectory contains the URL of a directory to which the file should be exported to. + # @param xmsf this is a basic multiServiceFactory. + # @param task - a task monitoring object. This should advance + # (call task.advance(true) ) 3 times, while exporting. + @abstractmethod + def export(self, source, targetDirectory, xmsf, task): + pass + + @abstractmethod + def init(self, exporter): + pass diff --git a/wizards/com/sun/star/wizards/web/export/__init__.py b/wizards/com/sun/star/wizards/web/export/__init__.py new file mode 100644 index 000000000000..8b137891791f --- /dev/null +++ b/wizards/com/sun/star/wizards/web/export/__init__.py @@ -0,0 +1 @@ + |