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 mod._sc; 25*b1cdbd2cSJim Jagielski 26*b1cdbd2cSJim Jagielski import com.sun.star.container.NoSuchElementException; 27*b1cdbd2cSJim Jagielski import com.sun.star.container.XNameContainer; 28*b1cdbd2cSJim Jagielski import com.sun.star.drawing.XDrawPage; 29*b1cdbd2cSJim Jagielski import com.sun.star.drawing.XDrawPages; 30*b1cdbd2cSJim Jagielski import com.sun.star.drawing.XDrawPagesSupplier; 31*b1cdbd2cSJim Jagielski import com.sun.star.drawing.XShape; 32*b1cdbd2cSJim Jagielski import com.sun.star.form.XForm; 33*b1cdbd2cSJim Jagielski import com.sun.star.lang.WrappedTargetException; 34*b1cdbd2cSJim Jagielski import java.io.PrintWriter; 35*b1cdbd2cSJim Jagielski import java.util.Comparator; 36*b1cdbd2cSJim Jagielski 37*b1cdbd2cSJim Jagielski import lib.StatusException; 38*b1cdbd2cSJim Jagielski import lib.TestCase; 39*b1cdbd2cSJim Jagielski import lib.TestEnvironment; 40*b1cdbd2cSJim Jagielski import lib.TestParameters; 41*b1cdbd2cSJim Jagielski import util.FormTools; 42*b1cdbd2cSJim Jagielski import util.SOfficeFactory; 43*b1cdbd2cSJim Jagielski import util.ValueComparer; 44*b1cdbd2cSJim Jagielski 45*b1cdbd2cSJim Jagielski import com.sun.star.container.XIndexAccess; 46*b1cdbd2cSJim Jagielski import com.sun.star.frame.XModel; 47*b1cdbd2cSJim Jagielski import com.sun.star.lang.XComponent; 48*b1cdbd2cSJim Jagielski import com.sun.star.lang.XMultiServiceFactory; 49*b1cdbd2cSJim Jagielski import com.sun.star.sheet.XCellRangeAddressable; 50*b1cdbd2cSJim Jagielski import com.sun.star.sheet.XSpreadsheet; 51*b1cdbd2cSJim Jagielski import com.sun.star.sheet.XSpreadsheetDocument; 52*b1cdbd2cSJim Jagielski import com.sun.star.sheet.XSpreadsheets; 53*b1cdbd2cSJim Jagielski import com.sun.star.table.CellRangeAddress; 54*b1cdbd2cSJim Jagielski import com.sun.star.table.XCell; 55*b1cdbd2cSJim Jagielski import com.sun.star.uno.AnyConverter; 56*b1cdbd2cSJim Jagielski import com.sun.star.uno.Type; 57*b1cdbd2cSJim Jagielski import com.sun.star.uno.UnoRuntime; 58*b1cdbd2cSJim Jagielski import com.sun.star.uno.XInterface; 59*b1cdbd2cSJim Jagielski 60*b1cdbd2cSJim Jagielski /** 61*b1cdbd2cSJim Jagielski * Test for object which is represented by service 62*b1cdbd2cSJim Jagielski * <code>com.sun.star.sheet.SpreadsheetView</code>. <p> 63*b1cdbd2cSJim Jagielski * Object implements the following interfaces : 64*b1cdbd2cSJim Jagielski * <ul> 65*b1cdbd2cSJim Jagielski * <li> <code>com::sun::star::sheet::XViewSplitable</code></li> 66*b1cdbd2cSJim Jagielski * <li> <code>com::sun::star::sheet::XViewFreezable</code></li> 67*b1cdbd2cSJim Jagielski * <li> <code>com::sun::star::sheet::SpreadsheetViewSettings</code></li> 68*b1cdbd2cSJim Jagielski * <li> <code>com::sun::star::beans::XPropertySet</code></li> 69*b1cdbd2cSJim Jagielski * <li> <code>com::sun::star::container::XIndexAccess</code></li> 70*b1cdbd2cSJim Jagielski * <li> <code>com::sun::star::container::XElementAccess</code></li> 71*b1cdbd2cSJim Jagielski * <li> <code>com::sun::star::sheet::XSpreadsheetView</code></li> 72*b1cdbd2cSJim Jagielski * <li> <code>com::sun::star::view::XSelectionSupplier</code></li> 73*b1cdbd2cSJim Jagielski * </ul> 74*b1cdbd2cSJim Jagielski * @see com.sun.star.sheet.XViewSplitable 75*b1cdbd2cSJim Jagielski * @see com.sun.star.sheet.XViewFreezable 76*b1cdbd2cSJim Jagielski * @see com.sun.star.sheet.SpreadsheetViewSettings 77*b1cdbd2cSJim Jagielski * @see com.sun.star.beans.XPropertySet 78*b1cdbd2cSJim Jagielski * @see com.sun.star.container.XIndexAccess 79*b1cdbd2cSJim Jagielski * @see com.sun.star.container.XElementAccess 80*b1cdbd2cSJim Jagielski * @see com.sun.star.sheet.XSpreadsheetView 81*b1cdbd2cSJim Jagielski * @see com.sun.star.view.XSelectionSupplier 82*b1cdbd2cSJim Jagielski * @see ifc.sheet._XViewSplitable 83*b1cdbd2cSJim Jagielski * @see ifc.sheet._XViewFreezable 84*b1cdbd2cSJim Jagielski * @see ifc.sheet._SpreadsheetViewSettings 85*b1cdbd2cSJim Jagielski * @see ifc.beans._XPropertySet 86*b1cdbd2cSJim Jagielski * @see ifc.container._XIndexAccess 87*b1cdbd2cSJim Jagielski * @see ifc.container._XElementAccess 88*b1cdbd2cSJim Jagielski * @see ifc.sheet._XSpreadsheetView 89*b1cdbd2cSJim Jagielski * @see ifc.view._XSelectionSupplier 90*b1cdbd2cSJim Jagielski */ 91*b1cdbd2cSJim Jagielski public class ScTabViewObj extends TestCase { 92*b1cdbd2cSJim Jagielski public static XSpreadsheetDocument xSpreadsheetDoc; 93*b1cdbd2cSJim Jagielski public static XSpreadsheetDocument xSpreadsheetDoc2; 94*b1cdbd2cSJim Jagielski 95*b1cdbd2cSJim Jagielski /** 96*b1cdbd2cSJim Jagielski * Creates Spreadsheet document. 97*b1cdbd2cSJim Jagielski */ initialize( TestParameters Param, PrintWriter log )98*b1cdbd2cSJim Jagielski public void initialize( TestParameters Param, PrintWriter log ) { 99*b1cdbd2cSJim Jagielski // get a soffice factory object 100*b1cdbd2cSJim Jagielski 101*b1cdbd2cSJim Jagielski SOfficeFactory SOF = SOfficeFactory.getFactory( (XMultiServiceFactory)Param.getMSF()); 102*b1cdbd2cSJim Jagielski 103*b1cdbd2cSJim Jagielski try { 104*b1cdbd2cSJim Jagielski log.println("creating two spreadsheet documents"); 105*b1cdbd2cSJim Jagielski xSpreadsheetDoc = SOF.createCalcDoc(null); 106*b1cdbd2cSJim Jagielski try { 107*b1cdbd2cSJim Jagielski Thread.sleep(1000); 108*b1cdbd2cSJim Jagielski } catch (java.lang.InterruptedException e) {} 109*b1cdbd2cSJim Jagielski xSpreadsheetDoc2 = SOF.createCalcDoc(null); 110*b1cdbd2cSJim Jagielski } catch (com.sun.star.uno.Exception e) { 111*b1cdbd2cSJim Jagielski e.printStackTrace( log ); 112*b1cdbd2cSJim Jagielski throw new StatusException( "Couldn't create document ", e ); 113*b1cdbd2cSJim Jagielski } 114*b1cdbd2cSJim Jagielski } 115*b1cdbd2cSJim Jagielski 116*b1cdbd2cSJim Jagielski /** 117*b1cdbd2cSJim Jagielski * Disposes Spreadsheet document. 118*b1cdbd2cSJim Jagielski */ cleanup( TestParameters tParam, PrintWriter log )119*b1cdbd2cSJim Jagielski protected void cleanup( TestParameters tParam, PrintWriter log ) { 120*b1cdbd2cSJim Jagielski log.println( " disposing xSheetDoc " ); 121*b1cdbd2cSJim Jagielski XComponent oComp = (XComponent) 122*b1cdbd2cSJim Jagielski UnoRuntime.queryInterface(XComponent.class, xSpreadsheetDoc) ; 123*b1cdbd2cSJim Jagielski util.DesktopTools.closeDoc(oComp); 124*b1cdbd2cSJim Jagielski XComponent oComp2 = (XComponent) 125*b1cdbd2cSJim Jagielski UnoRuntime.queryInterface(XComponent.class, xSpreadsheetDoc2) ; 126*b1cdbd2cSJim Jagielski util.DesktopTools.closeDoc(oComp2); 127*b1cdbd2cSJim Jagielski } 128*b1cdbd2cSJim Jagielski 129*b1cdbd2cSJim Jagielski /** 130*b1cdbd2cSJim Jagielski * Creating a Testenvironment for the interfaces to be tested. 131*b1cdbd2cSJim Jagielski * Retieves the current controller of the spreadsheet document using the 132*b1cdbd2cSJim Jagielski * interface <code>XModel</code>. The controller is the instance of the 133*b1cdbd2cSJim Jagielski * service <code>com.sun.star.sheet.SpreadsheetView</code>. Retrieves 134*b1cdbd2cSJim Jagielski * a collection of spreadsheets from the document and takes one of them. 135*b1cdbd2cSJim Jagielski * Fills two cells in the spreadsheet. 136*b1cdbd2cSJim Jagielski * Object relations created : 137*b1cdbd2cSJim Jagielski * <ul> 138*b1cdbd2cSJim Jagielski * <li> <code>'Sheet'</code> for 139*b1cdbd2cSJim Jagielski * {@link ifc.sheet._XSpreadsheetView}(the retrieved spreadsheet)</li> 140*b1cdbd2cSJim Jagielski * </ul> 141*b1cdbd2cSJim Jagielski * @see com.sun.star.frame.XModel 142*b1cdbd2cSJim Jagielski * @see com.sun.star.sheet.SpreadsheetView 143*b1cdbd2cSJim Jagielski */ createTestEnvironment(TestParameters Param, PrintWriter log)144*b1cdbd2cSJim Jagielski protected synchronized TestEnvironment createTestEnvironment(TestParameters Param, PrintWriter log) { 145*b1cdbd2cSJim Jagielski XDrawPage oDrawPage = null; 146*b1cdbd2cSJim Jagielski 147*b1cdbd2cSJim Jagielski XModel aModel = (XModel) 148*b1cdbd2cSJim Jagielski UnoRuntime.queryInterface(XModel.class, xSpreadsheetDoc); 149*b1cdbd2cSJim Jagielski 150*b1cdbd2cSJim Jagielski XModel aSecondModel = (XModel) 151*b1cdbd2cSJim Jagielski UnoRuntime.queryInterface(XModel.class, xSpreadsheetDoc2); 152*b1cdbd2cSJim Jagielski 153*b1cdbd2cSJim Jagielski XInterface oObj = aModel.getCurrentController(); 154*b1cdbd2cSJim Jagielski 155*b1cdbd2cSJim Jagielski log.println("getting sheets"); 156*b1cdbd2cSJim Jagielski XSpreadsheets xSpreadsheets = (XSpreadsheets)xSpreadsheetDoc.getSheets(); 157*b1cdbd2cSJim Jagielski 158*b1cdbd2cSJim Jagielski log.println("getting a sheet"); 159*b1cdbd2cSJim Jagielski XSpreadsheet oSheet = null; 160*b1cdbd2cSJim Jagielski XIndexAccess oIndexAccess = (XIndexAccess) 161*b1cdbd2cSJim Jagielski UnoRuntime.queryInterface(XIndexAccess.class, xSpreadsheets); 162*b1cdbd2cSJim Jagielski try { 163*b1cdbd2cSJim Jagielski oSheet = (XSpreadsheet) AnyConverter.toObject( 164*b1cdbd2cSJim Jagielski new Type(XSpreadsheet.class), oIndexAccess.getByIndex(1)); 165*b1cdbd2cSJim Jagielski } catch (com.sun.star.lang.WrappedTargetException e) { 166*b1cdbd2cSJim Jagielski e.printStackTrace(log); 167*b1cdbd2cSJim Jagielski throw new StatusException( "Couldn't get a spreadsheet", e); 168*b1cdbd2cSJim Jagielski } catch (com.sun.star.lang.IndexOutOfBoundsException e) { 169*b1cdbd2cSJim Jagielski e.printStackTrace(log); 170*b1cdbd2cSJim Jagielski throw new StatusException( "Couldn't get a spreadsheet", e); 171*b1cdbd2cSJim Jagielski } catch (com.sun.star.lang.IllegalArgumentException e) { 172*b1cdbd2cSJim Jagielski e.printStackTrace(log); 173*b1cdbd2cSJim Jagielski throw new StatusException( "Couldn't get a spreadsheet", e); 174*b1cdbd2cSJim Jagielski } 175*b1cdbd2cSJim Jagielski 176*b1cdbd2cSJim Jagielski TestEnvironment tEnv = new TestEnvironment(oObj); 177*b1cdbd2cSJim Jagielski 178*b1cdbd2cSJim Jagielski tEnv.addObjRelation("XDispatchProvider.URL", ".uno:Copy") ; 179*b1cdbd2cSJim Jagielski 180*b1cdbd2cSJim Jagielski log.println("adding 'Sheet' as ObjRelation"); 181*b1cdbd2cSJim Jagielski tEnv.addObjRelation("Sheet", oSheet); 182*b1cdbd2cSJim Jagielski tEnv.addObjRelation("Frame",aModel.getCurrentController().getFrame()); 183*b1cdbd2cSJim Jagielski tEnv.addObjRelation("SecondModel",aSecondModel); 184*b1cdbd2cSJim Jagielski tEnv.addObjRelation("FirstModel",aModel); 185*b1cdbd2cSJim Jagielski 186*b1cdbd2cSJim Jagielski //Relation for XControlAccess 187*b1cdbd2cSJim Jagielski tEnv.addObjRelation("DOCUMENT", UnoRuntime.queryInterface(XComponent.class,xSpreadsheetDoc)); 188*b1cdbd2cSJim Jagielski tEnv.addObjRelation("XControlAccess.isSheet", Boolean.TRUE); 189*b1cdbd2cSJim Jagielski //Relations for XSelectionSupplier 190*b1cdbd2cSJim Jagielski XCell cell_1 = null; 191*b1cdbd2cSJim Jagielski XCell cell_2 = null; 192*b1cdbd2cSJim Jagielski Object cellRange = null; 193*b1cdbd2cSJim Jagielski try { 194*b1cdbd2cSJim Jagielski cellRange = (Object)oSheet.getCellRangeByPosition(0, 0, 3, 3); 195*b1cdbd2cSJim Jagielski cell_1 = oSheet.getCellByPosition(5,5); 196*b1cdbd2cSJim Jagielski cell_2 = oSheet.getCellByPosition(7,7); 197*b1cdbd2cSJim Jagielski cell_2.setValue(17.5); 198*b1cdbd2cSJim Jagielski cell_1.setValue(5.5); 199*b1cdbd2cSJim Jagielski } catch (com.sun.star.lang.IndexOutOfBoundsException e) { 200*b1cdbd2cSJim Jagielski e.printStackTrace(log); 201*b1cdbd2cSJim Jagielski throw new StatusException("Couldn't get some cell", e); 202*b1cdbd2cSJim Jagielski } 203*b1cdbd2cSJim Jagielski 204*b1cdbd2cSJim Jagielski Object[] selections = {oSheet, cellRange, cell_1, cell_2}; 205*b1cdbd2cSJim Jagielski tEnv.addObjRelation("Selections", selections); 206*b1cdbd2cSJim Jagielski 207*b1cdbd2cSJim Jagielski tEnv.addObjRelation("Comparer", new Comparator() { 208*b1cdbd2cSJim Jagielski public int compare(Object o1, Object o2) { 209*b1cdbd2cSJim Jagielski XCellRangeAddressable adr1 = (XCellRangeAddressable) 210*b1cdbd2cSJim Jagielski UnoRuntime.queryInterface(XCellRangeAddressable.class, o1); 211*b1cdbd2cSJim Jagielski XCellRangeAddressable adr2 = (XCellRangeAddressable) 212*b1cdbd2cSJim Jagielski UnoRuntime.queryInterface(XCellRangeAddressable.class, o2); 213*b1cdbd2cSJim Jagielski if (adr1 == null || adr2 == null) return -1; 214*b1cdbd2cSJim Jagielski CellRangeAddress range1 = adr1.getRangeAddress(); 215*b1cdbd2cSJim Jagielski CellRangeAddress range2 = adr2.getRangeAddress(); 216*b1cdbd2cSJim Jagielski return ValueComparer.equalValue(range1, range2) ? 0 : 1 ; 217*b1cdbd2cSJim Jagielski } 218*b1cdbd2cSJim Jagielski public boolean equals(Object obj) { 219*b1cdbd2cSJim Jagielski return compare(this, obj) == 0; 220*b1cdbd2cSJim Jagielski } }); 221*b1cdbd2cSJim Jagielski 222*b1cdbd2cSJim Jagielski tEnv.addObjRelation("XUserInputInterception.XModel", aModel); 223*b1cdbd2cSJim Jagielski 224*b1cdbd2cSJim Jagielski // XForm for com.sun.star.view.XFormLayerAccess 225*b1cdbd2cSJim Jagielski 226*b1cdbd2cSJim Jagielski XForm myForm = null; 227*b1cdbd2cSJim Jagielski String kindOfControl="CommandButton"; 228*b1cdbd2cSJim Jagielski XShape aShape = null; 229*b1cdbd2cSJim Jagielski try{ 230*b1cdbd2cSJim Jagielski log.println("adding contol shape '" + kindOfControl + "'"); 231*b1cdbd2cSJim Jagielski XComponent oComp = (XComponent) UnoRuntime.queryInterface(XComponent.class, xSpreadsheetDoc) ; 232*b1cdbd2cSJim Jagielski 233*b1cdbd2cSJim Jagielski aShape = FormTools.createControlShape(oComp, 3000, 4500, 15000, 10000, kindOfControl); 234*b1cdbd2cSJim Jagielski 235*b1cdbd2cSJim Jagielski } catch (Exception e){ 236*b1cdbd2cSJim Jagielski e.printStackTrace(log); 237*b1cdbd2cSJim Jagielski throw new StatusException("Couldn't create following control shape : '" + 238*b1cdbd2cSJim Jagielski kindOfControl + "': ", e); 239*b1cdbd2cSJim Jagielski } 240*b1cdbd2cSJim Jagielski 241*b1cdbd2cSJim Jagielski log.println("adding relation for com.sun.star.view.XFormLayerAccess: XForm"); 242*b1cdbd2cSJim Jagielski try { 243*b1cdbd2cSJim Jagielski log.println( "getting Drawpages" ); 244*b1cdbd2cSJim Jagielski XDrawPagesSupplier oDPS = (XDrawPagesSupplier) 245*b1cdbd2cSJim Jagielski UnoRuntime.queryInterface(XDrawPagesSupplier.class,xSpreadsheetDoc); 246*b1cdbd2cSJim Jagielski XDrawPages oDP = (XDrawPages) oDPS.getDrawPages(); 247*b1cdbd2cSJim Jagielski oDP.insertNewByIndex(1); 248*b1cdbd2cSJim Jagielski oDP.insertNewByIndex(2); 249*b1cdbd2cSJim Jagielski oDrawPage = (XDrawPage) AnyConverter.toObject( 250*b1cdbd2cSJim Jagielski new Type(XDrawPage.class),oDP.getByIndex(0)); 251*b1cdbd2cSJim Jagielski if (oDrawPage == null) 252*b1cdbd2cSJim Jagielski log.println("ERROR: could not get DrawPage: null"); 253*b1cdbd2cSJim Jagielski 254*b1cdbd2cSJim Jagielski oDrawPage.add(aShape); 255*b1cdbd2cSJim Jagielski log.println("getting XForm"); 256*b1cdbd2cSJim Jagielski XNameContainer xForm = FormTools.getForms(oDrawPage); 257*b1cdbd2cSJim Jagielski try { 258*b1cdbd2cSJim Jagielski myForm = (XForm) AnyConverter.toObject(new Type(XForm.class),xForm.getByName("Standard")); 259*b1cdbd2cSJim Jagielski } catch (WrappedTargetException ex) { 260*b1cdbd2cSJim Jagielski log.println("ERROR: could not XFormm 'Standard': " + ex.toString()); 261*b1cdbd2cSJim Jagielski } catch (com.sun.star.lang.IllegalArgumentException ex) { 262*b1cdbd2cSJim Jagielski log.println("ERROR: could not XFormm 'Standard': " + ex.toString()); 263*b1cdbd2cSJim Jagielski } catch (NoSuchElementException ex) { 264*b1cdbd2cSJim Jagielski log.println("ERROR: could not XFormm 'Standard': " + ex.toString()); 265*b1cdbd2cSJim Jagielski } 266*b1cdbd2cSJim Jagielski if (myForm == null) 267*b1cdbd2cSJim Jagielski log.println("ERROR: could not get XForm: null"); 268*b1cdbd2cSJim Jagielski tEnv.addObjRelation("XFormLayerAccess.XForm", myForm); 269*b1cdbd2cSJim Jagielski } catch (com.sun.star.lang.IndexOutOfBoundsException ex) { 270*b1cdbd2cSJim Jagielski log.println("ERROR: could not add ObjectRelation 'XFormLayerAccess.XForm': " + ex.toString()); 271*b1cdbd2cSJim Jagielski } catch (WrappedTargetException ex) { 272*b1cdbd2cSJim Jagielski log.println("ERROR: could not add ObjectRelation 'XFormLayerAccess.XForm': " + ex.toString()); 273*b1cdbd2cSJim Jagielski } catch (com.sun.star.lang.IllegalArgumentException ex) { 274*b1cdbd2cSJim Jagielski log.println("ERROR: could not add ObjectRelation 'XFormLayerAccess.XForm': " + ex.toString()); 275*b1cdbd2cSJim Jagielski } 276*b1cdbd2cSJim Jagielski return tEnv; 277*b1cdbd2cSJim Jagielski } 278*b1cdbd2cSJim Jagielski 279*b1cdbd2cSJim Jagielski } // finish class ScTabViewObj 280