1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 package mod._sc;
24 
25 import com.sun.star.beans.XPropertySet;
26 import com.sun.star.container.XIndexAccess;
27 import com.sun.star.container.XNamed;
28 import com.sun.star.lang.XComponent;
29 import com.sun.star.lang.XMultiServiceFactory;
30 import com.sun.star.sheet.DataPilotFieldOrientation;
31 import com.sun.star.sheet.XDataPilotDescriptor;
32 import com.sun.star.sheet.XDataPilotField;
33 import com.sun.star.sheet.XDataPilotTables;
34 import com.sun.star.sheet.XDataPilotTablesSupplier;
35 import com.sun.star.sheet.XSpreadsheet;
36 import com.sun.star.sheet.XSpreadsheetDocument;
37 import com.sun.star.sheet.XSpreadsheets;
38 import com.sun.star.table.CellAddress;
39 import com.sun.star.table.CellRangeAddress;
40 import com.sun.star.uno.AnyConverter;
41 import com.sun.star.uno.Type;
42 import com.sun.star.uno.UnoRuntime;
43 import com.sun.star.uno.XInterface;
44 
45 import java.io.PrintWriter;
46 
47 import lib.StatusException;
48 import lib.TestCase;
49 import lib.TestEnvironment;
50 import lib.TestParameters;
51 
52 import util.SOfficeFactory;
53 
54 
55 /**
56 * Test for object which is represented by service
57 * <code>com.sun.star.sheet.DataPilotField</code>. <p>
58 * Object implements the following interfaces :
59 * <ul>
60 *  <li> <code>com::sun::star::container::XNamed</code></li>
61 *  <li> <code>com::sun::star::sheet::DataPilotField</code></li>
62 *  <li> <code>com::sun::star::beans::XPropertySet</code></li>
63 * </ul>
64 * @see com.sun.star.sheet.DataPilotField
65 * @see com.sun.star.container.XNamed
66 * @see com.sun.star.sheet.DataPilotField
67 * @see com.sun.star.beans.XPropertySet
68 * @see ifc.container._XNamed
69 * @see ifc.sheet._DataPilotField
70 * @see ifc.beans._XPropertySet
71 */
72 public class ScDataPilotItemsObj extends TestCase {
73     static XSpreadsheetDocument xSheetDoc = null;
74 
75     /**
76      * A field is filled some values. This integer determines the size of the
77      * field in x and y direction.
78      */
79     private int mMaxFieldIndex = 6;
80 
81     /**
82     * Creates Spreadsheet document.
83     */
84     protected void initialize(TestParameters tParam, PrintWriter log) {
85         SOfficeFactory SOF = SOfficeFactory.getFactory(
86                                      (XMultiServiceFactory) tParam.getMSF());
87 
88         try {
89             log.println("creating a Spreadsheet document");
90             xSheetDoc = SOF.createCalcDoc(null);
91         } catch (com.sun.star.uno.Exception e) {
92             // Some exception occures.FAILED
93             e.printStackTrace(log);
94             throw new StatusException("Couldn't create document", e);
95         }
96     }
97 
98     /**
99     * Disposes Spreadsheet document.
100     */
101     protected void cleanup(TestParameters tParam, PrintWriter log) {
102         log.println("    disposing xSheetDoc ");
103 
104         XComponent oComp = (XComponent) UnoRuntime.queryInterface(
105                                    XComponent.class, xSheetDoc);
106         util.DesktopTools.closeDoc(oComp);
107     }
108 
109     /**
110     * Creating a Testenvironment for the interfaces to be tested.
111     * Retrieves a collection of spreadsheets from a document
112     * and takes one of them. Fills some table in the spreadsheet.
113     * Obtains the collection of data pilot tables using the interface
114     * <code>XDataPilotTablesSupplier</code>. Creates a data pilot descriptor
115     * for the filled table and inserts new data pilot table with this descriptor
116     * to the collection. Obtains the collection of all the data pilot fields
117     * using the interface <code>XDataPilotDescriptor</code>. Retrieves from
118     * the collection the data pilot field with index 0. This data pilot field
119     * is the instance of the service <code>com.sun.star.sheet.DataPilotField</code>.
120     * @see com.sun.star.sheet.DataPilotField
121     * @see com.sun.star.sheet.XDataPilotTablesSupplier
122     * @see com.sun.star.sheet.XDataPilotDescriptor
123     */
124     protected synchronized TestEnvironment createTestEnvironment(TestParameters Param,
125                                                                  PrintWriter log) {
126         XInterface oObj = null;
127 
128 
129         // creation of testobject here
130         // first we write what we are intend to do to log file
131         log.println("Creating a test environment");
132 
133         // the cell range
134         CellRangeAddress sCellRangeAdress = new CellRangeAddress();
135         sCellRangeAdress.Sheet = 0;
136         sCellRangeAdress.StartColumn = 1;
137         sCellRangeAdress.StartRow = 0;
138         sCellRangeAdress.EndColumn = mMaxFieldIndex - 1;
139         sCellRangeAdress.EndRow = mMaxFieldIndex - 1;
140 
141         // position of the data pilot table
142         CellAddress sCellAdress = new CellAddress();
143         sCellAdress.Sheet = 0;
144         sCellAdress.Column = 7;
145         sCellAdress.Row = 8;
146 
147         log.println("Getting a sheet");
148 
149         XSpreadsheets xSpreadsheets = (XSpreadsheets) xSheetDoc.getSheets();
150         XSpreadsheet oSheet = null;
151         XSpreadsheet oSheet2 = null;
152         XIndexAccess oIndexAccess = (XIndexAccess) UnoRuntime.queryInterface(
153                                             XIndexAccess.class, xSpreadsheets);
154 
155         try {
156             oSheet = (XSpreadsheet) AnyConverter.toObject(
157                              new Type(XSpreadsheet.class),
158                              oIndexAccess.getByIndex(0));
159             oSheet2 = (XSpreadsheet) AnyConverter.toObject(
160                               new Type(XSpreadsheet.class),
161                               oIndexAccess.getByIndex(1));
162         } catch (com.sun.star.lang.WrappedTargetException e) {
163             e.printStackTrace();
164             throw new StatusException("Couldn't get a spreadsheet", e);
165         } catch (com.sun.star.lang.IndexOutOfBoundsException e) {
166             e.printStackTrace();
167             throw new StatusException("Couldn't get a spreadsheet", e);
168         } catch (com.sun.star.lang.IllegalArgumentException e) {
169             e.printStackTrace();
170             throw new StatusException("Couldn't get a spreadsheet", e);
171         }
172 
173         try {
174             log.println("Filling a table");
175 
176             for (int i = 1; i < mMaxFieldIndex; i++) {
177                 oSheet.getCellByPosition(i, 0).setFormula("Col" + i);
178                 oSheet.getCellByPosition(0, i).setFormula("Row" + i);
179                 oSheet2.getCellByPosition(i, 0).setFormula("Col" + i);
180                 oSheet2.getCellByPosition(0, i).setFormula("Row" + i);
181             }
182 
183             for (int i = 1; i < mMaxFieldIndex; i++)
184                 for (int j = 1; j < mMaxFieldIndex; j++) {
185                     oSheet.getCellByPosition(i, j).setValue(i * (j + 1));
186                     oSheet2.getCellByPosition(i, j).setValue(i * (j + 2));
187                 }
188         } catch (com.sun.star.lang.IndexOutOfBoundsException e) {
189             e.printStackTrace();
190             throw new StatusException("Couldn't fill some cells", e);
191         }
192 
193         // change a value of a cell and check the change in the data pilot
194         // (for the XDataPilotTable.refresh() test)
195         Object oChangeCell = null;
196         Object oCheckCell = null;
197         Integer aChangeValue = null;
198 
199         try {
200             // cell of data
201             oChangeCell = oSheet.getCellByPosition(1, 5);
202 
203             int x = sCellAdress.Column;
204             int y = sCellAdress.Row + 3;
205 
206 
207             // cell of the data pilot output
208             oCheckCell = oSheet.getCellByPosition(x, y);
209             aChangeValue = new Integer(27);
210         } catch (com.sun.star.lang.IndexOutOfBoundsException e) {
211             e.printStackTrace();
212             throw new StatusException("Couldn't get cells for changeing.", e);
213         }
214 
215 
216         // create the test objects
217         log.println("Getting test objects");
218 
219         XDataPilotTablesSupplier DPTS = (XDataPilotTablesSupplier) UnoRuntime.queryInterface(
220                                                 XDataPilotTablesSupplier.class,
221                                                 oSheet);
222         XDataPilotTables DPT = DPTS.getDataPilotTables();
223         XDataPilotDescriptor DPDsc = DPT.createDataPilotDescriptor();
224         DPDsc.setSourceRange(sCellRangeAdress);
225 
226         XPropertySet fieldPropSet = null;
227 
228         try {
229             Object oDataPilotField = DPDsc.getDataPilotFields().getByIndex(0);
230             fieldPropSet = (XPropertySet) UnoRuntime.queryInterface(
231                                    XPropertySet.class, oDataPilotField);
232         } catch (com.sun.star.lang.WrappedTargetException e) {
233             e.printStackTrace();
234             throw new StatusException("Couldn't create a test environment", e);
235         } catch (com.sun.star.lang.IndexOutOfBoundsException e) {
236             e.printStackTrace();
237             throw new StatusException("Couldn't create a test environment", e);
238         }
239 
240         try {
241             fieldPropSet.setPropertyValue("Function",
242                                           com.sun.star.sheet.GeneralFunction.SUM);
243             fieldPropSet.setPropertyValue("Orientation",
244                                           com.sun.star.sheet.DataPilotFieldOrientation.DATA);
245         } catch (com.sun.star.lang.WrappedTargetException e) {
246             e.printStackTrace();
247             throw new StatusException("Couldn't create a test environment", e);
248         } catch (com.sun.star.lang.IllegalArgumentException e) {
249             e.printStackTrace();
250             throw new StatusException("Couldn't create a test environment", e);
251         } catch (com.sun.star.beans.PropertyVetoException e) {
252             e.printStackTrace();
253             throw new StatusException("Couldn't create a test environment", e);
254         } catch (com.sun.star.beans.UnknownPropertyException e) {
255             e.printStackTrace();
256             throw new StatusException("Couldn't create a test environment", e);
257         }
258 
259         log.println("Insert the DataPilotTable");
260 
261         if (DPT.hasByName("DataPilotTable")) {
262             DPT.removeByName("DataPilotTable");
263         }
264 
265         XIndexAccess IA = DPDsc.getDataPilotFields();
266         getSRange(IA);
267 
268         DPT.insertNewByName("DataPilotTable", sCellAdress, DPDsc);
269 
270         try {
271             oObj = (XInterface) AnyConverter.toObject(
272                            new Type(XInterface.class), IA.getByIndex(0));
273         } catch (com.sun.star.lang.WrappedTargetException e) {
274             e.printStackTrace();
275             throw new StatusException("Couldn't get data pilot field", e);
276         } catch (com.sun.star.lang.IndexOutOfBoundsException e) {
277             e.printStackTrace();
278             throw new StatusException("Couldn't get data pilot field", e);
279         } catch (com.sun.star.lang.IllegalArgumentException e) {
280             e.printStackTrace();
281             throw new StatusException("Couldn't get data pilot field", e);
282         }
283 
284         log.println("Creating object - " +
285                     ((oObj == null) ? "FAILED" : "OK"));
286 
287         XDataPilotField xDataPilotField = (XDataPilotField) UnoRuntime.queryInterface(
288                                                   XDataPilotField.class, oObj);
289 
290         oObj = xDataPilotField.getItems();
291 
292         TestEnvironment tEnv = new TestEnvironment(oObj);
293 
294         log.println("Implementationname: " + util.utils.getImplName(oObj));
295 
296         // Other parameters required for interface tests
297         return tEnv;
298     }
299 
300     private void getSRange(XIndexAccess IA) {
301         int fieldsAmount = IA.getCount() + 1;
302 
303         String[] fieldsNames = new String[fieldsAmount];
304 
305         int i = -1;
306         int cnt = 0;
307 
308         while ((++i) < fieldsAmount) {
309             Object field;
310 
311             try {
312                 field = IA.getByIndex(i);
313             } catch (com.sun.star.lang.WrappedTargetException e) {
314                 e.printStackTrace(log);
315 
316                 return;
317             } catch (com.sun.star.lang.IndexOutOfBoundsException e) {
318                 e.printStackTrace(log);
319 
320                 return;
321             }
322 
323             XNamed named = (XNamed) UnoRuntime.queryInterface(XNamed.class,
324                                                               field);
325             String name = named.getName();
326 
327             log.println("**Field : '" + name + "' ... ");
328 
329             if (!name.equals("Data")) {
330                 fieldsNames[cnt] = name;
331 
332                 XPropertySet props = (XPropertySet) UnoRuntime.queryInterface(
333                                              XPropertySet.class, field);
334 
335                 try {
336                     switch (cnt % 5) {
337                     case 0:
338                         props.setPropertyValue("Orientation",
339                                                DataPilotFieldOrientation.COLUMN);
340                         log.println("  Column");
341 
342                         break;
343 
344                     case 1:
345                         props.setPropertyValue("Orientation",
346                                                DataPilotFieldOrientation.ROW);
347                         log.println("  Row");
348 
349                         break;
350 
351                     case 2:
352                         props.setPropertyValue("Orientation",
353                                                DataPilotFieldOrientation.DATA);
354                         log.println("  Data");
355 
356                         break;
357 
358                     case 3:
359                         props.setPropertyValue("Orientation",
360                                                DataPilotFieldOrientation.HIDDEN);
361                         log.println("  Hidden");
362 
363                         break;
364 
365                     case 4:
366                         props.setPropertyValue("Orientation",
367                                                DataPilotFieldOrientation.PAGE);
368                         log.println("  Page");
369 
370                         break;
371                     }
372                 } catch (com.sun.star.lang.WrappedTargetException e) {
373                     e.printStackTrace(log);
374 
375                     return;
376                 } catch (com.sun.star.lang.IllegalArgumentException e) {
377                     e.printStackTrace(log);
378 
379                     return;
380                 } catch (com.sun.star.beans.PropertyVetoException e) {
381                     e.printStackTrace(log);
382 
383                     return;
384                 } catch (com.sun.star.beans.UnknownPropertyException e) {
385                     e.printStackTrace(log);
386 
387                     return;
388                 }
389 
390                 if ((++cnt) > 4) {
391                     break;
392                 }
393             } else {
394                 return;
395             }
396         }
397     }
398 }
399