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: replace some english spelled words with US spelled
29*b1cdbd2cSJim Jagielski //***************************************************************************
30*b1cdbd2cSJim Jagielski 
31*b1cdbd2cSJim Jagielski 
32*b1cdbd2cSJim Jagielski import com.sun.star.uno.UnoRuntime;
33*b1cdbd2cSJim Jagielski 
34*b1cdbd2cSJim Jagielski public class TextReplace {
35*b1cdbd2cSJim Jagielski 
main(String args[])36*b1cdbd2cSJim Jagielski     public static void main(String args[]) {
37*b1cdbd2cSJim Jagielski         // You need the desktop to create a document
38*b1cdbd2cSJim Jagielski         // The getDesktop method does the UNO bootstrapping, gets the
39*b1cdbd2cSJim Jagielski         // remote servie manager and the desktop object.
40*b1cdbd2cSJim Jagielski         com.sun.star.frame.XDesktop xDesktop = null;
41*b1cdbd2cSJim Jagielski         xDesktop = getDesktop();
42*b1cdbd2cSJim Jagielski 
43*b1cdbd2cSJim Jagielski         com.sun.star.text.XTextDocument xTextDocument =
44*b1cdbd2cSJim Jagielski             createTextdocument( xDesktop );
45*b1cdbd2cSJim Jagielski 
46*b1cdbd2cSJim Jagielski         createExampleData( xTextDocument );
47*b1cdbd2cSJim Jagielski 
48*b1cdbd2cSJim Jagielski         String mBritishWords[] = {"colour", "neighbour", "centre", "behaviour",
49*b1cdbd2cSJim Jagielski                                   "metre", "through" };
50*b1cdbd2cSJim Jagielski         String mUSWords[] = { "color", "neighbor", "center", "behavior",
51*b1cdbd2cSJim Jagielski                               "meter", "thru" };
52*b1cdbd2cSJim Jagielski 
53*b1cdbd2cSJim Jagielski         try {
54*b1cdbd2cSJim Jagielski             com.sun.star.util.XReplaceDescriptor xReplaceDescr = null;
55*b1cdbd2cSJim Jagielski             com.sun.star.util.XSearchDescriptor xSearchDescriptor = null;
56*b1cdbd2cSJim Jagielski             com.sun.star.util.XReplaceable xReplaceable = null;
57*b1cdbd2cSJim Jagielski 
58*b1cdbd2cSJim Jagielski             xReplaceable = (com.sun.star.util.XReplaceable)
59*b1cdbd2cSJim Jagielski                 UnoRuntime.queryInterface(
60*b1cdbd2cSJim Jagielski                     com.sun.star.util.XReplaceable.class, xTextDocument);
61*b1cdbd2cSJim Jagielski 
62*b1cdbd2cSJim Jagielski             // You need a descriptor to set properies for Replace
63*b1cdbd2cSJim Jagielski             xReplaceDescr = (com.sun.star.util.XReplaceDescriptor)
64*b1cdbd2cSJim Jagielski                 xReplaceable.createReplaceDescriptor();
65*b1cdbd2cSJim Jagielski 
66*b1cdbd2cSJim Jagielski             System.out.println("Change all occurrences of ...");
67*b1cdbd2cSJim Jagielski             for( int iArrayCounter = 0; iArrayCounter < mBritishWords.length;
68*b1cdbd2cSJim Jagielski                  iArrayCounter++ )
69*b1cdbd2cSJim Jagielski             {
70*b1cdbd2cSJim Jagielski                 System.out.println(mBritishWords[iArrayCounter] +
71*b1cdbd2cSJim Jagielski                     " -> " + mUSWords[iArrayCounter]);
72*b1cdbd2cSJim Jagielski                 // Set the properties the replace method need
73*b1cdbd2cSJim Jagielski                 xReplaceDescr.setSearchString(mBritishWords[iArrayCounter] );
74*b1cdbd2cSJim Jagielski                 xReplaceDescr.setReplaceString(mUSWords[iArrayCounter] );
75*b1cdbd2cSJim Jagielski 
76*b1cdbd2cSJim Jagielski                 // Replace all words
77*b1cdbd2cSJim Jagielski                 xReplaceable.replaceAll( xReplaceDescr );
78*b1cdbd2cSJim Jagielski             }
79*b1cdbd2cSJim Jagielski 
80*b1cdbd2cSJim Jagielski         }
81*b1cdbd2cSJim Jagielski         catch( Exception e) {
82*b1cdbd2cSJim Jagielski             e.printStackTrace(System.err);
83*b1cdbd2cSJim Jagielski         }
84*b1cdbd2cSJim Jagielski 
85*b1cdbd2cSJim Jagielski         System.out.println("Done");
86*b1cdbd2cSJim Jagielski 
87*b1cdbd2cSJim Jagielski         System.exit(0);
88*b1cdbd2cSJim Jagielski 
89*b1cdbd2cSJim Jagielski     }
90*b1cdbd2cSJim Jagielski 
createExampleData( com.sun.star.text.XTextDocument xTextDocument )91*b1cdbd2cSJim Jagielski     protected static void createExampleData(
92*b1cdbd2cSJim Jagielski         com.sun.star.text.XTextDocument xTextDocument )
93*b1cdbd2cSJim Jagielski     {
94*b1cdbd2cSJim Jagielski         // Create textdocument and insert example text
95*b1cdbd2cSJim Jagielski         com.sun.star.text.XTextCursor xTextCursor = null;
96*b1cdbd2cSJim Jagielski 
97*b1cdbd2cSJim Jagielski         try {
98*b1cdbd2cSJim Jagielski             xTextCursor = (com.sun.star.text.XTextCursor)
99*b1cdbd2cSJim Jagielski                 xTextDocument.getText().createTextCursor();
100*b1cdbd2cSJim Jagielski             com.sun.star.text.XText xText = (com.sun.star.text.XText)
101*b1cdbd2cSJim Jagielski                 xTextDocument.getText();
102*b1cdbd2cSJim Jagielski 
103*b1cdbd2cSJim Jagielski             xText.insertString( xTextCursor,
104*b1cdbd2cSJim Jagielski                 "He nervously looked all around. Suddenly he saw his ", false );
105*b1cdbd2cSJim Jagielski 
106*b1cdbd2cSJim Jagielski             xText.insertString( xTextCursor, "neighbour ", true );
107*b1cdbd2cSJim Jagielski             com.sun.star.beans.XPropertySet xCPS = (com.sun.star.beans.XPropertySet)
108*b1cdbd2cSJim Jagielski                 UnoRuntime.queryInterface(
109*b1cdbd2cSJim Jagielski                     com.sun.star.beans.XPropertySet.class, xTextCursor);
110*b1cdbd2cSJim Jagielski             // Set the word blue
111*b1cdbd2cSJim Jagielski             xCPS.setPropertyValue( "CharColor", new Integer( 255 ) );
112*b1cdbd2cSJim Jagielski             // Go to last character
113*b1cdbd2cSJim Jagielski             xTextCursor.gotoEnd(false);
114*b1cdbd2cSJim Jagielski             xCPS.setPropertyValue( "CharColor", new Integer( 0 ) );
115*b1cdbd2cSJim Jagielski 
116*b1cdbd2cSJim Jagielski             xText.insertString( xTextCursor, "in 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 ", false  );
117*b1cdbd2cSJim Jagielski 
118*b1cdbd2cSJim Jagielski             xText.insertString( xTextCursor, "centre ", true );
119*b1cdbd2cSJim Jagielski             xCPS = (com.sun.star.beans.XPropertySet)UnoRuntime.queryInterface(
120*b1cdbd2cSJim Jagielski                 com.sun.star.beans.XPropertySet.class, xTextCursor);
121*b1cdbd2cSJim Jagielski             // Set the word blue
122*b1cdbd2cSJim Jagielski             xCPS.setPropertyValue( "CharColor", new Integer( 255 ) );
123*b1cdbd2cSJim Jagielski             // Go to last character
124*b1cdbd2cSJim Jagielski             xTextCursor.gotoEnd(false);
125*b1cdbd2cSJim Jagielski             xCPS.setPropertyValue( "CharColor", new Integer( 0 ) );
126*b1cdbd2cSJim Jagielski 
127*b1cdbd2cSJim Jagielski             xText.insertString( xTextCursor, "of the sidewalk.", false );
128*b1cdbd2cSJim Jagielski 
129*b1cdbd2cSJim Jagielski             xText.insertControlCharacter( xTextCursor,
130*b1cdbd2cSJim Jagielski                       com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK, false );
131*b1cdbd2cSJim Jagielski             xText.insertString( xTextCursor, "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.", false );
132*b1cdbd2cSJim Jagielski 
133*b1cdbd2cSJim Jagielski             xTextCursor.gotoStart(false);
134*b1cdbd2cSJim Jagielski         }
135*b1cdbd2cSJim Jagielski         catch( Exception e) {
136*b1cdbd2cSJim Jagielski             e.printStackTrace(System.err);
137*b1cdbd2cSJim Jagielski         }
138*b1cdbd2cSJim Jagielski 
139*b1cdbd2cSJim Jagielski     }
140*b1cdbd2cSJim Jagielski 
getDesktop()141*b1cdbd2cSJim Jagielski     public static com.sun.star.frame.XDesktop getDesktop() {
142*b1cdbd2cSJim Jagielski         com.sun.star.frame.XDesktop xDesktop = null;
143*b1cdbd2cSJim Jagielski         com.sun.star.lang.XMultiComponentFactory xMCF = null;
144*b1cdbd2cSJim Jagielski 
145*b1cdbd2cSJim Jagielski         try {
146*b1cdbd2cSJim Jagielski             com.sun.star.uno.XComponentContext xContext = null;
147*b1cdbd2cSJim Jagielski 
148*b1cdbd2cSJim Jagielski             // get the remote office component context
149*b1cdbd2cSJim Jagielski             xContext = com.sun.star.comp.helper.Bootstrap.bootstrap();
150*b1cdbd2cSJim Jagielski 
151*b1cdbd2cSJim Jagielski             // get the remote office service manager
152*b1cdbd2cSJim Jagielski             xMCF = xContext.getServiceManager();
153*b1cdbd2cSJim Jagielski             if( xMCF != null ) {
154*b1cdbd2cSJim Jagielski                 System.out.println("Connected to a running office ...");
155*b1cdbd2cSJim Jagielski 
156*b1cdbd2cSJim Jagielski                 Object oDesktop = xMCF.createInstanceWithContext(
157*b1cdbd2cSJim Jagielski                     "com.sun.star.frame.Desktop", xContext);
158*b1cdbd2cSJim Jagielski                 xDesktop = (com.sun.star.frame.XDesktop) UnoRuntime.queryInterface(
159*b1cdbd2cSJim Jagielski                     com.sun.star.frame.XDesktop.class, oDesktop);
160*b1cdbd2cSJim Jagielski             }
161*b1cdbd2cSJim Jagielski             else
162*b1cdbd2cSJim Jagielski                 System.out.println( "Can't create a desktop. No connection, no remote office servicemanager available!" );
163*b1cdbd2cSJim Jagielski         }
164*b1cdbd2cSJim Jagielski         catch( Exception e) {
165*b1cdbd2cSJim Jagielski             e.printStackTrace(System.err);
166*b1cdbd2cSJim Jagielski             System.exit(1);
167*b1cdbd2cSJim Jagielski         }
168*b1cdbd2cSJim Jagielski 
169*b1cdbd2cSJim Jagielski 
170*b1cdbd2cSJim Jagielski         return xDesktop;
171*b1cdbd2cSJim Jagielski     }
172*b1cdbd2cSJim Jagielski 
createTextdocument( com.sun.star.frame.XDesktop xDesktop )173*b1cdbd2cSJim Jagielski     public static com.sun.star.text.XTextDocument createTextdocument(
174*b1cdbd2cSJim Jagielski         com.sun.star.frame.XDesktop xDesktop )
175*b1cdbd2cSJim Jagielski     {
176*b1cdbd2cSJim Jagielski         com.sun.star.text.XTextDocument aTextDocument = null;
177*b1cdbd2cSJim Jagielski 
178*b1cdbd2cSJim Jagielski         try {
179*b1cdbd2cSJim Jagielski             com.sun.star.lang.XComponent xComponent = CreateNewDocument(xDesktop,
180*b1cdbd2cSJim Jagielski                                                                         "swriter");
181*b1cdbd2cSJim Jagielski             aTextDocument = (com.sun.star.text.XTextDocument)
182*b1cdbd2cSJim Jagielski                 UnoRuntime.queryInterface(
183*b1cdbd2cSJim Jagielski                     com.sun.star.text.XTextDocument.class, xComponent);
184*b1cdbd2cSJim Jagielski         }
185*b1cdbd2cSJim Jagielski         catch( Exception e) {
186*b1cdbd2cSJim Jagielski             e.printStackTrace(System.err);
187*b1cdbd2cSJim Jagielski         }
188*b1cdbd2cSJim Jagielski 
189*b1cdbd2cSJim Jagielski         return aTextDocument;
190*b1cdbd2cSJim Jagielski     }
191*b1cdbd2cSJim Jagielski 
192*b1cdbd2cSJim Jagielski 
CreateNewDocument( com.sun.star.frame.XDesktop xDesktop, String sDocumentType )193*b1cdbd2cSJim Jagielski     protected static com.sun.star.lang.XComponent CreateNewDocument(
194*b1cdbd2cSJim Jagielski         com.sun.star.frame.XDesktop xDesktop,
195*b1cdbd2cSJim Jagielski         String sDocumentType )
196*b1cdbd2cSJim Jagielski     {
197*b1cdbd2cSJim Jagielski         String sURL = "private:factory/" + sDocumentType;
198*b1cdbd2cSJim Jagielski 
199*b1cdbd2cSJim Jagielski         com.sun.star.lang.XComponent xComponent = null;
200*b1cdbd2cSJim Jagielski         com.sun.star.frame.XComponentLoader xComponentLoader = null;
201*b1cdbd2cSJim Jagielski         com.sun.star.beans.PropertyValue xValues[] =
202*b1cdbd2cSJim Jagielski             new com.sun.star.beans.PropertyValue[1];
203*b1cdbd2cSJim Jagielski         com.sun.star.beans.PropertyValue xEmptyArgs[] =
204*b1cdbd2cSJim Jagielski             new com.sun.star.beans.PropertyValue[0];
205*b1cdbd2cSJim Jagielski 
206*b1cdbd2cSJim Jagielski         try {
207*b1cdbd2cSJim Jagielski             xComponentLoader = (com.sun.star.frame.XComponentLoader)
208*b1cdbd2cSJim Jagielski                 UnoRuntime.queryInterface(
209*b1cdbd2cSJim Jagielski                     com.sun.star.frame.XComponentLoader.class, xDesktop);
210*b1cdbd2cSJim Jagielski 
211*b1cdbd2cSJim Jagielski             xComponent  = xComponentLoader.loadComponentFromURL(
212*b1cdbd2cSJim Jagielski                 sURL, "_blank", 0, xEmptyArgs);
213*b1cdbd2cSJim Jagielski         }
214*b1cdbd2cSJim Jagielski         catch( Exception e) {
215*b1cdbd2cSJim Jagielski             e.printStackTrace(System.err);
216*b1cdbd2cSJim Jagielski         }
217*b1cdbd2cSJim Jagielski 
218*b1cdbd2cSJim Jagielski         return xComponent ;
219*b1cdbd2cSJim Jagielski     }
220*b1cdbd2cSJim Jagielski }
221