| /************************************************************** |
| * |
| * 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 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| /* |
| * AbstractExporter.java |
| * |
| * Created on 1. Oktober 2003, 16:12 |
| */ |
| package com.sun.star.wizards.web.export; |
| |
| import com.sun.star.beans.PropertyValue; |
| import com.sun.star.document.MacroExecMode; |
| import com.sun.star.document.UpdateDocMode; |
| import com.sun.star.frame.XComponentLoader; |
| import com.sun.star.frame.XDesktop; |
| import com.sun.star.frame.XStorable; |
| import com.sun.star.io.IOException; |
| import com.sun.star.lang.XMultiServiceFactory; |
| import com.sun.star.uno.UnoRuntime; |
| import com.sun.star.util.XCloseable; |
| import com.sun.star.wizards.common.Desktop; |
| import com.sun.star.wizards.common.FileAccess; |
| import com.sun.star.wizards.common.Properties; |
| import com.sun.star.wizards.document.OfficeDocument; |
| import com.sun.star.wizards.text.TextDocument; |
| import com.sun.star.wizards.web.data.CGArgument; |
| import com.sun.star.wizards.web.data.CGDocument; |
| import com.sun.star.wizards.web.data.CGExporter; |
| import com.sun.star.wizards.web.data.TypeDetection; |
| |
| /** |
| * |
| * @author rpiterman |
| */ |
| public abstract class AbstractExporter implements Exporter |
| { |
| |
| protected CGExporter exporter; |
| protected FileAccess fileAccess; |
| |
| protected void storeToURL(Object officeDocument, Properties props, String targetUrl, String filterName, PropertyValue[] filterData) |
| throws IOException |
| { |
| |
| props = new Properties(); |
| props.put("FilterName", filterName); |
| |
| if (filterData.length > 0) |
| { |
| props.put("FilterData", filterData); |
| } |
| XStorable xs = UnoRuntime.queryInterface(XStorable.class, officeDocument); |
| PropertyValue[] o = props.getProperties(); |
| xs.storeToURL(targetUrl, o); |
| } |
| |
| protected void storeToURL(Object officeDocument, String targetUrl, String filterName, PropertyValue[] filterData) |
| throws IOException |
| { |
| |
| storeToURL(officeDocument, new Properties(), targetUrl, filterName, filterData); |
| } |
| |
| protected void storeToURL(Object officeDocument, String targetUrl, String filterName) |
| throws IOException |
| { |
| |
| storeToURL(officeDocument, new Properties(), targetUrl, filterName, new PropertyValue[0]); |
| |
| } |
| |
| protected String getArgument(String name, CGExporter p) |
| { |
| return ((CGArgument) p.cp_Arguments.getElement(name)).cp_Value; |
| } |
| |
| protected Object openDocument(CGDocument doc, XMultiServiceFactory xmsf) |
| throws com.sun.star.io.IOException |
| { |
| Object document = null; |
| //open the document. |
| try |
| { |
| XDesktop desktop = Desktop.getDesktop(xmsf); |
| Properties props = new Properties(); |
| props.put("Hidden", Boolean.TRUE); |
| props.put("MacroExecutionMode", new Short(MacroExecMode.NEVER_EXECUTE)); |
| props.put("UpdateDocMode", new Short(UpdateDocMode.NO_UPDATE)); |
| document = UnoRuntime.queryInterface(XComponentLoader.class, desktop).loadComponentFromURL(doc.cp_URL, "_blank", 0, props.getProperties()); |
| } |
| catch (com.sun.star.lang.IllegalArgumentException iaex) |
| { |
| } |
| //try to get the number of pages in the document; |
| try |
| { |
| pageCount(doc, document); |
| } |
| catch (Exception ex) |
| { |
| //Here i do nothing since pages is not *so* important. |
| } |
| return document; |
| } |
| |
| protected void closeDocument(Object doc, XMultiServiceFactory xmsf) |
| { |
| /*OfficeDocument.dispose( |
| xmsf, |
| (XComponent) UnoRuntime.queryInterface(XComponent.class, doc));*/ |
| try |
| { |
| XCloseable xc = UnoRuntime.queryInterface(XCloseable.class, doc); |
| xc.close(false); |
| } |
| catch (Exception ex) |
| { |
| ex.printStackTrace(); |
| } |
| } |
| |
| private void pageCount(CGDocument doc, Object document) |
| { |
| if (doc.appType.equals(TypeDetection.WRITER_DOC)) |
| { |
| doc.pages = TextDocument.getPageCount(document); |
| } |
| else if (doc.appType.equals(TypeDetection.IMPRESS_DOC)) |
| { |
| doc.pages = OfficeDocument.getSlideCount(document); |
| } |
| else if (doc.appType.equals(TypeDetection.DRAW_DOC)) |
| { |
| doc.pages = OfficeDocument.getSlideCount(document); |
| } |
| } |
| |
| public void init(CGExporter exporter_) |
| { |
| exporter = exporter_; |
| } |
| |
| protected FileAccess getFileAccess(XMultiServiceFactory xmsf) |
| { |
| if (fileAccess == null) |
| { |
| try |
| { |
| fileAccess = new FileAccess(xmsf); |
| } |
| catch (Exception ex) |
| { |
| } |
| } |
| return fileAccess; |
| } |
| |
| protected void calcFileSize(CGDocument doc, String url, XMultiServiceFactory xmsf) |
| { |
| /*if the exporter exports to a |
| * binary format, get the size of the destination. |
| */ |
| if (exporter.cp_Binary) |
| { |
| doc.sizeBytes = getFileAccess(xmsf).getSize(url); |
| } |
| } |
| } |