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