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