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.uno.UnoApp; 31*b1cdbd2cSJim Jagielski import testlib.uno.SCUtil; 32*b1cdbd2cSJim Jagielski import com.sun.star.beans.PropertyValue; 33*b1cdbd2cSJim Jagielski import com.sun.star.lang.XComponent; 34*b1cdbd2cSJim Jagielski import com.sun.star.sheet.XCellAddressable; 35*b1cdbd2cSJim Jagielski import com.sun.star.sheet.XCellRangeData; 36*b1cdbd2cSJim Jagielski import com.sun.star.sheet.XSpreadsheet; 37*b1cdbd2cSJim Jagielski import com.sun.star.sheet.XSpreadsheetDocument; 38*b1cdbd2cSJim Jagielski import com.sun.star.table.CellAddress; 39*b1cdbd2cSJim Jagielski import com.sun.star.table.TableSortField; 40*b1cdbd2cSJim Jagielski import com.sun.star.table.XCell; 41*b1cdbd2cSJim Jagielski import com.sun.star.table.XCellRange; 42*b1cdbd2cSJim Jagielski import com.sun.star.uno.UnoRuntime; 43*b1cdbd2cSJim Jagielski import com.sun.star.util.XSortable; 44*b1cdbd2cSJim Jagielski 45*b1cdbd2cSJim Jagielski public class DataSort { 46*b1cdbd2cSJim Jagielski UnoApp unoApp = new UnoApp(); 47*b1cdbd2cSJim Jagielski XSpreadsheetDocument scDocument = null; 48*b1cdbd2cSJim Jagielski XComponent scComponent = null; 49*b1cdbd2cSJim Jagielski 50*b1cdbd2cSJim Jagielski @Before setUpDocument()51*b1cdbd2cSJim Jagielski public void setUpDocument() throws Exception { 52*b1cdbd2cSJim Jagielski unoApp.start(); 53*b1cdbd2cSJim Jagielski // New a SC document 54*b1cdbd2cSJim Jagielski scComponent = unoApp.newDocument("scalc"); 55*b1cdbd2cSJim Jagielski } 56*b1cdbd2cSJim Jagielski 57*b1cdbd2cSJim Jagielski @After tearDownDocument()58*b1cdbd2cSJim Jagielski public void tearDownDocument() { 59*b1cdbd2cSJim Jagielski unoApp.close(); 60*b1cdbd2cSJim Jagielski unoApp.closeDocument(scComponent); 61*b1cdbd2cSJim Jagielski } 62*b1cdbd2cSJim Jagielski 63*b1cdbd2cSJim Jagielski @BeforeClass setUpConnection()64*b1cdbd2cSJim Jagielski public static void setUpConnection() throws Exception { 65*b1cdbd2cSJim Jagielski 66*b1cdbd2cSJim Jagielski } 67*b1cdbd2cSJim Jagielski 68*b1cdbd2cSJim Jagielski @AfterClass tearDownConnection()69*b1cdbd2cSJim Jagielski public static void tearDownConnection() throws InterruptedException, 70*b1cdbd2cSJim Jagielski Exception { 71*b1cdbd2cSJim Jagielski 72*b1cdbd2cSJim Jagielski } 73*b1cdbd2cSJim Jagielski 74*b1cdbd2cSJim Jagielski /** 75*b1cdbd2cSJim Jagielski * test single field sort 76*b1cdbd2cSJim Jagielski */ 77*b1cdbd2cSJim Jagielski @Test singleFieldSort()78*b1cdbd2cSJim Jagielski public void singleFieldSort() throws Exception { 79*b1cdbd2cSJim Jagielski scDocument = SCUtil.getSCDocument(scComponent); 80*b1cdbd2cSJim Jagielski XSpreadsheet currentsheet = SCUtil.getCurrentSheet(scDocument); 81*b1cdbd2cSJim Jagielski XCellRange sourceRange = currentsheet.getCellRangeByName("A1:E8"); 82*b1cdbd2cSJim Jagielski XCellRangeData sourceData = (XCellRangeData) UnoRuntime.queryInterface( 83*b1cdbd2cSJim Jagielski XCellRangeData.class, sourceRange); 84*b1cdbd2cSJim Jagielski Object[][] Source = { { "Level", "Code", "No.", "Team", "Name" }, 85*b1cdbd2cSJim Jagielski { "BS", 20, 4, "B", "Elle" }, { "BS", 20, 6, "C", "Sweet" }, 86*b1cdbd2cSJim Jagielski { "BS", 20, 2, "A", "Chcomic" }, { "CS", 30, 5, "A", "Ally" }, 87*b1cdbd2cSJim Jagielski { "MS", 10, 1, "A", "Joker" }, { "MS", 10, 3, "B", "Kevin" }, 88*b1cdbd2cSJim Jagielski { "CS", 30, 7, "C", "Tom" } }; 89*b1cdbd2cSJim Jagielski sourceData.setDataArray(Source); 90*b1cdbd2cSJim Jagielski 91*b1cdbd2cSJim Jagielski // define the fields to sort 92*b1cdbd2cSJim Jagielski TableSortField[] aSortFields = new TableSortField[1]; 93*b1cdbd2cSJim Jagielski aSortFields[0] = new TableSortField(); 94*b1cdbd2cSJim Jagielski aSortFields[0].Field = 1; 95*b1cdbd2cSJim Jagielski aSortFields[0].IsAscending = true; 96*b1cdbd2cSJim Jagielski aSortFields[0].IsCaseSensitive = false; 97*b1cdbd2cSJim Jagielski 98*b1cdbd2cSJim Jagielski // define the sort descriptor 99*b1cdbd2cSJim Jagielski PropertyValue[] aSortDesc = new PropertyValue[2]; 100*b1cdbd2cSJim Jagielski aSortDesc[0] = new PropertyValue(); 101*b1cdbd2cSJim Jagielski aSortDesc[0].Name = "SortFields"; 102*b1cdbd2cSJim Jagielski aSortDesc[0].Value = aSortFields; 103*b1cdbd2cSJim Jagielski aSortDesc[1] = new PropertyValue(); 104*b1cdbd2cSJim Jagielski aSortDesc[1].Name = "ContainsHeader"; 105*b1cdbd2cSJim Jagielski aSortDesc[1].Value = new Boolean(true); 106*b1cdbd2cSJim Jagielski 107*b1cdbd2cSJim Jagielski // perform the sorting 108*b1cdbd2cSJim Jagielski XSortable xSort = (XSortable) UnoRuntime.queryInterface( 109*b1cdbd2cSJim Jagielski XSortable.class, sourceRange); 110*b1cdbd2cSJim Jagielski xSort.sort(aSortDesc); 111*b1cdbd2cSJim Jagielski 112*b1cdbd2cSJim Jagielski // Verify the sorting result 113*b1cdbd2cSJim Jagielski String[][] expectResult = { { "Level", "Code", "No.", "Team", "Name" }, 114*b1cdbd2cSJim Jagielski { "MS", "10", "1", "A", "Joker" }, 115*b1cdbd2cSJim Jagielski { "MS", "10", "3", "B", "Kevin" }, 116*b1cdbd2cSJim Jagielski { "BS", "20", "4", "B", "Elle" }, 117*b1cdbd2cSJim Jagielski { "BS", "20", "6", "C", "Sweet" }, 118*b1cdbd2cSJim Jagielski { "BS", "20", "2", "A", "Chcomic" }, 119*b1cdbd2cSJim Jagielski { "CS", "30", "5", "A", "Ally" }, 120*b1cdbd2cSJim Jagielski { "CS", "30", "7", "C", "Tom" } }; 121*b1cdbd2cSJim Jagielski String[][] actureResult = SCUtil.getTextFromCellRange(currentsheet, 0, 122*b1cdbd2cSJim Jagielski 0, 4, 7); 123*b1cdbd2cSJim Jagielski assertArrayEquals(expectResult, actureResult); 124*b1cdbd2cSJim Jagielski 125*b1cdbd2cSJim Jagielski // Save and reload the document verify the sort result again 126*b1cdbd2cSJim Jagielski SCUtil.saveFileAs(scComponent, "SortSingleFiled", "ods"); 127*b1cdbd2cSJim Jagielski XSpreadsheetDocument scDocumentTemp = SCUtil.reloadFile(unoApp, 128*b1cdbd2cSJim Jagielski scDocument, "SortSingleFiled.ods"); 129*b1cdbd2cSJim Jagielski scDocument = scDocumentTemp; 130*b1cdbd2cSJim Jagielski currentsheet = SCUtil.getCurrentSheet(scDocument); 131*b1cdbd2cSJim Jagielski actureResult = SCUtil.getTextFromCellRange(currentsheet, 0, 0, 4, 7); 132*b1cdbd2cSJim Jagielski assertArrayEquals(expectResult, actureResult); 133*b1cdbd2cSJim Jagielski 134*b1cdbd2cSJim Jagielski } 135*b1cdbd2cSJim Jagielski 136*b1cdbd2cSJim Jagielski /** 137*b1cdbd2cSJim Jagielski * test sort with two fields 138*b1cdbd2cSJim Jagielski */ 139*b1cdbd2cSJim Jagielski @Test sortByTwoFields()140*b1cdbd2cSJim Jagielski public void sortByTwoFields() throws Exception { 141*b1cdbd2cSJim Jagielski scDocument = SCUtil.getSCDocument(scComponent); 142*b1cdbd2cSJim Jagielski XSpreadsheet currentsheet = SCUtil.getCurrentSheet(scDocument); 143*b1cdbd2cSJim Jagielski XCellRange sourceRange = currentsheet.getCellRangeByName("A1:E8"); 144*b1cdbd2cSJim Jagielski XCellRangeData sourceData = (XCellRangeData) UnoRuntime.queryInterface( 145*b1cdbd2cSJim Jagielski XCellRangeData.class, sourceRange); 146*b1cdbd2cSJim Jagielski Object[][] Source = { { "Level", "Code", "No.", "Team", "Name" }, 147*b1cdbd2cSJim Jagielski { "BS", 20, 4, "B", "Elle" }, { "BS", 20, 6, "C", "Sweet" }, 148*b1cdbd2cSJim Jagielski { "BS", 20, 2, "A", "Chcomic" }, { "CS", 30, 5, "A", "Ally" }, 149*b1cdbd2cSJim Jagielski { "MS", 10, 1, "A", "Joker" }, { "MS", 10, 3, "B", "Kevin" }, 150*b1cdbd2cSJim Jagielski { "CS", 30, 7, "C", "Tom" } }; 151*b1cdbd2cSJim Jagielski sourceData.setDataArray(Source); 152*b1cdbd2cSJim Jagielski 153*b1cdbd2cSJim Jagielski // define the fields to sort 154*b1cdbd2cSJim Jagielski TableSortField[] aSortFields = new TableSortField[2]; 155*b1cdbd2cSJim Jagielski aSortFields[0] = new TableSortField(); 156*b1cdbd2cSJim Jagielski aSortFields[0].Field = 1; 157*b1cdbd2cSJim Jagielski aSortFields[0].IsAscending = true; 158*b1cdbd2cSJim Jagielski aSortFields[0].IsCaseSensitive = false; 159*b1cdbd2cSJim Jagielski aSortFields[1] = new TableSortField(); 160*b1cdbd2cSJim Jagielski aSortFields[1].Field = 2; 161*b1cdbd2cSJim Jagielski aSortFields[1].IsAscending = false; 162*b1cdbd2cSJim Jagielski aSortFields[1].IsCaseSensitive = false; 163*b1cdbd2cSJim Jagielski 164*b1cdbd2cSJim Jagielski // define the sort descriptor 165*b1cdbd2cSJim Jagielski PropertyValue[] aSortDesc = new PropertyValue[2]; 166*b1cdbd2cSJim Jagielski aSortDesc[0] = new PropertyValue(); 167*b1cdbd2cSJim Jagielski aSortDesc[0].Name = "SortFields"; 168*b1cdbd2cSJim Jagielski aSortDesc[0].Value = aSortFields; 169*b1cdbd2cSJim Jagielski aSortDesc[1] = new PropertyValue(); 170*b1cdbd2cSJim Jagielski aSortDesc[1].Name = "ContainsHeader"; 171*b1cdbd2cSJim Jagielski aSortDesc[1].Value = new Boolean(true); 172*b1cdbd2cSJim Jagielski 173*b1cdbd2cSJim Jagielski // perform the sorting 174*b1cdbd2cSJim Jagielski XSortable xSort = (XSortable) UnoRuntime.queryInterface( 175*b1cdbd2cSJim Jagielski XSortable.class, sourceRange); 176*b1cdbd2cSJim Jagielski xSort.sort(aSortDesc); 177*b1cdbd2cSJim Jagielski 178*b1cdbd2cSJim Jagielski // Verify the sorting result 179*b1cdbd2cSJim Jagielski String[][] expectResult = { { "Level", "Code", "No.", "Team", "Name" }, 180*b1cdbd2cSJim Jagielski { "MS", "10", "3", "B", "Kevin" }, 181*b1cdbd2cSJim Jagielski { "MS", "10", "1", "A", "Joker" }, 182*b1cdbd2cSJim Jagielski { "BS", "20", "6", "C", "Sweet" }, 183*b1cdbd2cSJim Jagielski { "BS", "20", "4", "B", "Elle" }, 184*b1cdbd2cSJim Jagielski { "BS", "20", "2", "A", "Chcomic" }, 185*b1cdbd2cSJim Jagielski { "CS", "30", "7", "C", "Tom" }, 186*b1cdbd2cSJim Jagielski { "CS", "30", "5", "A", "Ally" } }; 187*b1cdbd2cSJim Jagielski String[][] actureResult = SCUtil.getTextFromCellRange(currentsheet, 0, 188*b1cdbd2cSJim Jagielski 0, 4, 7); 189*b1cdbd2cSJim Jagielski assertArrayEquals(expectResult, actureResult); 190*b1cdbd2cSJim Jagielski 191*b1cdbd2cSJim Jagielski // Save and reload the document verify the sort result again 192*b1cdbd2cSJim Jagielski SCUtil.saveFileAs(scComponent, "SortTwoFileds", "xls"); 193*b1cdbd2cSJim Jagielski XSpreadsheetDocument scDocumentTemp = SCUtil.reloadFile(unoApp, 194*b1cdbd2cSJim Jagielski scDocument, "SortTwoFileds.xls"); 195*b1cdbd2cSJim Jagielski scDocument = scDocumentTemp; 196*b1cdbd2cSJim Jagielski currentsheet = SCUtil.getCurrentSheet(scDocument); 197*b1cdbd2cSJim Jagielski actureResult = SCUtil.getTextFromCellRange(currentsheet, 0, 0, 4, 7); 198*b1cdbd2cSJim Jagielski assertArrayEquals(expectResult, actureResult); 199*b1cdbd2cSJim Jagielski } 200*b1cdbd2cSJim Jagielski 201*b1cdbd2cSJim Jagielski 202*b1cdbd2cSJim Jagielski /** 203*b1cdbd2cSJim Jagielski * test sort with three fields 204*b1cdbd2cSJim Jagielski */ 205*b1cdbd2cSJim Jagielski @Test sortByThreeField()206*b1cdbd2cSJim Jagielski public void sortByThreeField() throws Exception { 207*b1cdbd2cSJim Jagielski scDocument = SCUtil.getSCDocument(scComponent); 208*b1cdbd2cSJim Jagielski XSpreadsheet currentsheet = SCUtil.getCurrentSheet(scDocument); 209*b1cdbd2cSJim Jagielski XCellRange sourceRange = currentsheet.getCellRangeByName("A1:E8"); 210*b1cdbd2cSJim Jagielski XCellRangeData sourceData = (XCellRangeData) UnoRuntime.queryInterface( 211*b1cdbd2cSJim Jagielski XCellRangeData.class, sourceRange); 212*b1cdbd2cSJim Jagielski Object[][] Source = { { "Level", "Code", "No.", "Team", "Name" }, 213*b1cdbd2cSJim Jagielski { "BS", 20, 4, "B", "Elle" }, { "MS", 20, 6, "C", "Sweet" }, 214*b1cdbd2cSJim Jagielski { "BS", 20, 2, "A", "Chcomic" }, { "CS", 30, 5, "A", "Ally" }, 215*b1cdbd2cSJim Jagielski { "MS", 10, 1, "A", "Joker" }, { "MS", 10, 3, "B", "Kevin" }, 216*b1cdbd2cSJim Jagielski { "CS", 30, 7, "C", "Tom" } }; 217*b1cdbd2cSJim Jagielski sourceData.setDataArray(Source); 218*b1cdbd2cSJim Jagielski 219*b1cdbd2cSJim Jagielski // --- sort by second column, ascending --- 220*b1cdbd2cSJim Jagielski 221*b1cdbd2cSJim Jagielski // define the fields to sort 222*b1cdbd2cSJim Jagielski TableSortField[] aSortFields = new TableSortField[3]; 223*b1cdbd2cSJim Jagielski aSortFields[0] = new TableSortField(); 224*b1cdbd2cSJim Jagielski aSortFields[0].Field = 0; 225*b1cdbd2cSJim Jagielski aSortFields[0].IsAscending = true; 226*b1cdbd2cSJim Jagielski aSortFields[0].IsCaseSensitive = false; 227*b1cdbd2cSJim Jagielski aSortFields[1] = new TableSortField(); 228*b1cdbd2cSJim Jagielski aSortFields[1].Field = 1; 229*b1cdbd2cSJim Jagielski aSortFields[1].IsAscending = false; 230*b1cdbd2cSJim Jagielski aSortFields[1].IsCaseSensitive = false; 231*b1cdbd2cSJim Jagielski aSortFields[2] = new TableSortField(); 232*b1cdbd2cSJim Jagielski aSortFields[2].Field = 2; 233*b1cdbd2cSJim Jagielski aSortFields[2].IsAscending = false; 234*b1cdbd2cSJim Jagielski aSortFields[2].IsCaseSensitive = false; 235*b1cdbd2cSJim Jagielski 236*b1cdbd2cSJim Jagielski // define the sort descriptor 237*b1cdbd2cSJim Jagielski PropertyValue[] aSortDesc = new PropertyValue[2]; 238*b1cdbd2cSJim Jagielski aSortDesc[0] = new PropertyValue(); 239*b1cdbd2cSJim Jagielski aSortDesc[0].Name = "SortFields"; 240*b1cdbd2cSJim Jagielski aSortDesc[0].Value = aSortFields; 241*b1cdbd2cSJim Jagielski aSortDesc[1] = new PropertyValue(); 242*b1cdbd2cSJim Jagielski aSortDesc[1].Name = "ContainsHeader"; 243*b1cdbd2cSJim Jagielski aSortDesc[1].Value = new Boolean(true); 244*b1cdbd2cSJim Jagielski 245*b1cdbd2cSJim Jagielski // perform the sorting 246*b1cdbd2cSJim Jagielski XSortable xSort = (XSortable) UnoRuntime.queryInterface( 247*b1cdbd2cSJim Jagielski XSortable.class, sourceRange); 248*b1cdbd2cSJim Jagielski xSort.sort(aSortDesc); 249*b1cdbd2cSJim Jagielski 250*b1cdbd2cSJim Jagielski // Verify the sorting result 251*b1cdbd2cSJim Jagielski String[][] expectResult = { { "Level", "Code", "No.", "Team", "Name" }, 252*b1cdbd2cSJim Jagielski { "BS", "20", "4", "B", "Elle" }, 253*b1cdbd2cSJim Jagielski { "BS", "20", "2", "A", "Chcomic" }, 254*b1cdbd2cSJim Jagielski { "CS", "30", "7", "C", "Tom" }, 255*b1cdbd2cSJim Jagielski { "CS", "30", "5", "A", "Ally" }, 256*b1cdbd2cSJim Jagielski { "MS", "20", "6", "C", "Sweet" }, 257*b1cdbd2cSJim Jagielski { "MS", "10", "3", "B", "Kevin" }, 258*b1cdbd2cSJim Jagielski { "MS", "10", "1", "A", "Joker" } }; 259*b1cdbd2cSJim Jagielski String[][] actureResult = SCUtil.getTextFromCellRange(currentsheet, 0, 260*b1cdbd2cSJim Jagielski 0, 4, 7); 261*b1cdbd2cSJim Jagielski assertArrayEquals(expectResult, actureResult); 262*b1cdbd2cSJim Jagielski 263*b1cdbd2cSJim Jagielski // Save and reload the document verify the sort result again 264*b1cdbd2cSJim Jagielski SCUtil.saveFileAs(scComponent, "SortThreeFileds", "ods"); 265*b1cdbd2cSJim Jagielski XSpreadsheetDocument scDocumentTemp = SCUtil.reloadFile(unoApp, 266*b1cdbd2cSJim Jagielski scDocument, "SortThreeFileds.ods"); 267*b1cdbd2cSJim Jagielski scDocument = scDocumentTemp; 268*b1cdbd2cSJim Jagielski currentsheet = SCUtil.getCurrentSheet(scDocument); 269*b1cdbd2cSJim Jagielski actureResult = SCUtil.getTextFromCellRange(currentsheet, 0, 0, 4, 7); 270*b1cdbd2cSJim Jagielski assertArrayEquals(expectResult, actureResult); 271*b1cdbd2cSJim Jagielski } 272*b1cdbd2cSJim Jagielski 273*b1cdbd2cSJim Jagielski /** 274*b1cdbd2cSJim Jagielski * test sort options 275*b1cdbd2cSJim Jagielski */ 276*b1cdbd2cSJim Jagielski @Test sortOption()277*b1cdbd2cSJim Jagielski public void sortOption() throws Exception { 278*b1cdbd2cSJim Jagielski scDocument = SCUtil.getSCDocument(scComponent); 279*b1cdbd2cSJim Jagielski XSpreadsheet currentsheet = SCUtil.getCurrentSheet(scDocument); 280*b1cdbd2cSJim Jagielski XCellRange sourceRange = currentsheet.getCellRangeByName("A1:A8"); 281*b1cdbd2cSJim Jagielski XCellRangeData sourceData = (XCellRangeData) UnoRuntime.queryInterface( 282*b1cdbd2cSJim Jagielski XCellRangeData.class, sourceRange); 283*b1cdbd2cSJim Jagielski Object[][] source = { { "Fri" }, { "Mon" }, { "Sun" }, { "Wed" }, 284*b1cdbd2cSJim Jagielski { "Thu" }, { "Sat" }, { "Tue" }, { "SUN" } }; 285*b1cdbd2cSJim Jagielski sourceData.setDataArray(source); 286*b1cdbd2cSJim Jagielski 287*b1cdbd2cSJim Jagielski XCell cell = currentsheet.getCellByPosition(1, 0); 288*b1cdbd2cSJim Jagielski XCellAddressable xCellAddr = (XCellAddressable) UnoRuntime 289*b1cdbd2cSJim Jagielski .queryInterface(XCellAddressable.class, cell); 290*b1cdbd2cSJim Jagielski CellAddress copytoAddress = xCellAddr.getCellAddress(); 291*b1cdbd2cSJim Jagielski 292*b1cdbd2cSJim Jagielski // define the fields to sort Sort by column 1and sort Ascending and not 293*b1cdbd2cSJim Jagielski // case sensitive 294*b1cdbd2cSJim Jagielski TableSortField[] aSortFields = new TableSortField[1]; 295*b1cdbd2cSJim Jagielski aSortFields[0] = new TableSortField(); 296*b1cdbd2cSJim Jagielski aSortFields[0].Field = 0; 297*b1cdbd2cSJim Jagielski aSortFields[0].IsAscending = true; 298*b1cdbd2cSJim Jagielski aSortFields[0].IsCaseSensitive = false; 299*b1cdbd2cSJim Jagielski 300*b1cdbd2cSJim Jagielski // define the sort descriptor 301*b1cdbd2cSJim Jagielski // Range not contain label,Including formats,copy result to B1, and sort 302*b1cdbd2cSJim Jagielski // with custom sort order 303*b1cdbd2cSJim Jagielski PropertyValue[] aSortDesc = new PropertyValue[7]; 304*b1cdbd2cSJim Jagielski aSortDesc[0] = new PropertyValue(); 305*b1cdbd2cSJim Jagielski aSortDesc[0].Name = "SortFields"; 306*b1cdbd2cSJim Jagielski aSortDesc[0].Value = aSortFields; 307*b1cdbd2cSJim Jagielski aSortDesc[1] = new PropertyValue(); 308*b1cdbd2cSJim Jagielski aSortDesc[1].Name = "ContainsHeader"; 309*b1cdbd2cSJim Jagielski aSortDesc[1].Value = new Boolean(false); 310*b1cdbd2cSJim Jagielski aSortDesc[2] = new PropertyValue(); 311*b1cdbd2cSJim Jagielski aSortDesc[2].Name = "BindFormatsToContent"; 312*b1cdbd2cSJim Jagielski aSortDesc[2].Value = new Boolean(true); 313*b1cdbd2cSJim Jagielski aSortDesc[3] = new PropertyValue(); 314*b1cdbd2cSJim Jagielski aSortDesc[3].Name = "IsUserListEnabled"; 315*b1cdbd2cSJim Jagielski aSortDesc[3].Value = new Boolean(true); 316*b1cdbd2cSJim Jagielski aSortDesc[4] = new PropertyValue(); 317*b1cdbd2cSJim Jagielski aSortDesc[4].Name = "UserListIndex"; 318*b1cdbd2cSJim Jagielski aSortDesc[4].Value = 0; 319*b1cdbd2cSJim Jagielski aSortDesc[5] = new PropertyValue(); 320*b1cdbd2cSJim Jagielski aSortDesc[5].Name = "CopyOutputData"; 321*b1cdbd2cSJim Jagielski aSortDesc[5].Value = new Boolean(true); 322*b1cdbd2cSJim Jagielski aSortDesc[6] = new PropertyValue(); 323*b1cdbd2cSJim Jagielski aSortDesc[6].Name = "OutputPosition"; 324*b1cdbd2cSJim Jagielski aSortDesc[6].Value = copytoAddress; 325*b1cdbd2cSJim Jagielski 326*b1cdbd2cSJim Jagielski // perform the sorting 327*b1cdbd2cSJim Jagielski XSortable xSort = (XSortable) UnoRuntime.queryInterface( 328*b1cdbd2cSJim Jagielski XSortable.class, sourceRange); 329*b1cdbd2cSJim Jagielski xSort.sort(aSortDesc); 330*b1cdbd2cSJim Jagielski 331*b1cdbd2cSJim Jagielski // Verify the sorting result 332*b1cdbd2cSJim Jagielski String[][] expectResult = { { "Sun" }, { "SUN" }, { "Mon" }, { "Tue" }, 333*b1cdbd2cSJim Jagielski { "Wed" }, { "Thu" }, { "Fri" }, { "Sat" } }; 334*b1cdbd2cSJim Jagielski String[][] actureSortResult = SCUtil.getTextFromCellRange(currentsheet, 335*b1cdbd2cSJim Jagielski 1, 0, 1, 7); 336*b1cdbd2cSJim Jagielski String[][] sourceAfterSort = SCUtil.getTextFromCellRange(currentsheet, 337*b1cdbd2cSJim Jagielski 0, 0, 0, 7); 338*b1cdbd2cSJim Jagielski assertArrayEquals(source, sourceAfterSort); 339*b1cdbd2cSJim Jagielski assertArrayEquals(expectResult, actureSortResult); 340*b1cdbd2cSJim Jagielski 341*b1cdbd2cSJim Jagielski // Save and reload the document verify the sort result again 342*b1cdbd2cSJim Jagielski SCUtil.saveFileAs(scComponent, "SortOption", "xls"); 343*b1cdbd2cSJim Jagielski XSpreadsheetDocument scDocumentTemp = SCUtil.reloadFile(unoApp, 344*b1cdbd2cSJim Jagielski scDocument, "SortOption.xls"); 345*b1cdbd2cSJim Jagielski scDocument = scDocumentTemp; 346*b1cdbd2cSJim Jagielski currentsheet = SCUtil.getCurrentSheet(scDocument); 347*b1cdbd2cSJim Jagielski actureSortResult = SCUtil 348*b1cdbd2cSJim Jagielski .getTextFromCellRange(currentsheet, 1, 0, 1, 7); 349*b1cdbd2cSJim Jagielski sourceAfterSort = SCUtil.getTextFromCellRange(currentsheet, 0, 0, 0, 7); 350*b1cdbd2cSJim Jagielski assertArrayEquals(source, sourceAfterSort); 351*b1cdbd2cSJim Jagielski assertArrayEquals(expectResult, actureSortResult); 352*b1cdbd2cSJim Jagielski } 353*b1cdbd2cSJim Jagielski } 354