ASF Bugzilla – Attachment 32783 Details for
Bug 57989
[PATCH] Add a method to set the title of an XSSFChart
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch file for changes to XSSFChart.java and addition of a new unit test.
chartTitle.patch (text/plain), 7.52 KB, created by
Jim King
on 2015-06-02 12:12:10 UTC
(
hide
)
Description:
Patch file for changes to XSSFChart.java and addition of a new unit test.
Filename:
MIME Type:
Creator:
Jim King
Created:
2015-06-02 12:12:10 UTC
Size:
7.52 KB
patch
obsolete
>Index: src/ooxml/testcases/org/apache/poi/xssf/usermodel/charts/TestXSSFChartTitle.java >IDEA additional info: >Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP ><+>windows-1252 >=================================================================== >--- src/ooxml/testcases/org/apache/poi/xssf/usermodel/charts/TestXSSFChartTitle.java (revision ) >+++ src/ooxml/testcases/org/apache/poi/xssf/usermodel/charts/TestXSSFChartTitle.java (revision ) >@@ -0,0 +1,118 @@ >+package org.apache.poi.xssf.usermodel.charts; >+ >+import junit.framework.TestCase; >+import org.apache.poi.ss.usermodel.*; >+import org.apache.poi.ss.usermodel.charts.*; >+import org.apache.poi.ss.util.CellRangeAddress; >+import org.apache.poi.xssf.XSSFTestDataSamples; >+import org.apache.poi.xssf.usermodel.*; >+ >+import java.util.List; >+ >+/** >+ * Test get/set chart title. >+ * >+ * @author Jim King >+ */ >+public class TestXSSFChartTitle extends TestCase { >+ >+ private Workbook createWorkbookWithChart() { >+ Workbook wb = new XSSFWorkbook(); >+ Sheet sheet = wb.createSheet("linechart"); >+ final int NUM_OF_ROWS = 3; >+ final int NUM_OF_COLUMNS = 10; >+ >+ // Create a row and put some cells in it. Rows are 0 based. >+ Row row; >+ Cell cell; >+ for (int rowIndex = 0; rowIndex < NUM_OF_ROWS; rowIndex++) { >+ row = sheet.createRow((short) rowIndex); >+ for (int colIndex = 0; colIndex < NUM_OF_COLUMNS; colIndex++) { >+ cell = row.createCell((short) colIndex); >+ cell.setCellValue(colIndex * (rowIndex + 1)); >+ } >+ } >+ >+ Drawing drawing = sheet.createDrawingPatriarch(); >+ ClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 0, 5, 10, 15); >+ >+ Chart chart = drawing.createChart(anchor); >+ ChartLegend legend = chart.getOrCreateLegend(); >+ legend.setPosition(LegendPosition.TOP_RIGHT); >+ >+ LineChartData data = chart.getChartDataFactory().createLineChartData(); >+ >+ // Use a category axis for the bottom axis. >+ ChartAxis bottomAxis = chart.getChartAxisFactory().createCategoryAxis(AxisPosition.BOTTOM); >+ ValueAxis leftAxis = chart.getChartAxisFactory().createValueAxis(AxisPosition.LEFT); >+ leftAxis.setCrosses(AxisCrosses.AUTO_ZERO); >+ >+ ChartDataSource<Number> xs = DataSources.fromNumericCellRange(sheet, new CellRangeAddress(0, 0, 0, NUM_OF_COLUMNS - 1)); >+ ChartDataSource<Number> ys1 = DataSources.fromNumericCellRange(sheet, new CellRangeAddress(1, 1, 0, NUM_OF_COLUMNS - 1)); >+ ChartDataSource<Number> ys2 = DataSources.fromNumericCellRange(sheet, new CellRangeAddress(2, 2, 0, NUM_OF_COLUMNS - 1)); >+ >+ data.addSeries(xs, ys1); >+ data.addSeries(xs, ys2); >+ >+ chart.plot(data, bottomAxis, leftAxis); >+ >+ return wb; >+ } >+ >+ /** >+ * Gets the first chart from the named sheet in the workbook. >+ */ >+ private XSSFChart getChartFromWorkbook(Workbook wb, String sheetName) { >+ Sheet sheet = wb.getSheet(sheetName); >+ if (sheet instanceof XSSFSheet) { >+ XSSFSheet xsheet = (XSSFSheet) sheet; >+ XSSFDrawing drawing = xsheet.getDrawingPatriarch(); >+ if (drawing != null) { >+ List<XSSFChart> charts = drawing.getCharts(); >+ if (charts != null && charts.size() > 0) { >+ return charts.get(0); >+ } >+ } >+ } >+ return null; >+ } >+ >+ public void testNewChart() { >+ Workbook wb = createWorkbookWithChart(); >+ XSSFChart chart = getChartFromWorkbook(wb, "linechart"); >+ assertNotNull(chart); >+ assertNull(chart.getTitle()); >+ final String myTitle = "My chart title"; >+ chart.setTitle(myTitle); >+ XSSFRichTextString queryTitle = chart.getTitle(); >+ assertNotNull(queryTitle); >+ assertEquals(myTitle, queryTitle.toString()); >+ } >+ >+ public void testExistingChartWithTitle() { >+ Workbook wb = XSSFTestDataSamples.openSampleWorkbook("chartTitle_withTitle.xlsx"); >+ XSSFChart chart = getChartFromWorkbook(wb, "Sheet1"); >+ assertNotNull(chart); >+ XSSFRichTextString originalTitle = chart.getTitle(); >+ assertNotNull(originalTitle); >+ final String myTitle = "My chart title"; >+ assertFalse(myTitle.equals(originalTitle.toString())); >+ chart.setTitle(myTitle); >+ XSSFRichTextString queryTitle = chart.getTitle(); >+ assertNotNull(queryTitle); >+ assertEquals(myTitle, queryTitle.toString()); >+ } >+ >+ public void testExistingChartNoTitle() { >+ Workbook wb = XSSFTestDataSamples.openSampleWorkbook("chartTitle_noTitle.xlsx"); >+ XSSFChart chart = getChartFromWorkbook(wb, "Sheet1"); >+ assertNotNull(chart); >+ assertNull(chart.getTitle()); >+ final String myTitle = "My chart title"; >+ chart.setTitle(myTitle); >+ XSSFRichTextString queryTitle = chart.getTitle(); >+ assertNotNull(queryTitle); >+ assertEquals(myTitle, queryTitle.toString()); >+ } >+ >+} >Index: src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFChart.java >IDEA additional info: >Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP ><+>windows-1252 >=================================================================== >--- src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFChart.java (revision 1682546) >+++ src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFChart.java (revision ) >@@ -51,8 +51,13 @@ > import org.openxmlformats.schemas.drawingml.x2006.chart.CTPlotArea; > import org.openxmlformats.schemas.drawingml.x2006.chart.CTPrintSettings; > import org.openxmlformats.schemas.drawingml.x2006.chart.CTTitle; >+import org.openxmlformats.schemas.drawingml.x2006.chart.CTTx; > import org.openxmlformats.schemas.drawingml.x2006.chart.CTValAx; > import org.openxmlformats.schemas.drawingml.x2006.chart.ChartSpaceDocument; >+import org.openxmlformats.schemas.drawingml.x2006.main.CTRegularTextRun; >+import org.openxmlformats.schemas.drawingml.x2006.main.CTTextBody; >+import org.openxmlformats.schemas.drawingml.x2006.main.CTTextField; >+import org.openxmlformats.schemas.drawingml.x2006.main.CTTextParagraph; > import org.openxmlformats.schemas.officeDocument.x2006.relationships.STRelationshipId; > import org.w3c.dom.NodeList; > import org.w3c.dom.Text; >@@ -277,6 +282,55 @@ > } > > return new XSSFRichTextString(text.toString()); >+ } >+ >+ /** >+ * Sets the title text. >+ */ >+ public void setTitle(String newTitle) { >+ CTTitle ctTitle; >+ if (chart.isSetTitle()) { >+ ctTitle = chart.getTitle(); >+ } else { >+ ctTitle = chart.addNewTitle(); >+ } >+ >+ CTTx tx; >+ if (ctTitle.isSetTx()) { >+ tx = ctTitle.getTx(); >+ } else { >+ tx = ctTitle.addNewTx(); >+ } >+ >+ if (tx.isSetStrRef()) { >+ tx.unsetStrRef(); >+ } >+ >+ CTTextBody rich; >+ if (tx.isSetRich()) { >+ rich = tx.getRich(); >+ } else { >+ rich = tx.addNewRich(); >+ rich.addNewBodyPr(); // body properties must exist (but can be empty) >+ } >+ >+ CTTextParagraph para; >+ if (rich.sizeOfPArray() > 0) { >+ para = rich.getPArray(0); >+ } else { >+ para = rich.addNewP(); >+ } >+ >+ if (para.sizeOfRArray() > 0) { >+ CTRegularTextRun run = para.getRArray(0); >+ run.setT(newTitle); >+ } else if (para.sizeOfFldArray() > 0) { >+ CTTextField fld = para.getFldArray(0); >+ fld.setT(newTitle); >+ } else { >+ CTRegularTextRun run = para.addNewR(); >+ run.setT(newTitle); >+ } > } > > public XSSFChartLegend getOrCreateLegend() {
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 57989
: 32783 |
32784
|
32785