1*cdf0e10cSrcweir /************************************************************************* 2*cdf0e10cSrcweir * 3*cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*cdf0e10cSrcweir * 5*cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 6*cdf0e10cSrcweir * 7*cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite 8*cdf0e10cSrcweir * 9*cdf0e10cSrcweir * This file is part of OpenOffice.org. 10*cdf0e10cSrcweir * 11*cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify 12*cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3 13*cdf0e10cSrcweir * only, as published by the Free Software Foundation. 14*cdf0e10cSrcweir * 15*cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful, 16*cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details 19*cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code). 20*cdf0e10cSrcweir * 21*cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License 22*cdf0e10cSrcweir * version 3 along with OpenOffice.org. If not, see 23*cdf0e10cSrcweir * <http://www.openoffice.org/license.html> 24*cdf0e10cSrcweir * for a copy of the LGPLv3 License. 25*cdf0e10cSrcweir * 26*cdf0e10cSrcweir ************************************************************************/ 27*cdf0e10cSrcweir 28*cdf0e10cSrcweir package test.javauno.acquire; 29*cdf0e10cSrcweir 30*cdf0e10cSrcweir import com.sun.star.bridge.UnoUrlResolver; 31*cdf0e10cSrcweir import com.sun.star.bridge.XBridgeFactory; 32*cdf0e10cSrcweir import com.sun.star.bridge.XInstanceProvider; 33*cdf0e10cSrcweir import com.sun.star.comp.helper.Bootstrap; 34*cdf0e10cSrcweir import com.sun.star.connection.Acceptor; 35*cdf0e10cSrcweir import com.sun.star.connection.XAcceptor; 36*cdf0e10cSrcweir import com.sun.star.connection.XConnection; 37*cdf0e10cSrcweir import com.sun.star.lib.uno.helper.UnoUrl; 38*cdf0e10cSrcweir import com.sun.star.uno.UnoRuntime; 39*cdf0e10cSrcweir import com.sun.star.uno.XComponentContext; 40*cdf0e10cSrcweir import com.sun.star.uno.XInterface; 41*cdf0e10cSrcweir import util.WaitUnreachable; 42*cdf0e10cSrcweir 43*cdf0e10cSrcweir public final class TestAcquire { 44*cdf0e10cSrcweir public static void main(String[] arguments) throws Exception { 45*cdf0e10cSrcweir // - arguments[0] must be "client" or "server" 46*cdf0e10cSrcweir // - arguments[1] must be the UNO URL to connect to (client) or accept 47*cdf0e10cSrcweir // on (server) 48*cdf0e10cSrcweir XComponentContext context 49*cdf0e10cSrcweir = Bootstrap.createInitialComponentContext(null); 50*cdf0e10cSrcweir if (arguments[0].equals("client")) { 51*cdf0e10cSrcweir execClient(context, arguments[1]); 52*cdf0e10cSrcweir } else { 53*cdf0e10cSrcweir execServer(context, arguments[1]); 54*cdf0e10cSrcweir } 55*cdf0e10cSrcweir } 56*cdf0e10cSrcweir 57*cdf0e10cSrcweir private static void assertNotNull(Object obj) { 58*cdf0e10cSrcweir if (obj == null) { 59*cdf0e10cSrcweir throw new RuntimeException("assertNotNull failed"); 60*cdf0e10cSrcweir } 61*cdf0e10cSrcweir } 62*cdf0e10cSrcweir 63*cdf0e10cSrcweir private static void receive(Object obj) { 64*cdf0e10cSrcweir assertNotNull(obj); 65*cdf0e10cSrcweir WaitUnreachable.ensureFinalization(obj); 66*cdf0e10cSrcweir } 67*cdf0e10cSrcweir 68*cdf0e10cSrcweir private static void execClient(XComponentContext context, String url) 69*cdf0e10cSrcweir throws Exception 70*cdf0e10cSrcweir { 71*cdf0e10cSrcweir XTest test = UnoRuntime.queryInterface( 72*cdf0e10cSrcweir XTest.class, UnoUrlResolver.create(context).resolve(url)); 73*cdf0e10cSrcweir 74*cdf0e10cSrcweir WaitUnreachable u; 75*cdf0e10cSrcweir 76*cdf0e10cSrcweir u = new WaitUnreachable(new XInterface() {}); 77*cdf0e10cSrcweir test.setInterfaceToInterface((XInterface) u.get()); 78*cdf0e10cSrcweir receive(test.getInterfaceFromInterface()); 79*cdf0e10cSrcweir test.clearInterface(); 80*cdf0e10cSrcweir u.waitUnreachable(); 81*cdf0e10cSrcweir u = new WaitUnreachable(new XBase() {}); 82*cdf0e10cSrcweir test.setInterfaceToInterface((XBase) u.get()); 83*cdf0e10cSrcweir receive(test.getInterfaceFromInterface()); 84*cdf0e10cSrcweir test.clearInterface(); 85*cdf0e10cSrcweir u.waitUnreachable(); 86*cdf0e10cSrcweir u = new WaitUnreachable(new XDerived() {}); 87*cdf0e10cSrcweir test.setInterfaceToInterface((XDerived) u.get()); 88*cdf0e10cSrcweir receive(test.getInterfaceFromInterface()); 89*cdf0e10cSrcweir test.clearInterface(); 90*cdf0e10cSrcweir u.waitUnreachable(); 91*cdf0e10cSrcweir 92*cdf0e10cSrcweir u = new WaitUnreachable(new XBase() {}); 93*cdf0e10cSrcweir test.setBaseToInterface((XBase) u.get()); 94*cdf0e10cSrcweir receive(test.getInterfaceFromInterface()); 95*cdf0e10cSrcweir test.clearInterface(); 96*cdf0e10cSrcweir u.waitUnreachable(); 97*cdf0e10cSrcweir u = new WaitUnreachable(new XDerived() {}); 98*cdf0e10cSrcweir test.setBaseToInterface((XDerived) u.get()); 99*cdf0e10cSrcweir receive(test.getInterfaceFromInterface()); 100*cdf0e10cSrcweir test.clearInterface(); 101*cdf0e10cSrcweir u.waitUnreachable(); 102*cdf0e10cSrcweir 103*cdf0e10cSrcweir u = new WaitUnreachable(new XDerived() {}); 104*cdf0e10cSrcweir test.setDerivedToInterface((XDerived) u.get()); 105*cdf0e10cSrcweir receive(test.getInterfaceFromInterface()); 106*cdf0e10cSrcweir test.clearInterface(); 107*cdf0e10cSrcweir u.waitUnreachable(); 108*cdf0e10cSrcweir 109*cdf0e10cSrcweir u = new WaitUnreachable(new XBase() {}); 110*cdf0e10cSrcweir test.setBaseToBase((XBase) u.get()); 111*cdf0e10cSrcweir receive(test.getInterfaceFromBase()); 112*cdf0e10cSrcweir receive(test.getBaseFromBase()); 113*cdf0e10cSrcweir test.clearBase(); 114*cdf0e10cSrcweir u.waitUnreachable(); 115*cdf0e10cSrcweir u = new WaitUnreachable(new XDerived() {}); 116*cdf0e10cSrcweir test.setBaseToBase((XDerived) u.get()); 117*cdf0e10cSrcweir receive(test.getInterfaceFromBase()); 118*cdf0e10cSrcweir receive(test.getBaseFromBase()); 119*cdf0e10cSrcweir test.clearBase(); 120*cdf0e10cSrcweir u.waitUnreachable(); 121*cdf0e10cSrcweir 122*cdf0e10cSrcweir u = new WaitUnreachable(new XDerived() {}); 123*cdf0e10cSrcweir test.setDerivedToBase((XDerived) u.get()); 124*cdf0e10cSrcweir receive(test.getInterfaceFromBase()); 125*cdf0e10cSrcweir receive(test.getBaseFromBase()); 126*cdf0e10cSrcweir test.clearBase(); 127*cdf0e10cSrcweir u.waitUnreachable(); 128*cdf0e10cSrcweir 129*cdf0e10cSrcweir u = new WaitUnreachable(new XDerived() {}); 130*cdf0e10cSrcweir test.setDerivedToDerived((XDerived) u.get()); 131*cdf0e10cSrcweir receive(test.getInterfaceFromDerived()); 132*cdf0e10cSrcweir receive(test.getBaseFromDerived()); 133*cdf0e10cSrcweir receive(test.getDerivedFromDerived()); 134*cdf0e10cSrcweir test.clearDerived(); 135*cdf0e10cSrcweir u.waitUnreachable(); 136*cdf0e10cSrcweir 137*cdf0e10cSrcweir u = new WaitUnreachable(new XInterface() {}); 138*cdf0e10cSrcweir receive(test.roundTripInterfaceToInterface((XInterface) u.get())); 139*cdf0e10cSrcweir u.waitUnreachable(); 140*cdf0e10cSrcweir u = new WaitUnreachable(new XBase() {}); 141*cdf0e10cSrcweir receive(test.roundTripInterfaceToInterface((XBase) u.get())); 142*cdf0e10cSrcweir u.waitUnreachable(); 143*cdf0e10cSrcweir u = new WaitUnreachable(new XDerived() {}); 144*cdf0e10cSrcweir receive(test.roundTripInterfaceToInterface((XDerived) u.get())); 145*cdf0e10cSrcweir u.waitUnreachable(); 146*cdf0e10cSrcweir 147*cdf0e10cSrcweir u = new WaitUnreachable(new XBase() {}); 148*cdf0e10cSrcweir receive(test.roundTripBaseToInterface((XBase) u.get())); 149*cdf0e10cSrcweir u.waitUnreachable(); 150*cdf0e10cSrcweir u = new WaitUnreachable(new XDerived() {}); 151*cdf0e10cSrcweir receive(test.roundTripBaseToInterface((XDerived) u.get())); 152*cdf0e10cSrcweir u.waitUnreachable(); 153*cdf0e10cSrcweir 154*cdf0e10cSrcweir u = new WaitUnreachable(new XDerived() {}); 155*cdf0e10cSrcweir receive(test.roundTripDerivedToInterface((XDerived) u.get())); 156*cdf0e10cSrcweir u.waitUnreachable(); 157*cdf0e10cSrcweir 158*cdf0e10cSrcweir u = new WaitUnreachable(new XBase() {}); 159*cdf0e10cSrcweir receive(test.roundTripBaseToBase((XBase) u.get())); 160*cdf0e10cSrcweir u.waitUnreachable(); 161*cdf0e10cSrcweir u = new WaitUnreachable(new XDerived() {}); 162*cdf0e10cSrcweir receive(test.roundTripBaseToBase((XDerived) u.get())); 163*cdf0e10cSrcweir u.waitUnreachable(); 164*cdf0e10cSrcweir 165*cdf0e10cSrcweir u = new WaitUnreachable(new XDerived() {}); 166*cdf0e10cSrcweir receive(test.roundTripDerivedToBase((XDerived) u.get())); 167*cdf0e10cSrcweir u.waitUnreachable(); 168*cdf0e10cSrcweir 169*cdf0e10cSrcweir u = new WaitUnreachable(new XDerived() {}); 170*cdf0e10cSrcweir receive(test.roundTripDerivedToDerived((XDerived) u.get())); 171*cdf0e10cSrcweir u.waitUnreachable(); 172*cdf0e10cSrcweir 173*cdf0e10cSrcweir u = new WaitUnreachable(test); 174*cdf0e10cSrcweir test = null; 175*cdf0e10cSrcweir u.waitUnreachable(); 176*cdf0e10cSrcweir System.out.println( 177*cdf0e10cSrcweir "Client and server both cleanly terminate now: Success"); 178*cdf0e10cSrcweir } 179*cdf0e10cSrcweir 180*cdf0e10cSrcweir private static void execServer(XComponentContext context, String url) 181*cdf0e10cSrcweir throws Exception 182*cdf0e10cSrcweir { 183*cdf0e10cSrcweir XAcceptor acceptor = Acceptor.create(context); 184*cdf0e10cSrcweir XBridgeFactory factory = UnoRuntime.queryInterface( 185*cdf0e10cSrcweir XBridgeFactory.class, 186*cdf0e10cSrcweir context.getServiceManager().createInstanceWithContext( 187*cdf0e10cSrcweir "com.sun.star.bridge.BridgeFactory", context)); 188*cdf0e10cSrcweir UnoUrl unoUrl = UnoUrl.parseUnoUrl(url); 189*cdf0e10cSrcweir System.out.println("Server: Accepting..."); 190*cdf0e10cSrcweir XConnection connection = acceptor.accept( 191*cdf0e10cSrcweir unoUrl.getConnectionAndParametersAsString()); 192*cdf0e10cSrcweir System.out.println("Server: ...connected..."); 193*cdf0e10cSrcweir factory.createBridge( 194*cdf0e10cSrcweir "", unoUrl.getProtocolAndParametersAsString(), connection, 195*cdf0e10cSrcweir new Provider()); 196*cdf0e10cSrcweir System.out.println("Server: ...bridged."); 197*cdf0e10cSrcweir } 198*cdf0e10cSrcweir 199*cdf0e10cSrcweir private static final class Provider implements XInstanceProvider { 200*cdf0e10cSrcweir public Object getInstance(String instanceName) { 201*cdf0e10cSrcweir return new XTest() { 202*cdf0e10cSrcweir public void setInterfaceToInterface(Object obj) { 203*cdf0e10cSrcweir iface = obj; 204*cdf0e10cSrcweir } 205*cdf0e10cSrcweir 206*cdf0e10cSrcweir public void setBaseToInterface(XBase obj) { 207*cdf0e10cSrcweir iface = obj; 208*cdf0e10cSrcweir } 209*cdf0e10cSrcweir 210*cdf0e10cSrcweir public void setDerivedToInterface(XDerived obj) { 211*cdf0e10cSrcweir iface = obj; 212*cdf0e10cSrcweir } 213*cdf0e10cSrcweir 214*cdf0e10cSrcweir public Object getInterfaceFromInterface() { 215*cdf0e10cSrcweir return iface; 216*cdf0e10cSrcweir } 217*cdf0e10cSrcweir 218*cdf0e10cSrcweir public void clearInterface() { 219*cdf0e10cSrcweir WaitUnreachable u = new WaitUnreachable(iface); 220*cdf0e10cSrcweir iface = null; 221*cdf0e10cSrcweir u.waitUnreachable(); 222*cdf0e10cSrcweir } 223*cdf0e10cSrcweir 224*cdf0e10cSrcweir public void setBaseToBase(XBase obj) { 225*cdf0e10cSrcweir base = obj; 226*cdf0e10cSrcweir } 227*cdf0e10cSrcweir 228*cdf0e10cSrcweir public void setDerivedToBase(XDerived obj) { 229*cdf0e10cSrcweir base = obj; 230*cdf0e10cSrcweir } 231*cdf0e10cSrcweir 232*cdf0e10cSrcweir public Object getInterfaceFromBase() { 233*cdf0e10cSrcweir return base; 234*cdf0e10cSrcweir } 235*cdf0e10cSrcweir 236*cdf0e10cSrcweir public XBase getBaseFromBase() { 237*cdf0e10cSrcweir return base; 238*cdf0e10cSrcweir } 239*cdf0e10cSrcweir 240*cdf0e10cSrcweir public void clearBase() { 241*cdf0e10cSrcweir WaitUnreachable u = new WaitUnreachable(base); 242*cdf0e10cSrcweir base = null; 243*cdf0e10cSrcweir u.waitUnreachable(); 244*cdf0e10cSrcweir } 245*cdf0e10cSrcweir 246*cdf0e10cSrcweir public void setDerivedToDerived(XDerived obj) { 247*cdf0e10cSrcweir derived = obj; 248*cdf0e10cSrcweir } 249*cdf0e10cSrcweir 250*cdf0e10cSrcweir public Object getInterfaceFromDerived() { 251*cdf0e10cSrcweir return derived; 252*cdf0e10cSrcweir } 253*cdf0e10cSrcweir 254*cdf0e10cSrcweir public XBase getBaseFromDerived() { 255*cdf0e10cSrcweir return derived; 256*cdf0e10cSrcweir } 257*cdf0e10cSrcweir 258*cdf0e10cSrcweir public XDerived getDerivedFromDerived() { 259*cdf0e10cSrcweir return derived; 260*cdf0e10cSrcweir } 261*cdf0e10cSrcweir 262*cdf0e10cSrcweir public void clearDerived() { 263*cdf0e10cSrcweir WaitUnreachable u = new WaitUnreachable(derived); 264*cdf0e10cSrcweir derived = null; 265*cdf0e10cSrcweir u.waitUnreachable(); 266*cdf0e10cSrcweir } 267*cdf0e10cSrcweir 268*cdf0e10cSrcweir public Object roundTripInterfaceToInterface(Object obj) { 269*cdf0e10cSrcweir WaitUnreachable.ensureFinalization(obj); 270*cdf0e10cSrcweir return obj; 271*cdf0e10cSrcweir } 272*cdf0e10cSrcweir 273*cdf0e10cSrcweir public Object roundTripBaseToInterface(XBase obj) { 274*cdf0e10cSrcweir WaitUnreachable.ensureFinalization(obj); 275*cdf0e10cSrcweir return obj; 276*cdf0e10cSrcweir } 277*cdf0e10cSrcweir 278*cdf0e10cSrcweir public Object roundTripDerivedToInterface(XDerived obj) { 279*cdf0e10cSrcweir WaitUnreachable.ensureFinalization(obj); 280*cdf0e10cSrcweir return obj; 281*cdf0e10cSrcweir } 282*cdf0e10cSrcweir 283*cdf0e10cSrcweir public XBase roundTripBaseToBase(XBase obj) { 284*cdf0e10cSrcweir WaitUnreachable.ensureFinalization(obj); 285*cdf0e10cSrcweir return obj; 286*cdf0e10cSrcweir } 287*cdf0e10cSrcweir 288*cdf0e10cSrcweir public XBase roundTripDerivedToBase(XDerived obj) { 289*cdf0e10cSrcweir WaitUnreachable.ensureFinalization(obj); 290*cdf0e10cSrcweir return obj; 291*cdf0e10cSrcweir } 292*cdf0e10cSrcweir 293*cdf0e10cSrcweir public XDerived roundTripDerivedToDerived(XDerived obj) { 294*cdf0e10cSrcweir WaitUnreachable.ensureFinalization(obj); 295*cdf0e10cSrcweir return obj; 296*cdf0e10cSrcweir } 297*cdf0e10cSrcweir 298*cdf0e10cSrcweir private Object iface; 299*cdf0e10cSrcweir private XBase base; 300*cdf0e10cSrcweir private XDerived derived; 301*cdf0e10cSrcweir }; 302*cdf0e10cSrcweir } 303*cdf0e10cSrcweir } 304*cdf0e10cSrcweir } 305