| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| package testlib.uno; |
| |
| |
| import org.openoffice.test.common.FileUtil; |
| import org.openoffice.test.uno.UnoApp; |
| |
| import com.sun.star.beans.PropertyValue; |
| import com.sun.star.beans.XPropertySet; |
| import com.sun.star.container.XNameAccess; |
| import com.sun.star.container.XNameContainer; |
| import com.sun.star.container.XNamed; |
| import com.sun.star.document.XDocumentProperties; |
| import com.sun.star.document.XDocumentPropertiesSupplier; |
| import com.sun.star.frame.XStorable; |
| import com.sun.star.io.IOException; |
| import com.sun.star.lang.XComponent; |
| import com.sun.star.lang.XMultiServiceFactory; |
| import com.sun.star.style.BreakType; |
| import com.sun.star.style.XStyle; |
| import com.sun.star.style.XStyleFamiliesSupplier; |
| import com.sun.star.text.ControlCharacter; |
| import com.sun.star.text.XText; |
| import com.sun.star.text.XTextContent; |
| import com.sun.star.text.XTextCursor; |
| import com.sun.star.text.XTextDocument; |
| import com.sun.star.frame.XComponentLoader; |
| import com.sun.star.frame.XModel; |
| import com.sun.star.frame.XController; |
| import com.sun.star.uno.UnoRuntime; |
| |
| public class SWUtil { |
| |
| |
| |
| |
| public static void saveAsDoc(XTextDocument document, String url) throws IOException { |
| saveAs(document, "MS Word 97", url); |
| |
| } |
| |
| public static void saveAsDoc(XComponent component, String url) throws IOException{ |
| XTextDocument document = (XTextDocument) UnoRuntime.queryInterface(XTextDocument.class, component); |
| saveAs(document, "MS Word 97", url); |
| } |
| |
| public static void saveAsODT(XTextDocument document, String url) throws IOException { |
| saveAs(document, "writer8", url); |
| } |
| |
| public static void saveAs(XTextDocument document, String filterValue, String url) throws IOException { |
| XStorable store = (XStorable) UnoRuntime.queryInterface(XStorable.class, document); |
| PropertyValue[] propsValue = new PropertyValue[1]; |
| propsValue[0] = new PropertyValue(); |
| propsValue[0].Name = "FilterName"; |
| propsValue[0].Value = filterValue; |
| store.storeAsURL(url, propsValue); |
| |
| } |
| |
| public static void save(XTextDocument document) throws IOException { |
| XStorable store = (XStorable) UnoRuntime.queryInterface(XStorable.class, document); |
| store.store(); |
| } |
| |
| public static XTextDocument saveAndReload(XTextDocument document, UnoApp app) throws Exception { |
| XStorable store = (XStorable) UnoRuntime.queryInterface(XStorable.class, document); |
| store.store(); |
| String url = document.getURL(); |
| app.closeDocument(document); |
| return openDocumentFromURL(url, app); |
| |
| } |
| |
| public static XTextDocument newDocument(UnoApp app) throws Exception { |
| return (XTextDocument) UnoRuntime.queryInterface(XTextDocument.class, app.newDocument("swriter")); |
| |
| } |
| |
| public static XTextDocument openDocumentFromURL(String url, UnoApp app) throws Exception { |
| return (XTextDocument) UnoRuntime.queryInterface(XTextDocument.class, app.loadDocumentFromURL(url)); |
| |
| } |
| public static XTextDocument openDocument(String filePath, UnoApp app) throws Exception { |
| |
| return (XTextDocument) UnoRuntime.queryInterface(XTextDocument.class, app.loadDocument(filePath)); |
| |
| } |
| |
| public static void moveCuror2End(XTextDocument document) { |
| XText xText = document.getText(); |
| XTextCursor xTextCursor = xText.createTextCursor(); |
| xTextCursor.gotoEnd(false); |
| } |
| |
| public static void moveCuror2Start(XTextDocument document) { |
| XText xText = document.getText(); |
| XTextCursor xTextCursor = xText.createTextCursor(); |
| xTextCursor.gotoStart(false); |
| } |
| |
| /** |
| * Set document properties. Only supported: subject, title, author |
| * @param document - set document information on this document |
| * @param prop - document information, including "Subject" ,"Title", "Author" |
| * @param propValue - value you want to set for prop |
| * @throws Exception |
| */ |
| public static void setDocumentProperty(XTextDocument document, String prop, String propValue) throws Exception { |
| XDocumentPropertiesSupplier docPropsSupplier = UnoRuntime.queryInterface( |
| XDocumentPropertiesSupplier.class, document); |
| XDocumentProperties docProps = docPropsSupplier.getDocumentProperties(); |
| if ( prop.equals("Title")) |
| docProps.setTitle(propValue); |
| else if ( prop.equals("Author")) |
| docProps.setAuthor(propValue); |
| else if ( prop.equals("Subject")) |
| docProps.setSubject(propValue); |
| } |
| |
| |
| /** |
| * Insert a bookmark into text document |
| * @param document text document |
| * @param textCursor which part will be bookmarked |
| * @param bookmarkName bookmark name |
| * @throws Exception |
| */ |
| public static void insertBookmark(XTextDocument document, XTextCursor textCursor, String bookmarkName) throws Exception { |
| XMultiServiceFactory xDocFactory = (XMultiServiceFactory) UnoRuntime.queryInterface(XMultiServiceFactory.class, document); |
| Object xBookmark = xDocFactory.createInstance("com.sun.star.text.Bookmark"); |
| XTextContent xBookmarkAsTextContent = (XTextContent) UnoRuntime.queryInterface(XTextContent.class, xBookmark); |
| XNamed xBookmarkAsNamed = (XNamed) UnoRuntime.queryInterface(XNamed.class, xBookmark); |
| xBookmarkAsNamed.setName(bookmarkName); |
| document.getText().insertTextContent(textCursor, xBookmarkAsTextContent, true); |
| } |
| |
| /** |
| * insert column break in current cursor |
| * @param xText |
| * @param currentCursor |
| * @throws Exception |
| */ |
| public static void insertColumnBreak(XText xText, XTextCursor currentCursor) throws Exception |
| { |
| XPropertySet xCursorProps = (XPropertySet)UnoRuntime.queryInterface( |
| XPropertySet.class, currentCursor); |
| xCursorProps.setPropertyValue("BreakType", BreakType.COLUMN_AFTER); |
| xText.insertControlCharacter(currentCursor,ControlCharacter.PARAGRAPH_BREAK,false); |
| } |
| |
| /** |
| * insert page break in current cursor |
| * @param xText |
| * @param currentCursor |
| * @throws Exception |
| */ |
| public static void insertPageBreak(XText xText, XTextCursor currentCursor) throws Exception |
| { |
| XPropertySet xCursorProps = (XPropertySet)UnoRuntime.queryInterface( |
| XPropertySet.class, currentCursor); |
| xCursorProps.setPropertyValue("BreakType", BreakType.PAGE_AFTER); |
| xText.insertControlCharacter(currentCursor,ControlCharacter.PARAGRAPH_BREAK,false); |
| } |
| |
| |
| /** |
| * get page count |
| * @param document |
| * @return |
| * @throws Exception |
| */ |
| public static int getPageCount(XTextDocument document) throws Exception |
| { |
| XModel xmodel = (XModel)UnoRuntime.queryInterface(XModel.class, document); |
| XController xcont = xmodel.getCurrentController(); |
| |
| XPropertySet xps = (XPropertySet)UnoRuntime.queryInterface(XPropertySet.class, xcont); |
| Integer pageCount = (Integer) xps.getPropertyValue("PageCount"); |
| return pageCount.intValue(); |
| } |
| |
| |
| /** |
| * get specific property value of the default page style |
| * @param xComponent |
| * @param propertyName |
| * @return |
| * @throws Exception |
| */ |
| public static Object getDefaultPageStyleProperty(XComponent xComponent, String propertyName) throws Exception |
| { |
| XTextDocument textDocument = (XTextDocument) UnoRuntime.queryInterface(XTextDocument.class, xComponent); |
| XStyleFamiliesSupplier xSupplier = (XStyleFamiliesSupplier)UnoRuntime.queryInterface(XStyleFamiliesSupplier.class, textDocument); |
| XNameAccess xFamilies = (XNameAccess) UnoRuntime.queryInterface (XNameAccess.class, xSupplier.getStyleFamilies()); |
| XNameContainer xFamily = (XNameContainer) UnoRuntime.queryInterface(XNameContainer.class, xFamilies.getByName("PageStyles")); |
| XStyle xStyle = (XStyle)UnoRuntime.queryInterface(XStyle.class, xFamily.getByName("Default")); |
| XPropertySet xStyleProps = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, xStyle); |
| Object propertyValue = xStyleProps.getPropertyValue(propertyName.toString()); |
| return propertyValue; |
| } |
| |
| /** |
| * set value for specific property of default page style. |
| * @param xComponent |
| * @param propertyName |
| * @param propertyValue |
| * @throws Exception |
| */ |
| public static void setDefaultPageStyleProperty(XComponent xComponent, String propertyName, Object propertyValue) throws Exception |
| { |
| XTextDocument textDocument = (XTextDocument) UnoRuntime.queryInterface(XTextDocument.class, xComponent); |
| XStyleFamiliesSupplier xSupplier = (XStyleFamiliesSupplier)UnoRuntime.queryInterface(XStyleFamiliesSupplier.class, textDocument); |
| XNameAccess xFamilies = (XNameAccess) UnoRuntime.queryInterface (XNameAccess.class, xSupplier.getStyleFamilies()); |
| XNameContainer xFamily = (XNameContainer) UnoRuntime.queryInterface(XNameContainer.class, xFamilies.getByName("PageStyles")); |
| XStyle xStyle = (XStyle)UnoRuntime.queryInterface(XStyle.class, xFamily.getByName("Default")); |
| XPropertySet xStyleProps = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, xStyle); |
| xStyleProps.setPropertyValue (propertyName.toString(), propertyValue); |
| } |
| |
| public static XTextDocument saveTo_Override_reload(XTextDocument xTextDocument,String filtervalue, String url,UnoApp app) throws Exception { |
| XStorable xStorable_odt = (XStorable) UnoRuntime.queryInterface(XStorable.class, xTextDocument); |
| PropertyValue[] aStoreProperties = new PropertyValue[2]; |
| aStoreProperties[0] = new PropertyValue(); |
| aStoreProperties[1] = new PropertyValue(); |
| aStoreProperties[0].Name = "Override"; |
| aStoreProperties[0].Value = true; |
| aStoreProperties[1].Name = "FilterName"; |
| aStoreProperties[1].Value = filtervalue; |
| xStorable_odt.storeToURL(FileUtil.getUrl(url), aStoreProperties); |
| //reopen the document |
| return (XTextDocument)UnoRuntime.queryInterface(XTextDocument.class, app.loadDocument(url)); |
| } |
| /** |
| * create document from template |
| */ |
| public static XComponent newDocumentFromTemplate(String templatePath,UnoApp unoApp) throws Exception |
| { |
| XComponentLoader componentLoader = (XComponentLoader) UnoRuntime.queryInterface(XComponentLoader.class, unoApp.getDesktop()); |
| PropertyValue[] pros = new PropertyValue[1]; |
| pros[0] = new PropertyValue(); |
| pros[0].Name = "AsTemplate"; |
| pros[0].Value = new Boolean(true); |
| XComponent component = componentLoader.loadComponentFromURL(FileUtil.getUrl(templatePath), "_blank", 0,pros); |
| return component; |
| } |
| } |