1*cdf0e10cSrcweir /************************************************************************* 2*cdf0e10cSrcweir * 3*cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*cdf0e10cSrcweir * 5*cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 6*cdf0e10cSrcweir * 7*cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite 8*cdf0e10cSrcweir * 9*cdf0e10cSrcweir * This file is part of OpenOffice.org. 10*cdf0e10cSrcweir * 11*cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify 12*cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3 13*cdf0e10cSrcweir * only, as published by the Free Software Foundation. 14*cdf0e10cSrcweir * 15*cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful, 16*cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details 19*cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code). 20*cdf0e10cSrcweir * 21*cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License 22*cdf0e10cSrcweir * version 3 along with OpenOffice.org. If not, see 23*cdf0e10cSrcweir * <http://www.openoffice.org/license.html> 24*cdf0e10cSrcweir * for a copy of the LGPLv3 License. 25*cdf0e10cSrcweir * 26*cdf0e10cSrcweir ************************************************************************/ 27*cdf0e10cSrcweir package complex.tdoc; 28*cdf0e10cSrcweir 29*cdf0e10cSrcweir import com.sun.star.beans.Property; 30*cdf0e10cSrcweir import com.sun.star.beans.PropertyValue; 31*cdf0e10cSrcweir import com.sun.star.document.XDocumentSubStorageSupplier; 32*cdf0e10cSrcweir import com.sun.star.embed.ElementModes; 33*cdf0e10cSrcweir import com.sun.star.embed.XStorage; 34*cdf0e10cSrcweir import com.sun.star.frame.XModel; 35*cdf0e10cSrcweir import com.sun.star.frame.XTransientDocumentsDocumentContentFactory; 36*cdf0e10cSrcweir import com.sun.star.lang.XMultiServiceFactory; 37*cdf0e10cSrcweir import com.sun.star.sdbc.XResultSet; 38*cdf0e10cSrcweir import com.sun.star.sdbc.XRow; 39*cdf0e10cSrcweir import com.sun.star.text.XTextDocument; 40*cdf0e10cSrcweir import com.sun.star.ucb.Command; 41*cdf0e10cSrcweir import com.sun.star.ucb.ContentInfo; 42*cdf0e10cSrcweir import com.sun.star.ucb.OpenCommandArgument2; 43*cdf0e10cSrcweir import com.sun.star.ucb.OpenMode; 44*cdf0e10cSrcweir import com.sun.star.ucb.XCommandProcessor; 45*cdf0e10cSrcweir import com.sun.star.ucb.XContent; 46*cdf0e10cSrcweir import com.sun.star.ucb.XDynamicResultSet; 47*cdf0e10cSrcweir import com.sun.star.uno.UnoRuntime; 48*cdf0e10cSrcweir import util.WriterTools; 49*cdf0e10cSrcweir import util.utils; 50*cdf0e10cSrcweir 51*cdf0e10cSrcweir import org.junit.After; 52*cdf0e10cSrcweir import org.junit.AfterClass; 53*cdf0e10cSrcweir import org.junit.Before; 54*cdf0e10cSrcweir import org.junit.BeforeClass; 55*cdf0e10cSrcweir import org.junit.Test; 56*cdf0e10cSrcweir import org.openoffice.test.OfficeConnection; 57*cdf0e10cSrcweir import static org.junit.Assert.*; 58*cdf0e10cSrcweir /** 59*cdf0e10cSrcweir * 60*cdf0e10cSrcweir */ 61*cdf0e10cSrcweir public class CheckTransientDocumentsDocumentContent { 62*cdf0e10cSrcweir // TODO: document doesn't exists 63*cdf0e10cSrcweir private final String testDocuments = "sForm.sxw"; 64*cdf0e10cSrcweir private final String folderName = "TestFolder"; 65*cdf0e10cSrcweir private XMultiServiceFactory xMSF = null; 66*cdf0e10cSrcweir private XTextDocument xTextDoc = null; 67*cdf0e10cSrcweir 68*cdf0e10cSrcweir // public String[] getTestMethodNames() { 69*cdf0e10cSrcweir // return new String[]{"checkTransientDocumentsDocumentContent"}; 70*cdf0e10cSrcweir // } 71*cdf0e10cSrcweir 72*cdf0e10cSrcweir @Before public void before() { 73*cdf0e10cSrcweir xMSF = getMSF(); 74*cdf0e10cSrcweir System.out.println("Open a document."); 75*cdf0e10cSrcweir String fileName = TestDocument.getUrl(testDocuments); 76*cdf0e10cSrcweir xTextDoc = WriterTools.loadTextDoc(xMSF, fileName); 77*cdf0e10cSrcweir assertNotNull(xTextDoc); 78*cdf0e10cSrcweir } 79*cdf0e10cSrcweir @After public void after() { 80*cdf0e10cSrcweir System.out.println("Close all documents."); 81*cdf0e10cSrcweir xTextDoc.dispose(); 82*cdf0e10cSrcweir } 83*cdf0e10cSrcweir 84*cdf0e10cSrcweir /** 85*cdf0e10cSrcweir * Check the provider of document content: open some documents 86*cdf0e10cSrcweir * and look if they are accessible. 87*cdf0e10cSrcweir */ 88*cdf0e10cSrcweir @Test public void checkTransientDocumentsDocumentContent() { 89*cdf0e10cSrcweir try { 90*cdf0e10cSrcweir // create a content provider 91*cdf0e10cSrcweir Object o = xMSF.createInstance("com.sun.star.comp.ucb.TransientDocumentsDocumentContentFactory"); 92*cdf0e10cSrcweir 93*cdf0e10cSrcweir XTransientDocumentsDocumentContentFactory xTransientDocumentsDocumentContentFactory = 94*cdf0e10cSrcweir UnoRuntime.queryInterface(XTransientDocumentsDocumentContentFactory.class, o); 95*cdf0e10cSrcweir // get the model from the opened document 96*cdf0e10cSrcweir XModel xModel = xTextDoc.getCurrentController().getModel(); 97*cdf0e10cSrcweir 98*cdf0e10cSrcweir // a little additional check for 114733 99*cdf0e10cSrcweir XDocumentSubStorageSupplier xDocumentSubStorageSupplier = UnoRuntime.queryInterface(XDocumentSubStorageSupplier.class, xModel); 100*cdf0e10cSrcweir String[]names = xDocumentSubStorageSupplier.getDocumentSubStoragesNames(); 101*cdf0e10cSrcweir for (int i=0; i<names.length; i++) { 102*cdf0e10cSrcweir System.out.println("SubStorage names " + i + ": " +names[i]); 103*cdf0e10cSrcweir } 104*cdf0e10cSrcweir XStorage xStorage = xDocumentSubStorageSupplier.getDocumentSubStorage(names[0], ElementModes.READWRITE); 105*cdf0e10cSrcweir assertTrue("Could not get a storage from the XDocumentStorageSupplier.", xStorage != null); 106*cdf0e10cSrcweir // get content 107*cdf0e10cSrcweir XContent xContent = xTransientDocumentsDocumentContentFactory.createDocumentContent(xModel); 108*cdf0e10cSrcweir // actual test: execute some commands 109*cdf0e10cSrcweir XCommandProcessor xCommandProcessor = UnoRuntime.queryInterface(XCommandProcessor.class, xContent); 110*cdf0e10cSrcweir 111*cdf0e10cSrcweir // create the command and arguments 112*cdf0e10cSrcweir Command command = new Command(); 113*cdf0e10cSrcweir OpenCommandArgument2 cmargs2 = new OpenCommandArgument2(); 114*cdf0e10cSrcweir Property[]props = new Property[1]; 115*cdf0e10cSrcweir props[0] = new Property(); 116*cdf0e10cSrcweir props[0].Name = "Title"; 117*cdf0e10cSrcweir props[0].Handle = -1; 118*cdf0e10cSrcweir cmargs2.Mode = OpenMode.ALL; 119*cdf0e10cSrcweir cmargs2.Properties = props; 120*cdf0e10cSrcweir 121*cdf0e10cSrcweir command.Name = "open"; 122*cdf0e10cSrcweir command.Argument = cmargs2; 123*cdf0e10cSrcweir 124*cdf0e10cSrcweir Object result = xCommandProcessor.execute(command, 0, null); 125*cdf0e10cSrcweir XDynamicResultSet xDynamicResultSet = UnoRuntime.queryInterface(XDynamicResultSet.class, result); 126*cdf0e10cSrcweir XResultSet xResultSet = xDynamicResultSet.getStaticResultSet(); 127*cdf0e10cSrcweir XRow xRow = UnoRuntime.queryInterface(XRow.class, xResultSet); 128*cdf0e10cSrcweir // create the new folder 'folderName': first, check if it's already there 129*cdf0e10cSrcweir while(xResultSet.next()) { 130*cdf0e10cSrcweir String existingFolderName = xRow.getString(1); 131*cdf0e10cSrcweir System.out.println("Found existing folder: '" + existingFolderName + "'"); 132*cdf0e10cSrcweir if (folderName.equals(existingFolderName)) { 133*cdf0e10cSrcweir fail("Cannot create a new folder: folder already exists: adapt test or choose a different document."); 134*cdf0e10cSrcweir } 135*cdf0e10cSrcweir } 136*cdf0e10cSrcweir // create a folder 137*cdf0e10cSrcweir System.out.println("Create new folder "+ folderName); 138*cdf0e10cSrcweir ContentInfo contentInfo = new ContentInfo(); 139*cdf0e10cSrcweir contentInfo.Type = "application/vnd.sun.star.tdoc-folder"; 140*cdf0e10cSrcweir 141*cdf0e10cSrcweir command.Name = "createNewContent"; 142*cdf0e10cSrcweir command.Argument = contentInfo; 143*cdf0e10cSrcweir 144*cdf0e10cSrcweir result = xCommandProcessor.execute(command, 0, null); 145*cdf0e10cSrcweir XContent xNewFolder = UnoRuntime.queryInterface(XContent.class, result); 146*cdf0e10cSrcweir 147*cdf0e10cSrcweir XCommandProcessor xFolderCommandProcessor = UnoRuntime.queryInterface(XCommandProcessor.class, xNewFolder); 148*cdf0e10cSrcweir System.out.println("Got the new folder: " + utils.getImplName(xNewFolder)); 149*cdf0e10cSrcweir 150*cdf0e10cSrcweir // name the new folder 151*cdf0e10cSrcweir PropertyValue[] titleProp = new PropertyValue[1]; 152*cdf0e10cSrcweir titleProp[0] = new PropertyValue(); 153*cdf0e10cSrcweir titleProp[0].Name = "Title"; 154*cdf0e10cSrcweir titleProp[0].Handle = -1; 155*cdf0e10cSrcweir titleProp[0].Value = folderName; 156*cdf0e10cSrcweir Command titleSetCommand = new Command(); 157*cdf0e10cSrcweir titleSetCommand.Name = "setPropertyValues"; 158*cdf0e10cSrcweir titleSetCommand.Argument = titleProp; 159*cdf0e10cSrcweir xFolderCommandProcessor.execute(titleSetCommand, 0, null); 160*cdf0e10cSrcweir 161*cdf0e10cSrcweir // 2do: check all this stuff! 162*cdf0e10cSrcweir // commit changes 163*cdf0e10cSrcweir /* InsertCommandArgument insertArgs = new InsertCommandArgument(); 164*cdf0e10cSrcweir insertArgs.Data = null; 165*cdf0e10cSrcweir insertArgs.ReplaceExisting = true; 166*cdf0e10cSrcweir Command commitCommand = new Command(); 167*cdf0e10cSrcweir commitCommand.Name = "insert"; 168*cdf0e10cSrcweir commitCommand.Argument = insertArgs; 169*cdf0e10cSrcweir xFolderCommandProcessor.execute(commitCommand, 0, null); */ 170*cdf0e10cSrcweir } 171*cdf0e10cSrcweir catch (com.sun.star.uno.Exception e) { 172*cdf0e10cSrcweir e.printStackTrace(); 173*cdf0e10cSrcweir fail("Could not create test objects."); 174*cdf0e10cSrcweir } 175*cdf0e10cSrcweir 176*cdf0e10cSrcweir } 177*cdf0e10cSrcweir 178*cdf0e10cSrcweir 179*cdf0e10cSrcweir private XMultiServiceFactory getMSF() 180*cdf0e10cSrcweir { 181*cdf0e10cSrcweir final XMultiServiceFactory xMSF1 = UnoRuntime.queryInterface(XMultiServiceFactory.class, connection.getComponentContext().getServiceManager()); 182*cdf0e10cSrcweir return xMSF1; 183*cdf0e10cSrcweir } 184*cdf0e10cSrcweir 185*cdf0e10cSrcweir // setup and close connections 186*cdf0e10cSrcweir @BeforeClass public static void setUpConnection() throws Exception { 187*cdf0e10cSrcweir System.out.println("setUpConnection()"); 188*cdf0e10cSrcweir connection.setUp(); 189*cdf0e10cSrcweir } 190*cdf0e10cSrcweir 191*cdf0e10cSrcweir @AfterClass public static void tearDownConnection() 192*cdf0e10cSrcweir throws InterruptedException, com.sun.star.uno.Exception 193*cdf0e10cSrcweir { 194*cdf0e10cSrcweir System.out.println("tearDownConnection()"); 195*cdf0e10cSrcweir connection.tearDown(); 196*cdf0e10cSrcweir } 197*cdf0e10cSrcweir 198*cdf0e10cSrcweir private static final OfficeConnection connection = new OfficeConnection(); 199*cdf0e10cSrcweir 200*cdf0e10cSrcweir 201*cdf0e10cSrcweir } 202