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.XDocumentInfo; 33 import com.sun.star.document.XDocumentInfoSupplier; 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 56 public static void saveAsDoc(XTextDocument document, String url) throws IOException { 57 saveAs(document, "MS Word 97", url); 58 59 } 60 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 66 public static void saveAsODT(XTextDocument document, String url) throws IOException { 67 saveAs(document, "writer8", url); 68 } 69 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 80 public static void save(XTextDocument document) throws IOException { 81 XStorable store = (XStorable) UnoRuntime.queryInterface(XStorable.class, document); 82 store.store(); 83 } 84 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 94 public static XTextDocument newDocument(UnoApp app) throws Exception { 95 return (XTextDocument) UnoRuntime.queryInterface(XTextDocument.class, app.newDocument("swriter")); 96 97 } 98 99 public static XTextDocument openDocumentFromURL(String url, UnoApp app) throws Exception { 100 return (XTextDocument) UnoRuntime.queryInterface(XTextDocument.class, app.loadDocumentFromURL(url)); 101 102 } 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 109 public static void moveCuror2End(XTextDocument document) { 110 XText xText = document.getText(); 111 XTextCursor xTextCursor = xText.createTextCursor(); 112 xTextCursor.gotoEnd(false); 113 } 114 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. such as subject, title etc 123 * @param document - set document information on this document 124 * @param prop - document information, including "Subject" ,"Title", "Author", "Title", "KeyWords" 125 * @param propValue - value you want to set for prop 126 * @throws Exception 127 */ 128 public static void setDocumentProperty(XTextDocument document, String prop, String propValue) throws Exception { 129 XDocumentInfoSupplier docInfoSupplier = (XDocumentInfoSupplier) UnoRuntime.queryInterface(XDocumentInfoSupplier.class, document); 130 XDocumentInfo docInfo = docInfoSupplier.getDocumentInfo(); 131 XPropertySet propsDocInfo = (XPropertySet)UnoRuntime.queryInterface(XPropertySet.class, docInfo); 132 propsDocInfo.setPropertyValue(prop, propValue); 133 } 134 135 136 /** 137 * Insert a bookmark into text document 138 * @param document text document 139 * @param textCursor which part will be bookmarked 140 * @param bookmarkName bookmark name 141 * @throws Exception 142 */ 143 public static void insertBookmark(XTextDocument document, XTextCursor textCursor, String bookmarkName) throws Exception { 144 XMultiServiceFactory xDocFactory = (XMultiServiceFactory) UnoRuntime.queryInterface(XMultiServiceFactory.class, document); 145 Object xBookmark = xDocFactory.createInstance("com.sun.star.text.Bookmark"); 146 XTextContent xBookmarkAsTextContent = (XTextContent) UnoRuntime.queryInterface(XTextContent.class, xBookmark); 147 XNamed xBookmarkAsNamed = (XNamed) UnoRuntime.queryInterface(XNamed.class, xBookmark); 148 xBookmarkAsNamed.setName(bookmarkName); 149 document.getText().insertTextContent(textCursor, xBookmarkAsTextContent, true); 150 } 151 152 /** 153 * insert column break in current cursor 154 * @param xText 155 * @param currentCursor 156 * @throws Exception 157 */ 158 public static void insertColumnBreak(XText xText, XTextCursor currentCursor) throws Exception 159 { 160 XPropertySet xCursorProps = (XPropertySet)UnoRuntime.queryInterface( 161 XPropertySet.class, currentCursor); 162 xCursorProps.setPropertyValue("BreakType", BreakType.COLUMN_AFTER); 163 xText.insertControlCharacter(currentCursor,ControlCharacter.PARAGRAPH_BREAK,false); 164 } 165 166 /** 167 * insert page break in current cursor 168 * @param xText 169 * @param currentCursor 170 * @throws Exception 171 */ 172 public static void insertPageBreak(XText xText, XTextCursor currentCursor) throws Exception 173 { 174 XPropertySet xCursorProps = (XPropertySet)UnoRuntime.queryInterface( 175 XPropertySet.class, currentCursor); 176 xCursorProps.setPropertyValue("BreakType", BreakType.PAGE_AFTER); 177 xText.insertControlCharacter(currentCursor,ControlCharacter.PARAGRAPH_BREAK,false); 178 } 179 180 181 /** 182 * get page count 183 * @param document 184 * @return 185 * @throws Exception 186 */ 187 public static int getPageCount(XTextDocument document) throws Exception 188 { 189 XModel xmodel = (XModel)UnoRuntime.queryInterface(XModel.class, document); 190 XController xcont = xmodel.getCurrentController(); 191 192 XPropertySet xps = (XPropertySet)UnoRuntime.queryInterface(XPropertySet.class, xcont); 193 Integer pageCount = (Integer) xps.getPropertyValue("PageCount"); 194 return pageCount.intValue(); 195 } 196 197 198 /** 199 * get specific property value of the default page style 200 * @param xComponent 201 * @param propertyName 202 * @return 203 * @throws Exception 204 */ 205 public static Object getDefaultPageStyleProperty(XComponent xComponent, String propertyName) throws Exception 206 { 207 XTextDocument textDocument = (XTextDocument) UnoRuntime.queryInterface(XTextDocument.class, xComponent); 208 XStyleFamiliesSupplier xSupplier = (XStyleFamiliesSupplier)UnoRuntime.queryInterface(XStyleFamiliesSupplier.class, textDocument); 209 XNameAccess xFamilies = (XNameAccess) UnoRuntime.queryInterface (XNameAccess.class, xSupplier.getStyleFamilies()); 210 XNameContainer xFamily = (XNameContainer) UnoRuntime.queryInterface(XNameContainer.class, xFamilies.getByName("PageStyles")); 211 XStyle xStyle = (XStyle)UnoRuntime.queryInterface(XStyle.class, xFamily.getByName("Default")); 212 XPropertySet xStyleProps = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, xStyle); 213 Object propertyValue = xStyleProps.getPropertyValue(propertyName.toString()); 214 return propertyValue; 215 } 216 217 /** 218 * set value for specific property of default page style. 219 * @param xComponent 220 * @param propertyName 221 * @param propertyValue 222 * @throws Exception 223 */ 224 public static void setDefaultPageStyleProperty(XComponent xComponent, String propertyName, Object propertyValue) throws Exception 225 { 226 XTextDocument textDocument = (XTextDocument) UnoRuntime.queryInterface(XTextDocument.class, xComponent); 227 XStyleFamiliesSupplier xSupplier = (XStyleFamiliesSupplier)UnoRuntime.queryInterface(XStyleFamiliesSupplier.class, textDocument); 228 XNameAccess xFamilies = (XNameAccess) UnoRuntime.queryInterface (XNameAccess.class, xSupplier.getStyleFamilies()); 229 XNameContainer xFamily = (XNameContainer) UnoRuntime.queryInterface(XNameContainer.class, xFamilies.getByName("PageStyles")); 230 XStyle xStyle = (XStyle)UnoRuntime.queryInterface(XStyle.class, xFamily.getByName("Default")); 231 XPropertySet xStyleProps = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, xStyle); 232 xStyleProps.setPropertyValue (propertyName.toString(), propertyValue); 233 } 234 235 public static XTextDocument saveTo_Override_reload(XTextDocument xTextDocument,String filtervalue, String url,UnoApp app) throws Exception { 236 XStorable xStorable_odt = (XStorable) UnoRuntime.queryInterface(XStorable.class, xTextDocument); 237 PropertyValue[] aStoreProperties = new PropertyValue[2]; 238 aStoreProperties[0] = new PropertyValue(); 239 aStoreProperties[1] = new PropertyValue(); 240 aStoreProperties[0].Name = "Override"; 241 aStoreProperties[0].Value = true; 242 aStoreProperties[1].Name = "FilterName"; 243 aStoreProperties[1].Value = filtervalue; 244 xStorable_odt.storeToURL(FileUtil.getUrl(url), aStoreProperties); 245 //reopen the document 246 return (XTextDocument)UnoRuntime.queryInterface(XTextDocument.class, app.loadDocument(url)); 247 } 248 /** 249 * create document from template 250 */ 251 public static XComponent newDocumentFromTemplate(String templatePath,UnoApp unoApp) throws Exception 252 { 253 XComponentLoader componentLoader = (XComponentLoader) UnoRuntime.queryInterface(XComponentLoader.class, unoApp.getDesktop()); 254 PropertyValue[] pros = new PropertyValue[1]; 255 pros[0] = new PropertyValue(); 256 pros[0].Name = "AsTemplate"; 257 pros[0].Value = new Boolean(true); 258 XComponent component = componentLoader.loadComponentFromURL(FileUtil.getUrl(templatePath), "_blank", 0,pros); 259 return component; 260 } 261 } 262