summaryrefslogtreecommitdiffstats
path: root/javaunohelper/com/sun/star/comp/helper/Bootstrap.java
diff options
context:
space:
mode:
Diffstat (limited to 'javaunohelper/com/sun/star/comp/helper/Bootstrap.java')
-rw-r--r--javaunohelper/com/sun/star/comp/helper/Bootstrap.java429
1 files changed, 0 insertions, 429 deletions
diff --git a/javaunohelper/com/sun/star/comp/helper/Bootstrap.java b/javaunohelper/com/sun/star/comp/helper/Bootstrap.java
deleted file mode 100644
index edf21d7d2adf..000000000000
--- a/javaunohelper/com/sun/star/comp/helper/Bootstrap.java
+++ /dev/null
@@ -1,429 +0,0 @@
-// -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
-
-/*
- * 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 .
- */
-
-package com.sun.star.comp.helper;
-
-import com.sun.star.bridge.UnoUrlResolver;
-import com.sun.star.bridge.XUnoUrlResolver;
-import com.sun.star.comp.loader.JavaLoader;
-import com.sun.star.comp.servicemanager.ServiceManager;
-import com.sun.star.container.XSet;
-import com.sun.star.lang.XInitialization;
-import com.sun.star.lang.XMultiServiceFactory;
-import com.sun.star.lang.XMultiComponentFactory;
-import com.sun.star.lib.util.NativeLibraryLoader;
-import com.sun.star.loader.XImplementationLoader;
-import com.sun.star.uno.UnoRuntime;
-import com.sun.star.uno.XComponentContext;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.PrintStream;
-import java.io.UnsupportedEncodingException;
-import java.util.HashMap;
-import java.util.Hashtable;
-import java.util.Map;
-import java.util.Random;
-
-/** Bootstrap offers functionality to obtain a context or simply
- a service manager.
- The service manager can create a few basic services, whose implementations are:
- <ul>
- <li>com.sun.star.comp.loader.JavaLoader</li>
- <li>com.sun.star.comp.urlresolver.UrlResolver</li>
- <li>com.sun.star.comp.bridgefactory.BridgeFactory</li>
- <li>com.sun.star.comp.connections.Connector</li>
- <li>com.sun.star.comp.connections.Acceptor</li>
- <li>com.sun.star.comp.servicemanager.ServiceManager</li>
- </ul>
-
- Other services can be inserted into the service manager by
- using its XSet interface:
- <pre>
- XSet xSet = UnoRuntime.queryInterface( XSet.class, aMultiComponentFactory );
- // insert the service manager
- xSet.insert( aSingleComponentFactory );
- </pre>
-*/
-public class Bootstrap {
-
- private static void insertBasicFactories(
- XSet xSet, XImplementationLoader xImpLoader )
- throws Exception
- {
- // insert the factory of the loader
- xSet.insert( xImpLoader.activate(
- "com.sun.star.comp.loader.JavaLoader", null, null, null ) );
-
- // insert the factory of the URLResolver
- xSet.insert( xImpLoader.activate(
- "com.sun.star.comp.urlresolver.UrlResolver", null, null, null ) );
-
- // insert the bridgefactory
- xSet.insert( xImpLoader.activate(
- "com.sun.star.comp.bridgefactory.BridgeFactory", null, null, null ) );
-
- // insert the connector
- xSet.insert( xImpLoader.activate(
- "com.sun.star.comp.connections.Connector", null, null, null ) );
-
- // insert the acceptor
- xSet.insert( xImpLoader.activate(
- "com.sun.star.comp.connections.Acceptor", null, null, null ) );
- }
-
- /**
- * Returns an array of default commandline options to start bootstrapped
- * instance of soffice with. You may use it in connection with bootstrap
- * method for example like this:
- * <pre>
- * List list = Arrays.asList( Bootstrap.getDefaultOptions() );
- * list.remove("--nologo");
- * list.remove("--nodefault");
- * list.add("--invisible");
- *
- * Bootstrap.bootstrap( list.toArray( new String[list.size()] );
- * </pre>
- *
- * @return an array of default commandline options
- * @see #bootstrap( String[] )
- * @since LibreOffice 5.1
- */
- public static final String[] getDefaultOptions()
- {
- return new String[]
- {
- "--nologo",
- "--nodefault",
- "--norestore",
- "--nolockcheck"
- };
- }
-
- /**
- backwards compatibility stub.
- @param context_entries the hash table contains mappings of entry names (type string) to
- context entries (type class ComponentContextEntry).
- @throws Exception if things go awry.
- @return a new context.
- */
- public static XComponentContext createInitialComponentContext( Hashtable<String, Object> context_entries )
- throws Exception
- {
- return createInitialComponentContext((Map<String, Object>) context_entries);
- }
- /** Bootstraps an initial component context with service manager and basic
- jurt components inserted.
- @param context_entries the hash table contains mappings of entry names (type string) to
- context entries (type class ComponentContextEntry).
- @throws Exception if things go awry.
- @return a new context.
- */
- public static XComponentContext createInitialComponentContext( Map<String, Object> context_entries )
- throws Exception
- {
- ServiceManager xSMgr = new ServiceManager();
-
- XImplementationLoader xImpLoader = UnoRuntime.queryInterface(
- XImplementationLoader.class, new JavaLoader() );
- XInitialization xInit = UnoRuntime.queryInterface(
- XInitialization.class, xImpLoader );
- Object[] args = new Object [] { xSMgr };
- xInit.initialize( args );
-
- // initial component context
- if (context_entries == null)
- context_entries = new HashMap<String,Object>( 1 );
- // add smgr
- context_entries.put(
- "/singletons/com.sun.star.lang.theServiceManager",
- new ComponentContextEntry( null, xSMgr ) );
- // ... xxx todo: add standard entries
- XComponentContext xContext = new ComponentContext( context_entries, null );
-
- xSMgr.setDefaultContext(xContext);
-
- XSet xSet = UnoRuntime.queryInterface( XSet.class, xSMgr );
- // insert basic jurt factories
- insertBasicFactories( xSet, xImpLoader );
-
- return xContext;
- }
-
- /**
- * Bootstraps a servicemanager with the jurt base components registered.
- *
- * See also UNOIDL <code>com.sun.star.lang.ServiceManager</code>.
- *
- * @throws Exception if things go awry.
- * @return a freshly bootstrapped service manager
- */
- public static XMultiServiceFactory createSimpleServiceManager() throws Exception
- {
- return UnoRuntime.queryInterface(
- XMultiServiceFactory.class, createInitialComponentContext( (Map<String, Object>) null ).getServiceManager() );
- }
-
-
- /** Bootstraps the initial component context from a native UNO installation.
-
- @throws Exception if things go awry.
- @return a freshly bootstrapped component context.
-
- See also
- <code>cppuhelper/defaultBootstrap_InitialComponentContext()</code>.
- */
- public static final XComponentContext defaultBootstrap_InitialComponentContext()
- throws Exception
- {
- return defaultBootstrap_InitialComponentContext( (String) null, (Map<String,String>) null );
- }
- /**
- * Backwards compatibility stub.
- *
- * @param ini_file
- * ini_file (may be null: uno.rc besides cppuhelper lib)
- * @param bootstrap_parameters
- * bootstrap parameters (maybe null)
- *
- * @throws Exception if things go awry.
- * @return a freshly bootstrapped component context.
- */
- public static final XComponentContext defaultBootstrap_InitialComponentContext(
- String ini_file, Hashtable<String,String> bootstrap_parameters )
- throws Exception
- {
- return defaultBootstrap_InitialComponentContext(ini_file, (Map<String,String>) bootstrap_parameters);
-
- }
- /** Bootstraps the initial component context from a native UNO installation.
-
- See also
- <code>cppuhelper/defaultBootstrap_InitialComponentContext()</code>.
-
- @param ini_file
- ini_file (may be null: uno.rc besides cppuhelper lib)
- @param bootstrap_parameters
- bootstrap parameters (maybe null)
-
- @throws Exception if things go awry.
- @return a freshly bootstrapped component context.
- */
- public static final XComponentContext defaultBootstrap_InitialComponentContext(
- String ini_file, Map<String,String> bootstrap_parameters )
- throws Exception
- {
- // jni convenience: easier to iterate over array than calling Hashtable
- String pairs [] = null;
- if (null != bootstrap_parameters)
- {
- pairs = new String [ 2 * bootstrap_parameters.size() ];
- int n = 0;
- for (Map.Entry<String, String> bootstrap_parameter : bootstrap_parameters.entrySet()) {
- pairs[ n++ ] = bootstrap_parameter.getKey();
- pairs[ n++ ] = bootstrap_parameter.getValue();
- }
- }
-
- if (! m_loaded_juh)
- {
- if ("The Android Project".equals(System.getProperty("java.vendor")))
- {
- // Find out if we are configured with DISABLE_DYNLOADING or
- // not. Try to load the lo-bootstrap shared library which
- // won't exist in the DISABLE_DYNLOADING case. (And which will
- // be already loaded otherwise, so nothing unexpected happens
- // that case.) Yeah, this would be simpler if I just could be
- // bothered to keep a separate branch for DISABLE_DYNLOADING
- // on Android, merging in master periodically, until I know
- // for sure whether it is what I want, or not.
-
- boolean disable_dynloading = false;
- try {
- System.loadLibrary( "lo-bootstrap" );
- } catch ( UnsatisfiedLinkError e ) {
- disable_dynloading = true;
- }
-
- if (!disable_dynloading)
- {
- NativeLibraryLoader.loadLibrary( Bootstrap.class.getClassLoader(), "juh" );
- }
- }
- else
- {
- NativeLibraryLoader.loadLibrary( Bootstrap.class.getClassLoader(), "juh" );
- }
- m_loaded_juh = true;
- }
- return UnoRuntime.queryInterface(
- XComponentContext.class,
- cppuhelper_bootstrap(
- ini_file, pairs, Bootstrap.class.getClassLoader() ) );
- }
-
- private static boolean m_loaded_juh = false;
- private static native Object cppuhelper_bootstrap(
- String ini_file, String bootstrap_parameters [], ClassLoader loader )
- throws Exception;
-
- /**
- * Bootstraps the component context from a UNO installation.
- *
- * @throws BootstrapException if things go awry.
- *
- * @return a bootstrapped component context.
- *
- * @since UDK 3.1.0
- */
- public static final XComponentContext bootstrap()
- throws BootstrapException {
-
- String[] defaultArgArray = getDefaultOptions();
- return bootstrap( defaultArgArray );
- }
-
- /**
- * Bootstraps the component context from a UNO installation.
- *
- * @param argArray
- * an array of strings - commandline options to start instance of
- * soffice with
- * @see #getDefaultOptions()
- *
- * @throws BootstrapException if things go awry.
- *
- * @return a bootstrapped component context.
- *
- * @since LibreOffice 5.1
- */
- public static final XComponentContext bootstrap( String[] argArray )
- throws BootstrapException {
-
- XComponentContext xContext = null;
-
- try {
- // create default local component context
- XComponentContext xLocalContext =
- createInitialComponentContext( (Map<String, Object>) null );
- if ( xLocalContext == null )
- throw new BootstrapException( "no local component context!" );
-
- // find office executable relative to this class's class loader
- String sOffice =
- System.getProperty( "os.name" ).startsWith( "Windows" ) ?
- "soffice.exe" : "soffice";
- File fOffice = NativeLibraryLoader.getResource(
- Bootstrap.class.getClassLoader(), sOffice );
- if ( fOffice == null )
- throw new BootstrapException( "no office executable found!" );
-
- // create random pipe name
- String sPipeName = "uno" +
- Long.toString(randomPipeName.nextLong() & 0x7fffffffffffffffL);
-
- // create call with arguments
- String[] cmdArray = new String[ argArray.length + 2 ];
- cmdArray[0] = fOffice.getPath();
- cmdArray[1] = ( "--accept=pipe,name=" + sPipeName + ";urp;" );
-
- System.arraycopy( argArray, 0, cmdArray, 2, argArray.length );
-
- // start office process
- Process p = Runtime.getRuntime().exec( cmdArray );
- pipe( p.getInputStream(), System.out, "CO> " );
- pipe( p.getErrorStream(), System.err, "CE> " );
-
- // initial service manager
- XMultiComponentFactory xLocalServiceManager =
- xLocalContext.getServiceManager();
- if ( xLocalServiceManager == null )
- throw new BootstrapException( "no initial service manager!" );
-
- // create a URL resolver
- XUnoUrlResolver xUrlResolver =
- UnoUrlResolver.create( xLocalContext );
-
- // connection string
- String sConnect = "uno:pipe,name=" + sPipeName +
- ";urp;StarOffice.ComponentContext";
-
- // wait until office is started
- for (int i = 0;; ++i) {
- try {
- // try to connect to office
- Object context = xUrlResolver.resolve( sConnect );
- xContext = UnoRuntime.queryInterface(
- XComponentContext.class, context);
- if ( xContext == null )
- throw new BootstrapException( "no component context!" );
- break;
- } catch ( com.sun.star.connection.NoConnectException ex ) {
- // Wait 500 ms, then try to connect again, but do not wait
- // longer than 5 min (= 600 * 500 ms) total:
- if (i == 600) {
- throw new BootstrapException(ex);
- }
- Thread.sleep( 500 );
- }
- }
- } catch ( BootstrapException e ) {
- throw e;
- } catch ( java.lang.RuntimeException e ) {
- throw e;
- } catch ( java.lang.Exception e ) {
- throw new BootstrapException( e );
- }
-
- return xContext;
- }
-
- private static final Random randomPipeName = new Random();
-
- private static void pipe(
- final InputStream in, final PrintStream out, final String prefix ) {
-
- new Thread( "Pipe: " + prefix) {
- @Override
- public void run() {
- try {
- BufferedReader r = new BufferedReader(
- new InputStreamReader(in, "UTF-8") );
-
- for ( ; ; ) {
- String s = r.readLine();
- if ( s == null ) {
- break;
- }
- out.println( prefix + s );
- }
- } catch ( UnsupportedEncodingException e ) {
- e.printStackTrace( System.err );
- } catch ( java.io.IOException e ) {
- e.printStackTrace( System.err );
- }
- }
- }.start();
- }
-}
-
-// vim:set shiftwidth=4 softtabstop=4 expandtab: