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 package fvt.uno.sc.data; 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski import static org.junit.Assert.*; 24*b1cdbd2cSJim Jagielski 25*b1cdbd2cSJim Jagielski import org.junit.After; 26*b1cdbd2cSJim Jagielski import org.junit.AfterClass; 27*b1cdbd2cSJim Jagielski import org.junit.Before; 28*b1cdbd2cSJim Jagielski import org.junit.BeforeClass; 29*b1cdbd2cSJim Jagielski import org.junit.Test; 30*b1cdbd2cSJim Jagielski import org.openoffice.test.common.Testspace; 31*b1cdbd2cSJim Jagielski import org.openoffice.test.uno.UnoApp; 32*b1cdbd2cSJim Jagielski import testlib.uno.SCUtil; 33*b1cdbd2cSJim Jagielski import com.sun.star.beans.XPropertySet; 34*b1cdbd2cSJim Jagielski import com.sun.star.lang.XComponent; 35*b1cdbd2cSJim Jagielski import com.sun.star.sheet.FilterOperator; 36*b1cdbd2cSJim Jagielski import com.sun.star.sheet.TableFilterField; 37*b1cdbd2cSJim Jagielski import com.sun.star.sheet.XCellAddressable; 38*b1cdbd2cSJim Jagielski import com.sun.star.sheet.XSheetFilterDescriptor; 39*b1cdbd2cSJim Jagielski import com.sun.star.sheet.XSheetFilterable; 40*b1cdbd2cSJim Jagielski import com.sun.star.sheet.XSpreadsheet; 41*b1cdbd2cSJim Jagielski import com.sun.star.sheet.XSpreadsheetDocument; 42*b1cdbd2cSJim Jagielski import com.sun.star.table.CellAddress; 43*b1cdbd2cSJim Jagielski import com.sun.star.table.XCell; 44*b1cdbd2cSJim Jagielski import com.sun.star.table.XCellRange; 45*b1cdbd2cSJim Jagielski import com.sun.star.table.XColumnRowRange; 46*b1cdbd2cSJim Jagielski import com.sun.star.table.XTableRows; 47*b1cdbd2cSJim Jagielski import com.sun.star.uno.UnoRuntime; 48*b1cdbd2cSJim Jagielski 49*b1cdbd2cSJim Jagielski 50*b1cdbd2cSJim Jagielski public class StandardFilterOption { 51*b1cdbd2cSJim Jagielski UnoApp unoApp = new UnoApp(); 52*b1cdbd2cSJim Jagielski XSpreadsheetDocument scDocument = null; 53*b1cdbd2cSJim Jagielski XComponent scComponent = null; 54*b1cdbd2cSJim Jagielski private String filename = "FilterTest.xls"; 55*b1cdbd2cSJim Jagielski 56*b1cdbd2cSJim Jagielski @Before setUpDocument()57*b1cdbd2cSJim Jagielski public void setUpDocument() throws Exception { 58*b1cdbd2cSJim Jagielski unoApp.start(); 59*b1cdbd2cSJim Jagielski } 60*b1cdbd2cSJim Jagielski 61*b1cdbd2cSJim Jagielski @After tearDownDocument()62*b1cdbd2cSJim Jagielski public void tearDownDocument() { 63*b1cdbd2cSJim Jagielski unoApp.close(); 64*b1cdbd2cSJim Jagielski unoApp.closeDocument(scComponent); 65*b1cdbd2cSJim Jagielski 66*b1cdbd2cSJim Jagielski } 67*b1cdbd2cSJim Jagielski 68*b1cdbd2cSJim Jagielski @BeforeClass setUpConnection()69*b1cdbd2cSJim Jagielski public static void setUpConnection() throws Exception { 70*b1cdbd2cSJim Jagielski 71*b1cdbd2cSJim Jagielski } 72*b1cdbd2cSJim Jagielski 73*b1cdbd2cSJim Jagielski @AfterClass tearDownConnection()74*b1cdbd2cSJim Jagielski public static void tearDownConnection() throws InterruptedException, Exception { 75*b1cdbd2cSJim Jagielski 76*b1cdbd2cSJim Jagielski } 77*b1cdbd2cSJim Jagielski 78*b1cdbd2cSJim Jagielski /** 79*b1cdbd2cSJim Jagielski * test standard filter with string 80*b1cdbd2cSJim Jagielski */ 81*b1cdbd2cSJim Jagielski @Test testStandardFilterForString()82*b1cdbd2cSJim Jagielski public void testStandardFilterForString() throws Exception { 83*b1cdbd2cSJim Jagielski // Prepare test data 84*b1cdbd2cSJim Jagielski String sample = Testspace.prepareData(filename); 85*b1cdbd2cSJim Jagielski // Open document 86*b1cdbd2cSJim Jagielski scDocument = SCUtil.openFile(sample, unoApp); 87*b1cdbd2cSJim Jagielski // Get cell range 88*b1cdbd2cSJim Jagielski XCellRange xdataRange = (XCellRange) UnoRuntime.queryInterface(XCellRange.class, SCUtil.getCurrentSheet(scDocument)); 89*b1cdbd2cSJim Jagielski 90*b1cdbd2cSJim Jagielski // Set filter property and filter the cell range 91*b1cdbd2cSJim Jagielski XSheetFilterable xFilter = (XSheetFilterable) UnoRuntime.queryInterface(XSheetFilterable.class, xdataRange.getCellRangeByName("A1:F6")); 92*b1cdbd2cSJim Jagielski XSheetFilterDescriptor xFilterDesc = xFilter.createFilterDescriptor(true); 93*b1cdbd2cSJim Jagielski TableFilterField[] aFilterFields = new TableFilterField[1]; 94*b1cdbd2cSJim Jagielski aFilterFields[0] = new TableFilterField(); 95*b1cdbd2cSJim Jagielski aFilterFields[0].Field = 0; 96*b1cdbd2cSJim Jagielski aFilterFields[0].IsNumeric = false; 97*b1cdbd2cSJim Jagielski aFilterFields[0].Operator = FilterOperator.EQUAL; 98*b1cdbd2cSJim Jagielski aFilterFields[0].StringValue = "Tom"; 99*b1cdbd2cSJim Jagielski xFilterDesc.setFilterFields(aFilterFields); 100*b1cdbd2cSJim Jagielski XPropertySet xFilterProp = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, xFilterDesc); 101*b1cdbd2cSJim Jagielski xFilterProp.setPropertyValue("ContainsHeader", new Boolean(true)); 102*b1cdbd2cSJim Jagielski xFilter.filter(xFilterDesc); 103*b1cdbd2cSJim Jagielski 104*b1cdbd2cSJim Jagielski // Verify filter result 105*b1cdbd2cSJim Jagielski XColumnRowRange ColRowRange = (XColumnRowRange) UnoRuntime.queryInterface(XColumnRowRange.class, xdataRange.getCellRangeByName("A1:E6")); 106*b1cdbd2cSJim Jagielski XTableRows Rows = ColRowRange.getRows(); 107*b1cdbd2cSJim Jagielski for (int i = 0; i < Rows.getCount() - 1; i++) { 108*b1cdbd2cSJim Jagielski Object aRowObj = Rows.getByIndex(i); 109*b1cdbd2cSJim Jagielski XPropertySet PropSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, aRowObj); 110*b1cdbd2cSJim Jagielski if (i == 0 | i == 5) { 111*b1cdbd2cSJim Jagielski assertTrue("Verify row is invisible.", (Boolean) PropSet.getPropertyValue("IsVisible")); 112*b1cdbd2cSJim Jagielski } else 113*b1cdbd2cSJim Jagielski assertFalse("Verify row is invisible.", (Boolean) PropSet.getPropertyValue("IsVisible")); 114*b1cdbd2cSJim Jagielski } 115*b1cdbd2cSJim Jagielski 116*b1cdbd2cSJim Jagielski // Save and reload the document 117*b1cdbd2cSJim Jagielski SCUtil.save(scDocument); 118*b1cdbd2cSJim Jagielski SCUtil.closeFile(scDocument); 119*b1cdbd2cSJim Jagielski scDocument = SCUtil.openFile(sample, unoApp); 120*b1cdbd2cSJim Jagielski 121*b1cdbd2cSJim Jagielski // Verify the result again 122*b1cdbd2cSJim Jagielski xdataRange = (XCellRange) UnoRuntime.queryInterface(XCellRange.class, SCUtil.getCurrentSheet(scDocument)); 123*b1cdbd2cSJim Jagielski ColRowRange = (XColumnRowRange) UnoRuntime.queryInterface(XColumnRowRange.class, xdataRange.getCellRangeByName("A1:E6")); 124*b1cdbd2cSJim Jagielski Rows = ColRowRange.getRows(); 125*b1cdbd2cSJim Jagielski for (int i = 0; i < Rows.getCount() - 1; i++) { 126*b1cdbd2cSJim Jagielski Object aRowObj = Rows.getByIndex(i); 127*b1cdbd2cSJim Jagielski XPropertySet PropSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, aRowObj); 128*b1cdbd2cSJim Jagielski if (i == 0 | i == 5) { 129*b1cdbd2cSJim Jagielski assertTrue("Verify row is invisible.", (Boolean) PropSet.getPropertyValue("IsVisible")); 130*b1cdbd2cSJim Jagielski } else 131*b1cdbd2cSJim Jagielski assertFalse("Verify row is invisible.", (Boolean) PropSet.getPropertyValue("IsVisible")); 132*b1cdbd2cSJim Jagielski } 133*b1cdbd2cSJim Jagielski 134*b1cdbd2cSJim Jagielski } 135*b1cdbd2cSJim Jagielski 136*b1cdbd2cSJim Jagielski /** 137*b1cdbd2cSJim Jagielski * test standard filter with case sensitive options 138*b1cdbd2cSJim Jagielski */ 139*b1cdbd2cSJim Jagielski @Test testStandardFilterOptionCaseSensitive()140*b1cdbd2cSJim Jagielski public void testStandardFilterOptionCaseSensitive() throws Exception { 141*b1cdbd2cSJim Jagielski // Prepare test data 142*b1cdbd2cSJim Jagielski String sample = Testspace.prepareData(filename); 143*b1cdbd2cSJim Jagielski // Open document 144*b1cdbd2cSJim Jagielski scDocument = SCUtil.openFile(sample, unoApp); 145*b1cdbd2cSJim Jagielski // Get cell range 146*b1cdbd2cSJim Jagielski XCellRange xdataRange = (XCellRange) UnoRuntime.queryInterface(XCellRange.class, SCUtil.getCurrentSheet(scDocument)); 147*b1cdbd2cSJim Jagielski 148*b1cdbd2cSJim Jagielski // Set filter property and filter the cell range 149*b1cdbd2cSJim Jagielski XSheetFilterable xFilter = (XSheetFilterable) UnoRuntime.queryInterface(XSheetFilterable.class, xdataRange.getCellRangeByName("A1:F6")); 150*b1cdbd2cSJim Jagielski XSheetFilterDescriptor xFilterDesc = xFilter.createFilterDescriptor(true); 151*b1cdbd2cSJim Jagielski TableFilterField[] aFilterFields = new TableFilterField[1]; 152*b1cdbd2cSJim Jagielski aFilterFields[0] = new TableFilterField(); 153*b1cdbd2cSJim Jagielski aFilterFields[0].Field = 5; 154*b1cdbd2cSJim Jagielski aFilterFields[0].IsNumeric = false; 155*b1cdbd2cSJim Jagielski aFilterFields[0].Operator = FilterOperator.EQUAL; 156*b1cdbd2cSJim Jagielski aFilterFields[0].StringValue = "No"; 157*b1cdbd2cSJim Jagielski xFilterDesc.setFilterFields(aFilterFields); 158*b1cdbd2cSJim Jagielski XPropertySet xFilterProp = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, xFilterDesc); 159*b1cdbd2cSJim Jagielski xFilterProp.setPropertyValue("ContainsHeader", new Boolean(true)); 160*b1cdbd2cSJim Jagielski xFilterProp.setPropertyValue("IsCaseSensitive", false); 161*b1cdbd2cSJim Jagielski xFilter.filter(xFilterDesc); 162*b1cdbd2cSJim Jagielski 163*b1cdbd2cSJim Jagielski // Verify filter result 164*b1cdbd2cSJim Jagielski XColumnRowRange ColRowRange = (XColumnRowRange) UnoRuntime.queryInterface(XColumnRowRange.class, xdataRange.getCellRangeByName("A1:F6")); 165*b1cdbd2cSJim Jagielski XTableRows Rows = ColRowRange.getRows(); 166*b1cdbd2cSJim Jagielski for (int i = 0; i < Rows.getCount() - 1; i++) { 167*b1cdbd2cSJim Jagielski Object aRowObj = Rows.getByIndex(i); 168*b1cdbd2cSJim Jagielski XPropertySet PropSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, aRowObj); 169*b1cdbd2cSJim Jagielski if (i == 0 | i == 1 | i == 5) { 170*b1cdbd2cSJim Jagielski assertTrue("Expect should be True", (Boolean) PropSet.getPropertyValue("IsVisible")); 171*b1cdbd2cSJim Jagielski } else 172*b1cdbd2cSJim Jagielski assertFalse("Expect should be false", (Boolean) PropSet.getPropertyValue("IsVisible")); 173*b1cdbd2cSJim Jagielski } 174*b1cdbd2cSJim Jagielski 175*b1cdbd2cSJim Jagielski // Change to CaseSenstive 176*b1cdbd2cSJim Jagielski xFilterProp.setPropertyValue("IsCaseSensitive", true); 177*b1cdbd2cSJim Jagielski xFilter.filter(xFilterDesc); 178*b1cdbd2cSJim Jagielski 179*b1cdbd2cSJim Jagielski // Verify result 180*b1cdbd2cSJim Jagielski for (int i = 0; i < Rows.getCount() - 1; i++) { 181*b1cdbd2cSJim Jagielski Object aRowObj = Rows.getByIndex(i); 182*b1cdbd2cSJim Jagielski XPropertySet PropSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, aRowObj); 183*b1cdbd2cSJim Jagielski if (i == 0 | i == 5) { 184*b1cdbd2cSJim Jagielski assertTrue("Expect should be True", (Boolean) PropSet.getPropertyValue("IsVisible")); 185*b1cdbd2cSJim Jagielski } else 186*b1cdbd2cSJim Jagielski assertFalse("Expect should be false", (Boolean) PropSet.getPropertyValue("IsVisible")); 187*b1cdbd2cSJim Jagielski } 188*b1cdbd2cSJim Jagielski 189*b1cdbd2cSJim Jagielski // Save and reload the document 190*b1cdbd2cSJim Jagielski SCUtil.save(scDocument); 191*b1cdbd2cSJim Jagielski SCUtil.closeFile(scDocument); 192*b1cdbd2cSJim Jagielski scDocument = SCUtil.openFile(sample, unoApp); 193*b1cdbd2cSJim Jagielski 194*b1cdbd2cSJim Jagielski // Verify the result again 195*b1cdbd2cSJim Jagielski xdataRange = (XCellRange) UnoRuntime.queryInterface(XCellRange.class, SCUtil.getCurrentSheet(scDocument)); 196*b1cdbd2cSJim Jagielski ColRowRange = (XColumnRowRange) UnoRuntime.queryInterface(XColumnRowRange.class, xdataRange.getCellRangeByName("A1:F6")); 197*b1cdbd2cSJim Jagielski Rows = ColRowRange.getRows(); 198*b1cdbd2cSJim Jagielski for (int i = 0; i < Rows.getCount() - 1; i++) { 199*b1cdbd2cSJim Jagielski Object aRowObj = Rows.getByIndex(i); 200*b1cdbd2cSJim Jagielski XPropertySet PropSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, aRowObj); 201*b1cdbd2cSJim Jagielski if (i == 0 | i == 5) { 202*b1cdbd2cSJim Jagielski assertTrue("Expect should be True", (Boolean) PropSet.getPropertyValue("IsVisible")); 203*b1cdbd2cSJim Jagielski } else 204*b1cdbd2cSJim Jagielski assertFalse("Expect should be false", (Boolean) PropSet.getPropertyValue("IsVisible")); 205*b1cdbd2cSJim Jagielski } 206*b1cdbd2cSJim Jagielski } 207*b1cdbd2cSJim Jagielski 208*b1cdbd2cSJim Jagielski /** 209*b1cdbd2cSJim Jagielski * test standard filter with contain header options 210*b1cdbd2cSJim Jagielski */ 211*b1cdbd2cSJim Jagielski @Test testStandardFilterOptionContainsHeader()212*b1cdbd2cSJim Jagielski public void testStandardFilterOptionContainsHeader() throws Exception { 213*b1cdbd2cSJim Jagielski // Prepare test data 214*b1cdbd2cSJim Jagielski String sample = Testspace.prepareData(filename); 215*b1cdbd2cSJim Jagielski // Open document 216*b1cdbd2cSJim Jagielski scDocument = SCUtil.openFile(sample, unoApp); 217*b1cdbd2cSJim Jagielski // Get cell range 218*b1cdbd2cSJim Jagielski XCellRange xdataRange = (XCellRange) UnoRuntime.queryInterface(XCellRange.class, SCUtil.getCurrentSheet(scDocument)); 219*b1cdbd2cSJim Jagielski 220*b1cdbd2cSJim Jagielski // Set filter property and filter the cell range 221*b1cdbd2cSJim Jagielski XSheetFilterable xFilter = (XSheetFilterable) UnoRuntime.queryInterface(XSheetFilterable.class, xdataRange.getCellRangeByName("A1:F6")); 222*b1cdbd2cSJim Jagielski XSheetFilterDescriptor xFilterDesc = xFilter.createFilterDescriptor(true); 223*b1cdbd2cSJim Jagielski TableFilterField[] aFilterFields = new TableFilterField[1]; 224*b1cdbd2cSJim Jagielski aFilterFields[0] = new TableFilterField(); 225*b1cdbd2cSJim Jagielski aFilterFields[0].Field = 2; 226*b1cdbd2cSJim Jagielski aFilterFields[0].IsNumeric = true; 227*b1cdbd2cSJim Jagielski aFilterFields[0].Operator = FilterOperator.LESS; 228*b1cdbd2cSJim Jagielski aFilterFields[0].NumericValue = 44; 229*b1cdbd2cSJim Jagielski xFilterDesc.setFilterFields(aFilterFields); 230*b1cdbd2cSJim Jagielski XPropertySet xFilterProp = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, xFilterDesc); 231*b1cdbd2cSJim Jagielski xFilterProp.setPropertyValue("ContainsHeader", new Boolean(true)); 232*b1cdbd2cSJim Jagielski xFilter.filter(xFilterDesc); 233*b1cdbd2cSJim Jagielski 234*b1cdbd2cSJim Jagielski // Verify filter result 235*b1cdbd2cSJim Jagielski XColumnRowRange ColRowRange = (XColumnRowRange) UnoRuntime.queryInterface(XColumnRowRange.class, xdataRange.getCellRangeByName("A1:E6")); 236*b1cdbd2cSJim Jagielski XTableRows Rows = ColRowRange.getRows(); 237*b1cdbd2cSJim Jagielski for (int i = 0; i < Rows.getCount() - 1; i++) { 238*b1cdbd2cSJim Jagielski Object aRowObj = Rows.getByIndex(i); 239*b1cdbd2cSJim Jagielski XPropertySet PropSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, aRowObj); 240*b1cdbd2cSJim Jagielski if (i == 0 | i == 1 | i == 4) { 241*b1cdbd2cSJim Jagielski assertTrue("Expect result should be True", (Boolean) PropSet.getPropertyValue("IsVisible")); 242*b1cdbd2cSJim Jagielski } else 243*b1cdbd2cSJim Jagielski assertFalse("Expect result should be false", (Boolean) PropSet.getPropertyValue("IsVisible")); 244*b1cdbd2cSJim Jagielski } 245*b1cdbd2cSJim Jagielski 246*b1cdbd2cSJim Jagielski // Change to not contain header 247*b1cdbd2cSJim Jagielski xFilterProp.setPropertyValue("ContainsHeader", new Boolean(false)); 248*b1cdbd2cSJim Jagielski xFilter.filter(xFilterDesc); 249*b1cdbd2cSJim Jagielski 250*b1cdbd2cSJim Jagielski // Verify result 251*b1cdbd2cSJim Jagielski for (int i = 0; i < Rows.getCount() - 1; i++) { 252*b1cdbd2cSJim Jagielski Object aRowObj = Rows.getByIndex(i); 253*b1cdbd2cSJim Jagielski XPropertySet PropSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, aRowObj); 254*b1cdbd2cSJim Jagielski if (i == 1 | i == 4) { 255*b1cdbd2cSJim Jagielski assertTrue("Expect result should be True", (Boolean) PropSet.getPropertyValue("IsVisible")); 256*b1cdbd2cSJim Jagielski } else 257*b1cdbd2cSJim Jagielski assertFalse("Expect result should be false", (Boolean) PropSet.getPropertyValue("IsVisible")); 258*b1cdbd2cSJim Jagielski } 259*b1cdbd2cSJim Jagielski 260*b1cdbd2cSJim Jagielski // Save the document 261*b1cdbd2cSJim Jagielski SCUtil.save(scDocument); 262*b1cdbd2cSJim Jagielski SCUtil.closeFile(scDocument); 263*b1cdbd2cSJim Jagielski scDocument = SCUtil.openFile(sample, unoApp); 264*b1cdbd2cSJim Jagielski 265*b1cdbd2cSJim Jagielski // Verify filter result again 266*b1cdbd2cSJim Jagielski xdataRange = (XCellRange) UnoRuntime.queryInterface(XCellRange.class, SCUtil.getCurrentSheet(scDocument)); 267*b1cdbd2cSJim Jagielski ColRowRange = (XColumnRowRange) UnoRuntime.queryInterface(XColumnRowRange.class, xdataRange.getCellRangeByName("A1:F6")); 268*b1cdbd2cSJim Jagielski Rows = ColRowRange.getRows(); 269*b1cdbd2cSJim Jagielski for (int i = 0; i < Rows.getCount() - 1; i++) { 270*b1cdbd2cSJim Jagielski Object aRowObj = Rows.getByIndex(i); 271*b1cdbd2cSJim Jagielski XPropertySet PropSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, aRowObj); 272*b1cdbd2cSJim Jagielski if (i == 1 | i == 4) { 273*b1cdbd2cSJim Jagielski assertTrue("Expect result should be True", (Boolean) PropSet.getPropertyValue("IsVisible")); 274*b1cdbd2cSJim Jagielski } else 275*b1cdbd2cSJim Jagielski assertFalse("Expect result should be false", (Boolean) PropSet.getPropertyValue("IsVisible")); 276*b1cdbd2cSJim Jagielski } 277*b1cdbd2cSJim Jagielski 278*b1cdbd2cSJim Jagielski } 279*b1cdbd2cSJim Jagielski 280*b1cdbd2cSJim Jagielski /** 281*b1cdbd2cSJim Jagielski * test standard filter with copy out put after filter in options 282*b1cdbd2cSJim Jagielski */ 283*b1cdbd2cSJim Jagielski @Test testStandardFilterOptionCopyOutput()284*b1cdbd2cSJim Jagielski public void testStandardFilterOptionCopyOutput() throws Exception { 285*b1cdbd2cSJim Jagielski // Prepare test data 286*b1cdbd2cSJim Jagielski String sample = Testspace.prepareData(filename); 287*b1cdbd2cSJim Jagielski // Open document 288*b1cdbd2cSJim Jagielski scDocument = SCUtil.openFile(sample, unoApp); 289*b1cdbd2cSJim Jagielski // Get cell range 290*b1cdbd2cSJim Jagielski XCellRange xdataRange = (XCellRange) UnoRuntime.queryInterface(XCellRange.class, SCUtil.getCurrentSheet(scDocument)); 291*b1cdbd2cSJim Jagielski XSpreadsheet currentSheet = SCUtil.getCurrentSheet(scDocument); 292*b1cdbd2cSJim Jagielski // Get the value before filter 293*b1cdbd2cSJim Jagielski String[][] souce = SCUtil.getTextFromCellRange(currentSheet, 0, 0, 5, 5); 294*b1cdbd2cSJim Jagielski 295*b1cdbd2cSJim Jagielski // Copy to cell position 296*b1cdbd2cSJim Jagielski XCell cell = currentSheet.getCellByPosition(7, 7); 297*b1cdbd2cSJim Jagielski XCellAddressable xCellAddr = (XCellAddressable) UnoRuntime.queryInterface(XCellAddressable.class, cell); 298*b1cdbd2cSJim Jagielski CellAddress copytoAddress = xCellAddr.getCellAddress(); 299*b1cdbd2cSJim Jagielski 300*b1cdbd2cSJim Jagielski // Set filter property and filter the cell range 301*b1cdbd2cSJim Jagielski XSheetFilterable xFilter = (XSheetFilterable) UnoRuntime.queryInterface(XSheetFilterable.class, xdataRange.getCellRangeByName("A1:F6")); 302*b1cdbd2cSJim Jagielski XSheetFilterDescriptor xFilterDesc = xFilter.createFilterDescriptor(true); 303*b1cdbd2cSJim Jagielski TableFilterField[] aFilterFields = new TableFilterField[1]; 304*b1cdbd2cSJim Jagielski aFilterFields[0] = new TableFilterField(); 305*b1cdbd2cSJim Jagielski aFilterFields[0].Field = 3; 306*b1cdbd2cSJim Jagielski aFilterFields[0].IsNumeric = true; 307*b1cdbd2cSJim Jagielski aFilterFields[0].Operator = FilterOperator.GREATER; 308*b1cdbd2cSJim Jagielski aFilterFields[0].NumericValue = 155; 309*b1cdbd2cSJim Jagielski xFilterDesc.setFilterFields(aFilterFields); 310*b1cdbd2cSJim Jagielski XPropertySet xFilterProp = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, xFilterDesc); 311*b1cdbd2cSJim Jagielski xFilterProp.setPropertyValue("ContainsHeader", new Boolean(true)); 312*b1cdbd2cSJim Jagielski xFilterProp.setPropertyValue("CopyOutputData", new Boolean(true)); 313*b1cdbd2cSJim Jagielski xFilterProp.setPropertyValue("OutputPosition", copytoAddress); 314*b1cdbd2cSJim Jagielski xFilter.filter(xFilterDesc); 315*b1cdbd2cSJim Jagielski 316*b1cdbd2cSJim Jagielski // Verify source range not changed 317*b1cdbd2cSJim Jagielski XColumnRowRange ColRowRange = (XColumnRowRange) UnoRuntime.queryInterface(XColumnRowRange.class, xdataRange.getCellRangeByName("A1:F6")); 318*b1cdbd2cSJim Jagielski XTableRows Rows = ColRowRange.getRows(); 319*b1cdbd2cSJim Jagielski for (int i = 0; i < Rows.getCount(); i++) { 320*b1cdbd2cSJim Jagielski Object aRowObj = Rows.getByIndex(i); 321*b1cdbd2cSJim Jagielski XPropertySet PropSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, aRowObj); 322*b1cdbd2cSJim Jagielski assertTrue("Expect should be True", (Boolean) PropSet.getPropertyValue("IsVisible")); 323*b1cdbd2cSJim Jagielski } 324*b1cdbd2cSJim Jagielski 325*b1cdbd2cSJim Jagielski // Get the data after filter 326*b1cdbd2cSJim Jagielski String[][] dataafterFilter = SCUtil.getTextFromCellRange(currentSheet, 0, 0, 5, 5); 327*b1cdbd2cSJim Jagielski assertArrayEquals(souce, dataafterFilter); 328*b1cdbd2cSJim Jagielski 329*b1cdbd2cSJim Jagielski // Get the copyto filter result, verify it 330*b1cdbd2cSJim Jagielski ColRowRange = (XColumnRowRange) UnoRuntime.queryInterface(XColumnRowRange.class, xdataRange.getCellRangeByName("H8:M10")); 331*b1cdbd2cSJim Jagielski for (int i = 0; i < Rows.getCount(); i++) { 332*b1cdbd2cSJim Jagielski Object aRowObj = Rows.getByIndex(i); 333*b1cdbd2cSJim Jagielski XPropertySet PropSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, aRowObj); 334*b1cdbd2cSJim Jagielski assertTrue("Expect should be True", (Boolean) PropSet.getPropertyValue("IsVisible")); 335*b1cdbd2cSJim Jagielski } 336*b1cdbd2cSJim Jagielski // Verify the first filter line data 337*b1cdbd2cSJim Jagielski assertArrayEquals(SCUtil.getTextFromCellRange(currentSheet, 0, 0, 5, 0), SCUtil.getTextFromCellRange(currentSheet, 7, 7, 12, 7)); 338*b1cdbd2cSJim Jagielski 339*b1cdbd2cSJim Jagielski // Verify the Second filter line data 340*b1cdbd2cSJim Jagielski assertArrayEquals(SCUtil.getTextFromCellRange(currentSheet, 0, 1, 5, 1), SCUtil.getTextFromCellRange(currentSheet, 7, 8, 12, 8)); 341*b1cdbd2cSJim Jagielski 342*b1cdbd2cSJim Jagielski // Verify the Last filter line data 343*b1cdbd2cSJim Jagielski assertArrayEquals(SCUtil.getTextFromCellRange(currentSheet, 0, 4, 5, 4), SCUtil.getTextFromCellRange(currentSheet, 7, 9, 12, 9)); 344*b1cdbd2cSJim Jagielski 345*b1cdbd2cSJim Jagielski // Save the document 346*b1cdbd2cSJim Jagielski SCUtil.save(scDocument); 347*b1cdbd2cSJim Jagielski SCUtil.closeFile(scDocument); 348*b1cdbd2cSJim Jagielski scDocument = SCUtil.openFile(sample, unoApp); 349*b1cdbd2cSJim Jagielski 350*b1cdbd2cSJim Jagielski // Verify filter result again 351*b1cdbd2cSJim Jagielski xdataRange = (XCellRange) UnoRuntime.queryInterface(XCellRange.class, SCUtil.getCurrentSheet(scDocument)); 352*b1cdbd2cSJim Jagielski ColRowRange = (XColumnRowRange) UnoRuntime.queryInterface(XColumnRowRange.class, xdataRange.getCellRangeByName("A1:F6")); 353*b1cdbd2cSJim Jagielski Rows = ColRowRange.getRows(); 354*b1cdbd2cSJim Jagielski for (int i = 0; i < Rows.getCount(); i++) { 355*b1cdbd2cSJim Jagielski Object aRowObj = Rows.getByIndex(i); 356*b1cdbd2cSJim Jagielski XPropertySet PropSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, aRowObj); 357*b1cdbd2cSJim Jagielski assertTrue("Expect should be true", (Boolean) PropSet.getPropertyValue("IsVisible")); 358*b1cdbd2cSJim Jagielski } 359*b1cdbd2cSJim Jagielski 360*b1cdbd2cSJim Jagielski // Get the data after filter 361*b1cdbd2cSJim Jagielski currentSheet = SCUtil.getCurrentSheet(scDocument); 362*b1cdbd2cSJim Jagielski dataafterFilter = SCUtil.getTextFromCellRange(currentSheet, 0, 0, 5, 5); 363*b1cdbd2cSJim Jagielski assertArrayEquals(souce, dataafterFilter); 364*b1cdbd2cSJim Jagielski 365*b1cdbd2cSJim Jagielski // Get the copyto filter result, verify it 366*b1cdbd2cSJim Jagielski ColRowRange = (XColumnRowRange) UnoRuntime.queryInterface(XColumnRowRange.class, xdataRange.getCellRangeByName("H8:M10")); 367*b1cdbd2cSJim Jagielski for (int i = 0; i < Rows.getCount(); i++) { 368*b1cdbd2cSJim Jagielski Object aRowObj = Rows.getByIndex(i); 369*b1cdbd2cSJim Jagielski XPropertySet PropSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, aRowObj); 370*b1cdbd2cSJim Jagielski assertTrue("Expect should be True", (Boolean) PropSet.getPropertyValue("IsVisible")); 371*b1cdbd2cSJim Jagielski } 372*b1cdbd2cSJim Jagielski // Verify the first filter line data 373*b1cdbd2cSJim Jagielski assertArrayEquals(SCUtil.getTextFromCellRange(currentSheet, 0, 0, 5, 0), SCUtil.getTextFromCellRange(currentSheet, 7, 7, 12, 7)); 374*b1cdbd2cSJim Jagielski 375*b1cdbd2cSJim Jagielski // Verify the Second filter line data 376*b1cdbd2cSJim Jagielski assertArrayEquals(SCUtil.getTextFromCellRange(currentSheet, 0, 1, 5, 1), SCUtil.getTextFromCellRange(currentSheet, 7, 8, 12, 8)); 377*b1cdbd2cSJim Jagielski 378*b1cdbd2cSJim Jagielski // Verify the Last filter line data 379*b1cdbd2cSJim Jagielski assertArrayEquals(SCUtil.getTextFromCellRange(currentSheet, 0, 4, 5, 4), SCUtil.getTextFromCellRange(currentSheet, 7, 9, 12, 9)); 380*b1cdbd2cSJim Jagielski } 381*b1cdbd2cSJim Jagielski 382*b1cdbd2cSJim Jagielski /** 383*b1cdbd2cSJim Jagielski * test standard filter with skip duplicates in options 384*b1cdbd2cSJim Jagielski */ 385*b1cdbd2cSJim Jagielski @Test testStandardFilterOptionSkipDuplicates()386*b1cdbd2cSJim Jagielski public void testStandardFilterOptionSkipDuplicates() throws Exception { 387*b1cdbd2cSJim Jagielski // Prepare test data 388*b1cdbd2cSJim Jagielski String sample = Testspace.prepareData(filename); 389*b1cdbd2cSJim Jagielski // Open document 390*b1cdbd2cSJim Jagielski scDocument = SCUtil.openFile(sample, unoApp); 391*b1cdbd2cSJim Jagielski // Get cell range 392*b1cdbd2cSJim Jagielski XCellRange xdataRange = (XCellRange) UnoRuntime.queryInterface(XCellRange.class, SCUtil.getCurrentSheet(scDocument)); 393*b1cdbd2cSJim Jagielski 394*b1cdbd2cSJim Jagielski // Set filter property and filter the cell range 395*b1cdbd2cSJim Jagielski XSheetFilterable xFilter = (XSheetFilterable) UnoRuntime.queryInterface(XSheetFilterable.class, xdataRange.getCellRangeByName("A1:E6")); 396*b1cdbd2cSJim Jagielski XSheetFilterDescriptor xFilterDesc = xFilter.createFilterDescriptor(true); 397*b1cdbd2cSJim Jagielski TableFilterField[] aFilterFields = new TableFilterField[1]; 398*b1cdbd2cSJim Jagielski aFilterFields[0] = new TableFilterField(); 399*b1cdbd2cSJim Jagielski aFilterFields[0].Field = 3; 400*b1cdbd2cSJim Jagielski aFilterFields[0].IsNumeric = true; 401*b1cdbd2cSJim Jagielski aFilterFields[0].Operator = FilterOperator.GREATER_EQUAL; 402*b1cdbd2cSJim Jagielski aFilterFields[0].NumericValue = 155; 403*b1cdbd2cSJim Jagielski xFilterDesc.setFilterFields(aFilterFields); 404*b1cdbd2cSJim Jagielski XPropertySet xFilterProp = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, xFilterDesc); 405*b1cdbd2cSJim Jagielski xFilterProp.setPropertyValue("ContainsHeader", new Boolean(true)); 406*b1cdbd2cSJim Jagielski xFilterProp.setPropertyValue("SkipDuplicates", new Boolean(true)); 407*b1cdbd2cSJim Jagielski xFilter.filter(xFilterDesc); 408*b1cdbd2cSJim Jagielski 409*b1cdbd2cSJim Jagielski // Verify filter result 410*b1cdbd2cSJim Jagielski XColumnRowRange ColRowRange = (XColumnRowRange) UnoRuntime.queryInterface(XColumnRowRange.class, xdataRange.getCellRangeByName("A1:E6")); 411*b1cdbd2cSJim Jagielski XTableRows Rows = ColRowRange.getRows(); 412*b1cdbd2cSJim Jagielski for (int i = 0; i < Rows.getCount(); i++) { 413*b1cdbd2cSJim Jagielski Object aRowObj = Rows.getByIndex(i); 414*b1cdbd2cSJim Jagielski XPropertySet PropSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, aRowObj); 415*b1cdbd2cSJim Jagielski if (i == 2) { 416*b1cdbd2cSJim Jagielski assertFalse("Verify row is invisible.", (Boolean) PropSet.getPropertyValue("IsVisible")); 417*b1cdbd2cSJim Jagielski } else 418*b1cdbd2cSJim Jagielski assertTrue("Verify row is invisible.", (Boolean) PropSet.getPropertyValue("IsVisible")); 419*b1cdbd2cSJim Jagielski } 420*b1cdbd2cSJim Jagielski 421*b1cdbd2cSJim Jagielski // Change to skip Dulicates 422*b1cdbd2cSJim Jagielski xFilterProp.setPropertyValue("SkipDuplicates", new Boolean(false)); 423*b1cdbd2cSJim Jagielski xFilter.filter(xFilterDesc); 424*b1cdbd2cSJim Jagielski 425*b1cdbd2cSJim Jagielski // Verify filter result 426*b1cdbd2cSJim Jagielski ColRowRange = (XColumnRowRange) UnoRuntime.queryInterface(XColumnRowRange.class, xdataRange.getCellRangeByName("A1:E6")); 427*b1cdbd2cSJim Jagielski Rows = ColRowRange.getRows(); 428*b1cdbd2cSJim Jagielski for (int i = 0; i < Rows.getCount(); i++) { 429*b1cdbd2cSJim Jagielski Object aRowObj = Rows.getByIndex(i); 430*b1cdbd2cSJim Jagielski XPropertySet PropSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, aRowObj); 431*b1cdbd2cSJim Jagielski if (i == 2 | i == 6) { 432*b1cdbd2cSJim Jagielski assertFalse("Expect should be false", (Boolean) PropSet.getPropertyValue("IsVisible")); 433*b1cdbd2cSJim Jagielski } else 434*b1cdbd2cSJim Jagielski assertTrue("Expect should be True", (Boolean) PropSet.getPropertyValue("IsVisible")); 435*b1cdbd2cSJim Jagielski } 436*b1cdbd2cSJim Jagielski 437*b1cdbd2cSJim Jagielski // Save the document 438*b1cdbd2cSJim Jagielski SCUtil.save(scDocument); 439*b1cdbd2cSJim Jagielski SCUtil.closeFile(scDocument); 440*b1cdbd2cSJim Jagielski scDocument = SCUtil.openFile(sample, unoApp); 441*b1cdbd2cSJim Jagielski 442*b1cdbd2cSJim Jagielski // Verify filter result again 443*b1cdbd2cSJim Jagielski xdataRange = (XCellRange) UnoRuntime.queryInterface(XCellRange.class, SCUtil.getCurrentSheet(scDocument)); 444*b1cdbd2cSJim Jagielski ColRowRange = (XColumnRowRange) UnoRuntime.queryInterface(XColumnRowRange.class, xdataRange.getCellRangeByName("A1:E6")); 445*b1cdbd2cSJim Jagielski Rows = ColRowRange.getRows(); 446*b1cdbd2cSJim Jagielski for (int i = 0; i < Rows.getCount() - 1; i++) { 447*b1cdbd2cSJim Jagielski Object aRowObj = Rows.getByIndex(i); 448*b1cdbd2cSJim Jagielski XPropertySet PropSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, aRowObj); 449*b1cdbd2cSJim Jagielski if (i == 2 | i == 6) { 450*b1cdbd2cSJim Jagielski assertFalse("Expect should be false", (Boolean) PropSet.getPropertyValue("IsVisible")); 451*b1cdbd2cSJim Jagielski } else 452*b1cdbd2cSJim Jagielski assertTrue("Expect should be true", (Boolean) PropSet.getPropertyValue("IsVisible")); 453*b1cdbd2cSJim Jagielski } 454*b1cdbd2cSJim Jagielski 455*b1cdbd2cSJim Jagielski } 456*b1cdbd2cSJim Jagielski 457*b1cdbd2cSJim Jagielski /** 458*b1cdbd2cSJim Jagielski * test standard filter with regular expressions in options 459*b1cdbd2cSJim Jagielski */ 460*b1cdbd2cSJim Jagielski @Test testStandardFilterOptionUseRegularExpressions()461*b1cdbd2cSJim Jagielski public void testStandardFilterOptionUseRegularExpressions() throws Exception { 462*b1cdbd2cSJim Jagielski // Prepare test data 463*b1cdbd2cSJim Jagielski String sample = Testspace.prepareData(filename); 464*b1cdbd2cSJim Jagielski // Open document 465*b1cdbd2cSJim Jagielski scDocument = SCUtil.openFile(sample, unoApp); 466*b1cdbd2cSJim Jagielski // Get cell range 467*b1cdbd2cSJim Jagielski XCellRange xdataRange = (XCellRange) UnoRuntime.queryInterface(XCellRange.class, SCUtil.getCurrentSheet(scDocument)); 468*b1cdbd2cSJim Jagielski 469*b1cdbd2cSJim Jagielski // Set filter property and filter the cell range 470*b1cdbd2cSJim Jagielski XSheetFilterable xFilter = (XSheetFilterable) UnoRuntime.queryInterface(XSheetFilterable.class, xdataRange.getCellRangeByName("A1:F6")); 471*b1cdbd2cSJim Jagielski XSheetFilterDescriptor xFilterDesc = xFilter.createFilterDescriptor(true); 472*b1cdbd2cSJim Jagielski TableFilterField[] aFilterFields = new TableFilterField[1]; 473*b1cdbd2cSJim Jagielski aFilterFields[0] = new TableFilterField(); 474*b1cdbd2cSJim Jagielski aFilterFields[0].Field = 0; 475*b1cdbd2cSJim Jagielski aFilterFields[0].IsNumeric = false; 476*b1cdbd2cSJim Jagielski aFilterFields[0].Operator = FilterOperator.EQUAL; 477*b1cdbd2cSJim Jagielski aFilterFields[0].StringValue = "^.{3}$"; 478*b1cdbd2cSJim Jagielski xFilterDesc.setFilterFields(aFilterFields); 479*b1cdbd2cSJim Jagielski XPropertySet xFilterProp = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, xFilterDesc); 480*b1cdbd2cSJim Jagielski xFilterProp.setPropertyValue("ContainsHeader", new Boolean(true)); 481*b1cdbd2cSJim Jagielski xFilterProp.setPropertyValue("UseRegularExpressions", new Boolean(true)); 482*b1cdbd2cSJim Jagielski xFilter.filter(xFilterDesc); 483*b1cdbd2cSJim Jagielski 484*b1cdbd2cSJim Jagielski // Verify filter result 485*b1cdbd2cSJim Jagielski XColumnRowRange ColRowRange = (XColumnRowRange) UnoRuntime.queryInterface(XColumnRowRange.class, xdataRange.getCellRangeByName("A1:F6")); 486*b1cdbd2cSJim Jagielski XTableRows Rows = ColRowRange.getRows(); 487*b1cdbd2cSJim Jagielski for (int i = 0; i < Rows.getCount(); i++) { 488*b1cdbd2cSJim Jagielski Object aRowObj = Rows.getByIndex(i); 489*b1cdbd2cSJim Jagielski XPropertySet PropSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, aRowObj); 490*b1cdbd2cSJim Jagielski if (i == 2 | i == 4) { 491*b1cdbd2cSJim Jagielski assertFalse("Expect should be false", (Boolean) PropSet.getPropertyValue("IsVisible")); 492*b1cdbd2cSJim Jagielski } else 493*b1cdbd2cSJim Jagielski assertTrue("Expect should be true", (Boolean) PropSet.getPropertyValue("IsVisible")); 494*b1cdbd2cSJim Jagielski } 495*b1cdbd2cSJim Jagielski 496*b1cdbd2cSJim Jagielski // Save the document 497*b1cdbd2cSJim Jagielski SCUtil.save(scDocument); 498*b1cdbd2cSJim Jagielski SCUtil.closeFile(scDocument); 499*b1cdbd2cSJim Jagielski scDocument = SCUtil.openFile(sample, unoApp); 500*b1cdbd2cSJim Jagielski 501*b1cdbd2cSJim Jagielski // Verify filter result again 502*b1cdbd2cSJim Jagielski xdataRange = (XCellRange) UnoRuntime.queryInterface(XCellRange.class, SCUtil.getCurrentSheet(scDocument)); 503*b1cdbd2cSJim Jagielski ColRowRange = (XColumnRowRange) UnoRuntime.queryInterface(XColumnRowRange.class, xdataRange.getCellRangeByName("A1:F6")); 504*b1cdbd2cSJim Jagielski Rows = ColRowRange.getRows(); 505*b1cdbd2cSJim Jagielski for (int i = 0; i < Rows.getCount(); i++) { 506*b1cdbd2cSJim Jagielski Object aRowObj = Rows.getByIndex(i); 507*b1cdbd2cSJim Jagielski XPropertySet PropSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, aRowObj); 508*b1cdbd2cSJim Jagielski if (i == 2 | i == 4) { 509*b1cdbd2cSJim Jagielski assertFalse("Expect should be false", (Boolean) PropSet.getPropertyValue("IsVisible")); 510*b1cdbd2cSJim Jagielski } else 511*b1cdbd2cSJim Jagielski assertTrue("Expect should be true", (Boolean) PropSet.getPropertyValue("IsVisible")); 512*b1cdbd2cSJim Jagielski } 513*b1cdbd2cSJim Jagielski 514*b1cdbd2cSJim Jagielski } 515*b1cdbd2cSJim Jagielski 516*b1cdbd2cSJim Jagielski } 517