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: create a new Paragraph style
28*b1cdbd2cSJim Jagielski //          Step 4: apply the Paragraph style
29*b1cdbd2cSJim Jagielski //
30*b1cdbd2cSJim Jagielski //          Chapter 4.1.3 Defining Your Own Style
31*b1cdbd2cSJim Jagielski //***************************************************************************
32*b1cdbd2cSJim Jagielski 
33*b1cdbd2cSJim Jagielski import com.sun.star.uno.UnoRuntime;
34*b1cdbd2cSJim Jagielski 
35*b1cdbd2cSJim Jagielski 
36*b1cdbd2cSJim Jagielski public class StyleCreation {
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         try {
45*b1cdbd2cSJim Jagielski             // create text document
46*b1cdbd2cSJim Jagielski             com.sun.star.text.XTextDocument xTextDocument = null;
47*b1cdbd2cSJim Jagielski             xTextDocument = createTextdocument(xDesktop);
48*b1cdbd2cSJim Jagielski 
49*b1cdbd2cSJim Jagielski             // the service '..ParagraphStyle' is context dependend, you need
50*b1cdbd2cSJim Jagielski             // the multi service factory from the document to use the service
51*b1cdbd2cSJim Jagielski             com.sun.star.lang.XMultiServiceFactory xDocMSF =
52*b1cdbd2cSJim Jagielski                 (com.sun.star.lang.XMultiServiceFactory)UnoRuntime.queryInterface(
53*b1cdbd2cSJim Jagielski                     com.sun.star.lang.XMultiServiceFactory.class, xTextDocument);
54*b1cdbd2cSJim Jagielski 
55*b1cdbd2cSJim Jagielski             // use the service 'com.sun.star.style.ParagraphStyle'
56*b1cdbd2cSJim Jagielski             com.sun.star.uno.XInterface xInterface = (com.sun.star.uno.XInterface)
57*b1cdbd2cSJim Jagielski                 xDocMSF.createInstance("com.sun.star.style.ParagraphStyle");
58*b1cdbd2cSJim Jagielski 
59*b1cdbd2cSJim Jagielski             // create a supplier to get the Style family collection
60*b1cdbd2cSJim Jagielski             com.sun.star.style.XStyleFamiliesSupplier xSupplier =
61*b1cdbd2cSJim Jagielski                 (com.sun.star.style.XStyleFamiliesSupplier)UnoRuntime.queryInterface(
62*b1cdbd2cSJim Jagielski                     com.sun.star.style.XStyleFamiliesSupplier.class, xTextDocument );
63*b1cdbd2cSJim Jagielski 
64*b1cdbd2cSJim Jagielski             // get the NameAccess interface from the Style family collection
65*b1cdbd2cSJim Jagielski             com.sun.star.container.XNameAccess xNameAccess =
66*b1cdbd2cSJim Jagielski                 xSupplier.getStyleFamilies();
67*b1cdbd2cSJim Jagielski 
68*b1cdbd2cSJim Jagielski             // select the Paragraph styles, you get the Paragraph style collection
69*b1cdbd2cSJim Jagielski             com.sun.star.container.XNameContainer xParaStyleCollection =
70*b1cdbd2cSJim Jagielski                 (com.sun.star.container.XNameContainer) UnoRuntime.queryInterface(
71*b1cdbd2cSJim Jagielski                     com.sun.star.container.XNameContainer.class,
72*b1cdbd2cSJim Jagielski                     xNameAccess.getByName("ParagraphStyles"));
73*b1cdbd2cSJim Jagielski 
74*b1cdbd2cSJim Jagielski             // create a PropertySet to set the properties for the new Paragraphstyle
75*b1cdbd2cSJim Jagielski             com.sun.star.beans.XPropertySet xPropertySet =
76*b1cdbd2cSJim Jagielski                 (com.sun.star.beans.XPropertySet) UnoRuntime.queryInterface(
77*b1cdbd2cSJim Jagielski                     com.sun.star.beans.XPropertySet.class, xInterface );
78*b1cdbd2cSJim Jagielski             System.out.println( "create a PropertySet to set the properties for the new Paragraphstyle" );
79*b1cdbd2cSJim Jagielski 
80*b1cdbd2cSJim Jagielski             // set some properties from the Paragraph style
81*b1cdbd2cSJim Jagielski             xPropertySet.setPropertyValue("CharFontName", new String( "Helvetica" ) );
82*b1cdbd2cSJim Jagielski             System.out.println( "set name of the font to 'Helvetica'" );
83*b1cdbd2cSJim Jagielski 
84*b1cdbd2cSJim Jagielski             xPropertySet.setPropertyValue("CharHeight", new Float( 36 ) );
85*b1cdbd2cSJim Jagielski             System.out.println( "Change the height of th font to 36" );
86*b1cdbd2cSJim Jagielski 
87*b1cdbd2cSJim Jagielski             xPropertySet.setPropertyValue("CharWeight",
88*b1cdbd2cSJim Jagielski                 new Float( com.sun.star.awt.FontWeight.BOLD ) );
89*b1cdbd2cSJim Jagielski             System.out.println( "set the font attribute 'Bold'" );
90*b1cdbd2cSJim Jagielski 
91*b1cdbd2cSJim Jagielski             xPropertySet.setPropertyValue("CharAutoKerning", new Boolean( true ) );
92*b1cdbd2cSJim Jagielski             System.out.println( "set the paragraph attribute 'AutoKerning'" );
93*b1cdbd2cSJim Jagielski             xPropertySet.setPropertyValue("ParaAdjust",
94*b1cdbd2cSJim Jagielski                 new Integer( com.sun.star.style.ParagraphAdjust.CENTER_value ) );
95*b1cdbd2cSJim Jagielski             System.out.println( "set the paragraph adjust to LEFT" );
96*b1cdbd2cSJim Jagielski 
97*b1cdbd2cSJim Jagielski             xPropertySet.setPropertyValue("ParaFirstLineIndent", new Integer( 0 ) );
98*b1cdbd2cSJim Jagielski             System.out.println( "set the first line indent to 0 cm" );
99*b1cdbd2cSJim Jagielski 
100*b1cdbd2cSJim Jagielski             xPropertySet.setPropertyValue("BreakType",
101*b1cdbd2cSJim Jagielski                 com.sun.star.style.BreakType.PAGE_AFTER );
102*b1cdbd2cSJim Jagielski             System.out.println( "set the paragraph attribute Breaktype to PageAfter" );
103*b1cdbd2cSJim Jagielski 
104*b1cdbd2cSJim Jagielski             // insert the new Paragraph style in the Paragraph style collection
105*b1cdbd2cSJim Jagielski             xParaStyleCollection.insertByName( "myheading", xPropertySet );
106*b1cdbd2cSJim Jagielski             System.out.println( "create new paragraph style, with the values from the Propertyset");
107*b1cdbd2cSJim Jagielski 
108*b1cdbd2cSJim Jagielski             // get the Textrange from the document
109*b1cdbd2cSJim Jagielski             com.sun.star.text.XTextRange xTextRange =
110*b1cdbd2cSJim Jagielski                 xTextDocument.getText().getStart();
111*b1cdbd2cSJim Jagielski 
112*b1cdbd2cSJim Jagielski             // get the PropertySet from the current paragraph
113*b1cdbd2cSJim Jagielski             com.sun.star.beans.XPropertySet xParagraphPropertySet =
114*b1cdbd2cSJim Jagielski                 (com.sun.star.beans.XPropertySet)UnoRuntime.queryInterface(
115*b1cdbd2cSJim Jagielski                     com.sun.star.beans.XPropertySet.class, xTextRange );
116*b1cdbd2cSJim Jagielski             // change the value from the property 'ParaStyle' to apply the
117*b1cdbd2cSJim Jagielski             // Paragraph style
118*b1cdbd2cSJim Jagielski             // To run the sample with StarOffice 5.2 you'll have to change
119*b1cdbd2cSJim Jagielski             // 'ParaStyleName' to 'ParaStyle' in the next line
120*b1cdbd2cSJim Jagielski             xParagraphPropertySet.setPropertyValue("ParaStyleName",
121*b1cdbd2cSJim Jagielski                 new String( "myheading" ) );
122*b1cdbd2cSJim Jagielski             System.out.println( "apply the new paragraph style");
123*b1cdbd2cSJim Jagielski         }
124*b1cdbd2cSJim Jagielski         catch( Exception e) {
125*b1cdbd2cSJim Jagielski             e.printStackTrace(System.err);
126*b1cdbd2cSJim Jagielski             System.exit(1);
127*b1cdbd2cSJim Jagielski         }
128*b1cdbd2cSJim Jagielski 
129*b1cdbd2cSJim Jagielski         System.out.println("done");
130*b1cdbd2cSJim Jagielski 
131*b1cdbd2cSJim Jagielski         System.exit(0);
132*b1cdbd2cSJim Jagielski     }
133*b1cdbd2cSJim Jagielski 
134*b1cdbd2cSJim Jagielski 
getDesktop()135*b1cdbd2cSJim Jagielski     public static com.sun.star.frame.XDesktop getDesktop() {
136*b1cdbd2cSJim Jagielski         com.sun.star.frame.XDesktop xDesktop = null;
137*b1cdbd2cSJim Jagielski         com.sun.star.lang.XMultiComponentFactory xMCF = null;
138*b1cdbd2cSJim Jagielski 
139*b1cdbd2cSJim Jagielski         try {
140*b1cdbd2cSJim Jagielski             com.sun.star.uno.XComponentContext xContext = null;
141*b1cdbd2cSJim Jagielski 
142*b1cdbd2cSJim Jagielski             // get the remote office component context
143*b1cdbd2cSJim Jagielski             xContext = com.sun.star.comp.helper.Bootstrap.bootstrap();
144*b1cdbd2cSJim Jagielski 
145*b1cdbd2cSJim Jagielski             // get the remote office service manager
146*b1cdbd2cSJim Jagielski             xMCF = xContext.getServiceManager();
147*b1cdbd2cSJim Jagielski             if( xMCF != null ) {
148*b1cdbd2cSJim Jagielski                 System.out.println("Connected to a running office ...");
149*b1cdbd2cSJim Jagielski 
150*b1cdbd2cSJim Jagielski                 Object oDesktop = xMCF.createInstanceWithContext(
151*b1cdbd2cSJim Jagielski                     "com.sun.star.frame.Desktop", xContext);
152*b1cdbd2cSJim Jagielski                 xDesktop = (com.sun.star.frame.XDesktop) UnoRuntime.queryInterface(
153*b1cdbd2cSJim Jagielski                     com.sun.star.frame.XDesktop.class, oDesktop);
154*b1cdbd2cSJim Jagielski             }
155*b1cdbd2cSJim Jagielski             else
156*b1cdbd2cSJim Jagielski                 System.out.println( "Can't create a desktop. No connection, no remote office servicemanager available!" );
157*b1cdbd2cSJim Jagielski         }
158*b1cdbd2cSJim Jagielski         catch( Exception e) {
159*b1cdbd2cSJim Jagielski             e.printStackTrace(System.err);
160*b1cdbd2cSJim Jagielski             System.exit(1);
161*b1cdbd2cSJim Jagielski         }
162*b1cdbd2cSJim Jagielski 
163*b1cdbd2cSJim Jagielski 
164*b1cdbd2cSJim Jagielski         return xDesktop;
165*b1cdbd2cSJim Jagielski     }
166*b1cdbd2cSJim Jagielski 
createTextdocument( com.sun.star.frame.XDesktop xDesktop )167*b1cdbd2cSJim Jagielski     public static com.sun.star.text.XTextDocument createTextdocument(
168*b1cdbd2cSJim Jagielski         com.sun.star.frame.XDesktop xDesktop )
169*b1cdbd2cSJim Jagielski     {
170*b1cdbd2cSJim Jagielski         com.sun.star.text.XTextDocument aTextDocument = null;
171*b1cdbd2cSJim Jagielski 
172*b1cdbd2cSJim Jagielski         try {
173*b1cdbd2cSJim Jagielski             com.sun.star.lang.XComponent xComponent = CreateNewDocument(xDesktop,
174*b1cdbd2cSJim Jagielski                                                                         "swriter");
175*b1cdbd2cSJim Jagielski             aTextDocument = (com.sun.star.text.XTextDocument)
176*b1cdbd2cSJim Jagielski                 UnoRuntime.queryInterface(
177*b1cdbd2cSJim Jagielski                     com.sun.star.text.XTextDocument.class, xComponent);
178*b1cdbd2cSJim Jagielski         }
179*b1cdbd2cSJim Jagielski         catch( Exception e) {
180*b1cdbd2cSJim Jagielski             e.printStackTrace(System.err);
181*b1cdbd2cSJim Jagielski         }
182*b1cdbd2cSJim Jagielski 
183*b1cdbd2cSJim Jagielski         return aTextDocument;
184*b1cdbd2cSJim Jagielski     }
185*b1cdbd2cSJim Jagielski 
186*b1cdbd2cSJim Jagielski 
CreateNewDocument( com.sun.star.frame.XDesktop xDesktop, String sDocumentType )187*b1cdbd2cSJim Jagielski     protected static com.sun.star.lang.XComponent CreateNewDocument(
188*b1cdbd2cSJim Jagielski         com.sun.star.frame.XDesktop xDesktop,
189*b1cdbd2cSJim Jagielski         String sDocumentType )
190*b1cdbd2cSJim Jagielski     {
191*b1cdbd2cSJim Jagielski         String sURL = "private:factory/" + sDocumentType;
192*b1cdbd2cSJim Jagielski 
193*b1cdbd2cSJim Jagielski         com.sun.star.lang.XComponent xComponent = null;
194*b1cdbd2cSJim Jagielski         com.sun.star.frame.XComponentLoader xComponentLoader = null;
195*b1cdbd2cSJim Jagielski         com.sun.star.beans.PropertyValue xValues[] =
196*b1cdbd2cSJim Jagielski             new com.sun.star.beans.PropertyValue[1];
197*b1cdbd2cSJim Jagielski         com.sun.star.beans.PropertyValue xEmptyArgs[] =
198*b1cdbd2cSJim Jagielski             new com.sun.star.beans.PropertyValue[0];
199*b1cdbd2cSJim Jagielski 
200*b1cdbd2cSJim Jagielski         try {
201*b1cdbd2cSJim Jagielski             xComponentLoader = (com.sun.star.frame.XComponentLoader)
202*b1cdbd2cSJim Jagielski                 UnoRuntime.queryInterface(
203*b1cdbd2cSJim Jagielski                     com.sun.star.frame.XComponentLoader.class, xDesktop);
204*b1cdbd2cSJim Jagielski 
205*b1cdbd2cSJim Jagielski             xComponent  = xComponentLoader.loadComponentFromURL(
206*b1cdbd2cSJim Jagielski                 sURL, "_blank", 0, xEmptyArgs);
207*b1cdbd2cSJim Jagielski         }
208*b1cdbd2cSJim Jagielski         catch( Exception e) {
209*b1cdbd2cSJim Jagielski             e.printStackTrace(System.err);
210*b1cdbd2cSJim Jagielski         }
211*b1cdbd2cSJim Jagielski 
212*b1cdbd2cSJim Jagielski         return xComponent ;
213*b1cdbd2cSJim Jagielski     }
214*b1cdbd2cSJim Jagielski }
215*b1cdbd2cSJim Jagielski 
216