/************************************************************** * * 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.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.XDocumentInfo; import com.sun.star.document.XDocumentInfoSupplier; 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.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. such as subject, title etc * @param document - set document information on this document * @param prop - document information, including "Subject" ,"Title", "Author", "Title", "KeyWords" * @param propValue - value you want to set for prop * @throws Exception */ public static void setDocumentProperty(XTextDocument document, String prop, String propValue) throws Exception { XDocumentInfoSupplier docInfoSupplier = (XDocumentInfoSupplier) UnoRuntime.queryInterface(XDocumentInfoSupplier.class, document); XDocumentInfo docInfo = docInfoSupplier.getDocumentInfo(); XPropertySet propsDocInfo = (XPropertySet)UnoRuntime.queryInterface(XPropertySet.class, docInfo); propsDocInfo.setPropertyValue(prop, 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); } }