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.XNameAccess; 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.DataPilotFieldGroupInfo; 32 import com.sun.star.sheet.XDataPilotDescriptor; 33 import com.sun.star.sheet.XDataPilotFieldGrouping; 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 public class ScDataPilotFieldGroupItemObj extends TestCase 58 { 59 static XSpreadsheetDocument xSheetDoc = null; 60 61 /** 62 * A field is filled some values. This integer determines the size of the 63 * field in x and y direction. 64 */ 65 private int mMaxFieldIndex = 6; 66 67 /** 68 * Creates Spreadsheet document. 69 */ 70 protected void initialize (TestParameters tParam, PrintWriter log) 71 { 72 SOfficeFactory SOF = SOfficeFactory.getFactory ( 73 (XMultiServiceFactory) tParam.getMSF ()); 74 75 try 76 { 77 log.println ("creating a Spreadsheet document"); 78 xSheetDoc = SOF.createCalcDoc (null); 79 } 80 catch (com.sun.star.uno.Exception e) 81 { 82 // Some exception occures.FAILED 83 e.printStackTrace (log); 84 throw new StatusException ("Couldn't create document", e); 85 } 86 } 87 88 /** 89 * Disposes Spreadsheet document. 90 */ 91 protected void cleanup (TestParameters tParam, PrintWriter log) 92 { 93 log.println (" disposing xSheetDoc "); 94 95 XComponent oComp = (XComponent) UnoRuntime.queryInterface ( 96 XComponent.class, xSheetDoc); 97 util.DesktopTools.closeDoc (oComp); 98 } 99 100 protected synchronized TestEnvironment createTestEnvironment (TestParameters Param, 101 PrintWriter log) 102 { 103 XInterface oObj = null; 104 XInterface datapilotfield = null; 105 XInterface groups = null; 106 107 // creation of testobject here 108 // first we write what we are intend to do to log file 109 log.println ("Creating a test environment"); 110 111 // the cell range 112 CellRangeAddress sCellRangeAdress = new CellRangeAddress (); 113 sCellRangeAdress.Sheet = 0; 114 sCellRangeAdress.StartColumn = 1; 115 sCellRangeAdress.StartRow = 0; 116 sCellRangeAdress.EndColumn = mMaxFieldIndex - 1; 117 sCellRangeAdress.EndRow = mMaxFieldIndex - 1; 118 119 // position of the data pilot table 120 CellAddress sCellAdress = new CellAddress (); 121 sCellAdress.Sheet = 0; 122 sCellAdress.Column = 7; 123 sCellAdress.Row = 8; 124 125 log.println ("Getting a sheet"); 126 127 XSpreadsheets xSpreadsheets = (XSpreadsheets) xSheetDoc.getSheets (); 128 XSpreadsheet oSheet = null; 129 XSpreadsheet oSheet2 = null; 130 XIndexAccess oIndexAccess = (XIndexAccess) UnoRuntime.queryInterface ( 131 XIndexAccess.class, xSpreadsheets); 132 133 try 134 { 135 oSheet = (XSpreadsheet) AnyConverter.toObject ( 136 new Type (XSpreadsheet.class), 137 oIndexAccess.getByIndex (0)); 138 oSheet2 = (XSpreadsheet) AnyConverter.toObject ( 139 new Type (XSpreadsheet.class), 140 oIndexAccess.getByIndex (1)); 141 } 142 catch (com.sun.star.lang.WrappedTargetException e) 143 { 144 e.printStackTrace (); 145 throw new StatusException ("Couldn't get a spreadsheet", e); 146 } 147 catch (com.sun.star.lang.IndexOutOfBoundsException e) 148 { 149 e.printStackTrace (); 150 throw new StatusException ("Couldn't get a spreadsheet", e); 151 } 152 catch (com.sun.star.lang.IllegalArgumentException e) 153 { 154 e.printStackTrace (); 155 throw new StatusException ("Couldn't get a spreadsheet", e); 156 } 157 158 try 159 { 160 log.println ("Filling a table"); 161 162 for (int i = 1; i < mMaxFieldIndex; i++) 163 { 164 oSheet.getCellByPosition (i, 0).setFormula ("Col" + i); 165 oSheet.getCellByPosition (0, i).setFormula ("Row" + i); 166 oSheet2.getCellByPosition (i, 0).setFormula ("Col" + i); 167 oSheet2.getCellByPosition (0, i).setFormula ("Row" + i); 168 } 169 170 for (int i = 1; i < mMaxFieldIndex; i++) 171 { 172 for (int j = 1; j < mMaxFieldIndex; j++) 173 { 174 oSheet.getCellByPosition (i, j).setValue (i * (j + 1)); 175 oSheet2.getCellByPosition (i, j).setValue (i * (j + 2)); 176 } 177 } 178 179 oSheet.getCellByPosition (1, 1).setFormula ("aName"); 180 oSheet.getCellByPosition (1, 2).setFormula ("otherName"); 181 oSheet.getCellByPosition (1, 3).setFormula ("una"); 182 oSheet.getCellByPosition (1, 4).setFormula ("otherName"); 183 oSheet.getCellByPosition (1, 5).setFormula ("somethingelse"); 184 185 } 186 catch (com.sun.star.lang.IndexOutOfBoundsException e) 187 { 188 e.printStackTrace (); 189 throw new StatusException ("Couldn't fill some cells", e); 190 } 191 192 // change a value of a cell and check the change in the data pilot 193 // (for the XDataPilotTable.refresh() test) 194 Object oChangeCell = null; 195 Object oCheckCell = null; 196 Integer aChangeValue = null; 197 198 try 199 { 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 } 211 catch (com.sun.star.lang.IndexOutOfBoundsException e) 212 { 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 { 232 Object oDataPilotField = DPDsc.getDataPilotFields ().getByIndex (0); 233 fieldPropSet = (XPropertySet) UnoRuntime.queryInterface ( 234 XPropertySet.class, oDataPilotField); 235 fieldPropSet.setPropertyValue ("Orientation", 236 com.sun.star.sheet.DataPilotFieldOrientation.ROW); 237 oDataPilotField = DPDsc.getDataPilotFields ().getByIndex (1); 238 fieldPropSet = (XPropertySet) UnoRuntime.queryInterface ( 239 XPropertySet.class, oDataPilotField); 240 fieldPropSet.setPropertyValue ("Function", 241 com.sun.star.sheet.GeneralFunction.SUM); 242 fieldPropSet.setPropertyValue ("Orientation", 243 com.sun.star.sheet.DataPilotFieldOrientation.DATA); 244 oDataPilotField = DPDsc.getDataPilotFields ().getByIndex (2); 245 fieldPropSet = (XPropertySet) UnoRuntime.queryInterface ( 246 XPropertySet.class, oDataPilotField); 247 fieldPropSet.setPropertyValue ("Orientation", 248 com.sun.star.sheet.DataPilotFieldOrientation.COLUMN); 249 } 250 catch (com.sun.star.lang.WrappedTargetException e) 251 { 252 e.printStackTrace (); 253 throw new StatusException ("Couldn't create a test environment", e); 254 } 255 catch (com.sun.star.lang.IllegalArgumentException e) 256 { 257 e.printStackTrace (); 258 throw new StatusException ("Couldn't create a test environment", e); 259 } 260 catch (com.sun.star.beans.PropertyVetoException e) 261 { 262 e.printStackTrace (); 263 throw new StatusException ("Couldn't create a test environment", e); 264 } 265 catch (com.sun.star.beans.UnknownPropertyException e) 266 { 267 e.printStackTrace (); 268 throw new StatusException ("Couldn't create a test environment", e); 269 } 270 catch (com.sun.star.lang.IndexOutOfBoundsException e) 271 { 272 e.printStackTrace (); 273 throw new StatusException ("Couldn't create a test environment", e); 274 } 275 276 log.println ("Insert the DataPilotTable"); 277 278 if (DPT.hasByName ("DataPilotTable")) 279 { 280 DPT.removeByName ("DataPilotTable"); 281 } 282 283 DPT.insertNewByName ("DataPilotTable", sCellAdress, DPDsc); 284 XIndexAccess xIA = (XIndexAccess) UnoRuntime.queryInterface (XIndexAccess.class,DPTS.getDataPilotTables ()); 285 XIndexAccess IA = null; 286 try 287 { 288 XDataPilotDescriptor xDPT = (XDataPilotDescriptor) UnoRuntime.queryInterface (XDataPilotDescriptor.class,xIA.getByIndex (0)); 289 IA = xDPT.getRowFields (); 290 //getSRange(IA); 291 System.out.println ("COUNT: "+IA.getCount ()); 292 datapilotfield = (XInterface) AnyConverter.toObject ( 293 new Type (XInterface.class), IA.getByIndex (0)); 294 } 295 catch (com.sun.star.lang.WrappedTargetException e) 296 { 297 e.printStackTrace (); 298 throw new StatusException ("Couldn't get data pilot field", e); 299 } 300 catch (com.sun.star.lang.IndexOutOfBoundsException e) 301 { 302 e.printStackTrace (); 303 throw new StatusException ("Couldn't get data pilot field", e); 304 } 305 catch (com.sun.star.lang.IllegalArgumentException e) 306 { 307 e.printStackTrace (); 308 throw new StatusException ("Couldn't get data pilot field", e); 309 } 310 311 try 312 { 313 XDataPilotFieldGrouping dpfg = (XDataPilotFieldGrouping) UnoRuntime.queryInterface (XDataPilotFieldGrouping.class, datapilotfield); 314 String[] elements = new String[]{"aName","otherName"}; 315 dpfg.createNameGroup (elements); 316 DataPilotFieldGroupInfo dpgi=null; 317 xIA = (XIndexAccess) UnoRuntime.queryInterface (XIndexAccess.class,DPTS.getDataPilotTables ()); 318 try 319 { 320 XDataPilotDescriptor xDPT = (XDataPilotDescriptor) UnoRuntime.queryInterface (XDataPilotDescriptor.class,xIA.getByIndex (0)); 321 IA = xDPT.getRowFields (); 322 } 323 catch (com.sun.star.lang.WrappedTargetException e) 324 { 325 e.printStackTrace (); 326 throw new StatusException ("Couldn't get data pilot field", e); 327 } 328 catch (com.sun.star.lang.IndexOutOfBoundsException e) 329 { 330 e.printStackTrace (); 331 throw new StatusException ("Couldn't get data pilot field", e); 332 } 333 for (int i=0;i<IA.getCount ();i++) 334 { 335 datapilotfield = (XInterface) AnyConverter.toObject ( 336 new Type (XInterface.class), IA.getByIndex (i)); 337 XPropertySet xPropertySet = (XPropertySet) UnoRuntime.queryInterface (XPropertySet.class, IA.getByIndex (i)); 338 if (((Boolean)xPropertySet.getPropertyValue ("IsGroupField")).booleanValue ()) 339 { 340 xPropertySet = (XPropertySet) UnoRuntime.queryInterface (XPropertySet.class, datapilotfield); 341 XNamed xNamed = (XNamed) UnoRuntime.queryInterface (XNamed.class, IA.getByIndex (i)); 342 System.out.println ("name: "+xNamed.getName ()); 343 dpgi = (DataPilotFieldGroupInfo) xPropertySet.getPropertyValue ("GroupInfo"); 344 } 345 } 346 groups = dpgi.Groups; 347 XIndexAccess groupAccess = (XIndexAccess) UnoRuntime.queryInterface(XIndexAccess.class, groups); 348 XNameAccess groupNames = (XNameAccess) UnoRuntime.queryInterface(XNameAccess.class, groupAccess.getByIndex(0)); 349 oObj = (XInterface) UnoRuntime.queryInterface(XInterface.class, groupNames.getByName("aName")); 350 } 351 catch (Exception e) 352 { 353 e.printStackTrace (); 354 } 355 356 log.println ("Creating object - " + 357 ((oObj == null) ? "FAILED" : "OK")); 358 359 TestEnvironment tEnv = new TestEnvironment (oObj); 360 361 log.println ("Implementationname: " + util.utils.getImplName (oObj)); 362 363 // Other parameters required for interface tests 364 return tEnv; 365 } 366 367 } 368