/*
* citygml4j - The Open Source Java API for CityGML
* https://github.com/citygml4j
*
* Copyright 2013-2017 Claus Nagel <claus.nagel@gmail.com>
*
* Licensed 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.citygml4j.model.gml;
import org.citygml4j.model.citygml.CityGMLClass;
import org.citygml4j.model.citygml.texturedsurface._TexturedSurface;
import org.citygml4j.model.common.base.ModelClassEnum;
import org.citygml4j.model.gml.base.AbstractGML;
import org.citygml4j.model.gml.base.ArrayAssociation;
import org.citygml4j.model.gml.base.AssociationByRep;
import org.citygml4j.model.gml.base.AssociationByRepOrRef;
import org.citygml4j.model.gml.base.MetaData;
import org.citygml4j.model.gml.base.MetaDataProperty;
import org.citygml4j.model.gml.base.StringOrRef;
import org.citygml4j.model.gml.basicTypes.BooleanOrNull;
import org.citygml4j.model.gml.basicTypes.BooleanOrNullList;
import org.citygml4j.model.gml.basicTypes.Code;
import org.citygml4j.model.gml.basicTypes.CodeOrNullList;
import org.citygml4j.model.gml.basicTypes.Coordinates;
import org.citygml4j.model.gml.basicTypes.DoubleOrNull;
import org.citygml4j.model.gml.basicTypes.DoubleOrNullList;
import org.citygml4j.model.gml.basicTypes.IntegerOrNull;
import org.citygml4j.model.gml.basicTypes.IntegerOrNullList;
import org.citygml4j.model.gml.basicTypes.Measure;
import org.citygml4j.model.gml.basicTypes.MeasureOrNullList;
import org.citygml4j.model.gml.basicTypes.NameOrNull;
import org.citygml4j.model.gml.basicTypes.Null;
import org.citygml4j.model.gml.coverage.AbstractCoverage;
import org.citygml4j.model.gml.coverage.AbstractDiscreteCoverage;
import org.citygml4j.model.gml.coverage.CoverageFunction;
import org.citygml4j.model.gml.coverage.DataBlock;
import org.citygml4j.model.gml.coverage.DomainSet;
import org.citygml4j.model.gml.coverage.File;
import org.citygml4j.model.gml.coverage.FileValueModel;
import org.citygml4j.model.gml.coverage.GridFunction;
import org.citygml4j.model.gml.coverage.IncrementOrder;
import org.citygml4j.model.gml.coverage.IndexMap;
import org.citygml4j.model.gml.coverage.RangeParameters;
import org.citygml4j.model.gml.coverage.RangeSet;
import org.citygml4j.model.gml.coverage.RectifiedGridCoverage;
import org.citygml4j.model.gml.coverage.RectifiedGridDomain;
import org.citygml4j.model.gml.coverage.SequenceRule;
import org.citygml4j.model.gml.coverage.SequenceRuleNames;
import org.citygml4j.model.gml.feature.AbstractFeature;
import org.citygml4j.model.gml.feature.AbstractFeatureCollection;
import org.citygml4j.model.gml.feature.BoundingShape;
import org.citygml4j.model.gml.feature.FeatureArrayProperty;
import org.citygml4j.model.gml.feature.FeatureMember;
import org.citygml4j.model.gml.feature.FeatureProperty;
import org.citygml4j.model.gml.feature.LocationProperty;
import org.citygml4j.model.gml.feature.PriorityLocationProperty;
import org.citygml4j.model.gml.geometry.AbstractGeometry;
import org.citygml4j.model.gml.geometry.GeometryArrayProperty;
import org.citygml4j.model.gml.geometry.GeometryProperty;
import org.citygml4j.model.gml.geometry.InlineGeometryProperty;
import org.citygml4j.model.gml.geometry.SRSReferenceGroup;
import org.citygml4j.model.gml.geometry.aggregates.AbstractGeometricAggregate;
import org.citygml4j.model.gml.geometry.aggregates.MultiCurve;
import org.citygml4j.model.gml.geometry.aggregates.MultiCurveProperty;
import org.citygml4j.model.gml.geometry.aggregates.MultiGeometry;
import org.citygml4j.model.gml.geometry.aggregates.MultiGeometryProperty;
import org.citygml4j.model.gml.geometry.aggregates.MultiLineString;
import org.citygml4j.model.gml.geometry.aggregates.MultiLineStringProperty;
import org.citygml4j.model.gml.geometry.aggregates.MultiPoint;
import org.citygml4j.model.gml.geometry.aggregates.MultiPointProperty;
import org.citygml4j.model.gml.geometry.aggregates.MultiPolygon;
import org.citygml4j.model.gml.geometry.aggregates.MultiPolygonProperty;
import org.citygml4j.model.gml.geometry.aggregates.MultiSolid;
import org.citygml4j.model.gml.geometry.aggregates.MultiSolidProperty;
import org.citygml4j.model.gml.geometry.aggregates.MultiSurface;
import org.citygml4j.model.gml.geometry.aggregates.MultiSurfaceProperty;
import org.citygml4j.model.gml.geometry.complexes.CompositeCurve;
import org.citygml4j.model.gml.geometry.complexes.CompositeCurveProperty;
import org.citygml4j.model.gml.geometry.complexes.CompositeSolid;
import org.citygml4j.model.gml.geometry.complexes.CompositeSolidProperty;
import org.citygml4j.model.gml.geometry.complexes.CompositeSurface;
import org.citygml4j.model.gml.geometry.complexes.CompositeSurfaceProperty;
import org.citygml4j.model.gml.geometry.complexes.GeometricComplex;
import org.citygml4j.model.gml.geometry.complexes.GeometricComplexProperty;
import org.citygml4j.model.gml.geometry.primitives.AbstractCurve;
import org.citygml4j.model.gml.geometry.primitives.AbstractCurveSegment;
import org.citygml4j.model.gml.geometry.primitives.AbstractGeometricPrimitive;
import org.citygml4j.model.gml.geometry.primitives.AbstractRing;
import org.citygml4j.model.gml.geometry.primitives.AbstractRingProperty;
import org.citygml4j.model.gml.geometry.primitives.AbstractSolid;
import org.citygml4j.model.gml.geometry.primitives.AbstractSurface;
import org.citygml4j.model.gml.geometry.primitives.AbstractSurfacePatch;
import org.citygml4j.model.gml.geometry.primitives.ControlPoint;
import org.citygml4j.model.gml.geometry.primitives.Coord;
import org.citygml4j.model.gml.geometry.primitives.Curve;
import org.citygml4j.model.gml.geometry.primitives.CurveArrayProperty;
import org.citygml4j.model.gml.geometry.primitives.CurveInterpolation;
import org.citygml4j.model.gml.geometry.primitives.CurveProperty;
import org.citygml4j.model.gml.geometry.primitives.CurveSegmentArrayProperty;
import org.citygml4j.model.gml.geometry.primitives.DirectPosition;
import org.citygml4j.model.gml.geometry.primitives.DirectPositionList;
import org.citygml4j.model.gml.geometry.primitives.Envelope;
import org.citygml4j.model.gml.geometry.primitives.Exterior;
import org.citygml4j.model.gml.geometry.primitives.GeometricPositionGroup;
import org.citygml4j.model.gml.geometry.primitives.GeometricPrimitiveProperty;
import org.citygml4j.model.gml.geometry.primitives.InnerBoundaryIs;
import org.citygml4j.model.gml.geometry.primitives.Interior;
import org.citygml4j.model.gml.geometry.primitives.LineString;
import org.citygml4j.model.gml.geometry.primitives.LineStringProperty;
import org.citygml4j.model.gml.geometry.primitives.LineStringSegment;
import org.citygml4j.model.gml.geometry.primitives.LineStringSegmentArrayProperty;
import org.citygml4j.model.gml.geometry.primitives.LinearRing;
import org.citygml4j.model.gml.geometry.primitives.LinearRingProperty;
import org.citygml4j.model.gml.geometry.primitives.OrientableCurve;
import org.citygml4j.model.gml.geometry.primitives.OrientableSurface;
import org.citygml4j.model.gml.geometry.primitives.OuterBoundaryIs;
import org.citygml4j.model.gml.geometry.primitives.Point;
import org.citygml4j.model.gml.geometry.primitives.PointArrayProperty;
import org.citygml4j.model.gml.geometry.primitives.PointProperty;
import org.citygml4j.model.gml.geometry.primitives.PointRep;
import org.citygml4j.model.gml.geometry.primitives.Polygon;
import org.citygml4j.model.gml.geometry.primitives.PolygonProperty;
import org.citygml4j.model.gml.geometry.primitives.PosOrPointPropertyOrPointRep;
import org.citygml4j.model.gml.geometry.primitives.PosOrPointPropertyOrPointRepOrCoord;
import org.citygml4j.model.gml.geometry.primitives.Rectangle;
import org.citygml4j.model.gml.geometry.primitives.Ring;
import org.citygml4j.model.gml.geometry.primitives.Sign;
import org.citygml4j.model.gml.geometry.primitives.Solid;
import org.citygml4j.model.gml.geometry.primitives.SolidArrayProperty;
import org.citygml4j.model.gml.geometry.primitives.SolidProperty;
import org.citygml4j.model.gml.geometry.primitives.Surface;
import org.citygml4j.model.gml.geometry.primitives.SurfaceArrayProperty;
import org.citygml4j.model.gml.geometry.primitives.SurfaceInterpolation;
import org.citygml4j.model.gml.geometry.primitives.SurfacePatchArrayProperty;
import org.citygml4j.model.gml.geometry.primitives.SurfaceProperty;
import org.citygml4j.model.gml.geometry.primitives.Tin;
import org.citygml4j.model.gml.geometry.primitives.Triangle;
import org.citygml4j.model.gml.geometry.primitives.TrianglePatchArrayProperty;
import org.citygml4j.model.gml.geometry.primitives.TriangulatedSurface;
import org.citygml4j.model.gml.geometry.primitives.Vector;
import org.citygml4j.model.gml.grids.Grid;
import org.citygml4j.model.gml.grids.GridEnvelope;
import org.citygml4j.model.gml.grids.GridLimits;
import org.citygml4j.model.gml.grids.RectifiedGrid;
import org.citygml4j.model.gml.measures.Angle;
import org.citygml4j.model.gml.measures.Area;
import org.citygml4j.model.gml.measures.GridLength;
import org.citygml4j.model.gml.measures.Length;
import org.citygml4j.model.gml.measures.Scale;
import org.citygml4j.model.gml.measures.Speed;
import org.citygml4j.model.gml.measures.Time;
import org.citygml4j.model.gml.measures.Volume;
import org.citygml4j.model.gml.valueObjects.CategoryExtent;
import org.citygml4j.model.gml.valueObjects.CompositeValue;
import org.citygml4j.model.gml.valueObjects.CountExtent;
import org.citygml4j.model.gml.valueObjects.GenericValueObject;
import org.citygml4j.model.gml.valueObjects.QuantityExtent;
import org.citygml4j.model.gml.valueObjects.ScalarValue;
import org.citygml4j.model.gml.valueObjects.ScalarValueList;
import org.citygml4j.model.gml.valueObjects.Value;
import org.citygml4j.model.gml.valueObjects.ValueArray;
import org.citygml4j.model.gml.valueObjects.ValueArrayProperty;
import org.citygml4j.model.gml.valueObjects.ValueExtent;
import org.citygml4j.model.gml.valueObjects.ValueObject;
import org.citygml4j.model.gml.valueObjects.ValueProperty;
import org.citygml4j.model.gml.xlink.XLinkActuate;
import org.citygml4j.model.gml.xlink.XLinkShow;
import org.citygml4j.model.gml.xlink.XLinkType;
import org.citygml4j.model.xal.XALClass;
public enum GMLClass implements ModelClassEnum {
UNDEFINED(null),
// Base
ABSTRACT_GML(AbstractGML.class),
ARRAY_ASSOCIATION(ArrayAssociation.class),
ASSOCIATION_BY_REP(AssociationByRep.class),
ASSOCIATION_BY_REP_OR_REF(AssociationByRepOrRef.class),
META_DATA(MetaData.class),
META_DATA_PROPERTY(MetaDataProperty.class),
STRING_OR_REF(StringOrRef.class),
// BasicTypes
BOOLEAN_OR_NULL(BooleanOrNull.class),
BOOLEAN_OR_NULL_LIST(BooleanOrNullList.class),
CODE(Code.class),
CODE_OR_NULL_LIST(CodeOrNullList.class),
COORDINATES(Coordinates.class),
DOUBLE_OR_NULL(DoubleOrNull.class),
DOUBLE_OR_NULL_LIST(DoubleOrNullList.class),
INTEGER_OR_NULL(IntegerOrNull.class),
INTEGER_OR_NULL_LIST(IntegerOrNullList.class),
MEASURE(Measure.class),
MEASURE_OR_NULL_LIST(MeasureOrNullList.class),
NAME_OR_NULL(NameOrNull.class),
NULL(Null.class),
// Coverage
ABSTRACT_COVERAGE(AbstractCoverage.class),
ABSTRACT_DISCRETE_COVERAGE(AbstractDiscreteCoverage.class),
COVERAGE_FUNCTION(CoverageFunction.class),
DATA_BLOCK(DataBlock.class),
DOMAIN_SET(DomainSet.class),
FILE(File.class),
FILE_VALUE_MODEL(FileValueModel.class),
GRID_FUNCTION(GridFunction.class),
INCREMENT_ORDER(IncrementOrder.class),
INDEX_MAP(IndexMap.class),
RANGE_PARAMETERS(RangeParameters.class),
RANGE_SET(RangeSet.class),
RECTIFIED_GRID_COVERAGE(RectifiedGridCoverage.class),
RECTIFIED_GRID_DOMAIN(RectifiedGridDomain.class),
SEQUENCE_RULE(SequenceRule.class),
SEQUENCE_RULE_NAMES(SequenceRuleNames.class),
// Feature
ABSTRACT_FEATURE(AbstractFeature.class),
ABSTRACT_FEATURE_COLLECTION(AbstractFeatureCollection.class),
BOUNDING_SHAPE(BoundingShape.class),
FEATURE_MEMBER(FeatureMember.class),
FEATURE_PROPERTY(FeatureProperty.class),
FEATURE_ARRAY_PROPERTY(FeatureArrayProperty.class),
LOCATION_PROPERTY(LocationProperty.class),
PRIORITY_LOCATION_PROPERTY(PriorityLocationProperty.class),
// Geometry
ABSTRACT_GEOMETRY(AbstractGeometry.class),
GEOMETRY_ARRAY_PROPERTY(GeometryArrayProperty.class),
GEOMETRY_PROPERTY(GeometryProperty.class),
INLINE_GEOMETRY_PROPERTY(InlineGeometryProperty.class),
SRS_REFERENCE_GROUP(SRSReferenceGroup.class),
// Geometry aggregates
ABSTRACT_GEOMETRIC_AGGREGATE(AbstractGeometricAggregate.class),
MULTI_CURVE(MultiCurve.class),
MULTI_CURVE_PROPERTY(MultiCurveProperty.class),
MULTI_GEOMETRY(MultiGeometry.class),
MULTI_GEOMETRY_PROPERTY(MultiGeometryProperty.class),
MULTI_LINE_STRING(MultiLineString.class),
MULTI_LINE_STRING_PROPERTY(MultiLineStringProperty.class),
MULTI_POINT(MultiPoint.class),
MULTI_POINT_PROPERTY(MultiPointProperty.class),
MULTI_POLYGON(MultiPolygon.class),
MULTI_POLYGON_PROPERTY(MultiPolygonProperty.class),
MULTI_SOLID(MultiSolid.class),
MULTI_SOLID_PROPERTY(MultiSolidProperty.class),
MULTI_SURFACE(MultiSurface.class),
MULTI_SURFACE_PROPERTY(MultiSurfaceProperty.class),
// Geometry complexes
COMPOSITE_CURVE(CompositeCurve.class),
COMPOSITE_CURVE_PROPERTY(CompositeCurveProperty.class),
COMPOSITE_SOLID(CompositeSolid.class),
COMPOSITE_SOLID_PROPERTY(CompositeSolidProperty.class),
COMPOSITE_SURFACE(CompositeSurface.class),
COMPOSITE_SURFACE_PROPERTY(CompositeSurfaceProperty.class),
GEOMETRIC_COMPLEX(GeometricComplex.class),
GEOMETRIC_COMPLEX_PROPERTY(GeometricComplexProperty.class),
// Geometry primitives
ABSTRACT_CURVE(AbstractCurve.class),
ABSTRACT_CURVE_SEGMENT(AbstractCurveSegment.class),
ABSTRACT_GEOMETRIC_PRIMITIVE(AbstractGeometricPrimitive.class),
ABSTRACT_RING(AbstractRing.class),
ABSTRACT_RING_PROPERTY(AbstractRingProperty.class),
ABSTRACT_SOLID(AbstractSolid.class),
ABSTRACT_SURFACE(AbstractSurface.class),
ABSTRACT_SURFACE_PATCH(AbstractSurfacePatch.class),
CONTROL_POINT(ControlPoint.class),
COORD(Coord.class),
CURVE(Curve.class),
CURVE_ARRAY_PROPERTY(CurveArrayProperty.class),
CURVE_INTERPOLATION(CurveInterpolation.class),
CURVE_PROPERTY(CurveProperty.class),
CURVE_SEGMENT_ARRAY_PROPERTY(CurveSegmentArrayProperty.class),
DIRECT_POSITION(DirectPosition.class),
DIRECT_POSITION_LIST(DirectPositionList.class),
ENVELOPE(Envelope.class),
EXTERIOR(Exterior.class),
GEOMETRIC_POSITION_GROUP(GeometricPositionGroup.class),
GEOMETRIC_PRIMITIVE_PROPERTY(GeometricPrimitiveProperty.class),
INNER_BOUNDARY_IS(InnerBoundaryIs.class),
INTERIOR(Interior.class),
LINEAR_RING(LinearRing.class),
LINEAR_RING_PROPERTY(LinearRingProperty.class),
LINE_STRING(LineString.class),
LINE_STRING_SEGMENT(LineStringSegment.class),
LINE_STRING_SEGMENT_ARRAY_PROPERTY(LineStringSegmentArrayProperty.class),
LINE_STRING_PROPERTY(LineStringProperty.class),
ORIENTABLE_CURVE(OrientableCurve.class),
ORIENTABLE_SURFACE(OrientableSurface.class),
OUTER_BOUNDARY_IS(OuterBoundaryIs.class),
POINT(Point.class),
POINT_ARRAY_PROPERTY(PointArrayProperty.class),
POINT_PROPERTY(PointProperty.class),
POINT_REP(PointRep.class),
POLYGON(Polygon.class),
POLYGON_PROPERTY(PolygonProperty.class),
POS_OR_POINT_PROPERTY_OR_POINT_REP(PosOrPointPropertyOrPointRep.class),
POS_OR_POINT_PROPERTY_OR_POINT_REP_OR_COORD(PosOrPointPropertyOrPointRepOrCoord.class),
RECTANGLE(Rectangle.class),
RING(Ring.class),
SIGN(Sign.class),
SOLID(Solid.class),
SOLID_PROPERTY(SolidProperty.class),
SOLID_ARRAY_PROPERTY(SolidArrayProperty.class),
SURFACE(Surface.class),
SURFACE_ARRAY_PROPERTY(SurfaceArrayProperty.class),
SURFACE_INTERPOLATION(SurfaceInterpolation.class),
SURFACE_PATCH_ARRAY_PROPERTY(SurfacePatchArrayProperty.class),
SURFACE_PROPERTY(SurfaceProperty.class),
TIN(Tin.class),
TRIANGLE(Triangle.class),
TRIANGLE_PATCH_ARRAY_PROPERTY(TrianglePatchArrayProperty.class),
TRIANGULATED_SURFACE(TriangulatedSurface.class),
VECTOR(Vector.class),
// Grids
GRID(Grid.class),
GRID_ENVELOPE(GridEnvelope.class),
GRID_LIMITS(GridLimits.class),
RECTIFIED_GRID(RectifiedGrid.class),
// Measure
ANGLE(Angle.class),
AREA(Area.class),
GRID_LENGTH(GridLength.class),
LENGTH(Length.class),
SCALE(Scale.class),
SPEED(Speed.class),
TIME(Time.class),
VOLUME(Volume.class),
// ValueObjects
CATEGORY_EXTENT(CategoryExtent.class),
COMPOSITE_VALUE(CompositeValue.class),
COUNT_EXTENT(CountExtent.class),
GENERIC_VALUE_OBJECT(GenericValueObject.class),
QUANTITY_EXTENT(QuantityExtent.class),
SCALAR_VALUE(ScalarValue.class),
SCALAR_VALUE_LIST(ScalarValueList.class),
VALUE(Value.class),
VALUE_ARRAY(ValueArray.class),
VALUE_ARRAY_PROPERTY(ValueArrayProperty.class),
VALUE_EXTENT(ValueExtent.class),
VALUE_OBJECT(ValueObject.class),
VALUE_PROPERTY(ValueProperty.class),
// CityGML geometries
_TEXTURED_SURFACE(_TexturedSurface.class),
// XLink types
XLINK_ACTUATE(XLinkActuate.class),
XLINK_TYPE(XLinkType.class),
XLINK_SHOW(XLinkShow.class);
private final Class<? extends GML> modelClass;
private GMLClass(Class<? extends GML> modelClass) {
this.modelClass = modelClass;
}
public Class<? extends GML> getModelClass() {
return modelClass;
}
public static GMLClass fromModelClass(Class<? extends GML> modelClass) {
for (GMLClass c : GMLClass.values())
if (c.modelClass == modelClass)
return c;
return UNDEFINED;
}
public static GMLClass fromInt(int i) {
for (GMLClass c : GMLClass.values()) {
if (c.ordinal() == i)
return c;
}
return UNDEFINED;
}
public boolean isInstance(ModelClassEnum type) {
if (type == null)
return false;
Class<?> tmp = modelClass;
Class<?> otherModelClass = null;
if (type instanceof CityGMLClass)
otherModelClass = ((CityGMLClass)type).getModelClass();
else if (type instanceof GMLClass)
otherModelClass = ((GMLClass)type).getModelClass();
else if (type instanceof XALClass)
otherModelClass = ((XALClass)type).getModelClass();
if (otherModelClass != null) {
do {
if (tmp == otherModelClass)
return true;
} while ((tmp = tmp.getSuperclass()) != null);
}
return false;
}
}