summaryrefslogtreecommitdiff
path: root/scripting/java/org/openoffice/idesupport/localoffice/LocalOfficeImpl.java
diff options
context:
space:
mode:
Diffstat (limited to 'scripting/java/org/openoffice/idesupport/localoffice/LocalOfficeImpl.java')
-rw-r--r--scripting/java/org/openoffice/idesupport/localoffice/LocalOfficeImpl.java154
1 files changed, 154 insertions, 0 deletions
diff --git a/scripting/java/org/openoffice/idesupport/localoffice/LocalOfficeImpl.java b/scripting/java/org/openoffice/idesupport/localoffice/LocalOfficeImpl.java
new file mode 100644
index 000000000000..491aa61cb052
--- /dev/null
+++ b/scripting/java/org/openoffice/idesupport/localoffice/LocalOfficeImpl.java
@@ -0,0 +1,154 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+package org.openoffice.idesupport.localoffice;
+
+import java.net.ConnectException;
+
+import com.sun.star.lang.XMultiServiceFactory;
+import com.sun.star.lang.XMultiComponentFactory;
+import com.sun.star.lang.XComponent;
+import com.sun.star.bridge.UnoUrlResolver;
+import com.sun.star.bridge.XUnoUrlResolver;
+import com.sun.star.beans.XPropertySet;
+import com.sun.star.comp.helper.Bootstrap;
+import com.sun.star.uno.XComponentContext;
+import com.sun.star.uno.UnoRuntime;
+import com.sun.star.uno.Exception;
+
+import drafts.com.sun.star.script.framework.storage.XScriptStorageManager;
+
+import org.openoffice.idesupport.LocalOffice;
+
+/**
+ * LocalOfficeImpl represents a connection to the local office.
+ *
+ * This class is an implementation of LocalOffice ane allows to
+ * get access to some scripting framework releated functionality
+ * of the locally running office. The office has to be started
+ * with options appropriate for establishing local connection.
+ *
+ * @author misha <misha@openoffice.org>
+ */
+public final class LocalOfficeImpl
+ extends LocalOffice
+{
+ private final static String STORAGE_MRG_SINGLETON =
+ "/singletons/drafts.com.sun.star.script.framework.storage.theScriptStorageManager";
+
+ private transient String mOfficePath;
+ private transient XMultiComponentFactory mComponentFactory;
+ private transient XComponentContext mComponentContext;
+ private transient XMultiServiceFactory mServiceFactory;
+ /**
+ * Constructor.
+ */
+ public LocalOfficeImpl()
+ {
+ }
+
+ /**
+ * Connects to the running office.
+ *
+ * @param officePath is a platform specific path string
+ * to the office distribution.
+ * @param port is a communication port.
+ */
+ protected void connect(String officePath, int port)
+ throws ConnectException
+ {
+ mOfficePath = officePath;
+ try {
+ bootstrap(port);
+ } catch (java.lang.Exception ex) {
+ throw new ConnectException(ex.getMessage());
+ }
+ }
+
+ /**
+ * Refresh the script storage.
+ *
+ * @param uri is an identifier of storage has to be refreshed.
+ */
+ public void refreshStorage(String uri)
+ {
+ try {
+ Object object = null;
+ object = mComponentContext.getValueByName(STORAGE_MRG_SINGLETON);
+ XScriptStorageManager storageMgr;
+ storageMgr = (XScriptStorageManager)UnoRuntime.queryInterface(
+ XScriptStorageManager.class, object);
+ storageMgr.refreshScriptStorage(uri);
+ } catch (java.lang.Exception ex) {
+System.out.println("*** LocalOfficeImpl.refreshStorage: FAILED " + ex.getMessage());
+System.out.println("*** LocalOfficeImpl.refreshStorage: FAILED " + ex.getClass().getName());
+ }
+System.out.println("*** LocalOfficeImpl.refreshStorage: DONE");
+ }
+
+ /**
+ * Closes the connection to the running office.
+ */
+ public void disconnect()
+ {
+/*
+ if(mComponentFactory != null) {
+ XComponent comp = (XComponent)UnoRuntime.queryInterface(
+ XComponent.class, mComponentFactory);
+ comp.dispose();
+ }
+*/
+ }
+
+ /**
+ * Boot straps UNO.
+ *
+ * The office has to be started with following string:
+ * "-accept=socket,host=localhost,port=<PORT>;urp;StarOffice.ServiceManager"
+ *
+ * @param port is a communication port.
+ */
+ private void bootstrap(int port)
+ throws java.lang.Exception
+ {
+ Object object;
+ mComponentContext = Bootstrap.createInitialComponentContext(null);
+ XUnoUrlResolver urlresolver = UnoUrlResolver.create(mComponentContext);
+ object = urlresolver.resolve(
+ "uno:socket,host=localhost,port=" +
+ port +
+ ";urp;StarOffice.ServiceManager");
+ mComponentFactory = (XMultiComponentFactory)UnoRuntime.queryInterface(
+ XMultiComponentFactory.class, object);
+ XPropertySet factoryProps;
+ factoryProps = (XPropertySet)UnoRuntime.queryInterface(
+ XPropertySet.class, mComponentFactory);
+ object = factoryProps.getPropertyValue("DefaultContext");
+ mComponentContext = (XComponentContext)UnoRuntime.queryInterface(
+ XComponentContext.class, object);
+ }
+}