1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski import com.sun.star.lang.XComponent; 25*b1cdbd2cSJim Jagielski import com.sun.star.lang.XMultiComponentFactory; 26*b1cdbd2cSJim Jagielski import com.sun.star.uno.XComponentContext; 27*b1cdbd2cSJim Jagielski import com.sun.star.uno.UnoRuntime; 28*b1cdbd2cSJim Jagielski import com.sun.star.frame.XComponentLoader; 29*b1cdbd2cSJim Jagielski import com.sun.star.beans.PropertyValue; 30*b1cdbd2cSJim Jagielski import com.sun.star.beans.XPropertySet; 31*b1cdbd2cSJim Jagielski import com.sun.star.datatransfer.DataFlavor; 32*b1cdbd2cSJim Jagielski import com.sun.star.datatransfer.UnsupportedFlavorException; 33*b1cdbd2cSJim Jagielski import com.sun.star.datatransfer.XTransferable; 34*b1cdbd2cSJim Jagielski import com.sun.star.datatransfer.clipboard.XClipboard; 35*b1cdbd2cSJim Jagielski import com.sun.star.datatransfer.clipboard.XClipboardNotifier; 36*b1cdbd2cSJim Jagielski import com.sun.star.text.XTextDocument; 37*b1cdbd2cSJim Jagielski import com.sun.star.uno.AnyConverter; 38*b1cdbd2cSJim Jagielski 39*b1cdbd2cSJim Jagielski //------------------------------------------------- 40*b1cdbd2cSJim Jagielski // Demonstrates the usage of the clipboard service 41*b1cdbd2cSJim Jagielski //------------------------------------------------- 42*b1cdbd2cSJim Jagielski 43*b1cdbd2cSJim Jagielski public class Clipboard 44*b1cdbd2cSJim Jagielski { main(String[] args)45*b1cdbd2cSJim Jagielski public static void main(String[] args) 46*b1cdbd2cSJim Jagielski { 47*b1cdbd2cSJim Jagielski try 48*b1cdbd2cSJim Jagielski { 49*b1cdbd2cSJim Jagielski // get the remote office context. If necessary a new office 50*b1cdbd2cSJim Jagielski // process is started 51*b1cdbd2cSJim Jagielski XComponentContext xOfficeContext = 52*b1cdbd2cSJim Jagielski com.sun.star.comp.helper.Bootstrap.bootstrap(); 53*b1cdbd2cSJim Jagielski System.out.println("Connected to a running office ..."); 54*b1cdbd2cSJim Jagielski // get the service manager from the office context 55*b1cdbd2cSJim Jagielski XMultiComponentFactory xServiceManager = 56*b1cdbd2cSJim Jagielski xOfficeContext.getServiceManager(); 57*b1cdbd2cSJim Jagielski 58*b1cdbd2cSJim Jagielski // create a new test document 59*b1cdbd2cSJim Jagielski Object oDesktop = xServiceManager.createInstanceWithContext( 60*b1cdbd2cSJim Jagielski "com.sun.star.frame.Desktop", xOfficeContext); 61*b1cdbd2cSJim Jagielski 62*b1cdbd2cSJim Jagielski XComponentLoader xCompLoader =(XComponentLoader) 63*b1cdbd2cSJim Jagielski UnoRuntime.queryInterface(XComponentLoader.class, oDesktop); 64*b1cdbd2cSJim Jagielski 65*b1cdbd2cSJim Jagielski com.sun.star.lang.XComponent xComponent = 66*b1cdbd2cSJim Jagielski xCompLoader.loadComponentFromURL("private:factory/swriter", 67*b1cdbd2cSJim Jagielski "_blank", 0, new com.sun.star.beans.PropertyValue[0]); 68*b1cdbd2cSJim Jagielski { 69*b1cdbd2cSJim Jagielski XTextDocument xDoc =(XTextDocument) 70*b1cdbd2cSJim Jagielski UnoRuntime.queryInterface(XTextDocument.class, xComponent); 71*b1cdbd2cSJim Jagielski xDoc.getText().setString("In the first step, paste the current content of the clipboard in the document!\nThe text \"Hello world!\" shall be insert at the current cursor position below.\n\nIn the second step, please select some words and put it into the clipboard! ...\n\nCurrent clipboard content = "); 72*b1cdbd2cSJim Jagielski 73*b1cdbd2cSJim Jagielski // ensure that the document content is optimal visible 74*b1cdbd2cSJim Jagielski com.sun.star.frame.XModel xModel = 75*b1cdbd2cSJim Jagielski (com.sun.star.frame.XModel)UnoRuntime.queryInterface( 76*b1cdbd2cSJim Jagielski com.sun.star.frame.XModel.class, xDoc); 77*b1cdbd2cSJim Jagielski // get the frame for later usage 78*b1cdbd2cSJim Jagielski com.sun.star.frame.XFrame xFrame = 79*b1cdbd2cSJim Jagielski xModel.getCurrentController().getFrame(); 80*b1cdbd2cSJim Jagielski 81*b1cdbd2cSJim Jagielski com.sun.star.view.XViewSettingsSupplier xViewSettings = 82*b1cdbd2cSJim Jagielski (com.sun.star.view.XViewSettingsSupplier)UnoRuntime.queryInterface( 83*b1cdbd2cSJim Jagielski com.sun.star.view.XViewSettingsSupplier.class, 84*b1cdbd2cSJim Jagielski xModel.getCurrentController()); 85*b1cdbd2cSJim Jagielski xViewSettings.getViewSettings().setPropertyValue( 86*b1cdbd2cSJim Jagielski "ZoomType", new Short((short)0)); 87*b1cdbd2cSJim Jagielski } 88*b1cdbd2cSJim Jagielski // test document will be closed later 89*b1cdbd2cSJim Jagielski 90*b1cdbd2cSJim Jagielski Object oClipboard = xServiceManager.createInstanceWithContext( 91*b1cdbd2cSJim Jagielski "com.sun.star.datatransfer.clipboard.SystemClipboard", 92*b1cdbd2cSJim Jagielski xOfficeContext); 93*b1cdbd2cSJim Jagielski 94*b1cdbd2cSJim Jagielski XClipboard xClipboard = (XClipboard) 95*b1cdbd2cSJim Jagielski UnoRuntime.queryInterface(XClipboard.class, oClipboard); 96*b1cdbd2cSJim Jagielski 97*b1cdbd2cSJim Jagielski //--------------------------------------------------- 98*b1cdbd2cSJim Jagielski // registering as clipboard listener 99*b1cdbd2cSJim Jagielski //--------------------------------------------------- 100*b1cdbd2cSJim Jagielski 101*b1cdbd2cSJim Jagielski XClipboardNotifier xClipNotifier = (XClipboardNotifier) 102*b1cdbd2cSJim Jagielski UnoRuntime.queryInterface(XClipboardNotifier.class, oClipboard); 103*b1cdbd2cSJim Jagielski 104*b1cdbd2cSJim Jagielski ClipboardListener aClipListener= new ClipboardListener(); 105*b1cdbd2cSJim Jagielski 106*b1cdbd2cSJim Jagielski xClipNotifier.addClipboardListener(aClipListener); 107*b1cdbd2cSJim Jagielski 108*b1cdbd2cSJim Jagielski // Read ClipBoard 109*b1cdbd2cSJim Jagielski readClipBoard(xClipboard); 110*b1cdbd2cSJim Jagielski 111*b1cdbd2cSJim Jagielski //--------------------------------------------------- 112*b1cdbd2cSJim Jagielski // becoming a clipboard owner 113*b1cdbd2cSJim Jagielski //--------------------------------------------------- 114*b1cdbd2cSJim Jagielski 115*b1cdbd2cSJim Jagielski System.out.println("Becoming a clipboard owner..."); 116*b1cdbd2cSJim Jagielski System.out.println(""); 117*b1cdbd2cSJim Jagielski 118*b1cdbd2cSJim Jagielski ClipboardOwner aClipOwner = new ClipboardOwner(); 119*b1cdbd2cSJim Jagielski xClipboard.setContents(new TextTransferable("Hello World!"), aClipOwner); 120*b1cdbd2cSJim Jagielski int iFirst = 0; 121*b1cdbd2cSJim Jagielski 122*b1cdbd2cSJim Jagielski while (aClipOwner.isClipboardOwner()) 123*b1cdbd2cSJim Jagielski { 124*b1cdbd2cSJim Jagielski if (iFirst != 2) { 125*b1cdbd2cSJim Jagielski if (iFirst == 1) { 126*b1cdbd2cSJim Jagielski System.out.println("Change clipboard ownership by putting something into the clipboard!\n"); 127*b1cdbd2cSJim Jagielski System.out.print("Still clipboard owner..."); 128*b1cdbd2cSJim Jagielski } else { 129*b1cdbd2cSJim Jagielski System.out.println("Still clipboard owner..."); 130*b1cdbd2cSJim Jagielski } 131*b1cdbd2cSJim Jagielski ++iFirst; 132*b1cdbd2cSJim Jagielski } else { 133*b1cdbd2cSJim Jagielski System.out.print("."); 134*b1cdbd2cSJim Jagielski } 135*b1cdbd2cSJim Jagielski Thread.sleep(1000); 136*b1cdbd2cSJim Jagielski } 137*b1cdbd2cSJim Jagielski 138*b1cdbd2cSJim Jagielski // Read ClipBoard again 139*b1cdbd2cSJim Jagielski readClipBoard(xClipboard); 140*b1cdbd2cSJim Jagielski 141*b1cdbd2cSJim Jagielski //--------------------------------------------------- 142*b1cdbd2cSJim Jagielski // unregistering as clipboard listener 143*b1cdbd2cSJim Jagielski //--------------------------------------------------- 144*b1cdbd2cSJim Jagielski xClipNotifier.removeClipboardListener(aClipListener); 145*b1cdbd2cSJim Jagielski 146*b1cdbd2cSJim Jagielski // close test document 147*b1cdbd2cSJim Jagielski com.sun.star.util.XCloseable xCloseable = (com.sun.star.util.XCloseable) 148*b1cdbd2cSJim Jagielski UnoRuntime.queryInterface(com.sun.star.util.XCloseable.class, 149*b1cdbd2cSJim Jagielski xComponent ); 150*b1cdbd2cSJim Jagielski 151*b1cdbd2cSJim Jagielski if (xCloseable != null ) { 152*b1cdbd2cSJim Jagielski xCloseable.close(false); 153*b1cdbd2cSJim Jagielski } else 154*b1cdbd2cSJim Jagielski { 155*b1cdbd2cSJim Jagielski xComponent.dispose(); 156*b1cdbd2cSJim Jagielski } 157*b1cdbd2cSJim Jagielski 158*b1cdbd2cSJim Jagielski System.exit(0); 159*b1cdbd2cSJim Jagielski } 160*b1cdbd2cSJim Jagielski catch( Exception ex ) 161*b1cdbd2cSJim Jagielski { 162*b1cdbd2cSJim Jagielski ex.printStackTrace(); 163*b1cdbd2cSJim Jagielski } 164*b1cdbd2cSJim Jagielski } 165*b1cdbd2cSJim Jagielski readClipBoard(XClipboard xClipboard)166*b1cdbd2cSJim Jagielski public static void readClipBoard(XClipboard xClipboard) 167*b1cdbd2cSJim Jagielski throws java.lang.Exception 168*b1cdbd2cSJim Jagielski { 169*b1cdbd2cSJim Jagielski //--------------------------------------------------- 170*b1cdbd2cSJim Jagielski // get a list of formats currently on the clipboard 171*b1cdbd2cSJim Jagielski //--------------------------------------------------- 172*b1cdbd2cSJim Jagielski 173*b1cdbd2cSJim Jagielski XTransferable xTransferable = xClipboard.getContents(); 174*b1cdbd2cSJim Jagielski 175*b1cdbd2cSJim Jagielski DataFlavor[] aDflvArr = xTransferable.getTransferDataFlavors(); 176*b1cdbd2cSJim Jagielski 177*b1cdbd2cSJim Jagielski // print all available formats 178*b1cdbd2cSJim Jagielski 179*b1cdbd2cSJim Jagielski System.out.println("Reading the clipboard..."); 180*b1cdbd2cSJim Jagielski System.out.println("Available clipboard formats:"); 181*b1cdbd2cSJim Jagielski 182*b1cdbd2cSJim Jagielski DataFlavor aUniFlv = null; 183*b1cdbd2cSJim Jagielski 184*b1cdbd2cSJim Jagielski for (int i=0;i<aDflvArr.length;i++) 185*b1cdbd2cSJim Jagielski { 186*b1cdbd2cSJim Jagielski System.out.println( "MimeType: " + 187*b1cdbd2cSJim Jagielski aDflvArr[i].MimeType + 188*b1cdbd2cSJim Jagielski " HumanPresentableName: " + 189*b1cdbd2cSJim Jagielski aDflvArr[i].HumanPresentableName ); 190*b1cdbd2cSJim Jagielski 191*b1cdbd2cSJim Jagielski // if there is the format unicode text on the clipboard save the 192*b1cdbd2cSJim Jagielski // corresponding DataFlavor so that we can later output the string 193*b1cdbd2cSJim Jagielski 194*b1cdbd2cSJim Jagielski if ( aDflvArr[i].MimeType.equals("text/plain;charset=utf-16") ) 195*b1cdbd2cSJim Jagielski { 196*b1cdbd2cSJim Jagielski aUniFlv = aDflvArr[i]; 197*b1cdbd2cSJim Jagielski } 198*b1cdbd2cSJim Jagielski } 199*b1cdbd2cSJim Jagielski 200*b1cdbd2cSJim Jagielski System.out.println(""); 201*b1cdbd2cSJim Jagielski 202*b1cdbd2cSJim Jagielski try 203*b1cdbd2cSJim Jagielski { 204*b1cdbd2cSJim Jagielski if (aUniFlv != null) 205*b1cdbd2cSJim Jagielski { 206*b1cdbd2cSJim Jagielski System.out.print("Unicode text on the clipboard ...\nYour selected text \""); 207*b1cdbd2cSJim Jagielski Object aData = xTransferable.getTransferData(aUniFlv); 208*b1cdbd2cSJim Jagielski System.out.println(AnyConverter.toString(aData) 209*b1cdbd2cSJim Jagielski + "\" is now in the clipboard.\n"); 210*b1cdbd2cSJim Jagielski } 211*b1cdbd2cSJim Jagielski } 212*b1cdbd2cSJim Jagielski catch( UnsupportedFlavorException ex ) 213*b1cdbd2cSJim Jagielski { 214*b1cdbd2cSJim Jagielski System.err.println( "Requested format is not available on the clipboard!" ); 215*b1cdbd2cSJim Jagielski ex.printStackTrace(); 216*b1cdbd2cSJim Jagielski } 217*b1cdbd2cSJim Jagielski } 218*b1cdbd2cSJim Jagielski } 219