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 
24*b1cdbd2cSJim Jagielski package ifc.frame;
25*b1cdbd2cSJim Jagielski 
26*b1cdbd2cSJim Jagielski import lib.MultiMethodTest;
27*b1cdbd2cSJim Jagielski import util.utils;
28*b1cdbd2cSJim Jagielski 
29*b1cdbd2cSJim Jagielski import com.sun.star.beans.Property;
30*b1cdbd2cSJim Jagielski import com.sun.star.frame.XDocumentTemplates;
31*b1cdbd2cSJim Jagielski import com.sun.star.frame.XStorable;
32*b1cdbd2cSJim Jagielski import com.sun.star.sdbc.XResultSet;
33*b1cdbd2cSJim Jagielski import com.sun.star.sdbc.XRow;
34*b1cdbd2cSJim Jagielski import com.sun.star.ucb.Command;
35*b1cdbd2cSJim Jagielski import com.sun.star.ucb.OpenCommandArgument2;
36*b1cdbd2cSJim Jagielski import com.sun.star.ucb.XCommandProcessor;
37*b1cdbd2cSJim Jagielski import com.sun.star.ucb.XContent;
38*b1cdbd2cSJim Jagielski import com.sun.star.ucb.XContentAccess;
39*b1cdbd2cSJim Jagielski import com.sun.star.ucb.XDynamicResultSet;
40*b1cdbd2cSJim Jagielski import com.sun.star.uno.AnyConverter;
41*b1cdbd2cSJim Jagielski import com.sun.star.uno.Type;
42*b1cdbd2cSJim Jagielski import com.sun.star.uno.UnoRuntime;
43*b1cdbd2cSJim Jagielski /**
44*b1cdbd2cSJim Jagielski * Testing <code>com.sun.star.frame.XDesktop</code>
45*b1cdbd2cSJim Jagielski * interface methods:
46*b1cdbd2cSJim Jagielski * <ul>
47*b1cdbd2cSJim Jagielski *  <li><code> getContent() </code></li>
48*b1cdbd2cSJim Jagielski *  <li><code> storeTemplate() </code></li>
49*b1cdbd2cSJim Jagielski *  <li><code> addTemplate() </code></li>
50*b1cdbd2cSJim Jagielski *  <li><code> removeTemplate() </code></li>
51*b1cdbd2cSJim Jagielski *  <li><code> renameTemplate() </code></li>
52*b1cdbd2cSJim Jagielski *  <li><code> addGroup() </code></li>
53*b1cdbd2cSJim Jagielski *  <li><code> removeGroup() </code></li>
54*b1cdbd2cSJim Jagielski *  <li><code> renameGroup() </code></li>
55*b1cdbd2cSJim Jagielski *  <li><code> update() </code></li>
56*b1cdbd2cSJim Jagielski * </ul><p>
57*b1cdbd2cSJim Jagielski */
58*b1cdbd2cSJim Jagielski public class _XDocumentTemplates extends MultiMethodTest {
59*b1cdbd2cSJim Jagielski     public XDocumentTemplates oObj = null; // oObj filled by MultiMethodTest
60*b1cdbd2cSJim Jagielski     protected XContent content = null;
61*b1cdbd2cSJim Jagielski     /**
62*b1cdbd2cSJim Jagielski     * Test calls the method and prints contents list to log.<p>
63*b1cdbd2cSJim Jagielski     * Has <b> OK </b> status if the XContent isn't empty.
64*b1cdbd2cSJim Jagielski     */
_getContent()65*b1cdbd2cSJim Jagielski     public void _getContent() {
66*b1cdbd2cSJim Jagielski         content = oObj.getContent();
67*b1cdbd2cSJim Jagielski         log.println("Content list:" + getContentList(content));
68*b1cdbd2cSJim Jagielski         tRes.tested("getContent()", content != null);
69*b1cdbd2cSJim Jagielski     }
70*b1cdbd2cSJim Jagielski 
71*b1cdbd2cSJim Jagielski     /**
72*b1cdbd2cSJim Jagielski     * Test calls the method and checks that new group was added. <p>
73*b1cdbd2cSJim Jagielski     * Has <b> OK </b> status if method returns true and new group was added.
74*b1cdbd2cSJim Jagielski     */
_addGroup()75*b1cdbd2cSJim Jagielski     public void _addGroup() {
76*b1cdbd2cSJim Jagielski         requiredMethod("getContent()");
77*b1cdbd2cSJim Jagielski         if (getSubContent(content, "XDocumentTemplatesTemp") != null ) {
78*b1cdbd2cSJim Jagielski             oObj.removeGroup("XDocumentTemplatesTemp");
79*b1cdbd2cSJim Jagielski         }
80*b1cdbd2cSJim Jagielski         if (getSubContent(content, "XDocumentTemplates") != null ) {
81*b1cdbd2cSJim Jagielski             oObj.removeGroup("XDocumentTemplates");
82*b1cdbd2cSJim Jagielski         }
83*b1cdbd2cSJim Jagielski         boolean res  = oObj.addGroup("XDocumentTemplatesTemp");
84*b1cdbd2cSJim Jagielski         log.println("Method returned: " + res);
85*b1cdbd2cSJim Jagielski         res &= getSubContent(content, "XDocumentTemplatesTemp") != null;
86*b1cdbd2cSJim Jagielski         tRes.tested("addGroup()", res);
87*b1cdbd2cSJim Jagielski     }
88*b1cdbd2cSJim Jagielski 
89*b1cdbd2cSJim Jagielski     XContent groupContent = null;
90*b1cdbd2cSJim Jagielski     /**
91*b1cdbd2cSJim Jagielski     * Test calls the method and checks that content has no group with old name
92*b1cdbd2cSJim Jagielski     * and that content has group with new name. <p>
93*b1cdbd2cSJim Jagielski     * Has <b> OK </b> status if method returns true, content has no group with
94*b1cdbd2cSJim Jagielski     * old name and content has group with new name.<p>
95*b1cdbd2cSJim Jagielski     */
_renameGroup()96*b1cdbd2cSJim Jagielski     public void _renameGroup() {
97*b1cdbd2cSJim Jagielski         requiredMethod("addGroup()");
98*b1cdbd2cSJim Jagielski         boolean res = oObj.renameGroup("XDocumentTemplatesTemp",
99*b1cdbd2cSJim Jagielski             "XDocumentTemplates");
100*b1cdbd2cSJim Jagielski         log.println("Method returned: " + res);
101*b1cdbd2cSJim Jagielski         groupContent = getSubContent(content, "XDocumentTemplates");
102*b1cdbd2cSJim Jagielski         res &= getSubContent(content, "XDocumentTemplatesTemp") == null;
103*b1cdbd2cSJim Jagielski         res &= groupContent != null;
104*b1cdbd2cSJim Jagielski         tRes.tested("renameGroup()", res);
105*b1cdbd2cSJim Jagielski     }
106*b1cdbd2cSJim Jagielski 
107*b1cdbd2cSJim Jagielski     /**
108*b1cdbd2cSJim Jagielski     * Test calls the method and checks that group content has new template. <p>
109*b1cdbd2cSJim Jagielski     * Has <b> OK </b> status if method returns true and group content has new
110*b1cdbd2cSJim Jagielski     * template.<p>
111*b1cdbd2cSJim Jagielski     */
_addTemplate()112*b1cdbd2cSJim Jagielski     public void _addTemplate() {
113*b1cdbd2cSJim Jagielski         requiredMethod("renameGroup()");
114*b1cdbd2cSJim Jagielski         String testDoc = utils.getFullTestURL("report.stw");
115*b1cdbd2cSJim Jagielski         log.println("Adding template from " + testDoc);
116*b1cdbd2cSJim Jagielski         boolean res = oObj.addTemplate("XDocumentTemplates",
117*b1cdbd2cSJim Jagielski             "ANewTemplateTemp",testDoc);
118*b1cdbd2cSJim Jagielski         log.println("Method returned: " + res);
119*b1cdbd2cSJim Jagielski         res &= getSubContent(groupContent, "ANewTemplateTemp") != null;
120*b1cdbd2cSJim Jagielski         tRes.tested("addTemplate()", res);
121*b1cdbd2cSJim Jagielski     }
122*b1cdbd2cSJim Jagielski 
123*b1cdbd2cSJim Jagielski     /**
124*b1cdbd2cSJim Jagielski     * Test calls the method and checks that group content has no template with
125*b1cdbd2cSJim Jagielski     * old name and that group content has template with new name. <p>
126*b1cdbd2cSJim Jagielski     * Has <b> OK </b> status if method returns true, group content has no
127*b1cdbd2cSJim Jagielski     * template with old name and group content has template with new name.<p>
128*b1cdbd2cSJim Jagielski     */
_renameTemplate()129*b1cdbd2cSJim Jagielski     public void _renameTemplate() {
130*b1cdbd2cSJim Jagielski         requiredMethod("addTemplate()");
131*b1cdbd2cSJim Jagielski         boolean res = oObj.renameTemplate("XDocumentTemplates",
132*b1cdbd2cSJim Jagielski                                           "ANewTemplateTemp",
133*b1cdbd2cSJim Jagielski                                           "ANewTemplate");
134*b1cdbd2cSJim Jagielski         log.println("Method returned: " + res);
135*b1cdbd2cSJim Jagielski         res &= getSubContent(groupContent, "ANewTemplateTemp") == null;
136*b1cdbd2cSJim Jagielski         res &= getSubContent(groupContent, "ANewTemplate") != null;
137*b1cdbd2cSJim Jagielski 
138*b1cdbd2cSJim Jagielski         tRes.tested("renameTemplate()", res);
139*b1cdbd2cSJim Jagielski     }
140*b1cdbd2cSJim Jagielski 
141*b1cdbd2cSJim Jagielski     /**
142*b1cdbd2cSJim Jagielski     * Test calls the method and checks that group content has new template. <p>
143*b1cdbd2cSJim Jagielski     * Has <b> OK </b> status if method returns true and new template was created.<p>
144*b1cdbd2cSJim Jagielski     */
_storeTemplate()145*b1cdbd2cSJim Jagielski     public void _storeTemplate() {
146*b1cdbd2cSJim Jagielski         requiredMethod("renameGroup()");
147*b1cdbd2cSJim Jagielski         XStorable store = (XStorable) tEnv.getObjRelation("Store");
148*b1cdbd2cSJim Jagielski         boolean res = oObj.storeTemplate("XDocumentTemplates",
149*b1cdbd2cSJim Jagielski                                          "NewStoreTemplate",
150*b1cdbd2cSJim Jagielski                                          store);
151*b1cdbd2cSJim Jagielski         log.println("Method returned: " + res);
152*b1cdbd2cSJim Jagielski         res &= getSubContent(groupContent, "NewStoreTemplate") != null;
153*b1cdbd2cSJim Jagielski         tRes.tested("storeTemplate()", res);
154*b1cdbd2cSJim Jagielski     }
155*b1cdbd2cSJim Jagielski 
156*b1cdbd2cSJim Jagielski     /**
157*b1cdbd2cSJim Jagielski     * Test calls the method and checks that group content has no deleted template. <p>
158*b1cdbd2cSJim Jagielski     * Has <b> OK </b> status if method returns true and group content has no
159*b1cdbd2cSJim Jagielski     * deleted template.<p>
160*b1cdbd2cSJim Jagielski     */
_removeTemplate()161*b1cdbd2cSJim Jagielski     public void _removeTemplate() {
162*b1cdbd2cSJim Jagielski         requiredMethod("renameTemplate()");
163*b1cdbd2cSJim Jagielski         boolean res = oObj.removeTemplate("XDocumentTemplates", "ANewTemplate");
164*b1cdbd2cSJim Jagielski         log.println("Method returned: " + res);
165*b1cdbd2cSJim Jagielski         res &= getSubContent(groupContent, "ANewTemplate") == null;
166*b1cdbd2cSJim Jagielski         tRes.tested("removeTemplate()", res);
167*b1cdbd2cSJim Jagielski     }
168*b1cdbd2cSJim Jagielski 
169*b1cdbd2cSJim Jagielski     /**
170*b1cdbd2cSJim Jagielski     * Test calls the method and checks that content has no deleted group. <p>
171*b1cdbd2cSJim Jagielski     * Has <b> OK </b> status if method returns true and content has no deleted
172*b1cdbd2cSJim Jagielski     * group.<p>
173*b1cdbd2cSJim Jagielski     */
_removeGroup()174*b1cdbd2cSJim Jagielski     public void _removeGroup() {
175*b1cdbd2cSJim Jagielski         requiredMethod("renameGroup()");
176*b1cdbd2cSJim Jagielski         executeMethod("renameTemplate()");
177*b1cdbd2cSJim Jagielski         boolean res = oObj.removeGroup("XDocumentTemplates");
178*b1cdbd2cSJim Jagielski         log.println("Method returned: " + res);
179*b1cdbd2cSJim Jagielski         res &= getSubContent(content, "XDocumentTemplates") == null;
180*b1cdbd2cSJim Jagielski         tRes.tested("removeGroup()", res);
181*b1cdbd2cSJim Jagielski     }
182*b1cdbd2cSJim Jagielski 
183*b1cdbd2cSJim Jagielski     /**
184*b1cdbd2cSJim Jagielski     * Test calls the method. <p>
185*b1cdbd2cSJim Jagielski     * Has <b> OK </b> status if no exception occurs.<p>
186*b1cdbd2cSJim Jagielski     */
_update()187*b1cdbd2cSJim Jagielski     public void _update() {
188*b1cdbd2cSJim Jagielski         oObj.update();
189*b1cdbd2cSJim Jagielski         tRes.tested("update()",true);
190*b1cdbd2cSJim Jagielski     }
191*b1cdbd2cSJim Jagielski 
192*b1cdbd2cSJim Jagielski     /**
193*b1cdbd2cSJim Jagielski      * Returns the string representation of content passed as parameter.
194*b1cdbd2cSJim Jagielski      */
getContentList(XContent content)195*b1cdbd2cSJim Jagielski     protected String getContentList(XContent content) {
196*b1cdbd2cSJim Jagielski         XResultSet statRes = getStatResultSet(content);
197*b1cdbd2cSJim Jagielski         String ret = "";
198*b1cdbd2cSJim Jagielski         try {
199*b1cdbd2cSJim Jagielski             statRes.first();
200*b1cdbd2cSJim Jagielski             XRow row = (XRow)UnoRuntime.queryInterface(XRow.class, statRes);
201*b1cdbd2cSJim Jagielski             while(! statRes.isAfterLast()) {
202*b1cdbd2cSJim Jagielski                 ret += "\n    " + row.getString(1);
203*b1cdbd2cSJim Jagielski                 statRes.next();
204*b1cdbd2cSJim Jagielski             }
205*b1cdbd2cSJim Jagielski         } catch (com.sun.star.sdbc.SQLException e) {
206*b1cdbd2cSJim Jagielski             log.println("Exception occured:" + e);
207*b1cdbd2cSJim Jagielski         }
208*b1cdbd2cSJim Jagielski 
209*b1cdbd2cSJim Jagielski         return ret;
210*b1cdbd2cSJim Jagielski     }
211*b1cdbd2cSJim Jagielski 
getStatResultSet(XContent content)212*b1cdbd2cSJim Jagielski     protected XResultSet getStatResultSet(XContent content) {
213*b1cdbd2cSJim Jagielski         XResultSet statResSet = null;
214*b1cdbd2cSJim Jagielski         try {
215*b1cdbd2cSJim Jagielski             statResSet = getDynaResultSet(content).getStaticResultSet();
216*b1cdbd2cSJim Jagielski         } catch(com.sun.star.ucb.ListenerAlreadySetException e) {
217*b1cdbd2cSJim Jagielski             log.println("Exception occured:" + e);
218*b1cdbd2cSJim Jagielski         }
219*b1cdbd2cSJim Jagielski         return statResSet;
220*b1cdbd2cSJim Jagielski     }
221*b1cdbd2cSJim Jagielski 
getDynaResultSet(XContent content)222*b1cdbd2cSJim Jagielski     protected XDynamicResultSet getDynaResultSet(XContent content) {
223*b1cdbd2cSJim Jagielski         Command command = new Command();
224*b1cdbd2cSJim Jagielski         OpenCommandArgument2 comArg = new OpenCommandArgument2();
225*b1cdbd2cSJim Jagielski         Property[] comProps = new Property[1];
226*b1cdbd2cSJim Jagielski         comArg.Mode = com.sun.star.ucb.OpenMode.ALL;
227*b1cdbd2cSJim Jagielski         comProps[0] = new Property();
228*b1cdbd2cSJim Jagielski         comProps[0].Name = "Title";
229*b1cdbd2cSJim Jagielski         comArg.Properties = comProps;
230*b1cdbd2cSJim Jagielski 
231*b1cdbd2cSJim Jagielski         command.Name = "open";
232*b1cdbd2cSJim Jagielski         command.Handle = -1;
233*b1cdbd2cSJim Jagielski         command.Argument = comArg;
234*b1cdbd2cSJim Jagielski 
235*b1cdbd2cSJim Jagielski         XCommandProcessor comProc = (XCommandProcessor)
236*b1cdbd2cSJim Jagielski             UnoRuntime.queryInterface(XCommandProcessor.class, content);
237*b1cdbd2cSJim Jagielski 
238*b1cdbd2cSJim Jagielski         XDynamicResultSet DynResSet = null;
239*b1cdbd2cSJim Jagielski         try {
240*b1cdbd2cSJim Jagielski             DynResSet = (XDynamicResultSet) AnyConverter.toObject(
241*b1cdbd2cSJim Jagielski                 new Type(XDynamicResultSet.class),comProc.execute(command, 0, null));
242*b1cdbd2cSJim Jagielski         } catch(com.sun.star.ucb.CommandAbortedException e) {
243*b1cdbd2cSJim Jagielski             log.println("Couldn't execute command:" + e);
244*b1cdbd2cSJim Jagielski         } catch(com.sun.star.uno.Exception e) {
245*b1cdbd2cSJim Jagielski             log.println("Couldn't execute command:" + e);
246*b1cdbd2cSJim Jagielski         }
247*b1cdbd2cSJim Jagielski 
248*b1cdbd2cSJim Jagielski         return DynResSet;
249*b1cdbd2cSJim Jagielski     }
250*b1cdbd2cSJim Jagielski 
getSubContent(XContent content, String subName)251*b1cdbd2cSJim Jagielski     protected XContent getSubContent(XContent content, String subName) {
252*b1cdbd2cSJim Jagielski         XResultSet statRes = getStatResultSet(content);
253*b1cdbd2cSJim Jagielski         XRow row = (XRow)UnoRuntime.queryInterface(XRow.class, statRes);
254*b1cdbd2cSJim Jagielski         XContentAccess contAcc = (XContentAccess)
255*b1cdbd2cSJim Jagielski             UnoRuntime.queryInterface(XContentAccess.class, statRes);
256*b1cdbd2cSJim Jagielski         XContent subContent = null;
257*b1cdbd2cSJim Jagielski         try {
258*b1cdbd2cSJim Jagielski             statRes.first();
259*b1cdbd2cSJim Jagielski             while(!statRes.isAfterLast()) {
260*b1cdbd2cSJim Jagielski                 if ( subName.equals(row.getString(1)) ) {
261*b1cdbd2cSJim Jagielski                     subContent = contAcc.queryContent();
262*b1cdbd2cSJim Jagielski                 }
263*b1cdbd2cSJim Jagielski                 statRes.next();
264*b1cdbd2cSJim Jagielski             }
265*b1cdbd2cSJim Jagielski         } catch(com.sun.star.sdbc.SQLException e) {
266*b1cdbd2cSJim Jagielski             log.println("Exception occured:" + e);
267*b1cdbd2cSJim Jagielski         }
268*b1cdbd2cSJim Jagielski 
269*b1cdbd2cSJim Jagielski         return subContent;
270*b1cdbd2cSJim Jagielski     }
271*b1cdbd2cSJim Jagielski }
272*b1cdbd2cSJim Jagielski 
273