public void plot() {
if (categoryData.isNumeric()) {
CTNumData cache = retrieveNumCache(getAxDS(), categoryData);
- ((XDDFNumericalDataSource<?>) categoryData).fillNumericalCache(cache);
+ categoryData.fillNumericalCache(cache);
} else {
CTStrData cache = retrieveStrCache(getAxDS(), categoryData);
categoryData.fillStringCache(cache);
import org.apache.poi.util.Beta;
import org.apache.poi.util.Internal;
+import org.openxmlformats.schemas.drawingml.x2006.chart.CTNumData;
+import org.openxmlformats.schemas.drawingml.x2006.chart.CTNumVal;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTStrData;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTStrVal;
String getFormula();
+ String getFormatCode();
+
+ /**
+ * @since POI 4.1.3
+ */
+ @Internal
+ default void fillNumericalCache(CTNumData cache) {
+ String formatCode = getFormatCode();
+ if (formatCode == null) {
+ if (cache.isSetFormatCode()) {
+ cache.unsetFormatCode();
+ }
+ } else {
+ cache.setFormatCode(formatCode);
+ }
+ cache.setPtArray(null); // unset old values
+ final int numOfPoints = getPointCount();
+ int effectiveNumOfPoints = 0;
+ for (int i = 0; i < numOfPoints; ++i) {
+ Object value = getPointAt(i);
+ if (value != null) {
+ CTNumVal ctNumVal = cache.addNewPt();
+ ctNumVal.setIdx(i);
+ ctNumVal.setV(value.toString());
+ effectiveNumOfPoints++;
+ }
+ }
+ if (effectiveNumOfPoints == 0) {
+ cache.unsetPtCount();
+ } else {
+ if (cache.isSetPtCount()) {
+ cache.getPtCount().setVal(numOfPoints);
+ } else {
+ cache.addNewPtCount().setVal(numOfPoints);
+ }
+ }
+ }
+
/**
* @since POI 4.1.2
*/
if (categoryDS.getStrRef() == null) {
return new XDDFCategoryDataSource() {
private CTNumData category = (CTNumData) categoryDS.getNumRef().getNumCache().copy();
+ private String formatCode = category.isSetFormatCode() ? category.getFormatCode() : null;
@Override
public boolean isCellRange() {
public String getPointAt(int index) {
return category.getPtArray(index).getV();
}
+
+ @Override
+ public String getFormatCode() { return formatCode; }
};
} else {
return new XDDFCategoryDataSource() {
public String getPointAt(int index) {
return category.getPtArray(index).getV();
}
+
+ @Override
+ public String getFormatCode() { return null; }
};
}
}
public String getFormula() {
return getDataRangeReference();
}
+
+ @Override
+ public String getFormatCode() { return null; }
}
private static class LiteralNumericalArrayDataSource<T extends Number> extends NumericalArrayDataSource<T> {
public boolean isNumeric() {
return false;
}
+
+ @Override
+ public String getFormatCode() { return null; }
}
}
@Beta
public interface XDDFNumericalDataSource<T extends Number> extends XDDFDataSource<T> {
- String getFormatCode();
-
void setFormatCode(String formatCode);
@Override
default boolean isLiteral() {
return false;
}
-
- /**
- * @since POI 4.1.2
- */
- @Internal
- default void fillNumericalCache(CTNumData cache) {
- String formatCode = getFormatCode();
- if (formatCode == null) {
- if (cache.isSetFormatCode()) {
- cache.unsetFormatCode();
- }
- } else {
- cache.setFormatCode(formatCode);
- }
- cache.setPtArray(null); // unset old values
- final int numOfPoints = getPointCount();
- int effectiveNumOfPoints = 0;
- for (int i = 0; i < numOfPoints; ++i) {
- Object value = getPointAt(i);
- if (value != null) {
- CTNumVal ctNumVal = cache.addNewPt();
- ctNumVal.setIdx(i);
- ctNumVal.setV(value.toString());
- effectiveNumOfPoints++;
- }
- }
- if (effectiveNumOfPoints == 0) {
- cache.unsetPtCount();
- } else {
- if (cache.isSetPtCount()) {
- cache.getPtCount().setVal(numOfPoints);
- } else {
- cache.addNewPtCount().setVal(numOfPoints);
- }
- }
- }
}