You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openoffice.apache.org by li...@apache.org on 2012/08/17 07:50:31 UTC

svn commit: r1374141 - /incubator/ooo/trunk/main/test/testuno/source/testlib/uno/SCUtil.java

Author: liuzhe
Date: Fri Aug 17 05:50:31 2012
New Revision: 1374141

URL: http://svn.apache.org/viewvc?rev=1374141&view=rev
Log:
#120602# - [testUNO patch] Utility methods created for Spreadsheet UNO test.
Patch by: Zhu Shan <sh...@gmail.com>
Review by: Liu Zhe <al...@gmail.com>

Added:
    incubator/ooo/trunk/main/test/testuno/source/testlib/uno/SCUtil.java

Added: incubator/ooo/trunk/main/test/testuno/source/testlib/uno/SCUtil.java
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/test/testuno/source/testlib/uno/SCUtil.java?rev=1374141&view=auto
==============================================================================
--- incubator/ooo/trunk/main/test/testuno/source/testlib/uno/SCUtil.java (added)
+++ incubator/ooo/trunk/main/test/testuno/source/testlib/uno/SCUtil.java Fri Aug 17 05:50:31 2012
@@ -0,0 +1,416 @@
+/**************************************************************
+ * 
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * 
+ *************************************************************/
+
+
+package testlib.uno;
+
+import java.util.HashMap;
+
+import org.openoffice.test.common.Testspace;
+import org.openoffice.test.uno.UnoApp;
+
+import com.sun.star.beans.PropertyValue;
+import com.sun.star.container.XIndexAccess;
+import com.sun.star.frame.XController;
+import com.sun.star.frame.XModel;
+import com.sun.star.frame.XStorable;
+import com.sun.star.lang.XComponent;
+import com.sun.star.sheet.XSpreadsheet;
+import com.sun.star.sheet.XSpreadsheetDocument;
+import com.sun.star.sheet.XSpreadsheetView;
+import com.sun.star.sheet.XSpreadsheets;
+import com.sun.star.table.XCell;
+import com.sun.star.table.XCellRange;
+import com.sun.star.table.XColumnRowRange;
+import com.sun.star.table.XTableColumns;
+import com.sun.star.table.XTableRows;
+import com.sun.star.text.XText;
+import com.sun.star.uno.UnoRuntime;
+import com.sun.star.util.XCloseable;
+
+
+/**
+ * Utilities of Spreadsheet
+ * @author test
+ *
+ */
+
+public class SCUtil {
+	
+	private static HashMap filterName = new HashMap(); 
+	
+	public SCUtil() {
+		
+	}
+	
+	/**
+	 * Get spreadsheet document object
+	 * @param xSpreadsheetComponent
+	 * @return
+	 * @throws Exception
+	 */
+    public static XSpreadsheetDocument getSCDocument(XComponent xSpreadsheetComponent) throws Exception {
+    	XSpreadsheetDocument xSpreadsheetDocument = 
+        		(XSpreadsheetDocument) UnoRuntime.queryInterface(XSpreadsheetDocument.class, xSpreadsheetComponent);
+        
+        return xSpreadsheetDocument;
+    }
+	
+    /**
+     * Get sheet object by sheet name
+     * @param xSpreadsheetDocument
+     * @param sheetName 
+     * @return
+     * @throws Exception
+     */
+	public static XSpreadsheet getSCSheetByName(XSpreadsheetDocument xSpreadsheetDocument, String sheetName) throws Exception {
+		XSpreadsheets xSpreadsheets = xSpreadsheetDocument.getSheets();
+		XSpreadsheet xSpreadsheet = 
+				(XSpreadsheet) UnoRuntime.queryInterface(XSpreadsheet.class, xSpreadsheets.getByName(sheetName));
+		
+		return xSpreadsheet;
+	}
+	
+	/**
+	 * Get sheet object by sheet index
+	 * @param xSpreadsheetDocument
+	 * @param index   (Short) 0,1,2,...
+	 * @return
+	 * @throws Exception
+	 */
+	public static XSpreadsheet getSCSheetByIndex(XSpreadsheetDocument xSpreadsheetDocument, short index) throws Exception {
+		XSpreadsheets xSpreadsheets = xSpreadsheetDocument.getSheets();
+		XIndexAccess xIndexAccess = 
+				(XIndexAccess) UnoRuntime.queryInterface(XIndexAccess.class, xSpreadsheets);
+		XSpreadsheet xSpreadsheet = 
+				(XSpreadsheet) UnoRuntime.queryInterface(XSpreadsheet.class, xIndexAccess.getByIndex(index));
+		
+		return xSpreadsheet;
+	}
+	
+	/**
+	 * Get rows object
+	 * @param xSpreadsheet
+	 * @return
+	 * @throws Exception
+	 */
+	public static XTableRows getSCRows(XSpreadsheet xSpreadsheet) throws Exception {
+		XColumnRowRange xColumnRowRange = 
+				(XColumnRowRange) UnoRuntime.queryInterface(XColumnRowRange.class, xSpreadsheet);
+		XTableRows xTableRows = xColumnRowRange.getRows();
+		
+		return xTableRows;
+	}
+	
+	/**
+	 * Get columns object
+	 * @param xSpreadsheet
+	 * @return
+	 * @throws Exception
+	 */
+	public static XTableColumns getSCColumns(XSpreadsheet xSpreadsheet) throws Exception {
+		XColumnRowRange xColumnRowRange = 
+				(XColumnRowRange) UnoRuntime.queryInterface(XColumnRowRange.class, xSpreadsheet);
+		XTableColumns xTableColumns = xColumnRowRange.getColumns();
+		
+		return xTableColumns;
+	}
+	
+	/**
+	 * Set floating number into specific cell 
+	 * @param xSpreadsheet
+	 * @param column
+	 * @param row
+	 * @param value
+	 * @throws Exception
+	 */
+	public static void setValueToCell(XSpreadsheet xSpreadsheet, int column, int row, double value) throws Exception {
+		XCell xCell = xSpreadsheet.getCellByPosition(column, row);
+		xCell.setValue(value);
+	}
+	
+	/**
+	 * Set text into specific cell
+	 * @param xSpreadsheet
+	 * @param column
+	 * @param row
+	 * @param text
+	 * @throws Exception
+	 */
+	public static void setTextToCell(XSpreadsheet xSpreadsheet, int column, int row, String text) throws Exception {
+		XCell xCell = xSpreadsheet.getCellByPosition(column, row);
+		XText xText = (XText) UnoRuntime.queryInterface(XText.class, xCell);
+		xText.setString(text);
+	}
+
+	/**
+	 * Set formula into specific cell
+	 * @param xSpreadsheet
+	 * @param column
+	 * @param row
+	 * @param formula
+	 * @throws Exception
+	 */
+	public static void setFormulaToCell(XSpreadsheet xSpreadsheet, int column, int row, String formula) throws Exception {
+		XCell xCell = xSpreadsheet.getCellByPosition(column, row);
+		xCell.setFormula(formula);
+	}
+	
+	/**
+	 * Get value from specific cell
+	 * @param xSpreadsheet
+	 * @param column
+	 * @param row
+	 * @return
+	 * @throws Exception
+	 */
+	public static double getValueFromCell(XSpreadsheet xSpreadsheet, int column, int row) throws Exception {
+		XCell xCell = xSpreadsheet.getCellByPosition(column, row);
+		double cellValue = xCell.getValue();
+		
+		return cellValue;
+	}
+	
+	/**
+	 * Get text from specific cell
+	 * @param xSpreadsheet
+	 * @param column
+	 * @param row
+	 * 
+	 * @return
+	 * @throws Exception
+	 */
+	public static String getTextFromCell(XSpreadsheet xSpreadsheet, int column, int row) throws Exception {
+		XCell xCell = xSpreadsheet.getCellByPosition(column, row);
+		XText xText = (XText) UnoRuntime.queryInterface(XText.class, xCell);
+		
+		return xText.getString();
+	}
+	
+	/**
+	 * Get formula string from specific cell
+	 * @param xSpreadsheet
+	 * @param column
+	 * @param row
+	 * @return
+	 * @throws Exception
+	 */
+	public static String getFormulaFromCell(XSpreadsheet xSpreadsheet, int column, int row) throws Exception {
+		XCell xCell = xSpreadsheet.getCellByPosition(column, row);
+		String cellFormula = xCell.getFormula();
+		
+		return cellFormula;
+	}
+	
+	/**
+	 * Set numbers into a cell range
+	 * @param xSpreadsheet
+	 * @param start_col
+	 * @param start_row
+	 * @param end_col
+	 * @param end_row
+	 * @param values
+	 * @throws Exception
+	 */
+	public static void setValueToCellRange(XSpreadsheet xSpreadsheet, int start_col, int start_row, int end_col, int end_row,  double[][] values) throws Exception {
+		XCellRange xCellRange = xSpreadsheet.getCellRangeByPosition(start_col, start_row, end_col, end_row);
+		XCell xCell = null;
+		for (int i = 0; i <= (end_row - start_row); i++ ) {
+			for(int j = 0; j <= (end_col - start_col); j++) {
+				xCell = xCellRange.getCellByPosition(j, i);
+				xCell.setValue(values[i][j]);
+			}
+		}
+	}
+	
+	/**
+	 * Set text into a cell range
+	 * @param xSpreadsheet
+	 * @param start_col
+	 * @param start_row
+	 * @param end_col
+	 * @param end_row
+	 * @param texts
+	 * @throws Exception
+	 */
+	public static void setTextToCellRange(XSpreadsheet xSpreadsheet, int start_col, int start_row, int end_col, int end_row,  String[][] texts) throws Exception {
+		XCellRange xCellRange = xSpreadsheet.getCellRangeByPosition(start_col, start_row, end_col, end_row);
+		XCell xCell = null;
+		XText xText = null;
+		for (int i = 0; i <= (end_row - start_row); i++ ) {
+			for(int j = 0; j <= (end_col - start_col); j++) {
+				xCell = xCellRange.getCellByPosition(j, i);
+				xText = (XText) UnoRuntime.queryInterface(XText.class, xCell);
+				xText.setString(texts[i][j]);
+			}
+		}
+	}
+	
+	/**
+	 * Get number content from a cell range
+	 * @param xSpreadsheet
+	 * @param start_col
+	 * @param start_row
+	 * @param end_col
+	 * @param end_row
+	 * @return
+	 * @throws Exception
+	 */
+	public static double[][] getValueFromCellRange(XSpreadsheet xSpreadsheet, int start_col, int start_row, int end_col, int end_row) throws Exception {
+		XCellRange xCellRange = xSpreadsheet.getCellRangeByPosition(start_col, start_row, end_col, end_row);
+		XCell xCell = null;
+		double[][] cellValues = new double[end_row - start_row+1][end_col - start_col +1];
+		
+		for (int i = 0; i <= (end_row - start_row); i++ ) {
+			for(int j = 0; j <= (end_col - start_col); j++) {
+				xCell = xCellRange.getCellByPosition(j, i);
+				cellValues[i][j] = xCell.getValue();
+			}
+		}
+		
+		return cellValues;
+	}
+	
+	/**
+	 * Get text content from a cell range
+	 * @param xSpreadsheet
+	 * @param start_col
+	 * @param start_row
+	 * @param end_col
+	 * @param end_row
+	 * @return
+	 * @throws Exception
+	 */
+	public static String[][] getTextFromCellRange(XSpreadsheet xSpreadsheet, int start_col, int start_row, int end_col, int end_row) throws Exception {
+		XCellRange xCellRange = xSpreadsheet.getCellRangeByPosition(start_col, start_row, end_col, end_row);
+		XCell xCell = null;
+		XText xText = null;
+		String[][] cellTexts = new String[end_row - start_row+1][end_col - start_col +1];
+		
+		for (int i = 0; i <= (end_row - start_row); i++ ) {
+			for(int j = 0; j <= (end_col - start_col); j++) {
+				xCell = xCellRange.getCellByPosition(j, i);
+				xText = (XText) UnoRuntime.queryInterface(XText.class, xCell);
+				cellTexts[i][j] = xText.getString();
+			}
+		}
+		
+		return cellTexts;
+	}
+		
+	//TODO ZS - public static String[][] getAllFromCellRange
+	
+	/**
+	 * Switch to specific sheet
+	 * @param xSpreadsheetDocument
+	 * @param xSpreadsheet
+	 */
+	public static void setCurrentSheet(XSpreadsheetDocument xSpreadsheetDocument, XSpreadsheet xSpreadsheet) throws Exception {
+		XModel xModel = (XModel) UnoRuntime.queryInterface(XModel.class, xSpreadsheetDocument);
+		XController xController = xModel.getCurrentController();
+		XSpreadsheetView xSpreadsheetView = (XSpreadsheetView) UnoRuntime.queryInterface(XSpreadsheetView.class, xController);
+		xSpreadsheetView.setActiveSheet(xSpreadsheet);
+	}
+	
+	/**
+	 * Get sheet object of current active sheet
+	 * @param xSpreadsheetDocument
+	 * @return
+	 */
+	public static XSpreadsheet getCurrentSheet(XSpreadsheetDocument xSpreadsheetDocument) throws Exception {
+		XModel xModel = (XModel) UnoRuntime.queryInterface(XModel.class, xSpreadsheetDocument);
+		XController xController = xModel.getCurrentController();
+		XSpreadsheetView xSpreadsheetView = (XSpreadsheetView) UnoRuntime.queryInterface(XSpreadsheetView.class, xController);
+		XSpreadsheet xSpreadsheet = xSpreadsheetView.getActiveSheet();
+		
+		return xSpreadsheet;
+	}
+	
+	/**
+	 * Save file as specific file format into testspace/output folder.
+	 * @param scComponent
+	 * @param fileName  File name string without extension name (e.g. "sampleFile")
+	 * @param extName ("ods", "ots", "xls", "xlt", "csv")
+	 * @throws Exception
+	 */
+	public static void saveFileAs(XComponent scComponent, String fileName, String extName) throws Exception {
+		
+		initFilterName();
+
+		String storeUrl = Testspace.getUrl("output/" + fileName + "." + extName);
+		
+		PropertyValue[] storeProps = new PropertyValue[2];
+		storeProps[0] = new PropertyValue();
+		storeProps[0].Name = "FilterName";
+		storeProps[0].Value = filterName.get(extName);
+		storeProps[1] = new PropertyValue();
+		storeProps[1].Name = "Overwrite";
+		storeProps[1].Value = new Boolean(true);
+		
+		XStorable scStorable = 
+				(XStorable) UnoRuntime.queryInterface(XStorable.class, scComponent);
+		scStorable.storeAsURL(storeUrl, storeProps);
+	}
+	
+	/**
+	 * Close specific opening spreadsheet file which has been saved
+	 * @param xSpreadsheetDocument
+	 * @throws Exception
+	 */
+	public static void closeFile(XSpreadsheetDocument xSpreadsheetDocument) throws Exception {
+		XCloseable xCloseable = (XCloseable) UnoRuntime.queryInterface(XCloseable.class, xSpreadsheetDocument);
+		xCloseable.close(false);
+	}
+	
+	/**
+	 * Close a opening file saved in testspace/output direction and reopen it in Spreadsheet. For save&reload test scenario only.
+	 * @param unoApp
+	 * @param xSpreadsheetDocument
+	 * @param fullFileName   File name with the extension name. (e.g. "sc.ods")
+	 * @return
+	 * @throws Exception
+	 */
+	public static XSpreadsheetDocument reloadFile(UnoApp unoApp, XSpreadsheetDocument xSpreadsheetDocument, String fullFileName) throws Exception {
+		closeFile(xSpreadsheetDocument);
+		
+		String filePath = Testspace.getPath("output/" + fullFileName);
+		XSpreadsheetDocument xScDocument = UnoRuntime.queryInterface(XSpreadsheetDocument.class, unoApp.loadDocument(filePath));
+		
+		return xScDocument;
+	}
+	
+	/**
+	 * Initial the filter name list
+	 * @throws Exception
+	 */
+	private static void initFilterName() throws Exception {
+		if (filterName.size() > 0) {
+			return;
+		}
+		
+		filterName.put("ods", "calc8");
+		filterName.put("ots", "calc8_template");
+		filterName.put("xls", "MS Excel 97");
+		filterName.put("xlt", "MS Excel 97 Vorlage/Template");
+		filterName.put("csv", "Text - txt - csv (StarCalc)");
+	}
+
+}