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 //*************************************************************************** 25*b1cdbd2cSJim Jagielski // comment: Step 1: get the Desktop object from the office 26*b1cdbd2cSJim Jagielski // Step 2: open an empty text document 27*b1cdbd2cSJim Jagielski // Step 3: enter a example text 28*b1cdbd2cSJim Jagielski // Step 4: insert some bookmarks 29*b1cdbd2cSJim Jagielski // 30*b1cdbd2cSJim Jagielski // Chapter 5.1.1.4 Inserting bookmarks 31*b1cdbd2cSJim Jagielski //*************************************************************************** 32*b1cdbd2cSJim Jagielski 33*b1cdbd2cSJim Jagielski import com.sun.star.uno.UnoRuntime; 34*b1cdbd2cSJim Jagielski 35*b1cdbd2cSJim Jagielski public class BookmarkInsertion { 36*b1cdbd2cSJim Jagielski main(String args[])37*b1cdbd2cSJim Jagielski public static void main(String args[]) { 38*b1cdbd2cSJim Jagielski // You need the desktop to create a document 39*b1cdbd2cSJim Jagielski // The getDesktop method does the UNO bootstrapping, gets the 40*b1cdbd2cSJim Jagielski // remote servie manager and the desktop object. 41*b1cdbd2cSJim Jagielski com.sun.star.frame.XDesktop xDesktop = null; 42*b1cdbd2cSJim Jagielski xDesktop = getDesktop(); 43*b1cdbd2cSJim Jagielski 44*b1cdbd2cSJim Jagielski // create text document 45*b1cdbd2cSJim Jagielski com.sun.star.text.XTextDocument xTextDocument = null; 46*b1cdbd2cSJim Jagielski xTextDocument = createTextdocument(xDesktop); 47*b1cdbd2cSJim Jagielski 48*b1cdbd2cSJim Jagielski // put example text in document 49*b1cdbd2cSJim Jagielski createExampleData(xTextDocument); 50*b1cdbd2cSJim Jagielski 51*b1cdbd2cSJim Jagielski 52*b1cdbd2cSJim Jagielski String mOffending[] = { "negro(e|es)?","bor(ed|ing)?", 53*b1cdbd2cSJim Jagielski "bloody?", "bleed(ing)?" }; 54*b1cdbd2cSJim Jagielski String mBad[] = { "possib(le|ilit(y|ies))", "real(ly)+", "brilliant" }; 55*b1cdbd2cSJim Jagielski 56*b1cdbd2cSJim Jagielski String sOffendPrefix = "Offending"; 57*b1cdbd2cSJim Jagielski String sBadPrefix = "BadStyle"; 58*b1cdbd2cSJim Jagielski 59*b1cdbd2cSJim Jagielski markList(xTextDocument, mOffending, sOffendPrefix); 60*b1cdbd2cSJim Jagielski markList(xTextDocument, mBad, sBadPrefix); 61*b1cdbd2cSJim Jagielski 62*b1cdbd2cSJim Jagielski System.out.println("Done"); 63*b1cdbd2cSJim Jagielski 64*b1cdbd2cSJim Jagielski System.exit(0); 65*b1cdbd2cSJim Jagielski } 66*b1cdbd2cSJim Jagielski markList(com.sun.star.text.XTextDocument xTextDocument, String mList[], String sPrefix)67*b1cdbd2cSJim Jagielski public static void markList(com.sun.star.text.XTextDocument xTextDocument, 68*b1cdbd2cSJim Jagielski String mList[], String sPrefix) { 69*b1cdbd2cSJim Jagielski int iCounter=0; 70*b1cdbd2cSJim Jagielski com.sun.star.uno.XInterface xSearchInterface = null; 71*b1cdbd2cSJim Jagielski com.sun.star.text.XTextRange xSearchTextRange = null; 72*b1cdbd2cSJim Jagielski 73*b1cdbd2cSJim Jagielski try { 74*b1cdbd2cSJim Jagielski for( iCounter = 0; iCounter < mList.length; iCounter++ ) { 75*b1cdbd2cSJim Jagielski // the findfirst returns a XInterface 76*b1cdbd2cSJim Jagielski xSearchInterface = (com.sun.star.uno.XInterface)FindFirst( 77*b1cdbd2cSJim Jagielski xTextDocument, mList[ iCounter ] ); 78*b1cdbd2cSJim Jagielski 79*b1cdbd2cSJim Jagielski if( xSearchInterface != null ) { 80*b1cdbd2cSJim Jagielski // get the TextRange form the XInterface 81*b1cdbd2cSJim Jagielski xSearchTextRange = (com.sun.star.text.XTextRange) 82*b1cdbd2cSJim Jagielski UnoRuntime.queryInterface( 83*b1cdbd2cSJim Jagielski com.sun.star.text.XTextRange.class, xSearchInterface); 84*b1cdbd2cSJim Jagielski 85*b1cdbd2cSJim Jagielski InsertBookmark(xTextDocument, xSearchTextRange, 86*b1cdbd2cSJim Jagielski sPrefix + iCounter); 87*b1cdbd2cSJim Jagielski } 88*b1cdbd2cSJim Jagielski } 89*b1cdbd2cSJim Jagielski } 90*b1cdbd2cSJim Jagielski catch( Exception e) { 91*b1cdbd2cSJim Jagielski e.printStackTrace(System.err); 92*b1cdbd2cSJim Jagielski System.exit(1); 93*b1cdbd2cSJim Jagielski } 94*b1cdbd2cSJim Jagielski } 95*b1cdbd2cSJim Jagielski 96*b1cdbd2cSJim Jagielski InsertBookmark(com.sun.star.text.XTextDocument xTextDocument, com.sun.star.text.XTextRange xTextRange, String sBookName)97*b1cdbd2cSJim Jagielski public static void InsertBookmark(com.sun.star.text.XTextDocument xTextDocument, 98*b1cdbd2cSJim Jagielski com.sun.star.text.XTextRange xTextRange, 99*b1cdbd2cSJim Jagielski String sBookName) { 100*b1cdbd2cSJim Jagielski // create a bookmark on a TextRange 101*b1cdbd2cSJim Jagielski try { 102*b1cdbd2cSJim Jagielski // get the MultiServiceFactory from the text document 103*b1cdbd2cSJim Jagielski com.sun.star.lang.XMultiServiceFactory xDocMSF; 104*b1cdbd2cSJim Jagielski xDocMSF = (com.sun.star.lang.XMultiServiceFactory) 105*b1cdbd2cSJim Jagielski UnoRuntime.queryInterface( 106*b1cdbd2cSJim Jagielski com.sun.star.lang.XMultiServiceFactory.class, xTextDocument); 107*b1cdbd2cSJim Jagielski 108*b1cdbd2cSJim Jagielski // the bookmark service is a context dependend service, you need 109*b1cdbd2cSJim Jagielski // the MultiServiceFactory from the document 110*b1cdbd2cSJim Jagielski Object xObject = xDocMSF.createInstance("com.sun.star.text.Bookmark"); 111*b1cdbd2cSJim Jagielski 112*b1cdbd2cSJim Jagielski // set the name from the bookmark 113*b1cdbd2cSJim Jagielski com.sun.star.container.XNamed xNameAccess = null; 114*b1cdbd2cSJim Jagielski xNameAccess = (com.sun.star.container.XNamed) 115*b1cdbd2cSJim Jagielski UnoRuntime.queryInterface( 116*b1cdbd2cSJim Jagielski com.sun.star.container.XNamed.class, xObject); 117*b1cdbd2cSJim Jagielski 118*b1cdbd2cSJim Jagielski xNameAccess.setName(sBookName); 119*b1cdbd2cSJim Jagielski 120*b1cdbd2cSJim Jagielski // create a XTextContent, for the method 'insertTextContent' 121*b1cdbd2cSJim Jagielski com.sun.star.text.XTextContent xTextContent = null; 122*b1cdbd2cSJim Jagielski xTextContent = (com.sun.star.text.XTextContent) 123*b1cdbd2cSJim Jagielski UnoRuntime.queryInterface( 124*b1cdbd2cSJim Jagielski com.sun.star.text.XTextContent.class, xNameAccess); 125*b1cdbd2cSJim Jagielski 126*b1cdbd2cSJim Jagielski // insertTextContent need a TextRange not a cursor to specify the 127*b1cdbd2cSJim Jagielski // position from the bookmark 128*b1cdbd2cSJim Jagielski xTextDocument.getText().insertTextContent(xTextRange, xTextContent, true); 129*b1cdbd2cSJim Jagielski 130*b1cdbd2cSJim Jagielski System.out.println("Insert bookmark: " + sBookName); 131*b1cdbd2cSJim Jagielski } 132*b1cdbd2cSJim Jagielski catch( Exception e) { 133*b1cdbd2cSJim Jagielski e.printStackTrace(System.err); 134*b1cdbd2cSJim Jagielski } 135*b1cdbd2cSJim Jagielski } 136*b1cdbd2cSJim Jagielski FindFirst( com.sun.star.text.XTextDocument xTextDocument, String sSearchString)137*b1cdbd2cSJim Jagielski protected static com.sun.star.uno.XInterface FindFirst( 138*b1cdbd2cSJim Jagielski com.sun.star.text.XTextDocument xTextDocument, String sSearchString) 139*b1cdbd2cSJim Jagielski { 140*b1cdbd2cSJim Jagielski com.sun.star.util.XSearchDescriptor xSearchDescriptor = null; 141*b1cdbd2cSJim Jagielski com.sun.star.util.XSearchable xSearchable = null; 142*b1cdbd2cSJim Jagielski com.sun.star.uno.XInterface xSearchInterface = null; 143*b1cdbd2cSJim Jagielski 144*b1cdbd2cSJim Jagielski try { 145*b1cdbd2cSJim Jagielski xSearchable = (com.sun.star.util.XSearchable) 146*b1cdbd2cSJim Jagielski UnoRuntime.queryInterface( 147*b1cdbd2cSJim Jagielski com.sun.star.util.XSearchable.class, xTextDocument); 148*b1cdbd2cSJim Jagielski xSearchDescriptor = (com.sun.star.util.XSearchDescriptor) 149*b1cdbd2cSJim Jagielski xSearchable.createSearchDescriptor(); 150*b1cdbd2cSJim Jagielski 151*b1cdbd2cSJim Jagielski xSearchDescriptor.setSearchString(sSearchString); 152*b1cdbd2cSJim Jagielski 153*b1cdbd2cSJim Jagielski com.sun.star.beans.XPropertySet xPropertySet = null; 154*b1cdbd2cSJim Jagielski xPropertySet = (com.sun.star.beans.XPropertySet) 155*b1cdbd2cSJim Jagielski UnoRuntime.queryInterface( 156*b1cdbd2cSJim Jagielski com.sun.star.beans.XPropertySet.class, xSearchDescriptor); 157*b1cdbd2cSJim Jagielski 158*b1cdbd2cSJim Jagielski xPropertySet.setPropertyValue("SearchRegularExpression", 159*b1cdbd2cSJim Jagielski new Boolean( true ) ); 160*b1cdbd2cSJim Jagielski 161*b1cdbd2cSJim Jagielski xSearchInterface = (com.sun.star.uno.XInterface) 162*b1cdbd2cSJim Jagielski xSearchable.findFirst(xSearchDescriptor); 163*b1cdbd2cSJim Jagielski } 164*b1cdbd2cSJim Jagielski catch( Exception e) { 165*b1cdbd2cSJim Jagielski e.printStackTrace(System.err); 166*b1cdbd2cSJim Jagielski } 167*b1cdbd2cSJim Jagielski 168*b1cdbd2cSJim Jagielski return xSearchInterface; 169*b1cdbd2cSJim Jagielski } 170*b1cdbd2cSJim Jagielski createExampleData( com.sun.star.text.XTextDocument xTextDocument )171*b1cdbd2cSJim Jagielski protected static void createExampleData( 172*b1cdbd2cSJim Jagielski com.sun.star.text.XTextDocument xTextDocument ) 173*b1cdbd2cSJim Jagielski { 174*b1cdbd2cSJim Jagielski com.sun.star.text.XTextCursor xTextCursor = null; 175*b1cdbd2cSJim Jagielski 176*b1cdbd2cSJim Jagielski try { 177*b1cdbd2cSJim Jagielski xTextCursor = (com.sun.star.text.XTextCursor) 178*b1cdbd2cSJim Jagielski xTextDocument.getText().createTextCursor(); 179*b1cdbd2cSJim Jagielski 180*b1cdbd2cSJim Jagielski xTextCursor.setString( "He heard quiet steps behind him. That didn't bode well. Who could be following him this late at night and in this deadbeat part of town? And at this particular moment, just after he pulled off the big time and was making off with the greenbacks. Was there another crook who'd had the same idea, and was now watching him and waiting for a chance to grab the fruit of his labor?" ); 181*b1cdbd2cSJim Jagielski xTextCursor.collapseToEnd(); 182*b1cdbd2cSJim Jagielski xTextCursor.setString( "Or did the steps behind him mean that one of many bloody officers in town was on to him and just waiting to pounce and snap those cuffs on his wrists? He nervously looked all around. Suddenly he saw the alley. Like lightening he darted off to the left and disappeared between the two warehouses almost falling over the trash can lying in the middle of the sidewalk. He tried to nervously tap his way along in the inky darkness and suddenly stiffened: it was a dead-end, he would have to go back the way he had come" ); 183*b1cdbd2cSJim Jagielski xTextCursor.collapseToEnd(); 184*b1cdbd2cSJim Jagielski xTextCursor.setString( "The steps got louder and louder, he saw the black outline of a figure coming around the corner. Is this the end of the line? he thought pressing himself back against the wall trying to make himself invisible in the dark, was all that planning and energy wasted? He was dripping with sweat now, cold and wet, he could smell the brilliant fear coming off his clothes. Suddenly next to him, with a barely noticeable squeak, a door swung quietly to and fro in the night's breeze." ); 185*b1cdbd2cSJim Jagielski 186*b1cdbd2cSJim Jagielski xTextCursor.gotoStart(false); 187*b1cdbd2cSJim Jagielski } 188*b1cdbd2cSJim Jagielski catch( Exception e) { 189*b1cdbd2cSJim Jagielski e.printStackTrace(System.err); 190*b1cdbd2cSJim Jagielski } 191*b1cdbd2cSJim Jagielski 192*b1cdbd2cSJim Jagielski } 193*b1cdbd2cSJim Jagielski getDesktop()194*b1cdbd2cSJim Jagielski public static com.sun.star.frame.XDesktop getDesktop() { 195*b1cdbd2cSJim Jagielski com.sun.star.frame.XDesktop xDesktop = null; 196*b1cdbd2cSJim Jagielski com.sun.star.lang.XMultiComponentFactory xMCF = null; 197*b1cdbd2cSJim Jagielski 198*b1cdbd2cSJim Jagielski try { 199*b1cdbd2cSJim Jagielski com.sun.star.uno.XComponentContext xContext = null; 200*b1cdbd2cSJim Jagielski 201*b1cdbd2cSJim Jagielski // get the remote office component context 202*b1cdbd2cSJim Jagielski xContext = com.sun.star.comp.helper.Bootstrap.bootstrap(); 203*b1cdbd2cSJim Jagielski 204*b1cdbd2cSJim Jagielski // get the remote office service manager 205*b1cdbd2cSJim Jagielski xMCF = xContext.getServiceManager(); 206*b1cdbd2cSJim Jagielski if( xMCF != null ) { 207*b1cdbd2cSJim Jagielski System.out.println("Connected to a running office ..."); 208*b1cdbd2cSJim Jagielski 209*b1cdbd2cSJim Jagielski Object oDesktop = xMCF.createInstanceWithContext( 210*b1cdbd2cSJim Jagielski "com.sun.star.frame.Desktop", xContext); 211*b1cdbd2cSJim Jagielski xDesktop = (com.sun.star.frame.XDesktop) UnoRuntime.queryInterface( 212*b1cdbd2cSJim Jagielski com.sun.star.frame.XDesktop.class, oDesktop); 213*b1cdbd2cSJim Jagielski } 214*b1cdbd2cSJim Jagielski else 215*b1cdbd2cSJim Jagielski System.out.println( "Can't create a desktop. No connection, no remote office servicemanager available!" ); 216*b1cdbd2cSJim Jagielski } 217*b1cdbd2cSJim Jagielski catch( Exception e) { 218*b1cdbd2cSJim Jagielski e.printStackTrace(System.err); 219*b1cdbd2cSJim Jagielski System.exit(1); 220*b1cdbd2cSJim Jagielski } 221*b1cdbd2cSJim Jagielski 222*b1cdbd2cSJim Jagielski 223*b1cdbd2cSJim Jagielski return xDesktop; 224*b1cdbd2cSJim Jagielski } 225*b1cdbd2cSJim Jagielski createTextdocument( com.sun.star.frame.XDesktop xDesktop )226*b1cdbd2cSJim Jagielski public static com.sun.star.text.XTextDocument createTextdocument( 227*b1cdbd2cSJim Jagielski com.sun.star.frame.XDesktop xDesktop ) 228*b1cdbd2cSJim Jagielski { 229*b1cdbd2cSJim Jagielski com.sun.star.text.XTextDocument aTextDocument = null; 230*b1cdbd2cSJim Jagielski 231*b1cdbd2cSJim Jagielski try { 232*b1cdbd2cSJim Jagielski com.sun.star.lang.XComponent xComponent = CreateNewDocument(xDesktop, 233*b1cdbd2cSJim Jagielski "swriter"); 234*b1cdbd2cSJim Jagielski aTextDocument = (com.sun.star.text.XTextDocument) 235*b1cdbd2cSJim Jagielski UnoRuntime.queryInterface( 236*b1cdbd2cSJim Jagielski com.sun.star.text.XTextDocument.class, xComponent); 237*b1cdbd2cSJim Jagielski } 238*b1cdbd2cSJim Jagielski catch( Exception e) { 239*b1cdbd2cSJim Jagielski e.printStackTrace(System.err); 240*b1cdbd2cSJim Jagielski } 241*b1cdbd2cSJim Jagielski 242*b1cdbd2cSJim Jagielski return aTextDocument; 243*b1cdbd2cSJim Jagielski } 244*b1cdbd2cSJim Jagielski 245*b1cdbd2cSJim Jagielski CreateNewDocument( com.sun.star.frame.XDesktop xDesktop, String sDocumentType )246*b1cdbd2cSJim Jagielski protected static com.sun.star.lang.XComponent CreateNewDocument( 247*b1cdbd2cSJim Jagielski com.sun.star.frame.XDesktop xDesktop, 248*b1cdbd2cSJim Jagielski String sDocumentType ) 249*b1cdbd2cSJim Jagielski { 250*b1cdbd2cSJim Jagielski String sURL = "private:factory/" + sDocumentType; 251*b1cdbd2cSJim Jagielski 252*b1cdbd2cSJim Jagielski com.sun.star.lang.XComponent xComponent = null; 253*b1cdbd2cSJim Jagielski com.sun.star.frame.XComponentLoader xComponentLoader = null; 254*b1cdbd2cSJim Jagielski com.sun.star.beans.PropertyValue xValues[] = 255*b1cdbd2cSJim Jagielski new com.sun.star.beans.PropertyValue[1]; 256*b1cdbd2cSJim Jagielski com.sun.star.beans.PropertyValue xEmptyArgs[] = 257*b1cdbd2cSJim Jagielski new com.sun.star.beans.PropertyValue[0]; 258*b1cdbd2cSJim Jagielski 259*b1cdbd2cSJim Jagielski try { 260*b1cdbd2cSJim Jagielski xComponentLoader = (com.sun.star.frame.XComponentLoader) 261*b1cdbd2cSJim Jagielski UnoRuntime.queryInterface( 262*b1cdbd2cSJim Jagielski com.sun.star.frame.XComponentLoader.class, xDesktop); 263*b1cdbd2cSJim Jagielski 264*b1cdbd2cSJim Jagielski xComponent = xComponentLoader.loadComponentFromURL( 265*b1cdbd2cSJim Jagielski sURL, "_blank", 0, xEmptyArgs); 266*b1cdbd2cSJim Jagielski } 267*b1cdbd2cSJim Jagielski catch( Exception e) { 268*b1cdbd2cSJim Jagielski e.printStackTrace(System.out); 269*b1cdbd2cSJim Jagielski } 270*b1cdbd2cSJim Jagielski 271*b1cdbd2cSJim Jagielski return xComponent ; 272*b1cdbd2cSJim Jagielski } 273*b1cdbd2cSJim Jagielski } 274