/* * 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.demo; import java.io.IOException; import com.sun.star.beans.PropertyValue; import com.sun.star.beans.PropertyState; import com.sun.star.bridge.XUnoUrlResolver; import com.sun.star.io.BufferSizeExceededException; import com.sun.star.io.NotConnectedException; import com.sun.star.io.XInputStream; import com.sun.star.io.XOutputStream; import com.sun.star.frame.XComponentLoader; import com.sun.star.lang.XComponent; import com.sun.star.lang.XMultiServiceFactory; import com.sun.star.lang.XServiceInfo; import com.sun.star.text.XSimpleText; import com.sun.star.text.XText; import com.sun.star.text.XTextCursor; import com.sun.star.text.XTextDocument; import com.sun.star.text.XTextRange; import com.sun.star.uno.IBridge; import com.sun.star.uno.UnoRuntime; import com.sun.star.uno.XInterface; import com.sun.star.uno.XNamingService; public class TestOffice { static void testPipe(XMultiServiceFactory rSmgr) throws com.sun.star.uno.Exception { XOutputStream rOut = (XOutputStream) rSmgr.createInstance("com.sun.star.io.Pipe"); { byte bytes[] = new byte[10]; bytes[0] = 42; rOut.writeBytes(bytes); } { byte bytes[][] = new byte[1][]; XInputStream rIn = UnoRuntime.queryInterface(XInputStream.class, rOut); if(rIn.available() != 10) System.err.println("wrong bytes available\n"); if(rIn.readBytes(bytes, 10) != 10) System.err.println("wrong bytes read\n"); if(42 != bytes[0][0]) System.err.println("wrong element in sequence\n"); } } static void testWriter(XComponent rCmp) throws IOException { XTextDocument rTextDoc = UnoRuntime.queryInterface(XTextDocument.class, rCmp); XText rText = UnoRuntime.queryInterface(XText.class, rTextDoc.getText()); XTextCursor rCursor = UnoRuntime.queryInterface(XTextCursor.class, rText.createTextCursor()); XTextRange rRange = UnoRuntime.queryInterface(XTextRange.class, rCursor); byte pcText[] = new byte[1024]; pcText[0] = 0; System.err.println("pleast type any text\n"); while(true) { System.in.read(pcText); String string = new String(pcText); if(string.equals("end")) break; string += " "; rText.insertString(rRange , string, false); } } static void testDocument(XMultiServiceFactory rSmgr) throws com.sun.star.uno.Exception, IOException { XComponentLoader rLoader = UnoRuntime.queryInterface(XComponentLoader.class, rSmgr.createInstance("com.sun.star.frame.Desktop")); String urls[] = new String[] { "private:factory/swriter", "private:factory/scalc", "private:factory/sdraw", "http://www.heise.de", }; String docu[] = new String[] { "a new writer document ...\n", "a new calc document ...\n", "a new draw document ...\n", "www.heise.de\n", }; for(int i = 0; i < urls.length; ++ i) { System.err.println("press any key to open " + docu[i]); System.in.read(); while(System.in.available() > 0) System.in.read(); XComponent rComponent = rLoader.loadComponentFromURL(urls[i], "_blank", 0, new PropertyValue[0]); // testWriter(rComponent); System.err.println("press any key to close the document"); System.in.read(); while(System.in.available() > 0) System.in.read(); rComponent.dispose(); } } static void doSomething(Object r) throws com.sun.star.uno.Exception, IOException { XNamingService rName = UnoRuntime.queryInterface(XNamingService.class, r); if(rName != null) { System.err.println("got the remote naming service !"); Object rXsmgr = rName.getRegisteredObject("StarOffice.ServiceManager"); XMultiServiceFactory rSmgr = UnoRuntime.queryInterface(XMultiServiceFactory.class, rXsmgr); if(rSmgr != null) { System.err.println("got the remote service manager !"); // testPipe(rSmgr); testDocument(rSmgr); } } } static String neededServices[] = new String[] { "com.sun.star.comp.servicemanager.ServiceManager", "com.sun.star.comp.loader.JavaLoader", "com.sun.star.comp.connections.Connector", "com.sun.star.comp.bridgefactory.BridgeFactory", "com.sun.star.comp.urlresolver.UrlResolver" }; public static void main(String argv[]) throws Exception { if(argv.length != 1) { System.err.println("usage : testoffice uno:connection;protocol;objectName"); System.exit(-1); } com.sun.star.comp.servicemanager.ServiceManager smgr = new com.sun.star.comp.servicemanager.ServiceManager(); smgr.addFactories(neededServices); Object resolver = smgr.createInstance("com.sun.star.bridge.UnoUrlResolver" ); XUnoUrlResolver resolver_xUnoUrlResolver = UnoRuntime.queryInterface(XUnoUrlResolver.class, resolver); Object rInitialObject = resolver_xUnoUrlResolver.resolve(argv[0]); if(rInitialObject != null) { System.err.println("got the remote object"); doSomething(rInitialObject); } } }