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