public static XDDFCategoryDataSource fromDataSource()

in poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFDataSourcesFactory.java [44:195]


    public static XDDFCategoryDataSource fromDataSource(final CTAxDataSource categoryDS) {
        if (categoryDS == null) {
            return null;
        }
        if (categoryDS.getNumRef() != null && categoryDS.getNumRef().getNumCache() != null) {
            return new XDDFCategoryDataSource() {
                private final CTNumData category = (CTNumData) categoryDS.getNumRef().getNumCache().copy();
                private final String formatCode = category.isSetFormatCode() ? category.getFormatCode() : null;

                @Override
                public boolean isCellRange() {
                    return true;
                }

                @Override
                public boolean isNumeric() {
                    return true;
                }

                @Override
                public String getDataRangeReference() {
                    return categoryDS.getNumRef().getF();
                }

                @Override
                public int getPointCount() {
                    return (int) category.getPtCount().getVal();
                }

                @Override
                public String getPointAt(int index) {
                    if (category.sizeOfPtArray() <= index) {
                        throw new IllegalArgumentException("Cannot access 0-based index " + index +
                                " in point-array with " + category.sizeOfPtArray() + " items");
                    }
                    return category.getPtArray(index).getV();
                }

                @Override
                public String getFormatCode() { return formatCode; }
            };
        } else if (categoryDS.getStrRef() != null && categoryDS.getStrRef().getStrCache() != null) {
            return new XDDFCategoryDataSource() {
                private final CTStrData category = (CTStrData) categoryDS.getStrRef().getStrCache().copy();

                @Override
                public boolean isCellRange() {
                    return true;
                }

                @Override
                public String getDataRangeReference() {
                    return categoryDS.getStrRef().getF();
                }

                @Override
                public int getPointCount() {
                    return (int) category.getPtCount().getVal();
                }

                @Override
                public String getPointAt(int index) {
                    return category.getPtArray(index).getV();
                }

                @Override
                public String getFormatCode() { return null; }
            };
        } else if (categoryDS.getNumLit() != null) {
            return new XDDFCategoryDataSource() {
                private final CTNumData category = (CTNumData) categoryDS.getNumLit().copy();
                private final String formatCode = category.isSetFormatCode() ? category.getFormatCode() : null;

                @Override
                public boolean isCellRange() {
                    return false;
                }

                @Override
                public boolean isLiteral() {
                    return true;
                }

                @Override
                public boolean isNumeric() {
                    return true;
                }

                @Override
                public boolean isReference() {
                    return false;
                }

                @Override
                public String getDataRangeReference() {
                    return null;
                }

                @Override
                public int getPointCount() {
                    return (int) category.getPtCount().getVal();
                }

                @Override
                public String getPointAt(int index) {
                    return category.getPtArray(index).getV();
                }

                @Override
                public String getFormatCode() { return formatCode; }
            };
        } else if (categoryDS.getStrLit() != null) {
            return new XDDFCategoryDataSource() {
                private final CTStrData category = (CTStrData) categoryDS.getStrLit().copy();

                @Override
                public boolean isCellRange() {
                    return false;
                }

                @Override
                public boolean isLiteral() {
                    return true;
                }

                @Override
                public boolean isReference() {
                    return false;
                }

                @Override
                public String getDataRangeReference() {
                    return null;
                }

                @Override
                public int getPointCount() {
                    return (int) category.getPtCount().getVal();
                }

                @Override
                public String getPointAt(int index) {
                    return category.getPtArray(index).getV();
                }

                @Override
                public String getFormatCode() { return null; }
            };
        } else {
            return null; // in some weird cases the element is empty
        }
    }