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.sd.chart; 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski import static org.junit.Assert.assertEquals; 24*b1cdbd2cSJim Jagielski 25*b1cdbd2cSJim Jagielski import org.junit.After; 26*b1cdbd2cSJim Jagielski import org.junit.Before; 27*b1cdbd2cSJim Jagielski import org.junit.Test; 28*b1cdbd2cSJim Jagielski import org.openoffice.test.common.FileUtil; 29*b1cdbd2cSJim Jagielski import org.openoffice.test.common.Testspace; 30*b1cdbd2cSJim Jagielski import org.openoffice.test.uno.UnoApp; 31*b1cdbd2cSJim Jagielski 32*b1cdbd2cSJim Jagielski import testlib.uno.ChartUtil; 33*b1cdbd2cSJim Jagielski import testlib.uno.PageUtil; 34*b1cdbd2cSJim Jagielski import testlib.uno.ShapeUtil; 35*b1cdbd2cSJim Jagielski import testlib.uno.TestUtil; 36*b1cdbd2cSJim Jagielski 37*b1cdbd2cSJim Jagielski import com.sun.star.awt.FontRelief; 38*b1cdbd2cSJim Jagielski import com.sun.star.awt.FontUnderline; 39*b1cdbd2cSJim Jagielski import com.sun.star.awt.FontWeight; 40*b1cdbd2cSJim Jagielski import com.sun.star.awt.Gradient; 41*b1cdbd2cSJim Jagielski import com.sun.star.awt.GradientStyle; 42*b1cdbd2cSJim Jagielski import com.sun.star.awt.Point; 43*b1cdbd2cSJim Jagielski import com.sun.star.awt.Size; 44*b1cdbd2cSJim Jagielski import com.sun.star.beans.PropertyValue; 45*b1cdbd2cSJim Jagielski import com.sun.star.beans.XPropertySet; 46*b1cdbd2cSJim Jagielski import com.sun.star.chart.ChartDataCaption; 47*b1cdbd2cSJim Jagielski import com.sun.star.chart.ChartLegendPosition; 48*b1cdbd2cSJim Jagielski import com.sun.star.chart.XAxisYSupplier; 49*b1cdbd2cSJim Jagielski import com.sun.star.chart.XChartData; 50*b1cdbd2cSJim Jagielski import com.sun.star.chart.XChartDataArray; 51*b1cdbd2cSJim Jagielski import com.sun.star.chart.XChartDocument; 52*b1cdbd2cSJim Jagielski import com.sun.star.chart.XDiagram; 53*b1cdbd2cSJim Jagielski import com.sun.star.chart2.data.XDataSource; 54*b1cdbd2cSJim Jagielski import com.sun.star.chart2.data.XLabeledDataSequence; 55*b1cdbd2cSJim Jagielski import com.sun.star.drawing.DashStyle; 56*b1cdbd2cSJim Jagielski import com.sun.star.drawing.FillStyle; 57*b1cdbd2cSJim Jagielski import com.sun.star.drawing.LineDash; 58*b1cdbd2cSJim Jagielski import com.sun.star.drawing.LineStyle; 59*b1cdbd2cSJim Jagielski import com.sun.star.drawing.XDrawPage; 60*b1cdbd2cSJim Jagielski import com.sun.star.drawing.XDrawPages; 61*b1cdbd2cSJim Jagielski import com.sun.star.drawing.XDrawPagesSupplier; 62*b1cdbd2cSJim Jagielski import com.sun.star.drawing.XShape; 63*b1cdbd2cSJim Jagielski import com.sun.star.drawing.XShapes; 64*b1cdbd2cSJim Jagielski import com.sun.star.frame.XStorable; 65*b1cdbd2cSJim Jagielski import com.sun.star.lang.XComponent; 66*b1cdbd2cSJim Jagielski import com.sun.star.presentation.XPresentation; 67*b1cdbd2cSJim Jagielski import com.sun.star.presentation.XPresentationSupplier; 68*b1cdbd2cSJim Jagielski import com.sun.star.uno.AnyConverter; 69*b1cdbd2cSJim Jagielski import com.sun.star.uno.UnoRuntime; 70*b1cdbd2cSJim Jagielski import com.sun.star.util.XCloseable; 71*b1cdbd2cSJim Jagielski import com.sun.star.util.XModifiable; 72*b1cdbd2cSJim Jagielski 73*b1cdbd2cSJim Jagielski public class ChartData { 74*b1cdbd2cSJim Jagielski UnoApp unoApp = new UnoApp(); 75*b1cdbd2cSJim Jagielski XPresentationSupplier sdDocument = null; 76*b1cdbd2cSJim Jagielski XPresentation pre = null; 77*b1cdbd2cSJim Jagielski XComponent precomp = null; 78*b1cdbd2cSJim Jagielski XComponent impressDocument = null; 79*b1cdbd2cSJim Jagielski XComponent reLoadFile = null; 80*b1cdbd2cSJim Jagielski XDrawPagesSupplier drawsupplier = null; 81*b1cdbd2cSJim Jagielski XDrawPages drawpages = null; 82*b1cdbd2cSJim Jagielski XShapes xShapes = null; 83*b1cdbd2cSJim Jagielski XDrawPage xpage = null; 84*b1cdbd2cSJim Jagielski String filePath = null; 85*b1cdbd2cSJim Jagielski XChartDocument xChartDoc = null; 86*b1cdbd2cSJim Jagielski com.sun.star.chart2.XChartDocument xChart2Doc = null; 87*b1cdbd2cSJim Jagielski 88*b1cdbd2cSJim Jagielski @Before setUp()89*b1cdbd2cSJim Jagielski public void setUp() throws Exception { 90*b1cdbd2cSJim Jagielski unoApp.start(); 91*b1cdbd2cSJim Jagielski createDocumentAndSlide(); 92*b1cdbd2cSJim Jagielski } 93*b1cdbd2cSJim Jagielski 94*b1cdbd2cSJim Jagielski @After tearDown()95*b1cdbd2cSJim Jagielski public void tearDown() throws Exception { 96*b1cdbd2cSJim Jagielski unoApp.closeDocument(impressDocument); 97*b1cdbd2cSJim Jagielski unoApp.closeDocument(reLoadFile); 98*b1cdbd2cSJim Jagielski unoApp.close(); 99*b1cdbd2cSJim Jagielski if (filePath != null) 100*b1cdbd2cSJim Jagielski FileUtil.deleteFile(filePath); 101*b1cdbd2cSJim Jagielski } 102*b1cdbd2cSJim Jagielski 103*b1cdbd2cSJim Jagielski /** 104*b1cdbd2cSJim Jagielski * create a new presentation document and insert a new slide. 105*b1cdbd2cSJim Jagielski * 106*b1cdbd2cSJim Jagielski * @throws Exception 107*b1cdbd2cSJim Jagielski */ createDocumentAndSlide()108*b1cdbd2cSJim Jagielski public void createDocumentAndSlide() throws Exception { 109*b1cdbd2cSJim Jagielski impressDocument = (XComponent) UnoRuntime.queryInterface( 110*b1cdbd2cSJim Jagielski XComponent.class, unoApp.newDocument("simpress")); 111*b1cdbd2cSJim Jagielski drawsupplier = (XDrawPagesSupplier) UnoRuntime.queryInterface( 112*b1cdbd2cSJim Jagielski XDrawPagesSupplier.class, impressDocument); 113*b1cdbd2cSJim Jagielski drawpages = drawsupplier.getDrawPages(); 114*b1cdbd2cSJim Jagielski drawpages.insertNewByIndex(1); 115*b1cdbd2cSJim Jagielski xpage = PageUtil.getDrawPageByIndex(impressDocument, 1); 116*b1cdbd2cSJim Jagielski } 117*b1cdbd2cSJim Jagielski 118*b1cdbd2cSJim Jagielski /** 119*b1cdbd2cSJim Jagielski * Insert default Column Chart to slide. 120*b1cdbd2cSJim Jagielski * 121*b1cdbd2cSJim Jagielski * @return 122*b1cdbd2cSJim Jagielski * @throws Exception 123*b1cdbd2cSJim Jagielski */ insertDefaultChart()124*b1cdbd2cSJim Jagielski public XChartDocument insertDefaultChart() throws Exception { 125*b1cdbd2cSJim Jagielski Point po = new Point(1000, 1000); 126*b1cdbd2cSJim Jagielski xShapes = (XShapes) UnoRuntime.queryInterface(XShapes.class, xpage); 127*b1cdbd2cSJim Jagielski XShape xShape = ShapeUtil.createShape(impressDocument, po, new Size( 128*b1cdbd2cSJim Jagielski 15000, 9271), "com.sun.star.drawing.OLE2Shape"); 129*b1cdbd2cSJim Jagielski xShapes.add(xShape); 130*b1cdbd2cSJim Jagielski xChartDoc = ChartUtil.retrieveChartDocument(xShape); 131*b1cdbd2cSJim Jagielski return xChartDoc; 132*b1cdbd2cSJim Jagielski } 133*b1cdbd2cSJim Jagielski 134*b1cdbd2cSJim Jagielski /** 135*b1cdbd2cSJim Jagielski * test data series 136*b1cdbd2cSJim Jagielski * @throws Exception 137*b1cdbd2cSJim Jagielski */ 138*b1cdbd2cSJim Jagielski @Test testDataSeries()139*b1cdbd2cSJim Jagielski public void testDataSeries() throws Exception { 140*b1cdbd2cSJim Jagielski XShape xShape = null; 141*b1cdbd2cSJim Jagielski insertDefaultChart(); 142*b1cdbd2cSJim Jagielski // get the second data series. 143*b1cdbd2cSJim Jagielski XPropertySet aDiaProp = (XPropertySet) UnoRuntime.queryInterface( 144*b1cdbd2cSJim Jagielski XPropertySet.class, xChartDoc.getDiagram() 145*b1cdbd2cSJim Jagielski .getDataRowProperties(1)); 146*b1cdbd2cSJim Jagielski aDiaProp.setPropertyValue("FillStyle", FillStyle.SOLID); 147*b1cdbd2cSJim Jagielski aDiaProp.setPropertyValue("FillColor", 0xffff00); 148*b1cdbd2cSJim Jagielski // -------------------------- 149*b1cdbd2cSJim Jagielski xShape = saveAndLoadShape(1, 0); 150*b1cdbd2cSJim Jagielski xChartDoc = ChartUtil.getChartDocument(xShape); 151*b1cdbd2cSJim Jagielski aDiaProp = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, 152*b1cdbd2cSJim Jagielski xChartDoc.getDiagram().getDataRowProperties(1)); 153*b1cdbd2cSJim Jagielski assertEquals("the second DataSeries fill color isn't yellow", 0xffff00, 154*b1cdbd2cSJim Jagielski aDiaProp.getPropertyValue("FillColor")); 155*b1cdbd2cSJim Jagielski 156*b1cdbd2cSJim Jagielski } 157*b1cdbd2cSJim Jagielski /** 158*b1cdbd2cSJim Jagielski * test data point 159*b1cdbd2cSJim Jagielski * @throws Exception 160*b1cdbd2cSJim Jagielski */ 161*b1cdbd2cSJim Jagielski @Test testDataPoint()162*b1cdbd2cSJim Jagielski public void testDataPoint() throws Exception { 163*b1cdbd2cSJim Jagielski XShape xShape = null; 164*b1cdbd2cSJim Jagielski insertDefaultChart(); 165*b1cdbd2cSJim Jagielski // set data label to the fourth points, the second series. 166*b1cdbd2cSJim Jagielski XPropertySet aDiaProp = (XPropertySet) UnoRuntime.queryInterface( 167*b1cdbd2cSJim Jagielski XPropertySet.class, xChartDoc.getDiagram() 168*b1cdbd2cSJim Jagielski .getDataPointProperties(3, 1)); 169*b1cdbd2cSJim Jagielski aDiaProp.setPropertyValue("FillStyle", FillStyle.SOLID); 170*b1cdbd2cSJim Jagielski aDiaProp.setPropertyValue("FillColor", 0xffff00); 171*b1cdbd2cSJim Jagielski // -------------------------- 172*b1cdbd2cSJim Jagielski xShape = saveAndLoadShape(1, 0); 173*b1cdbd2cSJim Jagielski xChartDoc = ChartUtil.getChartDocument(xShape); 174*b1cdbd2cSJim Jagielski aDiaProp = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, 175*b1cdbd2cSJim Jagielski xChartDoc.getDiagram().getDataPointProperties(3, 1)); 176*b1cdbd2cSJim Jagielski 177*b1cdbd2cSJim Jagielski assertEquals( 178*b1cdbd2cSJim Jagielski "the fourth point of the second series's fill color isn't yellow", 179*b1cdbd2cSJim Jagielski 0xffff00, aDiaProp.getPropertyValue("FillColor")); 180*b1cdbd2cSJim Jagielski 181*b1cdbd2cSJim Jagielski } 182*b1cdbd2cSJim Jagielski /** 183*b1cdbd2cSJim Jagielski * test data of chart, update it with chart 184*b1cdbd2cSJim Jagielski * @throws Exception 185*b1cdbd2cSJim Jagielski */ 186*b1cdbd2cSJim Jagielski @Test testDataTable()187*b1cdbd2cSJim Jagielski public void testDataTable() throws Exception { 188*b1cdbd2cSJim Jagielski XShape xShape = null; 189*b1cdbd2cSJim Jagielski insertDefaultChart(); 190*b1cdbd2cSJim Jagielski // get data object from chart 191*b1cdbd2cSJim Jagielski XChartDataArray array = (XChartDataArray) UnoRuntime.queryInterface( 192*b1cdbd2cSJim Jagielski XChartDataArray.class, xChartDoc.getData()); 193*b1cdbd2cSJim Jagielski 194*b1cdbd2cSJim Jagielski // set new chart data 195*b1cdbd2cSJim Jagielski double[][] data = new double[][] { { 2, 2 }, { 2, 2 }, { 2, 2 } }; 196*b1cdbd2cSJim Jagielski array.setData(data); 197*b1cdbd2cSJim Jagielski // update chart with data 198*b1cdbd2cSJim Jagielski xChartDoc.attachData(xChartDoc.getData()); 199*b1cdbd2cSJim Jagielski // -------------------------- 200*b1cdbd2cSJim Jagielski xShape = saveAndLoadShape(1, 0); 201*b1cdbd2cSJim Jagielski xChartDoc = ChartUtil.getChartDocument(xShape); 202*b1cdbd2cSJim Jagielski array = (XChartDataArray) UnoRuntime.queryInterface( 203*b1cdbd2cSJim Jagielski XChartDataArray.class, xChartDoc.getData()); 204*b1cdbd2cSJim Jagielski data = array.getData(); 205*b1cdbd2cSJim Jagielski assertEquals(2, data[0][0], 0.0); 206*b1cdbd2cSJim Jagielski 207*b1cdbd2cSJim Jagielski } 208*b1cdbd2cSJim Jagielski 209*b1cdbd2cSJim Jagielski /** 210*b1cdbd2cSJim Jagielski * Save presentation and reLoad the presentation and shape in it. 211*b1cdbd2cSJim Jagielski * 212*b1cdbd2cSJim Jagielski * @param po 213*b1cdbd2cSJim Jagielski * @param shapeType 214*b1cdbd2cSJim Jagielski * @return 215*b1cdbd2cSJim Jagielski * @throws Exception 216*b1cdbd2cSJim Jagielski */ saveAndLoadShape(int pageIndex, int shapeIndex)217*b1cdbd2cSJim Jagielski public XShape saveAndLoadShape(int pageIndex, int shapeIndex) 218*b1cdbd2cSJim Jagielski throws Exception { 219*b1cdbd2cSJim Jagielski reLoadFile = saveAsAndReloadDoc(impressDocument, "impress8", "odp"); 220*b1cdbd2cSJim Jagielski xShapes = ShapeUtil.getShapes(reLoadFile, pageIndex); 221*b1cdbd2cSJim Jagielski return (XShape) UnoRuntime.queryInterface(XShape.class, 222*b1cdbd2cSJim Jagielski xShapes.getByIndex(shapeIndex)); 223*b1cdbd2cSJim Jagielski } 224*b1cdbd2cSJim Jagielski 225*b1cdbd2cSJim Jagielski /** 226*b1cdbd2cSJim Jagielski * save and reload Presentation document. 227*b1cdbd2cSJim Jagielski * 228*b1cdbd2cSJim Jagielski * @param presentationDocument 229*b1cdbd2cSJim Jagielski * @param sFilter 230*b1cdbd2cSJim Jagielski * @param sExtension 231*b1cdbd2cSJim Jagielski * @return 232*b1cdbd2cSJim Jagielski * @throws Exception 233*b1cdbd2cSJim Jagielski */ saveAsAndReloadDoc(XComponent presentationDocument, String sFilter, String sExtension)234*b1cdbd2cSJim Jagielski private XComponent saveAsAndReloadDoc(XComponent presentationDocument, 235*b1cdbd2cSJim Jagielski String sFilter, String sExtension) throws Exception { 236*b1cdbd2cSJim Jagielski filePath = Testspace.getPath("tmp/chartdata." + sExtension); 237*b1cdbd2cSJim Jagielski PropertyValue[] aStoreProperties = new PropertyValue[2]; 238*b1cdbd2cSJim Jagielski aStoreProperties[0] = new PropertyValue(); 239*b1cdbd2cSJim Jagielski aStoreProperties[1] = new PropertyValue(); 240*b1cdbd2cSJim Jagielski aStoreProperties[0].Name = "Override"; 241*b1cdbd2cSJim Jagielski aStoreProperties[0].Value = true; 242*b1cdbd2cSJim Jagielski aStoreProperties[1].Name = "FilterName"; 243*b1cdbd2cSJim Jagielski aStoreProperties[1].Value = sFilter; 244*b1cdbd2cSJim Jagielski XStorable xStorable = (XStorable) UnoRuntime.queryInterface( 245*b1cdbd2cSJim Jagielski XStorable.class, presentationDocument); 246*b1cdbd2cSJim Jagielski xStorable.storeToURL(FileUtil.getUrl(filePath), aStoreProperties); 247*b1cdbd2cSJim Jagielski 248*b1cdbd2cSJim Jagielski return (XComponent) UnoRuntime.queryInterface(XComponent.class, 249*b1cdbd2cSJim Jagielski unoApp.loadDocument(filePath)); 250*b1cdbd2cSJim Jagielski } 251*b1cdbd2cSJim Jagielski 252*b1cdbd2cSJim Jagielski } 253