View | Details | Raw Unified | Return to issue 120602
Collapse All | Expand All

(-)testuno/source/testlib/uno/SCUtil.java (+416 lines)
Line 0 Link Here
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 testlib.uno;
24
25
import java.util.HashMap;
26
27
import org.openoffice.test.common.Testspace;
28
import org.openoffice.test.uno.UnoApp;
29
30
import com.sun.star.beans.PropertyValue;
31
import com.sun.star.container.XIndexAccess;
32
import com.sun.star.frame.XController;
33
import com.sun.star.frame.XModel;
34
import com.sun.star.frame.XStorable;
35
import com.sun.star.lang.XComponent;
36
import com.sun.star.sheet.XSpreadsheet;
37
import com.sun.star.sheet.XSpreadsheetDocument;
38
import com.sun.star.sheet.XSpreadsheetView;
39
import com.sun.star.sheet.XSpreadsheets;
40
import com.sun.star.table.XCell;
41
import com.sun.star.table.XCellRange;
42
import com.sun.star.table.XColumnRowRange;
43
import com.sun.star.table.XTableColumns;
44
import com.sun.star.table.XTableRows;
45
import com.sun.star.text.XText;
46
import com.sun.star.uno.UnoRuntime;
47
import com.sun.star.util.XCloseable;
48
49
50
/**
51
 * Utilities of Spreadsheet
52
 * @author test
53
 *
54
 */
