xref: /AOO41X/test/testuno/source/testlib/uno/SWUtil.java (revision ca62e2c2083b5d0995f1245bad6c2edfb455fbec)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 package testlib.uno;
22 
23 
24 import org.openoffice.test.common.FileUtil;
25 import org.openoffice.test.uno.UnoApp;
26 
27 import com.sun.star.beans.PropertyValue;
28 import com.sun.star.beans.XPropertySet;
29 import com.sun.star.container.XNameAccess;
30 import com.sun.star.container.XNameContainer;
31 import com.sun.star.container.XNamed;
32 import com.sun.star.document.XDocumentProperties;
33 import com.sun.star.document.XDocumentPropertiesSupplier;
34 import com.sun.star.frame.XStorable;
35 import com.sun.star.io.IOException;
36 import com.sun.star.lang.XComponent;
37 import com.sun.star.lang.XMultiServiceFactory;
38 import com.sun.star.style.BreakType;
39 import com.sun.star.style.XStyle;
40 import com.sun.star.style.XStyleFamiliesSupplier;
41 import com.sun.star.text.ControlCharacter;
42 import com.sun.star.text.XText;
43 import com.sun.star.text.XTextContent;
44 import com.sun.star.text.XTextCursor;
45 import com.sun.star.text.XTextDocument;
46 import com.sun.star.frame.XComponentLoader;
47 import com.sun.star.frame.XModel;
48 import com.sun.star.frame.XController;
49 import com.sun.star.uno.UnoRuntime;
50 
51 public class SWUtil {
52 
53 
54 
55 
saveAsDoc(XTextDocument document, String url)56     public static void saveAsDoc(XTextDocument document, String url) throws IOException {
57         saveAs(document, "MS Word 97", url);
58 
59     }
60 
saveAsDoc(XComponent component, String url)61     public static void saveAsDoc(XComponent component, String url) throws IOException{
62         XTextDocument document = (XTextDocument) UnoRuntime.queryInterface(XTextDocument.class, component);
63         saveAs(document, "MS Word 97", url);
64     }
65 
saveAsODT(XTextDocument document, String url)66     public static void saveAsODT(XTextDocument document, String url) throws IOException {
67         saveAs(document, "writer8", url);
68     }
69 
saveAs(XTextDocument document, String filterValue, String url)70     public static void saveAs(XTextDocument document, String filterValue, String url) throws IOException {
71         XStorable store = (XStorable) UnoRuntime.queryInterface(XStorable.class, document);
72         PropertyValue[] propsValue = new PropertyValue[1];
73         propsValue[0] = new PropertyValue();
74         propsValue[0].Name = "FilterName";
75         propsValue[0].Value = filterValue;
76         store.storeAsURL(url, propsValue);
77 
78     }
79 
save(XTextDocument document)80     public static void save(XTextDocument document) throws IOException {
81         XStorable store = (XStorable) UnoRuntime.queryInterface(XStorable.class, document);
82         store.store();
83     }
84 
saveAndReload(XTextDocument document, UnoApp app)85     public static XTextDocument saveAndReload(XTextDocument document, UnoApp app) throws Exception {
86         XStorable store = (XStorable) UnoRuntime.queryInterface(XStorable.class, document);
87         store.store();
88         String url = document.getURL();
89         app.closeDocument(document);
90         return openDocumentFromURL(url, app);
91 
92     }
93 
newDocument(UnoApp app)94     public static XTextDocument newDocument(UnoApp app) throws Exception {
95         return (XTextDocument) UnoRuntime.queryInterface(XTextDocument.class, app.newDocument("swriter"));
96 
97     }
98 
openDocumentFromURL(String url, UnoApp app)99     public static XTextDocument openDocumentFromURL(String url, UnoApp app) throws Exception {
100         return (XTextDocument) UnoRuntime.queryInterface(XTextDocument.class, app.loadDocumentFromURL(url));
101 
102     }
openDocument(String filePath, UnoApp app)103     public static XTextDocument openDocument(String filePath, UnoApp app) throws Exception {
104 
105         return (XTextDocument) UnoRuntime.queryInterface(XTextDocument.class, app.loadDocument(filePath));
106 
107     }
108 
moveCuror2End(XTextDocument document)109     public static void moveCuror2End(XTextDocument document) {
110         XText xText = document.getText();
111         XTextCursor xTextCursor = xText.createTextCursor();
112         xTextCursor.gotoEnd(false);
113     }
114 
moveCuror2Start(XTextDocument document)115     public static void moveCuror2Start(XTextDocument document) {
116         XText xText = document.getText();
117         XTextCursor xTextCursor = xText.createTextCursor();
118         xTextCursor.gotoStart(false);
119     }
120 
121     /**
122      * Set document properties. Only supported: subject, title, author
123      * @param document - set document information on this document
124      * @param prop - document information, including "Subject" ,"Title", "Author"
125      * @param propValue - value you want to set for prop
126      * @throws Exception
127      */
setDocumentProperty(XTextDocument document, String prop, String propValue)128     public static void setDocumentProperty(XTextDocument document, String prop, String propValue) throws Exception {
129        XDocumentPropertiesSupplier docPropsSupplier = UnoRuntime.queryInterface(
130             XDocumentPropertiesSupplier.class, document);
131        XDocumentProperties docProps = docPropsSupplier.getDocumentProperties();
132         if ( prop.equals("Title"))
133             docProps.setTitle(propValue);
134         else if ( prop.equals("Author"))
135             docProps.setAuthor(propValue);
136         else if ( prop.equals("Subject"))
137             docProps.setSubject(propValue);
138     }
139 
140 
141     /**
142      * Insert a bookmark into text document
143      * @param document text document
144      * @param textCursor which part will be bookmarked
145      * @param bookmarkName bookmark name
146      * @throws Exception
147      */
insertBookmark(XTextDocument document, XTextCursor textCursor, String bookmarkName)148     public static void insertBookmark(XTextDocument document, XTextCursor textCursor, String bookmarkName) throws Exception {
149         XMultiServiceFactory xDocFactory = (XMultiServiceFactory) UnoRuntime.queryInterface(XMultiServiceFactory.class, document);
150         Object xBookmark = xDocFactory.createInstance("com.sun.star.text.Bookmark");
151         XTextContent xBookmarkAsTextContent = (XTextContent) UnoRuntime.queryInterface(XTextContent.class, xBookmark);
152         XNamed xBookmarkAsNamed = (XNamed) UnoRuntime.queryInterface(XNamed.class, xBookmark);
153         xBookmarkAsNamed.setName(bookmarkName);
154         document.getText().insertTextContent(textCursor, xBookmarkAsTextContent, true);
155     }
156 
157     /**
158      * insert column break in current cursor
159      * @param xText
160      * @param currentCursor
161      * @throws Exception
162      */
insertColumnBreak(XText xText, XTextCursor currentCursor)163     public static void insertColumnBreak(XText xText, XTextCursor currentCursor) throws Exception
164     {
165         XPropertySet xCursorProps = (XPropertySet)UnoRuntime.queryInterface(
166                 XPropertySet.class, currentCursor);
167         xCursorProps.setPropertyValue("BreakType", BreakType.COLUMN_AFTER);
168         xText.insertControlCharacter(currentCursor,ControlCharacter.PARAGRAPH_BREAK,false);
169     }
170 
171     /**
172      * insert page break in current cursor
173      * @param xText
174      * @param currentCursor
175      * @throws Exception
176      */
insertPageBreak(XText xText, XTextCursor currentCursor)177     public static void insertPageBreak(XText xText, XTextCursor currentCursor) throws Exception
178     {
179         XPropertySet xCursorProps = (XPropertySet)UnoRuntime.queryInterface(
180                 XPropertySet.class, currentCursor);
181         xCursorProps.setPropertyValue("BreakType", BreakType.PAGE_AFTER);
182         xText.insertControlCharacter(currentCursor,ControlCharacter.PARAGRAPH_BREAK,false);
183     }
184 
185 
186     /**
187      * get page count
188      * @param document
189      * @return
190      * @throws Exception
191      */
getPageCount(XTextDocument document)192     public static int getPageCount(XTextDocument document) throws Exception
193     {
194         XModel xmodel = (XModel)UnoRuntime.queryInterface(XModel.class, document);
195         XController xcont = xmodel.getCurrentController();
196 
197         XPropertySet xps = (XPropertySet)UnoRuntime.queryInterface(XPropertySet.class, xcont);
198         Integer pageCount = (Integer) xps.getPropertyValue("PageCount");
199         return pageCount.intValue();
200     }
201 
202 
203     /**
204      * get specific property value of the default page style
205      * @param xComponent
206      * @param propertyName
207      * @return
208      * @throws Exception
209      */
getDefaultPageStyleProperty(XComponent xComponent, String propertyName)210     public static Object getDefaultPageStyleProperty(XComponent xComponent, String propertyName) throws Exception
211     {
212         XTextDocument textDocument = (XTextDocument) UnoRuntime.queryInterface(XTextDocument.class, xComponent);
213         XStyleFamiliesSupplier xSupplier = (XStyleFamiliesSupplier)UnoRuntime.queryInterface(XStyleFamiliesSupplier.class, textDocument);
214         XNameAccess xFamilies = (XNameAccess) UnoRuntime.queryInterface (XNameAccess.class, xSupplier.getStyleFamilies());
215         XNameContainer xFamily = (XNameContainer) UnoRuntime.queryInterface(XNameContainer.class, xFamilies.getByName("PageStyles"));
216         XStyle xStyle = (XStyle)UnoRuntime.queryInterface(XStyle.class, xFamily.getByName("Default"));
217         XPropertySet xStyleProps = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, xStyle);
218         Object propertyValue = xStyleProps.getPropertyValue(propertyName.toString());
219         return propertyValue;
220     }
221 
222     /**
223      * set value for specific property of default page style.
224      * @param xComponent
225      * @param propertyName
226      * @param propertyValue
227      * @throws Exception
228      */
setDefaultPageStyleProperty(XComponent xComponent, String propertyName, Object propertyValue)229     public static void setDefaultPageStyleProperty(XComponent xComponent, String propertyName, Object propertyValue) throws Exception
230     {
231         XTextDocument textDocument = (XTextDocument) UnoRuntime.queryInterface(XTextDocument.class, xComponent);
232         XStyleFamiliesSupplier xSupplier = (XStyleFamiliesSupplier)UnoRuntime.queryInterface(XStyleFamiliesSupplier.class, textDocument);
233         XNameAccess xFamilies = (XNameAccess) UnoRuntime.queryInterface (XNameAccess.class, xSupplier.getStyleFamilies());
234         XNameContainer xFamily = (XNameContainer) UnoRuntime.queryInterface(XNameContainer.class, xFamilies.getByName("PageStyles"));
235         XStyle xStyle = (XStyle)UnoRuntime.queryInterface(XStyle.class, xFamily.getByName("Default"));
236         XPropertySet xStyleProps = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, xStyle);
237         xStyleProps.setPropertyValue (propertyName.toString(), propertyValue);
238     }
239 
saveTo_Override_reload(XTextDocument xTextDocument,String filtervalue, String url,UnoApp app)240     public static XTextDocument saveTo_Override_reload(XTextDocument xTextDocument,String filtervalue, String url,UnoApp app) throws Exception {
241         XStorable xStorable_odt = (XStorable) UnoRuntime.queryInterface(XStorable.class, xTextDocument);
242         PropertyValue[] aStoreProperties = new PropertyValue[2];
243         aStoreProperties[0] = new PropertyValue();
244         aStoreProperties[1] = new PropertyValue();
245         aStoreProperties[0].Name = "Override";
246         aStoreProperties[0].Value = true;
247         aStoreProperties[1].Name = "FilterName";
248         aStoreProperties[1].Value = filtervalue;
249         xStorable_odt.storeToURL(FileUtil.getUrl(url), aStoreProperties);
250         //reopen the document
251         return (XTextDocument)UnoRuntime.queryInterface(XTextDocument.class, app.loadDocument(url));
252     }
253     /**
254      * create document from template
255      */
newDocumentFromTemplate(String templatePath,UnoApp unoApp)256     public static XComponent newDocumentFromTemplate(String templatePath,UnoApp unoApp) throws Exception
257     {
258         XComponentLoader componentLoader = (XComponentLoader) UnoRuntime.queryInterface(XComponentLoader.class, unoApp.getDesktop());
259         PropertyValue[] pros = new PropertyValue[1];
260         pros[0] = new PropertyValue();
261         pros[0].Name = "AsTemplate";
262         pros[0].Value = new Boolean(true);
263         XComponent component = componentLoader.loadComponentFromURL(FileUtil.getUrl(templatePath), "_blank", 0,pros);
264         return component;
265     }
266 }
267