diff options
author | Daniel Boelzle <dbo@openoffice.org> | 2001-02-16 13:14:51 +0000 |
---|---|---|
committer | Daniel Boelzle <dbo@openoffice.org> | 2001-02-16 13:14:51 +0000 |
commit | 2b10ef45dabc74ea553821b7c7928f101957ef17 (patch) | |
tree | b66a497b84fb62ae9c68afc968849b6d554e5a51 /xmlscript/test | |
parent | 182f47927d2dc2b1efea60a80be77bb57063324f (diff) |
new
Diffstat (limited to 'xmlscript/test')
-rw-r--r-- | xmlscript/test/imexp.cxx | 392 | ||||
-rw-r--r-- | xmlscript/test/makefile.mk | 121 | ||||
-rw-r--r-- | xmlscript/test/test.xml | 35 |
3 files changed, 548 insertions, 0 deletions
diff --git a/xmlscript/test/imexp.cxx b/xmlscript/test/imexp.cxx new file mode 100644 index 000000000000..3471e8bfed51 --- /dev/null +++ b/xmlscript/test/imexp.cxx @@ -0,0 +1,392 @@ +/************************************************************************* + * + * $RCSfile: imexp.cxx,v $ + * + * $Revision: 1.1 $ + * + * last change: $Author: dbo $ $Date: 2001-02-16 14:14:49 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * 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. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (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.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#include <stdio.h> + +#include <xmlscript/xmldlg_imexp.hxx> +#include <xmlscript/xml_helper.hxx> + +#include <cppuhelper/servicefactory.hxx> +#include <cppuhelper/implbase2.hxx> + +#include <comphelper/processfactory.hxx> +#include <comphelper/regpathhelper.hxx> + +#include <tools/debug.hxx> +#include <vcl/svapp.hxx> +#include <svtools/unoiface.hxx> // InitExtToolkit + +#include <com/sun/star/io/XActiveDataSource.hpp> + +#include <com/sun/star/lang/XComponent.hpp> +#include <com/sun/star/lang/XInitialization.hpp> +#include <com/sun/star/lang/XMultiServiceFactory.hpp> + +#include <com/sun/star/registry/XSimpleRegistry.hpp> +#include <com/sun/star/registry/XImplementationRegistration.hpp> + +#include <com/sun/star/xml/sax/XParser.hpp> +#include <com/sun/star/xml/sax/XExtendedDocumentHandler.hpp> + +#include <com/sun/star/awt/XToolkit.hpp> +#include <com/sun/star/awt/XControlModel.hpp> + +#include <com/sun/star/container/XNameContainer.hpp> + + +using namespace ::rtl; +using namespace ::cppu; +using namespace ::com::sun::star; +using namespace ::com::sun::star::uno; + + + +//----------------------------------------- +// The document handler, which is needed for the saxparser +// The Documenthandler for reading sax +//----------------------------------------- +class ErrorHandler : + public WeakImplHelper2< xml::sax::XEntityResolver , xml::sax::XErrorHandler > +{ +public: + ErrorHandler() + {} + +public: // Error handler + virtual void SAL_CALL error(const Any& aSAXParseException) throw (xml::sax::SAXException, RuntimeException) + { + OSL_ENSURE( 0, "Error !\n" ); + Exception exc; + OSL_VERIFY( aSAXParseException >>= exc ); + throw exc; + } + virtual void SAL_CALL fatalError(const Any& aSAXParseException) throw (xml::sax::SAXException, RuntimeException) + { + OSL_ENSURE( 0, "Fatal Error !\n" ); + Exception exc; + OSL_VERIFY( aSAXParseException >>= exc ); + throw exc; + } + virtual void SAL_CALL warning(const Any& aSAXParseException) throw (xml::sax::SAXException, RuntimeException) + { + OSL_ENSURE( 0, "Warning !\n" ); + Exception exc; + OSL_VERIFY( aSAXParseException >>= exc ); + throw exc; + } + + virtual xml::sax::InputSource SAL_CALL resolveEntity( + const OUString& sPublicId, + const OUString& sSystemId) + throw (xml::sax::SAXException,RuntimeException) + { + OSL_ENSURE( 0, "not impl !\n" ); + return xml::sax::InputSource(); + } +}; + + + +Reference< lang::XMultiServiceFactory > createApplicationServiceManager() +{ + Reference< lang::XMultiServiceFactory > xReturn = createServiceFactory(); + + try + { + + if ( xReturn.is() ) + { + Reference< lang::XInitialization > xInit ( xReturn, UNO_QUERY ) ; + if ( xInit.is() ) + { + OUString localRegistry = ::comphelper::getPathToUserRegistry(); + OUString systemRegistry = ::comphelper::getPathToSystemRegistry(); + + Reference< registry::XSimpleRegistry > xLocalRegistry( + xReturn->createInstance( OUString(RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.registry.SimpleRegistry") ) ), UNO_QUERY ); + Reference< registry::XSimpleRegistry > xSystemRegistry( + xReturn->createInstance( OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.registry.SimpleRegistry") ) ), UNO_QUERY ); + if ( xLocalRegistry.is() && (localRegistry.getLength() > 0) ) + { + try + { + xLocalRegistry->open( localRegistry, sal_False, sal_True); + } + catch ( registry::InvalidRegistryException& ) + { + } + + if ( !xLocalRegistry->isValid() ) + xLocalRegistry->open(localRegistry, sal_True, sal_True); + } + + if ( xSystemRegistry.is() && (systemRegistry.getLength() > 0) ) + xSystemRegistry->open( systemRegistry, sal_True, sal_False); + + if ( (xLocalRegistry.is() && xLocalRegistry->isValid()) && + (xSystemRegistry.is() && xSystemRegistry->isValid()) ) + { + Sequence< Any > seqAnys(2); + seqAnys[0] <<= xLocalRegistry ; + seqAnys[1] <<= xSystemRegistry ; + + Reference < registry::XSimpleRegistry > xReg( + xReturn->createInstanceWithArguments( + OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.registry.NestedRegistry")), seqAnys ), UNO_QUERY ); + + seqAnys = Sequence< Any >( 1 ); + seqAnys[0] <<= xReg; + if ( xReg.is() ) + xInit->initialize( seqAnys ); + } + } + else + { + xReturn = Reference< lang::XMultiServiceFactory >(); + } + } + + Reference < registry::XImplementationRegistration > xReg( + xReturn->createInstance( OUString::createFromAscii( "com.sun.star.registry.ImplementationRegistration" ) ), + UNO_QUERY ); + +#ifdef SAL_W32 + OUString aDllName = OUString::createFromAscii( "sax.dll" ); +#else + OUString aDllName = OUString::createFromAscii( "libsax.so" ); +#endif + xReg->registerImplementation( + OUString::createFromAscii( "com.sun.star.loader.SharedLibrary" ), + aDllName, Reference< registry::XSimpleRegistry > () ); +#ifdef SAL_W32 + aDllName = OUString::createFromAscii( "tk" ); + aDllName += OUString::valueOf( (sal_Int32)SUPD ); + aDllName += OUString::createFromAscii( "mi.dll" ); +#else + aDllName = OUString::createFromAscii( "libtk" ); + aDllName += OUString::valueOf( (sal_Int32)SUPD ); + aDllName += OUString::createFromAscii( ".so" ); +#endif + xReg->registerImplementation( + OUString::createFromAscii( "com.sun.star.loader.SharedLibrary" ), + aDllName, Reference< registry::XSimpleRegistry > () ); + + } + + catch( Exception& rExc ) + { + OString aStr( OUStringToOString( rExc.Message, RTL_TEXTENCODING_ASCII_US ) ); + OSL_ENSURE( 0, aStr.getStr() ); + } + + return xReturn ; +} + + +// ----------------------------------------------------------------------- + +Reference< container::XNameContainer > importFile( + char const * fname, + Reference< lang::XMultiServiceFactory > const & xSMgr ) +{ + Reference< xml::sax::XParser > xParser( xSMgr->createInstance( + OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.xml.sax.Parser") ) ), UNO_QUERY ); + if (xParser.is()) + { + ErrorHandler * pHandler = new ErrorHandler(); + xParser->setErrorHandler( (xml::sax::XErrorHandler *)pHandler ); + xParser->setEntityResolver( (xml::sax::XEntityResolver *)pHandler ); + + Reference< container::XNameContainer > xModel( xSMgr->createInstance( + OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.awt.UnoControlDialogModel") ) ), UNO_QUERY ); + OSL_ASSERT( xModel.is() ); + xParser->setDocumentHandler( ::xmlscript::importDialogModel( xModel ) ); + + // create the input stream + FILE *f = ::fopen( fname, "rb" ); + if (f) + { + ::fseek( f, 0 ,SEEK_END ); + int nLength = ::ftell( f ); + ::fseek( f, 0, SEEK_SET ); + + ByteSequence seqIn( nLength ); + ::fread( seqIn.getArray(), nLength, 1, f ); + ::fclose( f ); + + xml::sax::InputSource source; + source.aInputStream = ::xmlscript::createInputStream( seqIn ); + source.sSystemId = OUString::createFromAscii( fname ); + + // start parsing + xParser->parseStream( source ); + return xModel; + } + else + { + OSL_ENSURE( 0, "### Cannot read file!\n" ); + } + } + else + { + OSL_ENSURE( 0, "### couln't create sax-parser component\n" ); + } + return Reference< container::XNameContainer >(); +} + +bool exportToFile( + char const * fname, + Reference< container::XNameContainer > const & xModel, + Reference< lang::XMultiServiceFactory > const & xSMgr ) +{ + Reference< xml::sax::XExtendedDocumentHandler > xHandler( + xSMgr->createInstance( + OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.xml.sax.Writer") ) ), UNO_QUERY ); + OSL_ASSERT( xHandler.is() ); + if (! xHandler.is()) + { + OSL_ENSURE( 0, "### couln't create sax-writer component\n" ); + return false; + } + + ByteSequence seq; + Reference< io::XActiveDataSource > xSource( xHandler, UNO_QUERY ); + xSource->setOutputStream( ::xmlscript::createOutputStream( &seq ) ); + + xHandler->startDocument(); + + ::xmlscript::exportDialogModel( + xModel, + Reference< xml::sax::XExtendedDocumentHandler >::query( xHandler ) ); + + xHandler->endDocument(); + + FILE * f = ::fopen( fname, "w" ); + ::fwrite( seq.getConstArray(), 1 ,seq.getLength(), f ); + ::fflush( f ); + ::fclose( f ); + return true; +} + + + +class MyApp : public Application +{ +public: + void Main(); +}; + +MyApp aMyApp; + +// ----------------------------------------------------------------------- + +void MyApp::Main() +{ + if( GetCommandLineParamCount() < 1) + { + OSL_ENSURE( 0, "usage: imexp inputfile [outputfile]\n" ); + return; + } + + Reference< lang::XMultiServiceFactory > xMSF = createApplicationServiceManager(); + + try + { + ::comphelper::setProcessServiceFactory( xMSF ); + InitExtVclToolkit(); + Application::RegisterUnoServices(); + + Reference< awt::XToolkit> xToolkit( xMSF->createInstance( + OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.awt.ExtToolkit" ) ) ), UNO_QUERY ); + + // import dialog + OString aParam1( OUStringToOString( OUString( GetCommandLineParam( 0 ) ), RTL_TEXTENCODING_ASCII_US ) ); + Reference< container::XNameContainer > xImport( importFile( aParam1.getStr(), xMSF ) ); + + if (GetCommandLineParamCount() == 2) + { + // write and read again dialogs + OString aParam2( OUStringToOString( OUString( GetCommandLineParam( 1 ) ), RTL_TEXTENCODING_ASCII_US ) ); + exportToFile( aParam2.getStr(), xImport, xMSF ); + // re-import + xImport = importFile( aParam2.getStr(), xMSF ); + } + + Reference< awt::XControl > xDlg( xMSF->createInstance( + OUString(RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.awt.UnoControlDialog" ) ) ), UNO_QUERY ); + xDlg->setModel( Reference< awt::XControlModel >::query( xImport ) ); + xDlg->createPeer( xToolkit, NULL ); + Reference< awt::XDialog > xD( xDlg, UNO_QUERY ); + xD->execute(); + } + catch (uno::Exception & rExc) + { + OString aStr( OUStringToOString( rExc.Message, RTL_TEXTENCODING_ASCII_US ) ); + OSL_ENSURE( 0, aStr.getStr() ); + } + + Reference< lang::XComponent > xComp( xMSF, UNO_QUERY ); + if (xComp.is()) + { + xComp->dispose(); + } +} + diff --git a/xmlscript/test/makefile.mk b/xmlscript/test/makefile.mk new file mode 100644 index 000000000000..e43a83507e9e --- /dev/null +++ b/xmlscript/test/makefile.mk @@ -0,0 +1,121 @@ +#************************************************************************* +# +# $RCSfile: makefile.mk,v $ +# +# $Revision: 1.1 $ +# +# last change: $Author: dbo $ $Date: 2001-02-16 14:14:49 $ +# +# The Contents of this file are made available subject to the terms of +# either of the following licenses +# +# - GNU Lesser General Public License Version 2.1 +# - Sun Industry Standards Source License Version 1.1 +# +# Sun Microsystems Inc., October, 2000 +# +# GNU Lesser General Public License Version 2.1 +# ============================================= +# Copyright 2000 by Sun Microsystems, Inc. +# 901 San Antonio Road, Palo Alto, CA 94303, USA +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License version 2.1, as published by the Free Software Foundation. +# +# 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. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, +# MA 02111-1307 USA +# +# +# Sun Industry Standards Source License Version 1.1 +# ================================================= +# The contents of this file are subject to the Sun Industry Standards +# Source License Version 1.1 (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.openoffice.org/license.html. +# +# Software provided under this License is provided on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, +# WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, +# MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. +# See the License for the specific provisions governing your rights and +# obligations concerning the Software. +# +# The Initial Developer of the Original Code is: Sun Microsystems, Inc. +# +# Copyright: 2000 by Sun Microsystems, Inc. +# +# All Rights Reserved. +# +# Contributor(s): _______________________________________ +# +# +# +#************************************************************************* +PRJ=.. + +PRJNAME=xmlscript +TARGET=imexp +LIBTARGET=NO +ENABLE_EXCEPTIONS=TRUE + + +# --- Settings ----------------------------------------------------- + +.INCLUDE : svpre.mk +.INCLUDE : settings.mk +.INCLUDE : sv.mk + +# --- Files -------------------------------------------------------- + +CXXFILES= \ + imexp.cxx + +OBJFILES= \ + $(OBJ)$/imexp.obj + +APP1TARGET=$(TARGET) +APP1OBJS=$(OBJFILES) +APP1STDLIBS= \ + $(TOOLSLIB) \ + $(SOTLIB) \ + $(SVTOOLLIB) \ + $(COMPHELPERLIB) \ + $(VCLLIB) \ + $(CPPULIB) \ + $(CPPUHELPERLIB) \ + $(SALLIB) \ + ixmlscript.lib + +APP1DEF= $(MISC)$/imexp.def + +# --- Targets ------------------------------------------------------ + +.INCLUDE : target.mk + + +# ------------------------------------------------------------------ +# Windows +# ------------------------------------------------------------------ + +.IF "$(GUI)" == "WIN" + +$(MISC)$/imexp.def: makefile.mk + echo NAME imexp >$@ + echo DESCRIPTION 'XML dialogs im-/ exporter' >>$@ + echo EXETYPE WINDOWS >>$@ + echo STUB 'winSTUB.EXE' >>$@ + echo PROTMODE >>$@ + echo CODE PRELOAD MOVEABLE DISCARDABLE >>$@ + echo DATA PRELOAD MOVEABLE MULTIPLE >>$@ + echo HEAPSIZE 8192 >>$@ + echo STACKSIZE 32768 >>$@ + +.ENDIF diff --git a/xmlscript/test/test.xml b/xmlscript/test/test.xml new file mode 100644 index 000000000000..f682936f7fc3 --- /dev/null +++ b/xmlscript/test/test.xml @@ -0,0 +1,35 @@ +<window xmlns="http://openoffice.org/2000/dialog" + xmlns:dlg="http://openoffice.org/2000/dialog" + + label="Test-Dialog" height="400" width="400"> + +<dlg:styles> + <dlg:style style-id="bla" background-color="0xffffff" dlg:text-color="255"/> + <dlg:style style-id="bla2" background-color="0xff00ff" dlg:text-color="255193873"/> + <dlg:style style-id="bla3" background-color="0" dlg:text-color="0xffffff" font-name="Arial" font-height="24"/> +</dlg:styles> + + <dlg:bulletinboard xmlns:ns="http://www.fake"> + <button dlg:id="button1" ns:value="hallo" dlg:left="50" ns:top="50" width="50" height="50" + style-id="bla3" + xmlns:ns="http://openoffice.org/2000/dialog"/> + <button dlg:id="button3" ns:value="hallo2" dlg:left="250" ns:top="50" width="50" height="50" + style-id="bla" + xmlns:ns="http://openoffice.org/2000/dialog"/> + <checkbox id="check1" value="check one" checked="true" left="50" top="150" width="50" height="50"/> + <menulist id="list1" multiselection="true" left="150" top="150" width="50" height="50"> + <menupopup> + <menuitem value="item1"/> + <menuitem value="item2" selected="true"/> + <menuitem value="item3" selected="true"/> + </menupopup> + </menulist> + <combobox id="combo1" value="combotext" left="50" top="250" width="50" height="50" spin-button="true"> + <menupopup> + <menuitem value="Citem1"/> + <menuitem value="Citem2" selected="true"/> + </menupopup> + </combobox> + </dlg:bulletinboard> + +</window> |