55
56
public class SCUtil {
57
	
58
	private static HashMap filterName = new HashMap(); 
59
	
60
	public SCUtil() {
61
		
62
	}
63
	
64
	/**
65
	 * Get spreadsheet document object
66
	 * @param xSpreadsheetComponent
67
	 * @return
68
	 * @throws Exception
69
	 */
70
    public static XSpreadsheetDocument getSCDocument(XComponent xSpreadsheetComponent) throws Exception {
71
    	XSpreadsheetDocument xSpreadsheetDocument = 
72
        		(XSpreadsheetDocument) UnoRuntime.queryInterface(XSpreadsheetDocument.class, xSpreadsheetComponent);
73
        
74
        return xSpreadsheetDocument;
75
    }
76
	
77
    /**
78
     * Get sheet object by sheet name
79
     * @param xSpreadsheetDocument
80
     * @param sheetName 
81
     * @return
82
     * @throws Exception
83
     */
84
	public static XSpreadsheet getSCSheetByName(XSpreadsheetDocument xSpreadsheetDocument, String sheetName) throws Exception {
85
		XSpreadsheets xSpreadsheets = xSpreadsheetDocument.getSheets();
86
		XSpreadsheet xSpreadsheet = 
87
				(XSpreadsheet) UnoRuntime.queryInterface(XSpreadsheet.class, xSpreadsheets.getByName(sheetName));
88
		
89
		return xSpreadsheet;
90
	}
91
	
92
	/**
93
	 * Get sheet object by sheet index
94
	 * @param xSpreadsheetDocument
95
	 * @param index   (Short) 0,1,2,...
96
	 * @return
97
	 * @throws Exception
98
	 */
99
	public static XSpreadsheet getSCSheetByIndex(XSpreadsheetDocument xSpreadsheetDocument, short index) throws Exception {
100
		XSpreadsheets xSpreadsheets = xSpreadsheetDocument.getSheets();
101
		XIndexAccess xIndexAccess = 
102
				(XIndexAccess) UnoRuntime.queryInterface(XIndexAccess.class, xSpreadsheets);
103
		XSpreadsheet xSpreadsheet = 
104
				(XSpreadsheet) UnoRuntime.queryInterface(XSpreadsheet.class, xIndexAccess.getByIndex(index));
105
		
106
		return xSpreadsheet;
107
	}
108
	
109
	/**
110
	 * Get rows object
111
	 * @param xSpreadsheet
112
	 * @return
113
	 * @throws Exception
114
	 */
115
	public static XTableRows getSCRows(XSpreadsheet xSpreadsheet) throws Exception {
116
		XColumnRowRange xColumnRowRange = 
117
				(XColumnRowRange) UnoRuntime.queryInterface(XColumnRowRange.class, xSpreadsheet);
118
		XTableRows xTableRows = xColumnRowRange.getRows();
119
		
120
		return xTableRows;
121
	}
122
	
123
	/**
124
	 * Get columns object
125
	 * @param xSpreadsheet
126
	 * @return
127
	 * @throws Exception
128
	 */
129
	public static XTableColumns getSCColumns(XSpreadsheet xSpreadsheet) throws Exception {
130
		XColumnRowRange xColumnRowRange = 
131
				(XColumnRowRange) UnoRuntime.queryInterface(XColumnRowRange.class, xSpreadsheet);
132
		XTableColumns xTableColumns = xColumnRowRange.getColumns();
133
		
134
		return xTableColumns;
135
	}
136
	
137
	/**
138
	 * Set floating number into specific cell 
139
	 * @param xSpreadsheet
140
	 * @param column
141
	 * @param row
142
	 * @param value
143
	 * @throws Exception
144
	 */
145
	public static void setValueToCell(XSpreadsheet xSpreadsheet, int column, int row, double value) throws Exception {
146
		XCell xCell = xSpreadsheet.getCellByPosition(column, row);
147
		xCell.setValue(value);
148
	}
149
	
150
	/**
151
	 * Set text into specific cell
152
	 * @param xSpreadsheet
153
	 * @param column
154
	 * @param row
155
	 * @param text
156
	 * @throws Exception
157
	 */
158
	public static void setTextToCell(XSpreadsheet xSpreadsheet, int column, int row, String text) throws Exception {
159
		XCell xCell = xSpreadsheet.getCellByPosition(column, row);
160
		XText xText = (XText) UnoRuntime.queryInterface(XText.class, xCell);
161
		xText.setString(text);
162
	}
163
164
	/**
165
	 * Set formula into specific cell
166
	 * @param xSpreadsheet
167
	 * @param column
168
	 * @param row
169
	 * @param formula
170
	 * @throws Exception
171
	 */
172
	public static void setFormulaToCell(XSpreadsheet xSpreadsheet, int column, int row, String formula) throws Exception {
173
		XCell xCell = xSpreadsheet.getCellByPosition(column, row);
174
		xCell.setFormula(formula);
175
	}
176
	
177
	/**
178
	 * Get value from specific cell
179
	 * @param xSpreadsheet
180
	 * @param column
181
	 * @param row
182
	 * @return
183
	 * @throws Exception
184
	 */
185
	public static double getValueFromCell(XSpreadsheet xSpreadsheet, int column, int row) throws Exception {
186
		XCell xCell = xSpreadsheet.getCellByPosition(column, row);
187
		double cellValue = xCell.getValue();
188
		
189
		return cellValue;
190
	}
191
	
192
	/**
193
	 * Get text from specific cell
194
	 * @param xSpreadsheet
195
	 * @param column
196
	 * @param row
197
	 * 
198
	 * @return
199
	 * @throws Exception
200
	 */
201
	public static String getTextFromCell(XSpreadsheet xSpreadsheet, int column, int row) throws Exception {
202
		XCell xCell = xSpreadsheet.getCellByPosition(column, row);
203
		XText xText = (XText) UnoRuntime.queryInterface(XText.class, xCell);
204
		
205
		return xText.getString();
206
	}
207
	
208
	/**
209
	 * Get formula string from specific cell
210
	 * @param xSpreadsheet
211
	 * @param column
212
	 * @param row
213
	 * @return
214
	 * @throws Exception
215
	 */
216
	public static String getFormulaFromCell(XSpreadsheet xSpreadsheet, int column, int row) throws Exception {
217
		XCell xCell = xSpreadsheet.getCellByPosition(column, row);
218
		String cellFormula = xCell.getFormula();
219
		
220
		return cellFormula;
221
	}
222
	
223
	/**
224
	 * Set numbers into a cell range
225
	 * @param xSpreadsheet
226
	 * @param start_col
227
	 * @param start_row
228
	 * @param end_col
229
	 * @param end_row
230
	 * @param values
231
	 * @throws Exception
232
	 */
233
	public static void setValueToCellRange(XSpreadsheet xSpreadsheet, int start_col, int start_row, int end_col, int end_row,  double[][] values) throws Exception {
234
		XCellRange xCellRange = xSpreadsheet.getCellRangeByPosition(start_col, start_row, end_col, end_row);
235
		XCell xCell = null;
236
		for (int i = 0; i <= (end_row - start_row); i++ ) {
237
			for(int j = 0; j <= (end_col - start_col); j++) {
238
				xCell = xCellRange.getCellByPosition(j, i);
239
				xCell.setValue(values[i][j]);
240
			}
241
		}
242
	}
243
	
244
	/**
245
	 * Set text into a cell range
246
	 * @param xSpreadsheet
247
	 * @param start_col
248
	 * @param start_row
249
	 * @param end_col
250
	 * @param end_row
251
	 * @param texts
252
	 * @throws Exception
253
	 */
254
	public static void setTextToCellRange(XSpreadsheet xSpreadsheet, int start_col, int start_row, int end_col, int end_row,  String[][] texts) throws Exception {
255
		XCellRange xCellRange = xSpreadsheet.getCellRangeByPosition(start_col, start_row, end_col, end_row);
256
		XCell xCell = null;
257
		XText xText = null;
258
		for (int i = 0; i <= (end_row - start_row); i++ ) {
259
			for(int j = 0; j <= (end_col - start_col); j++) {
260
				xCell = xCellRange.getCellByPosition(j, i);
261
				xText = (XText) UnoRuntime.queryInterface(XText.class, xCell);
262
				xText.setString(texts[i][j]);
263
			}
264
		}
265
	}
266
	
267
	/**
268
	 * Get number content from a cell range
269
	 * @param xSpreadsheet
270
	 * @param start_col
271
	 * @param start_row
272
	 * @param end_col
273
	 * @param end_row
274
	 * @return
275
	 * @throws Exception
276
	 */
277
	public static double[][] getValueFromCellRange(XSpreadsheet xSpreadsheet, int start_col, int start_row, int end_col, int end_row) throws Exception {
278
		XCellRange xCellRange = xSpreadsheet.getCellRangeByPosition(start_col, start_row, end_col, end_row);
279
		XCell xCell = null;
280
		double[][] cellValues = new double[end_row - start_row+1][end_col - start_col +1];
281
		
282
		for (int i = 0; i <= (end_row - start_row); i++ ) {
283
			for(int j = 0; j <= (end_col - start_col); j++) {
284
				xCell = xCellRange.getCellByPosition(j, i);
285
				cellValues[i][j] = xCell.getValue();
286
			}
287
		}
288
		
289
		return cellValues;
290
	}
291
	
292
	/**
293
	 * Get text content from a cell range
294
	 * @param xSpreadsheet
295
	 * @param start_col
296
	 * @param start_row
297
	 * @param end_col
298
	 * @param end_row
299
	 * @return
300
	 * @throws Exception
301
	 */
302
	public static String[][] getTextFromCellRange(XSpreadsheet xSpreadsheet, int start_col, int start_row, int end_col, int end_row) throws Exception {
303
		XCellRange xCellRange = xSpreadsheet.getCellRangeByPosition(start_col, start_row, end_col, end_row);
304
		XCell xCell = null;
305
		XText xText = null;
306
		String[][] cellTexts = new String[end_row - start_row+1][end_col - start_col +1];
307
		
308
		for (int i = 0; i <= (end_row - start_row); i++ ) {
309
			for(int j = 0; j <= (end_col - start_col); j++) {
310
				xCell = xCellRange.getCellByPosition(j, i);
311
				xText = (XText) UnoRuntime.queryInterface(XText.class, xCell);
312
				cellTexts[i][j] = xText.getString();
313
			}
314
		}
315
		
316
		return cellTexts;
317
	}
318
		
319
	//TODO ZS - public static String[][] getAllFromCellRange
320
	
321
	/**
322
	 * Switch to specific sheet
323
	 * @param xSpreadsheetDocument
324
	 * @param xSpreadsheet
325
	 */
326
	public static void setCurrentSheet(XSpreadsheetDocument xSpreadsheetDocument, XSpreadsheet xSpreadsheet) throws Exception {
327
		XModel xModel = (XModel) UnoRuntime.queryInterface(XModel.class, xSpreadsheetDocument);
328
		XController xController = xModel.getCurrentController();
329
		XSpreadsheetView xSpreadsheetView = (XSpreadsheetView) UnoRuntime.queryInterface(XSpreadsheetView.class, xController);
330
		xSpreadsheetView.setActiveSheet(xSpreadsheet);
331
	}
332
	
333
	/**
334
	 * Get sheet object of current active sheet
335
	 * @param xSpreadsheetDocument
336
	 * @return
337
	 */
338
	public static XSpreadsheet getCurrentSheet(XSpreadsheetDocument xSpreadsheetDocument) throws Exception {
339
		XModel xModel = (XModel) UnoRuntime.queryInterface(XModel.class, xSpreadsheetDocument);
340
		XController xController = xModel.getCurrentController();
341
		XSpreadsheetView xSpreadsheetView = (XSpreadsheetView) UnoRuntime.queryInterface(XSpreadsheetView.class, xController);
342
		XSpreadsheet xSpreadsheet = xSpreadsheetView.getActiveSheet();
343
		
344
		return xSpreadsheet;
345
	}
346
	
347
	/**
348
	 * Save file as specific file format into testspace/output folder.
349
	 * @param scComponent
350
	 * @param fileName  File name string without extension name (e.g. "sampleFile")
351
	 * @param extName ("ods", "ots", "xls", "xlt", "csv")
352
	 * @throws Exception
353
	 */
354
	public static void saveFileAs(XComponent scComponent, String fileName, String extName) throws Exception {
355
		
356
		initFilterName();
357
358
		String storeUrl = Testspace.getUrl("output/" + fileName + "." + extName);
359
		
360
		PropertyValue[] storeProps = new PropertyValue[2];
361
		storeProps[0] = new PropertyValue();
362
		storeProps[0].Name = "FilterName";
363
		storeProps[0].Value = filterName.get(extName);
364
		storeProps[1] = new PropertyValue();
365
		storeProps[1].Name = "Overwrite";
366
		storeProps[1].Value = new Boolean(true);
367
		
368
		XStorable scStorable = 
369
				(XStorable) UnoRuntime.queryInterface(XStorable.class, scComponent);
370
		scStorable.storeAsURL(storeUrl, storeProps);
371
	}
372
	
373
	/**
374
	 * Close specific opening spreadsheet file which has been saved
375
	 * @param xSpreadsheetDocument
376
	 * @throws Exception
377
	 */
378
	public static void closeFile(XSpreadsheetDocument xSpreadsheetDocument) throws Exception {
379
		XCloseable xCloseable = (XCloseable) UnoRuntime.queryInterface(XCloseable.class, xSpreadsheetDocument);
380
		xCloseable.close(false);
381
	}
382
	
383
	/**
384
	 * Close a opening file saved in testspace/output direction and reopen it in Spreadsheet. For save&reload test scenario only.
385
	 * @param unoApp
386
	 * @param xSpreadsheetDocument
387
	 * @param fullFileName   File name with the extension name. (e.g. "sc.ods")
388
	 * @return
389
	 * @throws Exception
390
	 */
391
	public static XSpreadsheetDocument reloadFile(UnoApp unoApp, XSpreadsheetDocument xSpreadsheetDocument, String fullFileName) throws Exception {
392
		closeFile(xSpreadsheetDocument);
393
		
394
		String filePath = Testspace.getPath("output/" + fullFileName);
395
		XSpreadsheetDocument xScDocument = UnoRuntime.queryInterface(XSpreadsheetDocument.class, unoApp.loadDocument(filePath));
396
		
397
		return xScDocument;
398
	}
399
	
400
	/**
401
	 * Initial the filter name list
402
	 * @throws Exception
403
	 */
404
	private static void initFilterName() throws Exception {
405
		if (filterName.size() > 0) {
406
			return;
407
		}
408
		
409
		filterName.put("ods", "calc8");
410
		filterName.put("ots", "calc8_template");
411
		filterName.put("xls", "MS Excel 97");
412
		filterName.put("xlt", "MS Excel 97 Vorlage/Template");
413
		filterName.put("csv", "Text - txt - csv (StarCalc)");
414
	}
415
416
}

Return to issue 120602