/************************************************************** * * 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. * *************************************************************/ import java.io.*; import java.util.*; import com.sun.star.uno.*; import com.sun.star.lang.*; import com.sun.star.beans.*; import com.sun.star.comp.loader.FactoryHelper; import com.sun.star.registry.XRegistryKey; import com.sun.star.xml.*; import com.sun.star.xml.sax.*; import com.sun.star.io.XInputStream; import com.sun.star.io.XOutputStream; import com.sun.star.io.XActiveDataSource; public class FlatXml implements XImportFilter, XExportFilter, XServiceName, XServiceInfo, XDocumentHandler, XTypeProvider { /* * private data members */ private XMultiServiceFactory m_xServiceFactory; private XExtendedDocumentHandler m_xHandler; private boolean m_bPrettyPrint = true; static private final String __serviceName = "devguide.officedev.samples.filter.FlatXmlJava"; static private final String __implName = "FlatXml"; static private final String[] __supportedServiceNames = { "devguide.officedev.samples.filter.FlatXmlJava" }; public FlatXml(XMultiServiceFactory f) { m_xServiceFactory = f; } // --- XTypeProvider --- public byte[] getImplementationId() { return Integer.toString(this.hashCode()).getBytes(); } // --- XServiceName --- public String getServiceName() { return( __serviceName ); } // --- XServiceInfo --- public boolean supportsService(String sName) { for (int i = 0; i < __supportedServiceNames.length; i++) { if (__supportedServiceNames[i].equals(sName)) return true; } return false; } public String getImplementationName() { return( this.getClass().getName() ); } public String[] getSupportedServiceNames() { return( __supportedServiceNames ); } public com.sun.star.uno.Type[] getTypes() { Type[] typeReturn = {}; try { typeReturn = new Type[] { new Type( XTypeProvider.class ), new Type( XExportFilter.class ), new Type( XImportFilter.class ), new Type( XServiceName.class ), new Type( XServiceInfo.class ) }; } catch( java.lang.Exception exception ) { return null; } return( typeReturn ); } public boolean importer(PropertyValue[] aSourceData, XDocumentHandler xDocHandler, String[] msUserData) throws com.sun.star.uno.RuntimeException, com.sun.star.lang.IllegalArgumentException { String sName = null; String sFileName = null; String sURL = null; com.sun.star.io.XInputStream xin = null; try { for (int i = 0 ; i < aSourceData.length; i++) { sName = aSourceData[i].Name; if (sName.equals("InputStream")) xin = (XInputStream)AnyConverter.toObject(XInputStream.class, aSourceData[i].Value); if (sName.equals("URL")) sURL=(String)AnyConverter.toObject(String.class, aSourceData[i].Value); if (sName.equals("FileName")) sFileName=(String)AnyConverter.toObject(String.class, aSourceData[i].Value); } Object tmpObj=m_xServiceFactory.createInstance("com.sun.star.xml.sax.Parser"); if (tmpObj == null) return false; XParser xParser = (XParser)UnoRuntime.queryInterface(XParser.class , tmpObj); if (xParser == null) return false; InputSource aInput = new InputSource(); aInput.sSystemId = sURL; aInput.aInputStream =xin; xParser.setDocumentHandler ( xDocHandler ); xParser.parseStream ( aInput ); } catch (com.sun.star.uno.Exception e){ e.printStackTrace(); return false; } // done... return true; } public boolean exporter(PropertyValue[] aSourceData, String[] msUserData) throws com.sun.star.uno.RuntimeException, com.sun.star.lang.IllegalArgumentException { try { String sURL = null; String sName = null; XOutputStream xos = null; // get interesting values from sourceData for (int i = 0 ; i < aSourceData.length; i++) { sName = aSourceData[i].Name; if (sName.equals("OutputStream")) xos = (XOutputStream)AnyConverter.toObject(XOutputStream.class, aSourceData[i].Value); if (sName.equals("URL")) sURL=(String)AnyConverter.toObject(String.class, aSourceData[i].Value); } // prepare the XML writer Object tmpObj = null; if (m_xHandler == null) { tmpObj = m_xServiceFactory.createInstance("com.sun.star.xml.sax.Writer"); if (tmpObj != null) m_xHandler = (XExtendedDocumentHandler)UnoRuntime.queryInterface(XExtendedDocumentHandler.class, tmpObj); } if (m_xHandler == null) return false; // Connect the provided output stream to the writer XActiveDataSource xADSource = (XActiveDataSource)UnoRuntime.queryInterface( XActiveDataSource.class, m_xHandler); if (xADSource != null && xos != null) xADSource.setOutputStream(xos); else return false; } catch (com.sun.star.uno.Exception e){ return false; } // done ... return true; } public void startDocument () throws com.sun.star.xml.sax.SAXException { m_xHandler.startDocument(); } public void endDocument() throws com.sun.star.xml.sax.SAXException { m_xHandler.endDocument(); } public void startElement (String str, com.sun.star.xml.sax.XAttributeList xattribs) throws com.sun.star.xml.sax.SAXException { m_xHandler.startElement(str, xattribs); } public void endElement(String str) throws com.sun.star.xml.sax.SAXException { m_xHandler.endElement(str); } public void characters(String str) throws com.sun.star.xml.sax.SAXException { m_xHandler.characters(str); } public void ignorableWhitespace(String str) throws com.sun.star.xml.sax.SAXException { if (!m_bPrettyPrint) return; else m_xHandler.ignorableWhitespace(str); } public void processingInstruction(String aTarget, String aData) throws com.sun.star.xml.sax.SAXException { m_xHandler.processingInstruction(aTarget, aData); } public void setDocumentLocator(XLocator xLocator) throws com.sun.star.xml.sax.SAXException { m_xHandler.setDocumentLocator(xLocator); } // ------------------------------------------------------------ // component management public static XSingleServiceFactory __getServiceFactory(String implName, XMultiServiceFactory multiFactory, XRegistryKey regKey) { XSingleServiceFactory xSingleServiceFactory = null; if (implName.equals(__implName) ) { try { xSingleServiceFactory = FactoryHelper.getServiceFactory( Class.forName(implName), __serviceName, multiFactory, regKey); } catch (java.lang.ClassNotFoundException e) { return null; } } return xSingleServiceFactory; } // This method not longer necessary since OOo 3.4 where the component registration // was changed to passive component registration. For more details see // http://wiki.services.openoffice.org/wiki/Passive_Component_Registration // public static boolean __writeRegistryServiceInfo(XRegistryKey regKey) // { // return FactoryHelper.writeRegistryServiceInfo(__implName, // __serviceName, regKey); // } }