Package com.artofsolving.jodconverter.openoffice.converter

Source Code of com.artofsolving.jodconverter.openoffice.converter.AbstractOpenOfficeDocumentConverter

//
// JODConverter - Java OpenDocument Converter
// Copyright (C) 2004-2007 - Mirko Nasato <mirko@artofsolving.com>
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Lesser General Public License for more details.
// http://www.gnu.org/copyleft/lesser.html
//
package com.artofsolving.jodconverter.openoffice.converter;

import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Iterator;
import java.util.Map;

import org.apache.commons.io.FilenameUtils;

import com.artofsolving.jodconverter.DocumentConverter;
import com.artofsolving.jodconverter.DocumentFormat;
import com.artofsolving.jodconverter.DocumentFormatRegistry;
import com.artofsolving.jodconverter.XmlDocumentFormatRegistry;
import com.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection;
import com.sun.star.beans.PropertyValue;
import com.sun.star.lang.XComponent;
import com.sun.star.uno.UnoRuntime;
import com.sun.star.util.XRefreshable;


public abstract class AbstractOpenOfficeDocumentConverter implements DocumentConverter {

  protected OpenOfficeConnection openOfficeConnection;
  private DocumentFormatRegistry documentFormatRegistry;

  public AbstractOpenOfficeDocumentConverter(OpenOfficeConnection connection) {
    this(connection, new XmlDocumentFormatRegistry());
  }

  public AbstractOpenOfficeDocumentConverter(OpenOfficeConnection openOfficeConnection, DocumentFormatRegistry documentFormatRegistry) {
    this.openOfficeConnection = openOfficeConnection;
    this.documentFormatRegistry = documentFormatRegistry;
  }

  protected DocumentFormatRegistry getDocumentFormatRegistry() {
    return documentFormatRegistry;
  }

  public void convert(File inputFile, File outputFile) {
    convert(inputFile, outputFile, null);
  }

  public void convert(File inputFile, File outputFile, DocumentFormat outputFormat) {
    convert(inputFile, null, outputFile, outputFormat);
  }

  public void convert(InputStream inputStream, DocumentFormat inputFormat, OutputStream outputStream, DocumentFormat outputFormat) {
    ensureNotNull("inputStream", inputStream);
    ensureNotNull("inputFormat", inputFormat);
    ensureNotNull("outputStream", outputStream);
    ensureNotNull("outputFormat", outputFormat);
    convertInternal(inputStream, inputFormat, outputStream, outputFormat);
  }

  public void convert(File inputFile, DocumentFormat inputFormat, File outputFile, DocumentFormat outputFormat) {
    ensureNotNull("inputFile", inputFile);
    ensureNotNull("outputFile", outputFile);
   
    if (!inputFile.exists()) {
      throw new IllegalArgumentException("inputFile doesn't exist: " + inputFile);
    }
    if (inputFormat == null) {
      inputFormat = guessDocumentFormat(inputFile);
    }
    if (outputFormat == null) {
      outputFormat = guessDocumentFormat(outputFile);
    }
    if (!inputFormat.isImportable()) {
      throw new IllegalArgumentException("unsupported input format: " + inputFormat.getName());
    }
    if (!inputFormat.isExportableTo(outputFormat)) {
      throw new IllegalArgumentException("unsupported conversion: from " + inputFormat.getName() + " to " + outputFormat.getName());
    }
    convertInternal(inputFile, inputFormat, outputFile, outputFormat);
  }

  protected abstract void convertInternal(InputStream inputStream, DocumentFormat inputFormat, OutputStream outputStream, DocumentFormat outputFormat);
 
  protected abstract void convertInternal(File inputFile, DocumentFormat inputFormat, File outputFile, DocumentFormat outputFormat);
 
  private void ensureNotNull(String argumentName, Object argumentValue) {
    if (argumentValue == null) {
      throw new IllegalArgumentException(argumentName + " is null");
    }
  }

  private DocumentFormat guessDocumentFormat(File file) {
    String extension = FilenameUtils.getExtension(file.getName());
    DocumentFormat format = getDocumentFormatRegistry().getFormatByFileExtension(extension);
    if (format == null) {
      throw new IllegalArgumentException("unknown document format for file: " + file);
    }
    return format;
  }

    protected void refreshDocument(XComponent document) {
    XRefreshable refreshable = (XRefreshable) UnoRuntime.queryInterface(XRefreshable.class, document);
    if (refreshable != null) {
      refreshable.refresh();
    }
  }

  protected static PropertyValue property(String name, Object value) {
      PropertyValue property = new PropertyValue();
      property.Name = name;
      property.Value = value;
      return property;
    }

  protected static PropertyValue[] toPropertyValues(Map/*<String,Object>*/ properties) {
    PropertyValue[] propertyValues = new PropertyValue[properties.size()];
    int i = 0;
    for (Iterator iter = properties.entrySet().iterator(); iter.hasNext();) {
      Map.Entry entry = (Map.Entry) iter.next();
      propertyValues[i++] = property((String) entry.getKey(), entry.getValue());
    }
    return propertyValues;
  }
}
TOP

Related Classes of com.artofsolving.jodconverter.openoffice.converter.AbstractOpenOfficeDocumentConverter

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.