1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski package complex.tdoc;
24*b1cdbd2cSJim Jagielski 
25*b1cdbd2cSJim Jagielski import com.sun.star.lang.XMultiServiceFactory;
26*b1cdbd2cSJim Jagielski import com.sun.star.lang.XServiceInfo;
27*b1cdbd2cSJim Jagielski import com.sun.star.sdbc.XResultSet;
28*b1cdbd2cSJim Jagielski import com.sun.star.text.XTextDocument;
29*b1cdbd2cSJim Jagielski import com.sun.star.ucb.Command;
30*b1cdbd2cSJim Jagielski import com.sun.star.ucb.OpenCommandArgument2;
31*b1cdbd2cSJim Jagielski import com.sun.star.ucb.OpenMode;
32*b1cdbd2cSJim Jagielski import com.sun.star.ucb.XCommandProcessor;
33*b1cdbd2cSJim Jagielski import com.sun.star.ucb.XContent;
34*b1cdbd2cSJim Jagielski import com.sun.star.ucb.XContentAccess;
35*b1cdbd2cSJim Jagielski import com.sun.star.ucb.XContentIdentifier;
36*b1cdbd2cSJim Jagielski import com.sun.star.ucb.XContentIdentifierFactory;
37*b1cdbd2cSJim Jagielski import com.sun.star.ucb.XContentProvider;
38*b1cdbd2cSJim Jagielski import com.sun.star.ucb.XDynamicResultSet;
39*b1cdbd2cSJim Jagielski import com.sun.star.uno.UnoRuntime;
40*b1cdbd2cSJim Jagielski // import complexlib.ComplexTestCase;
41*b1cdbd2cSJim Jagielski import util.WriterTools;
42*b1cdbd2cSJim Jagielski 
43*b1cdbd2cSJim Jagielski import org.junit.After;
44*b1cdbd2cSJim Jagielski import org.junit.AfterClass;
45*b1cdbd2cSJim Jagielski import org.junit.Before;
46*b1cdbd2cSJim Jagielski import org.junit.BeforeClass;
47*b1cdbd2cSJim Jagielski import org.junit.Test;
48*b1cdbd2cSJim Jagielski import org.openoffice.test.OfficeConnection;
49*b1cdbd2cSJim Jagielski import static org.junit.Assert.*;
50*b1cdbd2cSJim Jagielski 
51*b1cdbd2cSJim Jagielski /**
52*b1cdbd2cSJim Jagielski  *
53*b1cdbd2cSJim Jagielski  */
54*b1cdbd2cSJim Jagielski public class CheckTransientDocumentsContentProvider {
55*b1cdbd2cSJim Jagielski     // TODO: document doesn't exists
56*b1cdbd2cSJim Jagielski     private final String testDocuments[] = new String[]{/*"sForm.sxw",*/ "chinese.sxw", "Iterator.sxw"};
57*b1cdbd2cSJim Jagielski     private final int countDocs = testDocuments.length;
58*b1cdbd2cSJim Jagielski     private XMultiServiceFactory xMSF = null;
59*b1cdbd2cSJim Jagielski     private XTextDocument[] xTextDoc = null;
60*b1cdbd2cSJim Jagielski 
getTestMethodNames()61*b1cdbd2cSJim Jagielski     public String[] getTestMethodNames() {
62*b1cdbd2cSJim Jagielski         return new String[]{"checkTransientDocumentsContentProvider"};
63*b1cdbd2cSJim Jagielski     }
64*b1cdbd2cSJim Jagielski 
before()65*b1cdbd2cSJim Jagielski     @Before public void before() {
66*b1cdbd2cSJim Jagielski         xMSF = getMSF();
67*b1cdbd2cSJim Jagielski         xTextDoc = new XTextDocument[countDocs];
68*b1cdbd2cSJim Jagielski         System.out.println("Open some documents.");
69*b1cdbd2cSJim Jagielski         for (int i=0; i<countDocs; i++) {
70*b1cdbd2cSJim Jagielski             String fileName = TestDocument.getUrl(testDocuments[i]);
71*b1cdbd2cSJim Jagielski             xTextDoc[i] = WriterTools.loadTextDoc(xMSF, fileName);
72*b1cdbd2cSJim Jagielski             assertNotNull("Can't load document " + fileName, xTextDoc[i]);
73*b1cdbd2cSJim Jagielski         }
74*b1cdbd2cSJim Jagielski     }
after()75*b1cdbd2cSJim Jagielski     @After public void after() {
76*b1cdbd2cSJim Jagielski         System.out.println("Close all documents.");
77*b1cdbd2cSJim Jagielski         for (int i=0; i<countDocs; i++) {
78*b1cdbd2cSJim Jagielski             xTextDoc[i].dispose();
79*b1cdbd2cSJim Jagielski         }
80*b1cdbd2cSJim Jagielski     }
81*b1cdbd2cSJim Jagielski 
82*b1cdbd2cSJim Jagielski     /**
83*b1cdbd2cSJim Jagielski      * Check the provider of document content: open some documents
84*b1cdbd2cSJim Jagielski      * and look if they are accessible.
85*b1cdbd2cSJim Jagielski      */
checkTransientDocumentsContentProvider()86*b1cdbd2cSJim Jagielski     @Test public void checkTransientDocumentsContentProvider() {
87*b1cdbd2cSJim Jagielski         try {
88*b1cdbd2cSJim Jagielski             // create a content provider
89*b1cdbd2cSJim Jagielski             Object o = xMSF.createInstance("com.sun.star.comp.ucb.TransientDocumentsContentProvider");
90*b1cdbd2cSJim Jagielski             XContentProvider xContentProvider =
91*b1cdbd2cSJim Jagielski                             UnoRuntime.queryInterface(XContentProvider.class, o);
92*b1cdbd2cSJim Jagielski 
93*b1cdbd2cSJim Jagielski             // create the ucb
94*b1cdbd2cSJim Jagielski             XContentIdentifierFactory xContentIdentifierFactory =
95*b1cdbd2cSJim Jagielski                             UnoRuntime.queryInterface(XContentIdentifierFactory.class, xMSF.createInstance("com.sun.star.ucb.UniversalContentBroker"));
96*b1cdbd2cSJim Jagielski             // create a content identifier from the ucb for tdoc
97*b1cdbd2cSJim Jagielski             XContentIdentifier xContentIdentifier =
98*b1cdbd2cSJim Jagielski                             xContentIdentifierFactory.createContentIdentifier("vnd.sun.star.tdoc:/");
99*b1cdbd2cSJim Jagielski             // get content
100*b1cdbd2cSJim Jagielski             XContent xContent = xContentProvider.queryContent(xContentIdentifier);
101*b1cdbd2cSJim Jagielski 
102*b1cdbd2cSJim Jagielski             // actual test: execute an "open" command with the content
103*b1cdbd2cSJim Jagielski             XCommandProcessor xCommandProcessor = UnoRuntime.queryInterface(XCommandProcessor.class, xContent);
104*b1cdbd2cSJim Jagielski             // build up the command
105*b1cdbd2cSJim Jagielski             Command command = new Command();
106*b1cdbd2cSJim Jagielski             OpenCommandArgument2 commandarg2 = new OpenCommandArgument2();
107*b1cdbd2cSJim Jagielski             commandarg2.Mode = OpenMode.ALL;
108*b1cdbd2cSJim Jagielski             command.Name = "open";
109*b1cdbd2cSJim Jagielski             command.Argument = commandarg2;
110*b1cdbd2cSJim Jagielski 
111*b1cdbd2cSJim Jagielski             // execute the command
112*b1cdbd2cSJim Jagielski             Object result = xCommandProcessor.execute(command, 0, null);
113*b1cdbd2cSJim Jagielski 
114*b1cdbd2cSJim Jagielski             // check the result
115*b1cdbd2cSJim Jagielski             System.out.println("Result: "+ result.getClass().toString());
116*b1cdbd2cSJim Jagielski             XDynamicResultSet xDynamicResultSet = UnoRuntime.queryInterface(XDynamicResultSet.class, result);
117*b1cdbd2cSJim Jagielski 
118*b1cdbd2cSJim Jagielski             // check bug of wrong returned service name.
119*b1cdbd2cSJim Jagielski             XServiceInfo xServiceInfo = UnoRuntime.queryInterface(XServiceInfo.class, xDynamicResultSet);
120*b1cdbd2cSJim Jagielski             String[] sNames = xServiceInfo.getSupportedServiceNames();
121*b1cdbd2cSJim Jagielski             String serviceName = sNames[0];
122*b1cdbd2cSJim Jagielski             if (sNames.length > 1)
123*b1cdbd2cSJim Jagielski             {
124*b1cdbd2cSJim Jagielski                 fail("Implementation has been changed. Check this test!");
125*b1cdbd2cSJim Jagielski             }
126*b1cdbd2cSJim Jagielski             assertTrue("The service name '" + serviceName + "' is not valid.", !serviceName.equals("com.sun.star.ucb.DynamicContentResultSet"));
127*b1cdbd2cSJim Jagielski 
128*b1cdbd2cSJim Jagielski             XResultSet xResultSet = xDynamicResultSet.getStaticResultSet();
129*b1cdbd2cSJim Jagielski             XContentAccess xContentAccess = UnoRuntime.queryInterface(XContentAccess.class, xResultSet);
130*b1cdbd2cSJim Jagielski             // iterate over the result: three docs were opened, we should have at least three content identifier strings
131*b1cdbd2cSJim Jagielski             int countContentIdentifiers = 0;
132*b1cdbd2cSJim Jagielski             while(xResultSet.next()) {
133*b1cdbd2cSJim Jagielski                 countContentIdentifiers++;
134*b1cdbd2cSJim Jagielski                 String identifier = xContentAccess.queryContentIdentifierString();
135*b1cdbd2cSJim Jagielski                 System.out.println("Identifier of row " + xResultSet.getRow() + ": " + identifier);
136*b1cdbd2cSJim Jagielski             }
137*b1cdbd2cSJim Jagielski             // some feeble test: if the amount >2, we're ok.
138*b1cdbd2cSJim Jagielski             // 2do: check better
139*b1cdbd2cSJim Jagielski             assertTrue("Did only find " + countContentIdentifiers + " open documents." +
140*b1cdbd2cSJim Jagielski                         " Should have been at least 3.", countContentIdentifiers>2);
141*b1cdbd2cSJim Jagielski         }
142*b1cdbd2cSJim Jagielski         catch (com.sun.star.uno.Exception e) {
143*b1cdbd2cSJim Jagielski             e.printStackTrace();
144*b1cdbd2cSJim Jagielski             fail("Could not create test objects.");
145*b1cdbd2cSJim Jagielski         }
146*b1cdbd2cSJim Jagielski 
147*b1cdbd2cSJim Jagielski     }
148*b1cdbd2cSJim Jagielski 
getMSF()149*b1cdbd2cSJim Jagielski      private XMultiServiceFactory getMSF()
150*b1cdbd2cSJim Jagielski     {
151*b1cdbd2cSJim Jagielski         final XMultiServiceFactory xMSF1 = UnoRuntime.queryInterface(XMultiServiceFactory.class, connection.getComponentContext().getServiceManager());
152*b1cdbd2cSJim Jagielski         return xMSF1;
153*b1cdbd2cSJim Jagielski     }
154*b1cdbd2cSJim Jagielski 
155*b1cdbd2cSJim Jagielski     // setup and close connections
setUpConnection()156*b1cdbd2cSJim Jagielski     @BeforeClass public static void setUpConnection() throws Exception {
157*b1cdbd2cSJim Jagielski         System.out.println("setUpConnection()");
158*b1cdbd2cSJim Jagielski         connection.setUp();
159*b1cdbd2cSJim Jagielski     }
160*b1cdbd2cSJim Jagielski 
tearDownConnection()161*b1cdbd2cSJim Jagielski     @AfterClass public static void tearDownConnection()
162*b1cdbd2cSJim Jagielski         throws InterruptedException, com.sun.star.uno.Exception
163*b1cdbd2cSJim Jagielski     {
164*b1cdbd2cSJim Jagielski         System.out.println("tearDownConnection()");
165*b1cdbd2cSJim Jagielski         connection.tearDown();
166*b1cdbd2cSJim Jagielski     }
167*b1cdbd2cSJim Jagielski 
168*b1cdbd2cSJim Jagielski     private static final OfficeConnection connection = new OfficeConnection();
169*b1cdbd2cSJim Jagielski 
170*b1cdbd2cSJim Jagielski }
171