summaryrefslogtreecommitdiff
path: root/odk/examples/java/Spreadsheet/ChartTypeChange.java
diff options
context:
space:
mode:
Diffstat (limited to 'odk/examples/java/Spreadsheet/ChartTypeChange.java')
-rw-r--r--odk/examples/java/Spreadsheet/ChartTypeChange.java355
1 files changed, 355 insertions, 0 deletions
diff --git a/odk/examples/java/Spreadsheet/ChartTypeChange.java b/odk/examples/java/Spreadsheet/ChartTypeChange.java
new file mode 100644
index 000000000000..1a86ee3d0b97
--- /dev/null
+++ b/odk/examples/java/Spreadsheet/ChartTypeChange.java
@@ -0,0 +1,355 @@
+/*************************************************************************
+ *
+ * The Contents of this file are made available subject to the terms of
+ * the BSD license.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of Sun Microsystems, Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
+ * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *************************************************************************/
+import com.sun.star.awt.Rectangle;
+
+import com.sun.star.beans.PropertyValue;
+import com.sun.star.beans.XPropertySet;
+
+import com.sun.star.chart.XDiagram;
+import com.sun.star.chart.XChartDocument;
+
+import com.sun.star.container.XNameAccess;
+import com.sun.star.container.XIndexAccess;
+
+import com.sun.star.document.XEmbeddedObjectSupplier;
+
+import com.sun.star.frame.XComponentLoader;
+
+import com.sun.star.lang.XComponent;
+import com.sun.star.lang.XMultiServiceFactory;
+import com.sun.star.lang.XMultiComponentFactory;
+
+import com.sun.star.sheet.XSpreadsheets;
+import com.sun.star.sheet.XSpreadsheet;
+import com.sun.star.sheet.XSpreadsheetDocument;
+import com.sun.star.sheet.XCellRangeAddressable;
+
+import com.sun.star.table.XTableChart;
+import com.sun.star.table.XTableCharts;
+import com.sun.star.table.XCell;
+import com.sun.star.table.XCellRange;
+import com.sun.star.table.XTableChartsSupplier;
+import com.sun.star.table.CellRangeAddress;
+
+import com.sun.star.uno.UnoRuntime;
+import com.sun.star.uno.XInterface;
+import com.sun.star.uno.XComponentContext;
+
+
+
+/** This class loads an OpenOffice.org Calc document and changes the type of the
+ * embedded chart.
+ * @author Bertram Nolte
+ */
+public class ChartTypeChange {
+
+ /** Table chart, which type will be changed.
+ */
+ private XTableChart xtablechart = null;
+
+ /** Service factory
+ */
+ private XMultiComponentFactory xMCF = null;
+
+ /** Component context
+ */
+ private XComponentContext xCompContext = null;
+
+ /** Beginning of the program.
+ * @param args No arguments will be passed to the class.
+ */
+ public static void main(String args[]) {
+ try {
+ ChartTypeChange charttypechange = new ChartTypeChange();
+
+ // Double array holding all values the chart should be based on.
+ String[][] stringValues = {
+ { "", "Jan", "Feb", "Mar", "Apr", "Mai" },
+ { "Profit", "12.3", "43.2", "5.1", "76", "56.8" },
+ { "Rival in business", "12.2", "12.6", "17.7", "20.4", "100" },
+ };
+
+ // Create the chart with
+ charttypechange.getChart( stringValues );
+
+ String[] stringChartType = {
+ "com.sun.star.chart.LineDiagram",
+ "com.sun.star.chart.BarDiagram",
+ "com.sun.star.chart.PieDiagram",
+ "com.sun.star.chart.NetDiagram",
+ "com.sun.star.chart.XYDiagram",
+ "com.sun.star.chart.StockDiagram",
+ "com.sun.star.chart.AreaDiagram"
+ };
+
+ for ( int intCounter = 0; intCounter < stringChartType.length;
+ intCounter++ ) {
+ charttypechange.changeChartType( stringChartType[ intCounter ],
+ false );
+ Thread.sleep( 3000 );
+ }
+
+ System.exit(0);
+ }
+ catch( Exception exception ) {
+ System.err.println( exception );
+ }
+ }
+
+ /** The constructor connects to the OpenOffice.org.
+ * @param args Parameters for this constructor (connection string).
+ * @throws Exception All exceptions are thrown from this method.
+ */
+ public ChartTypeChange()
+ throws Exception {
+
+ /* Bootstraps a component context. Component context to be granted
+ to a component for running. Arbitrary values can be retrieved
+ from the context. */
+ xCompContext = com.sun.star.comp.helper.Bootstrap.bootstrap();
+
+ /* Gets the service manager instance to be used (or null). This method has
+ been added for convenience, because the service manager is a often used
+ object. */
+ xMCF = xCompContext.getServiceManager();
+ }
+
+ /** This method will change the type of a specified chart.
+ * @param stringType The chart will be converted to this type.
+ * @param booleanIs3D If the chart should be displayed in 3D this parameter should be set to true.
+ * @throws Exception All exceptions are thrown from this method.
+ */
+ public void changeChartType( String stringType, boolean booleanIs3D )
+ throws Exception {
+ XEmbeddedObjectSupplier xEmbeddedObjSupplier = (XEmbeddedObjectSupplier)
+ UnoRuntime.queryInterface(XEmbeddedObjectSupplier.class, xtablechart);
+ XInterface xInterface = xEmbeddedObjSupplier.getEmbeddedObject();
+
+ XChartDocument xChartDoc = (XChartDocument)UnoRuntime.queryInterface(
+ XChartDocument.class, xInterface);
+ XDiagram xDiagram = (XDiagram) xChartDoc.getDiagram();
+ XMultiServiceFactory xMSF = (XMultiServiceFactory)
+ UnoRuntime.queryInterface( XMultiServiceFactory.class, xChartDoc );
+ Object object = xMSF.createInstance( stringType );
+ xDiagram = (XDiagram) UnoRuntime.queryInterface(XDiagram.class, object);
+
+ XPropertySet xPropSet = (XPropertySet) UnoRuntime.queryInterface(
+ XPropertySet.class, xDiagram );
+ xPropSet.setPropertyValue( "Dim3D", new Boolean( booleanIs3D ) );
+
+ xChartDoc.setDiagram(xDiagram);
+ }
+
+ /** Loading an OpenOffice.org Calc document and getting a chart by name.
+ * @param stringFileName Name of the OpenOffice.org Calc document which should
+ * be loaded.
+ * @param stringChartName Name of the chart which should get a new chart type.
+ */
+ public void getChart( String stringFileName, String stringChartName ) {
+ try {
+ /* A desktop environment contains tasks with one or more
+ frames in which components can be loaded. Desktop is the
+ environment for components which can instanciate within
+ frames. */
+ XComponentLoader xComponentloader = (XComponentLoader)
+ UnoRuntime.queryInterface( XComponentLoader.class,
+ xMCF.createInstanceWithContext("com.sun.star.frame.Desktop",
+ xCompContext ) );
+
+ // Load a Writer document, which will be automaticly displayed
+ XComponent xComponent = xComponentloader.loadComponentFromURL(
+ "file:///" + stringFileName, "_blank", 0,
+ new PropertyValue[0] );
+
+ // Query for the interface XSpreadsheetDocument
+ XSpreadsheetDocument xSpreadSheetDocument = ( XSpreadsheetDocument )
+ UnoRuntime.queryInterface( XSpreadsheetDocument.class, xComponent );
+
+ XSpreadsheets xSpreadsheets = xSpreadSheetDocument.getSheets() ;
+
+ XIndexAccess xIndexAccess = (XIndexAccess)
+ UnoRuntime.queryInterface(XIndexAccess.class, xSpreadsheets );
+
+ XSpreadsheet xSpreadsheet = (XSpreadsheet) UnoRuntime.queryInterface(
+ XSpreadsheet.class, xIndexAccess.getByIndex(0));
+
+ XTableChartsSupplier xTableChartsSupplier = ( XTableChartsSupplier )
+ UnoRuntime.queryInterface( XTableChartsSupplier.class, xSpreadsheet );
+
+ xIndexAccess = (XIndexAccess) UnoRuntime.queryInterface(
+ XIndexAccess.class, xTableChartsSupplier.getCharts() );
+
+ this.xtablechart = (XTableChart) UnoRuntime.queryInterface(
+ XTableChart.class, xIndexAccess.getByIndex( 0 ) );
+ }
+ catch( Exception exception ) {
+ System.err.println( exception );
+ }
+ }
+
+ /** Creating an empty OpenOffice.org Calc document, inserting data, and getting a
+ * chart by name.
+ * @param stringValues Double array with the values for the chart.
+ */
+ public void getChart( String[][] stringValues ) {
+ try {
+ /* A desktop environment contains tasks with one or more
+ frames in which components can be loaded. Desktop is the
+ environment for components which can instanciate within
+ frames. */
+ XComponentLoader xcomponentloader = ( XComponentLoader )
+ UnoRuntime.queryInterface( XComponentLoader.class,
+ xMCF.createInstanceWithContext(
+ "com.sun.star.frame.Desktop",
+ xCompContext ) );
+
+ // Create an empty calc document, which will be automaticly displayed
+ XComponent xComponent = xcomponentloader.loadComponentFromURL(
+ "private:factory/scalc", "_blank", 0,
+ new PropertyValue[0] );
+
+ // Query for the interface XSpreadsheetDocument
+ XSpreadsheetDocument xspreadsheetdocument = ( XSpreadsheetDocument )
+ UnoRuntime.queryInterface( XSpreadsheetDocument.class, xComponent );
+
+ // Get all sheets of the spreadsheet document.
+ XSpreadsheets xspreadsheets = xspreadsheetdocument.getSheets() ;
+
+ // Get the index of the spreadsheet document.
+ XIndexAccess xindexaccess = (XIndexAccess) UnoRuntime.queryInterface(
+ XIndexAccess.class, xspreadsheets );
+
+ // Get the first spreadsheet.
+ XSpreadsheet xspreadsheet = (XSpreadsheet) UnoRuntime.queryInterface(
+ XSpreadsheet.class, xindexaccess.getByIndex(0));
+
+ // The double array will written to the spreadsheet
+ for ( int intY = 0; intY < stringValues.length; intY++ ) {
+ for ( int intX = 0; intX < stringValues[ intY ].length;
+ intX++ ) {
+ // Insert the value to the cell, specified by intY and intX.
+ this.insertIntoCell( intY, intX,
+ stringValues[ intY ][ intX ], xspreadsheet, "" );
+ }
+ }
+
+ // Create a rectangle, which holds the size of the chart.
+ Rectangle rectangle = new Rectangle();
+ rectangle.X = 500;
+ rectangle.Y = 3000;
+ rectangle.Width = 25000;
+ rectangle.Height = 11000;
+
+ // Get the cell range of the spreadsheet.
+ XCellRange xcellrange = ( XCellRange ) UnoRuntime.queryInterface(
+ XCellRange.class, xspreadsheet );
+
+ // Create the Unicode of the character for the column name.
+ char charRectangle = ( char ) ( 65 + stringValues.length - 1 );
+
+ // Get maximum length all rows in the double array.
+ int intMaximumWidthRow = 0;
+ for ( int intRow = 0; intRow < stringValues.length; intRow++ ) {
+ if ( stringValues[ intRow ].length > intMaximumWidthRow ) {
+ intMaximumWidthRow = stringValues[ intRow ].length;
+ }
+ }
+
+ // Get the cell range of the written values.
+ XCellRange xcellrangeChart = xcellrange.getCellRangeByName( "A1:" +
+ charRectangle + intMaximumWidthRow );
+
+ // Get the addressable cell range.
+ XCellRangeAddressable xcellrangeaddressable =
+ ( XCellRangeAddressable ) UnoRuntime.queryInterface(
+ XCellRangeAddressable.class, xcellrangeChart );
+
+ // Get the cell range address.
+ CellRangeAddress cellrangeaddress = xcellrangeaddressable.getRangeAddress();
+
+ // Create the cell range address for the chart.
+ CellRangeAddress[] cellrangeaddressChart =
+ new CellRangeAddress[ 1 ];
+ cellrangeaddressChart[ 0 ] = cellrangeaddress;
+
+ // Get the table charts supplier of the spreadsheet.
+ XTableChartsSupplier xtablechartssupplier = ( XTableChartsSupplier )
+ UnoRuntime.queryInterface( XTableChartsSupplier.class, xspreadsheet );
+
+ // Get all table charts of the spreadsheet.
+ XTableCharts xtablecharts = xtablechartssupplier.getCharts();
+
+ // Create a table chart with all written values.
+ xtablecharts.addNewByName( "Example", rectangle,
+ cellrangeaddressChart, true, true );
+
+ // Get the created table chart.
+ this.xtablechart = ( XTableChart ) UnoRuntime.queryInterface(
+ XTableChart.class, (( XNameAccess ) UnoRuntime.queryInterface(
+ XNameAccess.class, xtablecharts ) ).getByName( "Example" ));
+ }
+ catch( Exception exception ) {
+ System.err.println( exception );
+ }
+ }
+
+ /** Inserting a given value to a cell, that is specified by the parameters intX
+ * and intY.
+ * @param intX Column on the spreadsheet.
+ * @param intY Row on the spreadsheet.
+ * @param stringValue Value to be inserted to a cell.
+ * @param xspreadsheet Spreadsheet of the cell, which will be changed.
+ * @param stringFlag If the value of stringFlag is "V", the stringValue
+ * will be converted to the
+ * float type. Otherwise the stringValue will be written as a formula.
+ */
+ public static void insertIntoCell( int intX, int intY, String stringValue,
+ XSpreadsheet xspreadsheet, String stringFlag )
+ {
+ XCell xcell = null;
+
+ try {
+ xcell = xspreadsheet.getCellByPosition( intX, intY );
+ }
+ catch ( com.sun.star.lang.IndexOutOfBoundsException exception ) {
+ System.out.println( "Could not get cell." );
+ }
+ if ( stringFlag.equals( "V" ) ) {
+ xcell.setValue( ( new Float( stringValue ) ).floatValue() );
+ }
+ else {
+ xcell.setFormula( stringValue );
+ }
+ }
+}