mirror of https://github.com/apache/poi.git
Implement error bars for bar and line charts
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1872690 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
b211a1362c
commit
22dd38ef72
|
@ -0,0 +1,45 @@
|
|||
/* ====================================================================
|
||||
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 org.apache.poi.xddf.usermodel.chart;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
import org.openxmlformats.schemas.drawingml.x2006.chart.STErrBarType;;
|
||||
|
||||
public enum ErrorBarType {
|
||||
BOTH(STErrBarType.BOTH),
|
||||
MINUS(STErrBarType.MINUS),
|
||||
PLUS(STErrBarType.PLUS);
|
||||
|
||||
final STErrBarType.Enum underlying;
|
||||
|
||||
ErrorBarType(STErrBarType.Enum barType) {
|
||||
this.underlying = barType;
|
||||
}
|
||||
|
||||
private final static HashMap<STErrBarType.Enum, ErrorBarType> reverse = new HashMap<>();
|
||||
static {
|
||||
for (ErrorBarType value : values()) {
|
||||
reverse.put(value.underlying, value);
|
||||
}
|
||||
}
|
||||
|
||||
static ErrorBarType valueOf(STErrBarType.Enum barType) {
|
||||
return reverse.get(barType);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,44 @@
|
|||
/* ====================================================================
|
||||
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 org.apache.poi.xddf.usermodel.chart;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
import org.openxmlformats.schemas.drawingml.x2006.chart.STErrDir;;
|
||||
|
||||
public enum ErrorDirection {
|
||||
X(STErrDir.X),
|
||||
Y(STErrDir.Y);
|
||||
|
||||
final STErrDir.Enum underlying;
|
||||
|
||||
ErrorDirection(STErrDir.Enum direction) {
|
||||
this.underlying = direction;
|
||||
}
|
||||
|
||||
private final static HashMap<STErrDir.Enum, ErrorDirection> reverse = new HashMap<>();
|
||||
static {
|
||||
for (ErrorDirection value : values()) {
|
||||
reverse.put(value.underlying, value);
|
||||
}
|
||||
}
|
||||
|
||||
static ErrorDirection valueOf(STErrDir.Enum direction) {
|
||||
return reverse.get(direction);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,47 @@
|
|||
/* ====================================================================
|
||||
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 org.apache.poi.xddf.usermodel.chart;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
import org.openxmlformats.schemas.drawingml.x2006.chart.STErrValType;;
|
||||
|
||||
public enum ErrorValueType {
|
||||
CUSTOM(STErrValType.CUST),
|
||||
FIXED_VALUE(STErrValType.FIXED_VAL),
|
||||
PERCENTAGE(STErrValType.PERCENTAGE),
|
||||
STANDARD_DEVIATION(STErrValType.STD_DEV),
|
||||
STANDARD_ERROR(STErrValType.STD_ERR);
|
||||
|
||||
final STErrValType.Enum underlying;
|
||||
|
||||
ErrorValueType(STErrValType.Enum valueType) {
|
||||
this.underlying = valueType;
|
||||
}
|
||||
|
||||
private final static HashMap<STErrValType.Enum, ErrorValueType> reverse = new HashMap<>();
|
||||
static {
|
||||
for (ErrorValueType value : values()) {
|
||||
reverse.put(value.underlying, value);
|
||||
}
|
||||
}
|
||||
|
||||
static ErrorValueType valueOf(STErrValType.Enum valueType) {
|
||||
return reverse.get(valueType);
|
||||
}
|
||||
}
|
|
@ -216,6 +216,41 @@ public class XDDFBar3DChartData extends XDDFChartData {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @since 4.1.2
|
||||
*/
|
||||
public boolean hasErrorBars() {
|
||||
return series.isSetErrBars();
|
||||
}
|
||||
|
||||
/**
|
||||
* @since 4.1.2
|
||||
*/
|
||||
public XDDFErrorBars getErrorBars() {
|
||||
if (series.isSetErrBars()) {
|
||||
return new XDDFErrorBars(series.getErrBars());
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @since 4.1.2
|
||||
*/
|
||||
public void setErrorBars(XDDFErrorBars bars) {
|
||||
if (bars == null) {
|
||||
if (series.isSetErrBars()) {
|
||||
series.unsetErrBars();
|
||||
}
|
||||
} else {
|
||||
if (series.isSetErrBars()) {
|
||||
series.getErrBars().set(bars.getXmlObject());
|
||||
} else {
|
||||
series.addNewErrBars().set(bars.getXmlObject());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setShowLeaderLines(boolean showLeaderLines) {
|
||||
if (!series.isSetDLbls()) {
|
||||
|
|
|
@ -206,6 +206,41 @@ public class XDDFBarChartData extends XDDFChartData {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @since 4.1.2
|
||||
*/
|
||||
public boolean hasErrorBars() {
|
||||
return series.isSetErrBars();
|
||||
}
|
||||
|
||||
/**
|
||||
* @since 4.1.2
|
||||
*/
|
||||
public XDDFErrorBars getErrorBars() {
|
||||
if (series.isSetErrBars()) {
|
||||
return new XDDFErrorBars(series.getErrBars());
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @since 4.1.2
|
||||
*/
|
||||
public void setErrorBars(XDDFErrorBars bars) {
|
||||
if (bars == null) {
|
||||
if (series.isSetErrBars()) {
|
||||
series.unsetErrBars();
|
||||
}
|
||||
} else {
|
||||
if (series.isSetErrBars()) {
|
||||
series.getErrBars().set(bars.getXmlObject());
|
||||
} else {
|
||||
series.addNewErrBars().set(bars.getXmlObject());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setShowLeaderLines(boolean showLeaderLines) {
|
||||
if (!series.isSetDLbls()) {
|
||||
|
|
|
@ -0,0 +1,170 @@
|
|||
/* ====================================================================
|
||||
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 org.apache.poi.xddf.usermodel.chart;
|
||||
|
||||
import org.apache.poi.util.Beta;
|
||||
import org.apache.poi.util.Internal;
|
||||
import org.apache.poi.xddf.usermodel.XDDFShapeProperties;
|
||||
import org.apache.xmlbeans.XmlObject;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.chart.CTErrBars;
|
||||
|
||||
/**
|
||||
* @since POI 4.1.2
|
||||
*/
|
||||
@Beta
|
||||
public class XDDFErrorBars {
|
||||
private CTErrBars bars;
|
||||
|
||||
public XDDFErrorBars() {
|
||||
this(CTErrBars.Factory.newInstance());
|
||||
}
|
||||
|
||||
@Internal
|
||||
protected XDDFErrorBars(CTErrBars bars) {
|
||||
this.bars = bars;
|
||||
}
|
||||
|
||||
@Internal
|
||||
protected XmlObject getXmlObject() {
|
||||
return bars;
|
||||
}
|
||||
|
||||
public XDDFChartExtensionList getExtensionList() {
|
||||
if (bars.isSetExtLst()) {
|
||||
return new XDDFChartExtensionList(bars.getExtLst());
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public void setExtensionList(XDDFChartExtensionList list) {
|
||||
if (list == null) {
|
||||
if (bars.isSetExtLst()) {
|
||||
bars.unsetExtLst();
|
||||
}
|
||||
} else {
|
||||
bars.setExtLst(list.getXmlObject());
|
||||
}
|
||||
}
|
||||
|
||||
public XDDFShapeProperties getShapeProperties() {
|
||||
if (bars.isSetSpPr()) {
|
||||
return new XDDFShapeProperties(bars.getSpPr());
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public void setShapeProperties(XDDFShapeProperties properties) {
|
||||
if (properties == null) {
|
||||
if (bars.isSetSpPr()) {
|
||||
bars.unsetSpPr();
|
||||
}
|
||||
} else {
|
||||
if (bars.isSetSpPr()) {
|
||||
bars.setSpPr(properties.getXmlObject());
|
||||
} else {
|
||||
bars.addNewSpPr().set(properties.getXmlObject());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public ErrorBarType getErrorBarType() {
|
||||
return ErrorBarType.valueOf(bars.getErrBarType().getVal());
|
||||
}
|
||||
|
||||
public void setErrorBarType(ErrorBarType barType) {
|
||||
bars.getErrBarType().setVal(barType.underlying);
|
||||
}
|
||||
|
||||
public ErrorValueType getErrorValueType() {
|
||||
return ErrorValueType.valueOf(bars.getErrValType().getVal());
|
||||
}
|
||||
|
||||
public void setErrorValueType(ErrorValueType valueType) {
|
||||
bars.getErrValType().setVal(valueType.underlying);
|
||||
}
|
||||
|
||||
public ErrorDirection getErrorDirection() {
|
||||
if (bars.isSetErrDir()) {
|
||||
return ErrorDirection.valueOf(bars.getErrDir().getVal());
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public void setErrorDirection(ErrorDirection direction) {
|
||||
if (direction == null) {
|
||||
if (bars.isSetErrDir()) {
|
||||
bars.unsetErrDir();
|
||||
}
|
||||
} else {
|
||||
if (bars.isSetErrDir()) {
|
||||
bars.getErrDir().setVal(direction.underlying);
|
||||
} else {
|
||||
bars.addNewErrDir().setVal(direction.underlying);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Boolean getNoEndCap() {
|
||||
if (bars.isSetVal()) {
|
||||
return bars.getNoEndCap().getVal();
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public void setNoEndCap(Boolean noEndCap) {
|
||||
if (noEndCap == null) {
|
||||
if (bars.isSetNoEndCap()) {
|
||||
bars.unsetNoEndCap();
|
||||
}
|
||||
} else {
|
||||
if (bars.isSetNoEndCap()) {
|
||||
bars.getNoEndCap().setVal(noEndCap);
|
||||
} else {
|
||||
bars.addNewNoEndCap().setVal(noEndCap);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Double getValue() {
|
||||
if (bars.isSetVal()) {
|
||||
return bars.getVal().getVal();
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public void setValue(Double value) {
|
||||
if (value == null) {
|
||||
if (bars.isSetVal()) {
|
||||
bars.unsetVal();
|
||||
}
|
||||
} else {
|
||||
if (bars.isSetVal()) {
|
||||
bars.getVal().setVal(value);
|
||||
} else {
|
||||
bars.addNewVal().setVal(value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// TODO handle minus and plus as numerical data sources
|
||||
}
|
|
@ -248,6 +248,41 @@ public class XDDFLine3DChartData extends XDDFChartData {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @since 4.1.2
|
||||
*/
|
||||
public boolean hasErrorBars() {
|
||||
return series.isSetErrBars();
|
||||
}
|
||||
|
||||
/**
|
||||
* @since 4.1.2
|
||||
*/
|
||||
public XDDFErrorBars getErrorBars() {
|
||||
if (series.isSetErrBars()) {
|
||||
return new XDDFErrorBars(series.getErrBars());
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @since 4.1.2
|
||||
*/
|
||||
public void setErrorBars(XDDFErrorBars bars) {
|
||||
if (bars == null) {
|
||||
if (series.isSetErrBars()) {
|
||||
series.unsetErrBars();
|
||||
}
|
||||
} else {
|
||||
if (series.isSetErrBars()) {
|
||||
series.getErrBars().set(bars.getXmlObject());
|
||||
} else {
|
||||
series.addNewErrBars().set(bars.getXmlObject());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CTAxDataSource getAxDS() {
|
||||
return series.getCat();
|
||||
|
|
|
@ -228,6 +228,41 @@ public class XDDFLineChartData extends XDDFChartData {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @since 4.1.2
|
||||
*/
|
||||
public boolean hasErrorBars() {
|
||||
return series.isSetErrBars();
|
||||
}
|
||||
|
||||
/**
|
||||
* @since 4.1.2
|
||||
*/
|
||||
public XDDFErrorBars getErrorBars() {
|
||||
if (series.isSetErrBars()) {
|
||||
return new XDDFErrorBars(series.getErrBars());
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @since 4.1.2
|
||||
*/
|
||||
public void setErrorBars(XDDFErrorBars bars) {
|
||||
if (bars == null) {
|
||||
if (series.isSetErrBars()) {
|
||||
series.unsetErrBars();
|
||||
}
|
||||
} else {
|
||||
if (series.isSetErrBars()) {
|
||||
series.getErrBars().set(bars.getXmlObject());
|
||||
} else {
|
||||
series.addNewErrBars().set(bars.getXmlObject());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CTAxDataSource getAxDS() {
|
||||
return series.getCat();
|
||||
|
|
|
@ -158,6 +158,15 @@ public class TestNecessaryOOXMLClasses {
|
|||
Assert.assertNotNull(ctOverlap);
|
||||
CTFirstSliceAng ctFirstSliceAng = CTFirstSliceAng.Factory.newInstance();
|
||||
Assert.assertNotNull(ctFirstSliceAng);
|
||||
|
||||
STErrBarType.Enum e9 = STErrBarType.Enum.forString("both");
|
||||
Assert.assertNotNull(e9);
|
||||
STErrValType.Enum e10 = STErrValType.Enum.forString("percentage");
|
||||
Assert.assertNotNull(e10);
|
||||
STErrDir.Enum e11 = STErrDir.Enum.forString("x");
|
||||
Assert.assertNotNull(e11);
|
||||
CTErrBars bars = CTErrBars.Factory.newInstance();
|
||||
Assert.assertNotNull(bars);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue