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: get some text attributes
29*b1cdbd2cSJim Jagielski //          Step 5: check the PropertyState from the selection
30*b1cdbd2cSJim Jagielski //
31*b1cdbd2cSJim Jagielski //          Chapter 4.1.4 Hard formatting
32*b1cdbd2cSJim Jagielski //***************************************************************************
33*b1cdbd2cSJim Jagielski 
34*b1cdbd2cSJim Jagielski import com.sun.star.uno.UnoRuntime;
35*b1cdbd2cSJim Jagielski 
36*b1cdbd2cSJim Jagielski public class HardFormatting {
37*b1cdbd2cSJim Jagielski 
main(String args[])38*b1cdbd2cSJim Jagielski     public static void main(String args[]) {
39*b1cdbd2cSJim Jagielski         // You need the desktop to create a document
40*b1cdbd2cSJim Jagielski         // The getDesktop method does the UNO bootstrapping, gets the
41*b1cdbd2cSJim Jagielski         // remote servie manager and the desktop object.
42*b1cdbd2cSJim Jagielski         com.sun.star.frame.XDesktop xDesktop = null;
43*b1cdbd2cSJim Jagielski         xDesktop = getDesktop();
44*b1cdbd2cSJim Jagielski 
45*b1cdbd2cSJim Jagielski         try {
46*b1cdbd2cSJim Jagielski             // create text document
47*b1cdbd2cSJim Jagielski             com.sun.star.text.XTextDocument xTextDocument = null;
48*b1cdbd2cSJim Jagielski             xTextDocument = createTextdocument(xDesktop);
49*b1cdbd2cSJim Jagielski 
50*b1cdbd2cSJim Jagielski             // the text interface contains all methods and properties to
51*b1cdbd2cSJim Jagielski             // manipulate the content from a text document
52*b1cdbd2cSJim Jagielski             com.sun.star.text.XText xText = null;
53*b1cdbd2cSJim Jagielski             xText = xTextDocument.getText();
54*b1cdbd2cSJim Jagielski 
55*b1cdbd2cSJim Jagielski             String sMyText = "A very short paragraph for illustration only";
56*b1cdbd2cSJim Jagielski 
57*b1cdbd2cSJim Jagielski             // you can travel with the cursor throught the text document.
58*b1cdbd2cSJim Jagielski             // you travel only at the model, not at the view. The cursor that you can
59*b1cdbd2cSJim Jagielski             // see on the document doesn't change the position
60*b1cdbd2cSJim Jagielski             com.sun.star.text.XTextCursor xTextCursor = null;
61*b1cdbd2cSJim Jagielski             xTextCursor = (com.sun.star.text.XTextCursor)
62*b1cdbd2cSJim Jagielski                 xTextDocument.getText().createTextCursor();
63*b1cdbd2cSJim Jagielski 
64*b1cdbd2cSJim Jagielski             xText.insertString( xTextCursor, "Headline", false );
65*b1cdbd2cSJim Jagielski             xText.insertControlCharacter(xTextCursor,
66*b1cdbd2cSJim Jagielski                       com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK, false);
67*b1cdbd2cSJim Jagielski 
68*b1cdbd2cSJim Jagielski             xText.insertString(xTextCursor, sMyText, false);
69*b1cdbd2cSJim Jagielski 
70*b1cdbd2cSJim Jagielski             com.sun.star.text.XTextRange xTextRange = null;
71*b1cdbd2cSJim Jagielski             com.sun.star.beans.XPropertySet xPropertySet = null;
72*b1cdbd2cSJim Jagielski 
73*b1cdbd2cSJim Jagielski             // BEGIN: 'Hard formating'
74*b1cdbd2cSJim Jagielski             // the text range not the cursor contains the 'parastyle' property
75*b1cdbd2cSJim Jagielski             xTextRange = xText.getEnd();
76*b1cdbd2cSJim Jagielski             xPropertySet = (com.sun.star.beans.XPropertySet)
77*b1cdbd2cSJim Jagielski                 UnoRuntime.queryInterface(
78*b1cdbd2cSJim Jagielski                     com.sun.star.beans.XPropertySet.class, xTextRange);
79*b1cdbd2cSJim Jagielski 
80*b1cdbd2cSJim Jagielski             // create a paragraph cursor to travel throught the paragraphs
81*b1cdbd2cSJim Jagielski             com.sun.star.text.XParagraphCursor xParagraphCursor = null;
82*b1cdbd2cSJim Jagielski             xParagraphCursor = (com.sun.star.text.XParagraphCursor)
83*b1cdbd2cSJim Jagielski                 UnoRuntime.queryInterface(
84*b1cdbd2cSJim Jagielski                     com.sun.star.text.XParagraphCursor.class, xTextRange);
85*b1cdbd2cSJim Jagielski 
86*b1cdbd2cSJim Jagielski             xParagraphCursor.gotoStart( false );
87*b1cdbd2cSJim Jagielski             xParagraphCursor.gotoEndOfParagraph( true );
88*b1cdbd2cSJim Jagielski             xTextRange = xParagraphCursor.getText().getStart();
89*b1cdbd2cSJim Jagielski 
90*b1cdbd2cSJim Jagielski             // create a WordCursor to travel into the paragraph
91*b1cdbd2cSJim Jagielski             com.sun.star.text.XWordCursor xWordCursor = null;
92*b1cdbd2cSJim Jagielski             xWordCursor = (com.sun.star.text.XWordCursor) UnoRuntime.queryInterface(
93*b1cdbd2cSJim Jagielski                 com.sun.star.text.XWordCursor.class, xTextRange);
94*b1cdbd2cSJim Jagielski 
95*b1cdbd2cSJim Jagielski             // the PropertySet from the cursor contains the text attributes
96*b1cdbd2cSJim Jagielski             xPropertySet = (com.sun.star.beans.XPropertySet)
97*b1cdbd2cSJim Jagielski                 UnoRuntime.queryInterface(
98*b1cdbd2cSJim Jagielski                     com.sun.star.beans.XPropertySet.class, xWordCursor);
99*b1cdbd2cSJim Jagielski             System.out.println(
100*b1cdbd2cSJim Jagielski                 "Parastyle : "
101*b1cdbd2cSJim Jagielski                 +xPropertySet.getPropertyValue("ParaStyleName").toString()
102*b1cdbd2cSJim Jagielski                 + "\nFontname : "
103*b1cdbd2cSJim Jagielski                 + xPropertySet.getPropertyValue("CharFontName").toString()
104*b1cdbd2cSJim Jagielski                 + "\nWeight : "
105*b1cdbd2cSJim Jagielski                 + xPropertySet.getPropertyValue("CharWeight").toString() );
106*b1cdbd2cSJim Jagielski 
107*b1cdbd2cSJim Jagielski             xWordCursor.gotoNextWord(false);
108*b1cdbd2cSJim Jagielski             xWordCursor.gotoNextWord(false);
109*b1cdbd2cSJim Jagielski             xWordCursor.gotoEndOfWord(true);
110*b1cdbd2cSJim Jagielski 
111*b1cdbd2cSJim Jagielski             xPropertySet = (com.sun.star.beans.XPropertySet)
112*b1cdbd2cSJim Jagielski                 UnoRuntime.queryInterface(
113*b1cdbd2cSJim Jagielski                     com.sun.star.beans.XPropertySet.class, xWordCursor);
114*b1cdbd2cSJim Jagielski             xPropertySet.setPropertyValue("CharWeight",
115*b1cdbd2cSJim Jagielski                                           new Float(com.sun.star.awt.FontWeight.BOLD));
116*b1cdbd2cSJim Jagielski             xPropertySet.setPropertyValue("CharColor", new Integer( 255 ) );
117*b1cdbd2cSJim Jagielski 
118*b1cdbd2cSJim Jagielski             System.out.println(
119*b1cdbd2cSJim Jagielski                 "Parastyle : "
120*b1cdbd2cSJim Jagielski                 + xPropertySet.getPropertyValue("ParaStyleName").toString()
121*b1cdbd2cSJim Jagielski                 + "\nFontname : "
122*b1cdbd2cSJim Jagielski                 + xPropertySet.getPropertyValue("CharFontName").toString()
123*b1cdbd2cSJim Jagielski                 + "\nWeight : "
124*b1cdbd2cSJim Jagielski                 + xPropertySet.getPropertyValue("CharWeight").toString() );
125*b1cdbd2cSJim Jagielski 
126*b1cdbd2cSJim Jagielski             // the PropertyState contains information where the attribute is set,
127*b1cdbd2cSJim Jagielski             // is a text part hard formated or not.
128*b1cdbd2cSJim Jagielski             com.sun.star.beans.XPropertyState xPropertyState = null;
129*b1cdbd2cSJim Jagielski             xPropertyState = (com.sun.star.beans.XPropertyState)
130*b1cdbd2cSJim Jagielski                 UnoRuntime.queryInterface(
131*b1cdbd2cSJim Jagielski                     com.sun.star.beans.XPropertyState.class, xWordCursor);
132*b1cdbd2cSJim Jagielski 
133*b1cdbd2cSJim Jagielski             com.sun.star.beans.PropertyState xPropertyStateValue =
134*b1cdbd2cSJim Jagielski                 xPropertyState.getPropertyState("CharWeight");
135*b1cdbd2cSJim Jagielski 
136*b1cdbd2cSJim Jagielski             checkPropertyState( xWordCursor, xPropertyStateValue );
137*b1cdbd2cSJim Jagielski 
138*b1cdbd2cSJim Jagielski             xWordCursor.goRight( (short) 3 , true );
139*b1cdbd2cSJim Jagielski             xPropertyStateValue = xPropertyState.getPropertyState("CharWeight");
140*b1cdbd2cSJim Jagielski 
141*b1cdbd2cSJim Jagielski             System.out.println("Increase the selection with three characters");
142*b1cdbd2cSJim Jagielski             checkPropertyState(xWordCursor, xPropertyStateValue);
143*b1cdbd2cSJim Jagielski 
144*b1cdbd2cSJim Jagielski             xPropertyState.setPropertyToDefault("CharWeight");
145*b1cdbd2cSJim Jagielski 
146*b1cdbd2cSJim Jagielski             System.out.println("Set the default value on the selection");
147*b1cdbd2cSJim Jagielski             xPropertyStateValue = xPropertyState.getPropertyState("CharWeight");
148*b1cdbd2cSJim Jagielski             checkPropertyState(xWordCursor, xPropertyStateValue);
149*b1cdbd2cSJim Jagielski 
150*b1cdbd2cSJim Jagielski             // END: 'Hard formating' Section from the Cookbook
151*b1cdbd2cSJim Jagielski         }
152*b1cdbd2cSJim Jagielski         catch( Exception e) {
153*b1cdbd2cSJim Jagielski             e.printStackTrace(System.err);
154*b1cdbd2cSJim Jagielski             System.exit(1);
155*b1cdbd2cSJim Jagielski         }
156*b1cdbd2cSJim Jagielski 
157*b1cdbd2cSJim Jagielski 
158*b1cdbd2cSJim Jagielski         System.out.println("Done");
159*b1cdbd2cSJim Jagielski 
160*b1cdbd2cSJim Jagielski         System.exit(0);
161*b1cdbd2cSJim Jagielski 
162*b1cdbd2cSJim Jagielski     }
163*b1cdbd2cSJim Jagielski 
164*b1cdbd2cSJim Jagielski 
checkPropertyState( com.sun.star.text.XWordCursor xWordCursor, com.sun.star.beans.PropertyState xPropertyStateValue )165*b1cdbd2cSJim Jagielski     public static void checkPropertyState(
166*b1cdbd2cSJim Jagielski         com.sun.star.text.XWordCursor xWordCursor,
167*b1cdbd2cSJim Jagielski         com.sun.star.beans.PropertyState xPropertyStateValue )
168*b1cdbd2cSJim Jagielski     {
169*b1cdbd2cSJim Jagielski         switch( xPropertyStateValue.getValue() ) {
170*b1cdbd2cSJim Jagielski             case com.sun.star.beans.PropertyState.DIRECT_VALUE_value:  {
171*b1cdbd2cSJim Jagielski                 System.out.println( "-> The selection '"
172*b1cdbd2cSJim Jagielski                                     + xWordCursor.getString()
173*b1cdbd2cSJim Jagielski                                     + "' completly hard formated" );
174*b1cdbd2cSJim Jagielski                 break;
175*b1cdbd2cSJim Jagielski             }
176*b1cdbd2cSJim Jagielski 
177*b1cdbd2cSJim Jagielski             case com.sun.star.beans.PropertyState.DEFAULT_VALUE_value: {
178*b1cdbd2cSJim Jagielski                 System.out.println( "-> The selection '"
179*b1cdbd2cSJim Jagielski                                     + xWordCursor.getString()
180*b1cdbd2cSJim Jagielski                                     + "' isn't hard formated" );
181*b1cdbd2cSJim Jagielski                 break;
182*b1cdbd2cSJim Jagielski             }
183*b1cdbd2cSJim Jagielski 
184*b1cdbd2cSJim Jagielski             case com.sun.star.beans.PropertyState.AMBIGUOUS_VALUE_value: {
185*b1cdbd2cSJim Jagielski                 System.out.println( "-> The selection '"
186*b1cdbd2cSJim Jagielski                                     + xWordCursor.getString()
187*b1cdbd2cSJim Jagielski                                     + "' isn't completly hard formated" );
188*b1cdbd2cSJim Jagielski                 break;
189*b1cdbd2cSJim Jagielski             }
190*b1cdbd2cSJim Jagielski 
191*b1cdbd2cSJim Jagielski             default:
192*b1cdbd2cSJim Jagielski                 System.out.println( "No PropertyState found" );
193*b1cdbd2cSJim Jagielski         }
194*b1cdbd2cSJim Jagielski     }
195*b1cdbd2cSJim Jagielski 
getDesktop()196*b1cdbd2cSJim Jagielski     public static com.sun.star.frame.XDesktop getDesktop() {
197*b1cdbd2cSJim Jagielski         com.sun.star.frame.XDesktop xDesktop = null;
198*b1cdbd2cSJim Jagielski         com.sun.star.lang.XMultiComponentFactory xMCF = null;
199*b1cdbd2cSJim Jagielski 
200*b1cdbd2cSJim Jagielski         try {
201*b1cdbd2cSJim Jagielski             com.sun.star.uno.XComponentContext xContext = null;
202*b1cdbd2cSJim Jagielski 
203*b1cdbd2cSJim Jagielski             // get the remote office component context
204*b1cdbd2cSJim Jagielski             xContext = com.sun.star.comp.helper.Bootstrap.bootstrap();
205*b1cdbd2cSJim Jagielski 
206*b1cdbd2cSJim Jagielski             // get the remote office service manager
207*b1cdbd2cSJim Jagielski             xMCF = xContext.getServiceManager();
208*b1cdbd2cSJim Jagielski             if( xMCF != null ) {
209*b1cdbd2cSJim Jagielski                 System.out.println("Connected to a running office ...");
210*b1cdbd2cSJim Jagielski 
211*b1cdbd2cSJim Jagielski                 Object oDesktop = xMCF.createInstanceWithContext(
212*b1cdbd2cSJim Jagielski                     "com.sun.star.frame.Desktop", xContext);
213*b1cdbd2cSJim Jagielski                 xDesktop = (com.sun.star.frame.XDesktop) UnoRuntime.queryInterface(
214*b1cdbd2cSJim Jagielski                     com.sun.star.frame.XDesktop.class, oDesktop);
215*b1cdbd2cSJim Jagielski             }
216*b1cdbd2cSJim Jagielski             else
217*b1cdbd2cSJim Jagielski                 System.out.println( "Can't create a desktop. No connection, no remote office servicemanager available!" );
218*b1cdbd2cSJim Jagielski         }
219*b1cdbd2cSJim Jagielski         catch( Exception e) {
220*b1cdbd2cSJim Jagielski             e.printStackTrace(System.err);
221*b1cdbd2cSJim Jagielski             System.exit(1);
222*b1cdbd2cSJim Jagielski         }
223*b1cdbd2cSJim Jagielski 
224*b1cdbd2cSJim Jagielski 
225*b1cdbd2cSJim Jagielski         return xDesktop;
226*b1cdbd2cSJim Jagielski     }
227*b1cdbd2cSJim Jagielski 
createTextdocument( com.sun.star.frame.XDesktop xDesktop )228*b1cdbd2cSJim Jagielski     public static com.sun.star.text.XTextDocument createTextdocument(
229*b1cdbd2cSJim Jagielski         com.sun.star.frame.XDesktop xDesktop )
230*b1cdbd2cSJim Jagielski     {
231*b1cdbd2cSJim Jagielski         com.sun.star.text.XTextDocument aTextDocument = null;
232*b1cdbd2cSJim Jagielski 
233*b1cdbd2cSJim Jagielski         try {
234*b1cdbd2cSJim Jagielski             com.sun.star.lang.XComponent xComponent = CreateNewDocument(xDesktop,
235*b1cdbd2cSJim Jagielski                                                                         "swriter");
236*b1cdbd2cSJim Jagielski             aTextDocument = (com.sun.star.text.XTextDocument)
237*b1cdbd2cSJim Jagielski                 UnoRuntime.queryInterface(
238*b1cdbd2cSJim Jagielski                     com.sun.star.text.XTextDocument.class, xComponent);
239*b1cdbd2cSJim Jagielski         }
240*b1cdbd2cSJim Jagielski         catch( Exception e) {
241*b1cdbd2cSJim Jagielski             e.printStackTrace(System.err);
242*b1cdbd2cSJim Jagielski         }
243*b1cdbd2cSJim Jagielski 
244*b1cdbd2cSJim Jagielski         return aTextDocument;
245*b1cdbd2cSJim Jagielski     }
246*b1cdbd2cSJim Jagielski 
247*b1cdbd2cSJim Jagielski 
CreateNewDocument( com.sun.star.frame.XDesktop xDesktop, String sDocumentType )248*b1cdbd2cSJim Jagielski     protected static com.sun.star.lang.XComponent CreateNewDocument(
249*b1cdbd2cSJim Jagielski         com.sun.star.frame.XDesktop xDesktop,
250*b1cdbd2cSJim Jagielski         String sDocumentType )
251*b1cdbd2cSJim Jagielski     {
252*b1cdbd2cSJim Jagielski         String sURL = "private:factory/" + sDocumentType;
253*b1cdbd2cSJim Jagielski 
254*b1cdbd2cSJim Jagielski         com.sun.star.lang.XComponent xComponent = null;
255*b1cdbd2cSJim Jagielski         com.sun.star.frame.XComponentLoader xComponentLoader = null;
256*b1cdbd2cSJim Jagielski         com.sun.star.beans.PropertyValue xValues[] =
257*b1cdbd2cSJim Jagielski             new com.sun.star.beans.PropertyValue[1];
258*b1cdbd2cSJim Jagielski         com.sun.star.beans.PropertyValue xEmptyArgs[] =
259*b1cdbd2cSJim Jagielski             new com.sun.star.beans.PropertyValue[0];
260*b1cdbd2cSJim Jagielski 
261*b1cdbd2cSJim Jagielski         try {
262*b1cdbd2cSJim Jagielski             xComponentLoader = (com.sun.star.frame.XComponentLoader)
263*b1cdbd2cSJim Jagielski                 UnoRuntime.queryInterface(
264*b1cdbd2cSJim Jagielski                     com.sun.star.frame.XComponentLoader.class, xDesktop);
265*b1cdbd2cSJim Jagielski 
266*b1cdbd2cSJim Jagielski             xComponent  = xComponentLoader.loadComponentFromURL(
267*b1cdbd2cSJim Jagielski                 sURL, "_blank", 0, xEmptyArgs);
268*b1cdbd2cSJim Jagielski         }
269*b1cdbd2cSJim Jagielski         catch( Exception e) {
270*b1cdbd2cSJim Jagielski             e.printStackTrace(System.err);
271*b1cdbd2cSJim Jagielski         }
272*b1cdbd2cSJim Jagielski 
273*b1cdbd2cSJim Jagielski         return xComponent ;
274*b1cdbd2cSJim Jagielski     }
275*b1cdbd2cSJim Jagielski }
276