--- /dev/null
+/* ====================================================================
+ 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.xdgf.usermodel.section;
+
+import java.util.Map;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import com.microsoft.schemas.office.visio.x2012.main.RowType;
+import org.apache.poi.ooxml.POIXMLException;
+import org.apache.poi.util.Internal;
+import org.apache.poi.xdgf.usermodel.section.geometry.ArcTo;
+import org.apache.poi.xdgf.usermodel.section.geometry.Ellipse;
+import org.apache.poi.xdgf.usermodel.section.geometry.EllipticalArcTo;
+import org.apache.poi.xdgf.usermodel.section.geometry.GeometryRow;
+import org.apache.poi.xdgf.usermodel.section.geometry.InfiniteLine;
+import org.apache.poi.xdgf.usermodel.section.geometry.LineTo;
+import org.apache.poi.xdgf.usermodel.section.geometry.MoveTo;
+import org.apache.poi.xdgf.usermodel.section.geometry.NURBSTo;
+import org.apache.poi.xdgf.usermodel.section.geometry.PolyLineTo;
+import org.apache.poi.xdgf.usermodel.section.geometry.RelCubBezTo;
+import org.apache.poi.xdgf.usermodel.section.geometry.RelEllipticalArcTo;
+import org.apache.poi.xdgf.usermodel.section.geometry.RelLineTo;
+import org.apache.poi.xdgf.usermodel.section.geometry.RelMoveTo;
+import org.apache.poi.xdgf.usermodel.section.geometry.RelQuadBezTo;
+import org.apache.poi.xdgf.usermodel.section.geometry.SplineKnot;
+import org.apache.poi.xdgf.usermodel.section.geometry.SplineStart;
+
+@Internal
+enum GeometryRowTypes {
+ ARC_TO("ArcTo", ArcTo::new),
+ ELLIPSE("Ellipse", Ellipse::new),
+ ELLIPTICAL_ARC_TO("EllipticalArcTo", EllipticalArcTo::new),
+ INFINITE_LINE("InfiniteLine", InfiniteLine::new),
+ LINE_TO("LineTo", LineTo::new),
+ MOVE_TO("MoveTo", MoveTo::new),
+ NURBS_TO("NURBSTo", NURBSTo::new),
+ // Note - two different spellings depending on version used...!
+ POLYLINE_TO("PolylineTo", PolyLineTo::new),
+ REL_CUB_BEZ_TO("RelCubBezTo", RelCubBezTo::new),
+ REL_ELLIPTICAL_ARC_TO("RelEllipticalArcTo", RelEllipticalArcTo::new),
+ REL_LINE_TO("RelLineTo", RelLineTo::new),
+ REL_MOVE_TO("RelMoveTo", RelMoveTo::new),
+ REL_QUAD_BEZ_TO("RelQuadBezTo", RelQuadBezTo::new),
+ SPLINE_KNOT("SplineKnot", SplineKnot::new),
+ SPLINE_START("SplineStart", SplineStart::new)
+ ;
+
+ public String rowType;
+ public Function<RowType, ? extends GeometryRow> constructor;
+
+ GeometryRowTypes(String rowType, Function<RowType, ? extends GeometryRow> constructor) {
+ this.rowType = rowType;
+ this.constructor = constructor;
+ }
+
+ public String getRowType() {
+ return rowType;
+ }
+
+ public static GeometryRow load(RowType row) {
+ final String name = row.getT();
+ GeometryRowTypes l = LOOKUP.get(name);
+ if (l == null) {
+ final String typeName = row.schemaType().getName().getLocalPart();
+ throw new POIXMLException("Invalid '" + typeName + "' name '" + name + "'");
+ }
+ return l.constructor.apply(row);
+ }
+
+ private static final Map<String, GeometryRowTypes> LOOKUP =
+ Stream.of(values()).collect(Collectors.toMap(GeometryRowTypes::getRowType, Function.identity()));
+}
import java.util.SortedMap;
import java.util.TreeMap;
+import com.microsoft.schemas.office.visio.x2012.main.RowType;
+import com.microsoft.schemas.office.visio.x2012.main.SectionType;
import org.apache.poi.ooxml.POIXMLException;
import org.apache.poi.xdgf.geom.SplineCollector;
import org.apache.poi.xdgf.usermodel.XDGFCell;
import org.apache.poi.xdgf.usermodel.XDGFSheet;
import org.apache.poi.xdgf.usermodel.section.geometry.Ellipse;
import org.apache.poi.xdgf.usermodel.section.geometry.GeometryRow;
-import org.apache.poi.xdgf.usermodel.section.geometry.GeometryRowFactory;
import org.apache.poi.xdgf.usermodel.section.geometry.InfiniteLine;
import org.apache.poi.xdgf.usermodel.section.geometry.SplineKnot;
import org.apache.poi.xdgf.usermodel.section.geometry.SplineStart;
-import com.microsoft.schemas.office.visio.x2012.main.RowType;
-import com.microsoft.schemas.office.visio.x2012.main.SectionType;
-
public class GeometrySection extends XDGFSection {
GeometrySection _master;
if (_rows.containsKey(row.getIX()))
throw new POIXMLException("Index element '" + row.getIX() + "' already exists");
- _rows.put(row.getIX(), GeometryRowFactory.load(row));
+ _rows.put(row.getIX(), GeometryRowTypes.load(row));
}
}
import java.util.HashMap;
import java.util.Map;
-import org.apache.poi.ooxml.POIXMLException;
+import com.microsoft.schemas.office.visio.x2012.main.CellType;
+import com.microsoft.schemas.office.visio.x2012.main.SectionType;
import org.apache.poi.util.Internal;
import org.apache.poi.xdgf.usermodel.XDGFCell;
import org.apache.poi.xdgf.usermodel.XDGFSheet;
-import org.apache.poi.xdgf.util.ObjectFactory;
-
-import com.microsoft.schemas.office.visio.x2012.main.CellType;
-import com.microsoft.schemas.office.visio.x2012.main.SectionType;
public abstract class XDGFSection {
- static final ObjectFactory<XDGFSection, SectionType> _sectionTypes;
-
- static {
- _sectionTypes = new ObjectFactory<>();
- try {
- _sectionTypes.put("LineGradient", GenericSection.class, SectionType.class, XDGFSheet.class);
- _sectionTypes.put("FillGradient", GenericSection.class, SectionType.class, XDGFSheet.class);
- _sectionTypes.put("Character", CharacterSection.class, SectionType.class, XDGFSheet.class);
- _sectionTypes.put("Paragraph", GenericSection.class, SectionType.class, XDGFSheet.class);
- _sectionTypes.put("Tabs", GenericSection.class, SectionType.class, XDGFSheet.class);
- _sectionTypes.put("Scratch", GenericSection.class, SectionType.class, XDGFSheet.class);
- _sectionTypes.put("Connection", GenericSection.class, SectionType.class, XDGFSheet.class);
- _sectionTypes.put("ConnectionABCD", GenericSection.class, SectionType.class, XDGFSheet.class);
- _sectionTypes.put("Field", GenericSection.class, SectionType.class, XDGFSheet.class);
- _sectionTypes.put("Control", GenericSection.class, SectionType.class, XDGFSheet.class);
- _sectionTypes.put("Geometry", GeometrySection.class, SectionType.class, XDGFSheet.class);
- _sectionTypes.put("Actions", GenericSection.class, SectionType.class, XDGFSheet.class);
- _sectionTypes.put("Layer", GenericSection.class, SectionType.class, XDGFSheet.class);
- _sectionTypes.put("User", GenericSection.class, SectionType.class, XDGFSheet.class);
- _sectionTypes.put("Property", GenericSection.class, SectionType.class, XDGFSheet.class);
- _sectionTypes.put("Hyperlink", GenericSection.class, SectionType.class, XDGFSheet.class);
- _sectionTypes.put("Reviewer", GenericSection.class, SectionType.class, XDGFSheet.class);
- _sectionTypes.put("Annotation", GenericSection.class, SectionType.class, XDGFSheet.class);
- _sectionTypes.put("ActionTag", GenericSection.class, SectionType.class, XDGFSheet.class);
- } catch (NoSuchMethodException | SecurityException e) {
- throw new POIXMLException("Internal error");
- }
- }
public static XDGFSection load(SectionType section, XDGFSheet containingSheet) {
- return _sectionTypes.load(section.getN(), section, containingSheet);
+ return XDGFSectionTypes.load(section, containingSheet);
}
protected Map<String, XDGFCell> _cells = new HashMap<>();
- public XDGFSection(SectionType section, XDGFSheet containingSheet) {
+ protected XDGFSection(SectionType section, XDGFSheet containingSheet) {
_section = section;
_containingSheet = containingSheet;
--- /dev/null
+/* ====================================================================
+ 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.xdgf.usermodel.section;
+
+import java.util.Map;
+import java.util.function.BiFunction;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import com.microsoft.schemas.office.visio.x2012.main.SectionType;
+import org.apache.poi.ooxml.POIXMLException;
+import org.apache.poi.util.Internal;
+import org.apache.poi.xdgf.usermodel.XDGFSheet;
+
+@Internal
+enum XDGFSectionTypes {
+ LINE_GRADIENT("LineGradient", GenericSection::new),
+ FILL_GRADIENT("FillGradient", GenericSection::new),
+ CHARACTER("Character", CharacterSection::new),
+ PARAGRAPH("Paragraph", GenericSection::new),
+ TABS("Tabs", GenericSection::new),
+ SCRATCH("Scratch", GenericSection::new),
+ CONNECTION("Connection", GenericSection::new),
+ CONNECTION_ABCD("ConnectionABCD", GenericSection::new),
+ FIELD("Field", GenericSection::new),
+ CONTROL("Control", GenericSection::new),
+ GEOMETRY("Geometry", GeometrySection::new),
+ ACTIONS("Actions", GenericSection::new),
+ LAYER("Layer", GenericSection::new),
+ USER("User", GenericSection::new),
+ PROPERTY("Property", GenericSection::new),
+ HYPERLINK("Hyperlink", GenericSection::new),
+ REVIEWER("Reviewer", GenericSection::new),
+ ANNOTATION("Annotation", GenericSection::new),
+ ACTION_TAG("ActionTag", GenericSection::new);
+
+ public String sectionType;
+ public BiFunction<SectionType, XDGFSheet, ? extends XDGFSection> constructor;
+
+ XDGFSectionTypes(String sectionType, BiFunction<SectionType, XDGFSheet, ? extends XDGFSection> constructor) {
+ this.sectionType = sectionType;
+ this.constructor = constructor;
+ }
+
+ public String getSectionType() {
+ return sectionType;
+ }
+
+ public static XDGFSection load(SectionType section, XDGFSheet containingSheet) {
+ final String name = section.getN();
+ XDGFSectionTypes l = LOOKUP.get(name);
+ if (l == null) {
+ final String typeName = section.schemaType().getName().getLocalPart();
+ throw new POIXMLException("Invalid '" + typeName + "' name '" + name + "'");
+ }
+ return l.constructor.apply(section, containingSheet);
+ }
+
+ private static final Map<String, XDGFSectionTypes> LOOKUP =
+ Stream.of(values()).collect(Collectors.toMap(XDGFSectionTypes::getSectionType, Function.identity()));
+}
+++ /dev/null
-/* ====================================================================
- 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.xdgf.usermodel.section.geometry;
-
-import org.apache.poi.ooxml.POIXMLException;
-import org.apache.poi.xdgf.util.ObjectFactory;
-
-import com.microsoft.schemas.office.visio.x2012.main.RowType;
-
-public class GeometryRowFactory {
-
- static final ObjectFactory<GeometryRow, RowType> _rowTypes;
-
- static {
- _rowTypes = new ObjectFactory<>();
- try {
- _rowTypes.put("ArcTo", ArcTo.class, RowType.class);
- _rowTypes.put("Ellipse", Ellipse.class, RowType.class);
- _rowTypes.put("EllipticalArcTo", EllipticalArcTo.class,
- RowType.class);
- _rowTypes.put("InfiniteLine", InfiniteLine.class, RowType.class);
- _rowTypes.put("LineTo", LineTo.class, RowType.class);
- _rowTypes.put("MoveTo", MoveTo.class, RowType.class);
- _rowTypes.put("NURBSTo", NURBSTo.class, RowType.class);
- // Note - two different spellings depending on version used...!
- _rowTypes.put("PolylineTo", PolyLineTo.class, RowType.class);
- _rowTypes.put("PolyLineTo", PolyLineTo.class, RowType.class);
- _rowTypes.put("RelCubBezTo", RelCubBezTo.class, RowType.class);
- _rowTypes.put("RelEllipticalArcTo", RelEllipticalArcTo.class,
- RowType.class);
- _rowTypes.put("RelLineTo", RelLineTo.class, RowType.class);
- _rowTypes.put("RelMoveTo", RelMoveTo.class, RowType.class);
- _rowTypes.put("RelQuadBezTo", RelQuadBezTo.class, RowType.class);
- _rowTypes.put("SplineKnot", SplineKnot.class, RowType.class);
- _rowTypes.put("SplineStart", SplineStart.class, RowType.class);
- } catch (NoSuchMethodException | SecurityException e) {
- throw new POIXMLException("Internal error", e);
- }
-
- }
-
- public static GeometryRow load(RowType row) {
- return _rowTypes.load(row.getT(), row);
- }
-
-}
+++ /dev/null
-/* ====================================================================
- 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.xdgf.util;
-
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.poi.ooxml.POIXMLException;
-import org.apache.xmlbeans.XmlObject;
-
-
-public class ObjectFactory<T, X extends XmlObject> {
-
- Map<String, Constructor<? extends T>> _types = new HashMap<>();
-
- public void put(String typeName, Class<? extends T> cls, Class<?>... varargs) throws NoSuchMethodException, SecurityException {
- _types.put(typeName, cls.getDeclaredConstructor(varargs));
- }
-
- public T load(String name, Object... varargs) {
- Constructor<? extends T> constructor = _types.get(name);
- if (constructor == null) {
-
- @SuppressWarnings("unchecked")
- X xmlObject = (X) varargs[0];
-
- String typeName = xmlObject.schemaType().getName().getLocalPart();
- throw new POIXMLException("Invalid '" + typeName + "' name '" + name + "'");
- }
-
- try {
- return constructor.newInstance(varargs);
- } catch (InvocationTargetException e) {
- throw new POIXMLException(e.getCause());
- } catch (Exception e) {
- throw new POIXMLException(e);
- }
- }
-
-}