/************************************************************** * * 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; } }