/* * 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.util.walker; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import org.citygml4j.model.citygml.ade.ADEComponent; import org.citygml4j.model.citygml.appearance.AbstractSurfaceData; import org.citygml4j.model.citygml.appearance.AbstractTexture; import org.citygml4j.model.citygml.appearance.AbstractTextureParameterization; import org.citygml4j.model.citygml.appearance.Appearance; import org.citygml4j.model.citygml.appearance.AppearanceMember; import org.citygml4j.model.citygml.appearance.AppearanceProperty; import org.citygml4j.model.citygml.appearance.GeoreferencedTexture; import org.citygml4j.model.citygml.appearance.ParameterizedTexture; import org.citygml4j.model.citygml.appearance.SurfaceDataProperty; import org.citygml4j.model.citygml.appearance.TexCoordGen; import org.citygml4j.model.citygml.appearance.TexCoordList; import org.citygml4j.model.citygml.appearance.TextureAssociation; import org.citygml4j.model.citygml.appearance.X3DMaterial; import org.citygml4j.model.citygml.bridge.AbstractBridge; import org.citygml4j.model.citygml.bridge.Bridge; import org.citygml4j.model.citygml.bridge.BridgeConstructionElement; import org.citygml4j.model.citygml.bridge.BridgeConstructionElementProperty; import org.citygml4j.model.citygml.bridge.BridgeFurniture; import org.citygml4j.model.citygml.bridge.BridgeInstallation; import org.citygml4j.model.citygml.bridge.BridgeInstallationProperty; import org.citygml4j.model.citygml.bridge.BridgePart; import org.citygml4j.model.citygml.bridge.BridgePartProperty; import org.citygml4j.model.citygml.bridge.BridgeRoom; import org.citygml4j.model.citygml.bridge.IntBridgeInstallation; import org.citygml4j.model.citygml.bridge.IntBridgeInstallationProperty; import org.citygml4j.model.citygml.bridge.InteriorBridgeRoomProperty; import org.citygml4j.model.citygml.building.AbstractBuilding; import org.citygml4j.model.citygml.building.Building; import org.citygml4j.model.citygml.building.BuildingFurniture; import org.citygml4j.model.citygml.building.BuildingInstallation; import org.citygml4j.model.citygml.building.BuildingInstallationProperty; import org.citygml4j.model.citygml.building.BuildingPart; import org.citygml4j.model.citygml.building.BuildingPartProperty; import org.citygml4j.model.citygml.building.IntBuildingInstallation; import org.citygml4j.model.citygml.building.IntBuildingInstallationProperty; import org.citygml4j.model.citygml.building.InteriorRoomProperty; import org.citygml4j.model.citygml.building.Room; import org.citygml4j.model.citygml.cityfurniture.CityFurniture; import org.citygml4j.model.citygml.cityobjectgroup.CityObjectGroup; import org.citygml4j.model.citygml.cityobjectgroup.CityObjectGroupMember; import org.citygml4j.model.citygml.core.AbstractCityObject; import org.citygml4j.model.citygml.core.AbstractSite; import org.citygml4j.model.citygml.core.Address; import org.citygml4j.model.citygml.core.AddressProperty; import org.citygml4j.model.citygml.core.CityModel; import org.citygml4j.model.citygml.core.CityObjectMember; import org.citygml4j.model.citygml.core.GeneralizationRelation; import org.citygml4j.model.citygml.core.ImplicitGeometry; import org.citygml4j.model.citygml.core.LodRepresentation; import org.citygml4j.model.citygml.generics.GenericCityObject; import org.citygml4j.model.citygml.landuse.LandUse; import org.citygml4j.model.citygml.relief.AbstractReliefComponent; import org.citygml4j.model.citygml.relief.BreaklineRelief; import org.citygml4j.model.citygml.relief.MassPointRelief; import org.citygml4j.model.citygml.relief.RasterRelief; import org.citygml4j.model.citygml.relief.ReliefComponentProperty; import org.citygml4j.model.citygml.relief.ReliefFeature; import org.citygml4j.model.citygml.relief.TINRelief; import org.citygml4j.model.citygml.texturedsurface._AbstractAppearance; import org.citygml4j.model.citygml.texturedsurface._AppearanceProperty; import org.citygml4j.model.citygml.texturedsurface._Material; import org.citygml4j.model.citygml.texturedsurface._SimpleTexture; import org.citygml4j.model.citygml.texturedsurface._TexturedSurface; import org.citygml4j.model.citygml.transportation.AbstractTransportationObject; import org.citygml4j.model.citygml.transportation.AuxiliaryTrafficArea; import org.citygml4j.model.citygml.transportation.AuxiliaryTrafficAreaProperty; import org.citygml4j.model.citygml.transportation.Railway; import org.citygml4j.model.citygml.transportation.Road; import org.citygml4j.model.citygml.transportation.Square; import org.citygml4j.model.citygml.transportation.Track; import org.citygml4j.model.citygml.transportation.TrafficArea; import org.citygml4j.model.citygml.transportation.TrafficAreaProperty; import org.citygml4j.model.citygml.transportation.TransportationComplex; import org.citygml4j.model.citygml.tunnel.AbstractTunnel; import org.citygml4j.model.citygml.tunnel.HollowSpace; import org.citygml4j.model.citygml.tunnel.IntTunnelInstallation; import org.citygml4j.model.citygml.tunnel.IntTunnelInstallationProperty; import org.citygml4j.model.citygml.tunnel.InteriorHollowSpaceProperty; import org.citygml4j.model.citygml.tunnel.Tunnel; import org.citygml4j.model.citygml.tunnel.TunnelFurniture; import org.citygml4j.model.citygml.tunnel.TunnelInstallation; import org.citygml4j.model.citygml.tunnel.TunnelInstallationProperty; import org.citygml4j.model.citygml.tunnel.TunnelPart; import org.citygml4j.model.citygml.tunnel.TunnelPartProperty; import org.citygml4j.model.citygml.vegetation.AbstractVegetationObject; import org.citygml4j.model.citygml.vegetation.PlantCover; import org.citygml4j.model.citygml.vegetation.SolitaryVegetationObject; import org.citygml4j.model.citygml.waterbody.AbstractWaterBoundarySurface; import org.citygml4j.model.citygml.waterbody.AbstractWaterObject; import org.citygml4j.model.citygml.waterbody.BoundedByWaterSurfaceProperty; import org.citygml4j.model.citygml.waterbody.WaterBody; import org.citygml4j.model.citygml.waterbody.WaterClosureSurface; import org.citygml4j.model.citygml.waterbody.WaterGroundSurface; import org.citygml4j.model.citygml.waterbody.WaterSurface; import org.citygml4j.model.common.visitor.GMLFunctor; import org.citygml4j.model.gml.base.AbstractGML; import org.citygml4j.model.gml.base.AssociationByRep; import org.citygml4j.model.gml.base.AssociationByRepOrRef; import org.citygml4j.model.gml.coverage.AbstractCoverage; import org.citygml4j.model.gml.coverage.AbstractDiscreteCoverage; import org.citygml4j.model.gml.coverage.DataBlock; import org.citygml4j.model.gml.coverage.File; import org.citygml4j.model.gml.coverage.RangeSet; import org.citygml4j.model.gml.coverage.RectifiedGridCoverage; import org.citygml4j.model.gml.feature.AbstractFeature; import org.citygml4j.model.gml.feature.AbstractFeatureCollection; 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.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.aggregates.AbstractGeometricAggregate; import org.citygml4j.model.gml.geometry.aggregates.MultiCurve; import org.citygml4j.model.gml.geometry.aggregates.MultiGeometry; import org.citygml4j.model.gml.geometry.aggregates.MultiLineString; import org.citygml4j.model.gml.geometry.aggregates.MultiPoint; import org.citygml4j.model.gml.geometry.aggregates.MultiPolygon; import org.citygml4j.model.gml.geometry.aggregates.MultiSolid; import org.citygml4j.model.gml.geometry.aggregates.MultiSurface; import org.citygml4j.model.gml.geometry.complexes.CompositeCurve; import org.citygml4j.model.gml.geometry.complexes.CompositeSolid; import org.citygml4j.model.gml.geometry.complexes.CompositeSurface; 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.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.Curve; import org.citygml4j.model.gml.geometry.primitives.CurveProperty; import org.citygml4j.model.gml.geometry.primitives.GeometricPrimitiveProperty; import org.citygml4j.model.gml.geometry.primitives.LineString; import org.citygml4j.model.gml.geometry.primitives.LineStringProperty; import org.citygml4j.model.gml.geometry.primitives.LinearRing; import org.citygml4j.model.gml.geometry.primitives.OrientableCurve; import org.citygml4j.model.gml.geometry.primitives.OrientableSurface; import org.citygml4j.model.gml.geometry.primitives.Point; import org.citygml4j.model.gml.geometry.primitives.PointProperty; import org.citygml4j.model.gml.geometry.primitives.Polygon; import org.citygml4j.model.gml.geometry.primitives.PolygonProperty; import org.citygml4j.model.gml.geometry.primitives.Rectangle; import org.citygml4j.model.gml.geometry.primitives.Ring; import org.citygml4j.model.gml.geometry.primitives.Solid; import org.citygml4j.model.gml.geometry.primitives.SolidProperty; import org.citygml4j.model.gml.geometry.primitives.Surface; 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.TriangulatedSurface; import org.citygml4j.model.gml.grids.Grid; import org.citygml4j.model.gml.grids.RectifiedGrid; import org.citygml4j.model.gml.valueObjects.CompositeValue; 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.ValueObject; import org.citygml4j.model.gml.valueObjects.ValueProperty; import org.citygml4j.xml.schema.ElementDecl; import org.citygml4j.xml.schema.Schema; import org.citygml4j.xml.schema.SchemaHandler; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; public abstract class GMLFunctionWalker<T> implements GMLFunctor<T>, Walker { private Set<Object> visited = new HashSet<Object>(); private boolean shouldWalk = true; private SchemaHandler schemaHandler; public GMLFunctionWalker() { } public GMLFunctionWalker(SchemaHandler schemaHandler) { this.schemaHandler = schemaHandler; } public void reset() { visited.clear(); shouldWalk = true; } public boolean shouldWalk() { return shouldWalk; } public void setShouldWalk(boolean shouldWalk) { this.shouldWalk = shouldWalk; } public void setSchemaHandler(SchemaHandler schemaHandler) { this.schemaHandler = schemaHandler; } public SchemaHandler getSchemaHandler() { return schemaHandler; } public boolean addToVisited(Object object) { return visited.add(object); } public boolean hasVisited(Object object) { return visited.contains(object); } public T apply(LodRepresentation lodRepresentation) { if (lodRepresentation != null) { for (int lod = 0; lod < 5; lod++) { if (lodRepresentation.isSetLodGeometry(lod)) { for (GeometryProperty<?> geometryProperty : lodRepresentation.getLodGeometry(lod)) { T object = apply(geometryProperty); if (object != null) return object; } } } } return null; } public T apply(AbstractGML abstractGML) { return null; } public T apply(AbstractGeometry abstractGeometry) { return apply((AbstractGML)abstractGeometry); } public T apply(AbstractGeometricPrimitive abstractGeometricPrimitive) { return apply((AbstractGeometry)abstractGeometricPrimitive); } public T apply(AbstractGeometricAggregate abstractGeometricAggregate) { return apply((AbstractGeometry)abstractGeometricAggregate); } public T apply(AbstractCurve abstractCurve) { return apply((AbstractGeometricPrimitive)abstractCurve); } public T apply(AbstractSolid abstractSolid) { return apply((AbstractGeometricPrimitive)abstractSolid); } public T apply(AbstractSurface abstractSurface) { return apply((AbstractGeometricPrimitive)abstractSurface); } public T apply(AbstractRing abstractRing) { return apply((AbstractGeometry)abstractRing); } public T apply(Triangle triangle) { if (triangle.isSetExterior()) { T object = apply(triangle.getExterior()); if (object != null) return object; } return null; } public T apply(Rectangle rectangle) { if (rectangle.isSetExterior()) { T object = apply(rectangle.getExterior()); if (object != null) return object; } return null; } public T apply(CompositeCurve compositeCurve) { T object = apply((AbstractCurve)compositeCurve); if (object != null) return object; if (compositeCurve.isSetCurveMember()) { for (CurveProperty curveProperty : new ArrayList<CurveProperty>(compositeCurve.getCurveMember())) { object = apply(curveProperty); if (object != null) return object; } } return null; } public T apply(CompositeSolid compositeSolid) { T object = apply((AbstractSolid)compositeSolid); if (object != null) return object; if (compositeSolid.isSetSolidMember()) { for (SolidProperty solidProperty : new ArrayList<SolidProperty>(compositeSolid.getSolidMember())) { object = apply(solidProperty); if (object != null) return object; } } return null; } public T apply(CompositeSurface compositeSurface) { T object = apply((AbstractSurface)compositeSurface); if (object != null) return object; if (compositeSurface.isSetSurfaceMember()) { for (SurfaceProperty surfaceProperty : new ArrayList<SurfaceProperty>(compositeSurface.getSurfaceMember())) { object = apply(surfaceProperty); if (object != null) return object; } } return null; } public T apply(Curve curve) { return apply((AbstractCurve)curve); } public T apply(GeometricComplex geometricComplex) { T object = apply((AbstractGeometry)geometricComplex); if (object != null) return object; if (geometricComplex.isSetElement()) { for (GeometricPrimitiveProperty geometricPrimitiveProperty : new ArrayList<GeometricPrimitiveProperty>(geometricComplex.getElement())) { object = apply(geometricPrimitiveProperty); if (object != null) return object; } } return null; } public T apply(Grid grid) { return apply((AbstractGeometry)grid); } public T apply(LinearRing linearRing) { return apply((AbstractRing)linearRing); } public T apply(LineString lineString) { return apply((AbstractCurve)lineString); } public T apply(MultiCurve multiCurve) { T object = apply((AbstractGeometricAggregate)multiCurve); if (object != null) return object; if (multiCurve.isSetCurveMember()) { for (CurveProperty curveProperty : new ArrayList<CurveProperty>(multiCurve.getCurveMember())) { object = apply(curveProperty); if (object != null) return object; } } if (multiCurve.isSetCurveMembers()) { object = apply(multiCurve.getCurveMembers()); if (object != null) return object; } return null; } public T apply(MultiGeometry multiGeometry) { T object = apply((AbstractGeometricAggregate)multiGeometry); if (object != null) return object; if (multiGeometry.isSetGeometryMember()) { for (GeometryProperty<? extends AbstractGeometry> geometryProperty : new ArrayList<GeometryProperty<? extends AbstractGeometry>>(multiGeometry.getGeometryMember())) { object = apply(geometryProperty); if (object != null) return object; } } if (multiGeometry.isSetGeometryMembers()) { object = apply(multiGeometry.getGeometryMembers()); if (object != null) return object; } return null; } public T apply(MultiLineString multiLineString) { T object = apply((AbstractGeometricAggregate)multiLineString); if (object != null) return object; if (multiLineString.isSetLineStringMember()) { for (LineStringProperty lineStringProperty : new ArrayList<LineStringProperty>(multiLineString.getLineStringMember())) { object = apply(lineStringProperty); if (object != null) return object; } } return null; } public T apply(MultiPoint multiPoint) { T object = apply((AbstractGeometricAggregate)multiPoint); if (object != null) return object; if (multiPoint.isSetPointMember()) { for (PointProperty pointProperty : new ArrayList<PointProperty>(multiPoint.getPointMember())) { object = apply(pointProperty); if (object != null) return object; } } if (multiPoint.isSetPointMembers()) { object = apply(multiPoint.getPointMembers()); if (object != null) return object; } return null; } public T apply(MultiPolygon multiPolygon) { T object = apply((AbstractGeometricAggregate)multiPolygon); if (object != null) return object; if (multiPolygon.isSetPolygonMember()) { for (PolygonProperty polygonProperty : new ArrayList<PolygonProperty>(multiPolygon.getPolygonMember())) { object = apply(polygonProperty); if (object != null) return object; } } return null; } public T apply(MultiSolid multiSolid) { T object = apply((AbstractGeometricAggregate)multiSolid); if (object != null) return object; if (multiSolid.isSetSolidMember()) { for (SolidProperty solidProperty : new ArrayList<SolidProperty>(multiSolid.getSolidMember())) { object = apply(solidProperty); if (object != null) return object; } } if (multiSolid.isSetSolidMembers()) { object = apply(multiSolid.getSolidMembers()); if (object != null) return object; } return null; } public T apply(MultiSurface multiSurface) { T object = apply((AbstractGeometricAggregate)multiSurface); if (object != null) return object; if (multiSurface.isSetSurfaceMember()) { for (SurfaceProperty surfaceProperty : new ArrayList<SurfaceProperty>(multiSurface.getSurfaceMember())) { object = apply(surfaceProperty); if (object != null) return object; } } if (multiSurface.isSetSurfaceMembers()) { object = apply(multiSurface.getSurfaceMembers()); if (object != null) return object; } return null; } public T apply(OrientableCurve orientableCurve) { T object = apply((AbstractCurve)orientableCurve); if (object != null) return object; if (orientableCurve.isSetBaseCurve()) { object = apply(orientableCurve.getBaseCurve()); if (object != null) return object; } return null; } public T apply(OrientableSurface orientableSurface) { T object = apply((AbstractSurface)orientableSurface); if (object != null) return object; if (orientableSurface.isSetBaseSurface()) { object = apply(orientableSurface.getBaseSurface()); if (object != null) return object; } return null; } public T apply(_TexturedSurface texturedSurface) { T object = apply((OrientableSurface)texturedSurface); if (object != null) return object; if (texturedSurface.isSetAppearance()) { for (_AppearanceProperty appearanceProperty : new ArrayList<_AppearanceProperty>(texturedSurface.getAppearance())) { object = apply(appearanceProperty); if (object != null) return object; } } return null; } public T apply(Point point) { return apply((AbstractGeometricPrimitive)point); } public T apply(Polygon polygon) { T object = apply((AbstractSurface)polygon); if (object != null) return object; if (polygon.isSetExterior()) { object = apply(polygon.getExterior()); if (object != null) return object; } if (polygon.isSetInterior()) { for (AbstractRingProperty abstractRingProperty : new ArrayList<AbstractRingProperty>(polygon.getInterior())) { object = apply(abstractRingProperty); if (object != null) return object; } } return null; } public T apply(RectifiedGrid rectifiedGrid) { T object = apply((Grid)rectifiedGrid); if (object != null) return object; if (rectifiedGrid.isSetOrigin()) { object = apply(rectifiedGrid.getOrigin()); if (object != null) return object; } return null; } public T apply(Ring ring) { T object = apply((AbstractRing)ring); if (object != null) return object; if (ring.isSetCurveMember()) { for (CurveProperty curveProperty : new ArrayList<CurveProperty>(ring.getCurveMember())) { object = apply(curveProperty); if (object != null) return object; } } return null; } public T apply(Solid solid) { T object = apply((AbstractSolid)solid); if (object != null) return object; if (solid.isSetExterior()) { object = apply(solid.getExterior()); if (object != null) return object; } if (solid.isSetInterior()) { for (SurfaceProperty surfaceProperty : new ArrayList<SurfaceProperty>(solid.getInterior())) { object = apply(surfaceProperty); if (object != null) return object; } } return null; } public T apply(Surface surface) { T object = apply((AbstractSurface)surface); if (object != null) return object; if (surface.isSetPatches()) { object = apply(surface.getPatches()); if (object != null) return object; } return null; } public T apply(Tin tin) { return apply((TriangulatedSurface)tin); } public T apply(TriangulatedSurface triangulatedSurface) { return apply((Surface)triangulatedSurface); } public T apply(org.citygml4j.model.citygml.bridge.AbstractBoundarySurface abstractBoundarySurface) { T object = apply((AbstractCityObject)abstractBoundarySurface); if (object != null) return object; if (abstractBoundarySurface.isSetOpening()) { for (org.citygml4j.model.citygml.bridge.OpeningProperty openingProperty : new ArrayList<org.citygml4j.model.citygml.bridge.OpeningProperty>(abstractBoundarySurface.getOpening())) { object = apply(openingProperty); if (object != null) return object; } } if (abstractBoundarySurface.isSetLod2MultiSurface()) { object = apply(abstractBoundarySurface.getLod2MultiSurface()); if (object != null) return object; } if (abstractBoundarySurface.isSetLod3MultiSurface()) { object = apply(abstractBoundarySurface.getLod3MultiSurface()); if (object != null) return object; } if (abstractBoundarySurface.isSetLod4MultiSurface()) { object = apply(abstractBoundarySurface.getLod4MultiSurface()); if (object != null) return object; } if (abstractBoundarySurface.isSetGenericApplicationPropertyOfBoundarySurface()) { for (ADEComponent ade : new ArrayList<ADEComponent>(abstractBoundarySurface.getGenericApplicationPropertyOfBoundarySurface())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(org.citygml4j.model.citygml.building.AbstractBoundarySurface abstractBoundarySurface) { T object = apply((AbstractCityObject)abstractBoundarySurface); if (object != null) return object; if (abstractBoundarySurface.isSetOpening()) { for (org.citygml4j.model.citygml.building.OpeningProperty openingProperty : new ArrayList<org.citygml4j.model.citygml.building.OpeningProperty>(abstractBoundarySurface.getOpening())) { object = apply(openingProperty); if (object != null) return object; } } if (abstractBoundarySurface.isSetLod2MultiSurface()) { object = apply(abstractBoundarySurface.getLod2MultiSurface()); if (object != null) return object; } if (abstractBoundarySurface.isSetLod3MultiSurface()) { object = apply(abstractBoundarySurface.getLod3MultiSurface()); if (object != null) return object; } if (abstractBoundarySurface.isSetLod4MultiSurface()) { object = apply(abstractBoundarySurface.getLod4MultiSurface()); if (object != null) return object; } if (abstractBoundarySurface.isSetGenericApplicationPropertyOfBoundarySurface()) { for (ADEComponent ade : new ArrayList<ADEComponent>(abstractBoundarySurface.getGenericApplicationPropertyOfBoundarySurface())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(org.citygml4j.model.citygml.tunnel.AbstractBoundarySurface abstractBoundarySurface) { T object = apply((AbstractCityObject)abstractBoundarySurface); if (object != null) return object; if (abstractBoundarySurface.isSetOpening()) { for (org.citygml4j.model.citygml.tunnel.OpeningProperty openingProperty : new ArrayList<org.citygml4j.model.citygml.tunnel.OpeningProperty>(abstractBoundarySurface.getOpening())) { object = apply(openingProperty); if (object != null) return object; } } if (abstractBoundarySurface.isSetLod2MultiSurface()) { object = apply(abstractBoundarySurface.getLod2MultiSurface()); if (object != null) return object; } if (abstractBoundarySurface.isSetLod3MultiSurface()) { object = apply(abstractBoundarySurface.getLod3MultiSurface()); if (object != null) return object; } if (abstractBoundarySurface.isSetLod4MultiSurface()) { object = apply(abstractBoundarySurface.getLod4MultiSurface()); if (object != null) return object; } if (abstractBoundarySurface.isSetGenericApplicationPropertyOfBoundarySurface()) { for (ADEComponent ade : new ArrayList<ADEComponent>(abstractBoundarySurface.getGenericApplicationPropertyOfBoundarySurface())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(AbstractBridge abstractBridge) { T object = apply((AbstractSite)abstractBridge); if (object != null) return object; if (abstractBridge.isSetOuterBridgeConstructionElement()) { for (BridgeConstructionElementProperty constructionElementProperty : new ArrayList<BridgeConstructionElementProperty>(abstractBridge.getOuterBridgeConstructionElement())) { object = apply(constructionElementProperty); if (object != null) return object; } } if (abstractBridge.isSetOuterBridgeInstallation()) { for (BridgeInstallationProperty bridgeInstallationProperty : new ArrayList<BridgeInstallationProperty>(abstractBridge.getOuterBridgeInstallation())) { object = apply(bridgeInstallationProperty); if (object != null) return object; } } if (abstractBridge.isSetInteriorBridgeInstallation()) { for (IntBridgeInstallationProperty intBridgeInstallationProperty : new ArrayList<IntBridgeInstallationProperty>(abstractBridge.getInteriorBridgeInstallation())) { object = apply(intBridgeInstallationProperty); if (object != null) return object; } } if (abstractBridge.isSetBoundedBySurface()) { for (org.citygml4j.model.citygml.bridge.BoundarySurfaceProperty boundarySurfaceProperty : new ArrayList<org.citygml4j.model.citygml.bridge.BoundarySurfaceProperty>(abstractBridge.getBoundedBySurface())) { object = apply(boundarySurfaceProperty); if (object != null) return object; } } if (abstractBridge.isSetConsistsOfBridgePart()) { for (BridgePartProperty bridgePartProperty : new ArrayList<BridgePartProperty>(abstractBridge.getConsistsOfBridgePart())) { object = apply(bridgePartProperty); if (object != null) return object; } } if (abstractBridge.isSetInteriorBridgeRoom()) { for (InteriorBridgeRoomProperty interiorBridgeRoomProperty : new ArrayList<InteriorBridgeRoomProperty>(abstractBridge.getInteriorBridgeRoom())) { object = apply(interiorBridgeRoomProperty); if (object != null) return object; } } if (abstractBridge.isSetAddress()) { for (AddressProperty addressProperty : new ArrayList<AddressProperty>(abstractBridge.getAddress())) { object = apply(addressProperty); if (object != null) return object; } } if (abstractBridge.isSetLod1Solid()) { object = apply(abstractBridge.getLod1Solid()); if (object != null) return object; } if (abstractBridge.isSetLod2Solid()) { object = apply(abstractBridge.getLod2Solid()); if (object != null) return object; } if (abstractBridge.isSetLod3Solid()) { object = apply(abstractBridge.getLod3Solid()); if (object != null) return object; } if (abstractBridge.isSetLod4Solid()) { object = apply(abstractBridge.getLod4Solid()); if (object != null) return object; } if (abstractBridge.isSetLod1TerrainIntersection()) { object = apply(abstractBridge.getLod1TerrainIntersection()); if (object != null) return object; } if (abstractBridge.isSetLod2TerrainIntersection()) { object = apply(abstractBridge.getLod2TerrainIntersection()); if (object != null) return object; } if (abstractBridge.isSetLod3TerrainIntersection()) { object = apply(abstractBridge.getLod3TerrainIntersection()); if (object != null) return object; } if (abstractBridge.isSetLod4TerrainIntersection()) { object = apply(abstractBridge.getLod4TerrainIntersection()); if (object != null) return object; } if (abstractBridge.isSetLod2MultiCurve()) { object = apply(abstractBridge.getLod2MultiCurve()); if (object != null) return object; } if (abstractBridge.isSetLod3MultiCurve()) { object = apply(abstractBridge.getLod3MultiCurve()); if (object != null) return object; } if (abstractBridge.isSetLod4MultiCurve()) { object = apply(abstractBridge.getLod4MultiCurve()); if (object != null) return object; } if (abstractBridge.isSetLod1MultiSurface()) { object = apply(abstractBridge.getLod1MultiSurface()); if (object != null) return object; } if (abstractBridge.isSetLod2MultiSurface()) { object = apply(abstractBridge.getLod2MultiSurface()); if (object != null) return object; } if (abstractBridge.isSetLod3MultiSurface()) { object = apply(abstractBridge.getLod3MultiSurface()); if (object != null) return object; } if (abstractBridge.isSetLod4MultiSurface()) { object = apply(abstractBridge.getLod4MultiSurface()); if (object != null) return object; } if (abstractBridge.isSetGenericApplicationPropertyOfAbstractBridge()) { for (ADEComponent ade : new ArrayList<ADEComponent>(abstractBridge.getGenericApplicationPropertyOfAbstractBridge())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(AbstractBuilding abstractBuilding) { T object = apply((AbstractSite)abstractBuilding); if (object != null) return object; if (abstractBuilding.isSetOuterBuildingInstallation()) { for (BuildingInstallationProperty buildingInstallationProperty : new ArrayList<BuildingInstallationProperty>(abstractBuilding.getOuterBuildingInstallation())) { object = apply(buildingInstallationProperty); if (object != null) return object; } } if (abstractBuilding.isSetInteriorBuildingInstallation()) { for (IntBuildingInstallationProperty intBuildingInstallationProperty : new ArrayList<IntBuildingInstallationProperty>(abstractBuilding.getInteriorBuildingInstallation())) { object = apply(intBuildingInstallationProperty); if (object != null) return object; } } if (abstractBuilding.isSetBoundedBySurface()) { for (org.citygml4j.model.citygml.building.BoundarySurfaceProperty boundarySurfaceProperty : new ArrayList<org.citygml4j.model.citygml.building.BoundarySurfaceProperty>(abstractBuilding.getBoundedBySurface())) { object = apply(boundarySurfaceProperty); if (object != null) return object; } } if (abstractBuilding.isSetConsistsOfBuildingPart()) { for (BuildingPartProperty buildingPartProperty : new ArrayList<BuildingPartProperty>(abstractBuilding.getConsistsOfBuildingPart())) { object = apply(buildingPartProperty); if (object != null) return object; } } if (abstractBuilding.isSetInteriorRoom()) { for (InteriorRoomProperty interiorRoomProperty : new ArrayList<InteriorRoomProperty>(abstractBuilding.getInteriorRoom())) { object = apply(interiorRoomProperty); if (object != null) return object; } } if (abstractBuilding.isSetAddress()) { for (AddressProperty addressProperty : new ArrayList<AddressProperty>(abstractBuilding.getAddress())) { object = apply(addressProperty); if (object != null) return object; } } if (abstractBuilding.isSetLod1Solid()) { object = apply(abstractBuilding.getLod1Solid()); if (object != null) return object; } if (abstractBuilding.isSetLod2Solid()) { object = apply(abstractBuilding.getLod2Solid()); if (object != null) return object; } if (abstractBuilding.isSetLod3Solid()) { object = apply(abstractBuilding.getLod3Solid()); if (object != null) return object; } if (abstractBuilding.isSetLod4Solid()) { object = apply(abstractBuilding.getLod4Solid()); if (object != null) return object; } if (abstractBuilding.isSetLod1TerrainIntersection()) { object = apply(abstractBuilding.getLod1TerrainIntersection()); if (object != null) return object; } if (abstractBuilding.isSetLod2TerrainIntersection()) { object = apply(abstractBuilding.getLod2TerrainIntersection()); if (object != null) return object; } if (abstractBuilding.isSetLod3TerrainIntersection()) { object = apply(abstractBuilding.getLod3TerrainIntersection()); if (object != null) return object; } if (abstractBuilding.isSetLod4TerrainIntersection()) { object = apply(abstractBuilding.getLod4TerrainIntersection()); if (object != null) return object; } if (abstractBuilding.isSetLod2MultiCurve()) { object = apply(abstractBuilding.getLod2MultiCurve()); if (object != null) return object; } if (abstractBuilding.isSetLod3MultiCurve()) { object = apply(abstractBuilding.getLod3MultiCurve()); if (object != null) return object; } if (abstractBuilding.isSetLod4MultiCurve()) { object = apply(abstractBuilding.getLod4MultiCurve()); if (object != null) return object; } if (abstractBuilding.isSetLod0FootPrint()) { object = apply(abstractBuilding.getLod0FootPrint()); if (object != null) return object; } if (abstractBuilding.isSetLod0RoofEdge()) { object = apply(abstractBuilding.getLod0RoofEdge()); if (object != null) return object; } if (abstractBuilding.isSetLod1MultiSurface()) { object = apply(abstractBuilding.getLod1MultiSurface()); if (object != null) return object; } if (abstractBuilding.isSetLod2MultiSurface()) { object = apply(abstractBuilding.getLod2MultiSurface()); if (object != null) return object; } if (abstractBuilding.isSetLod3MultiSurface()) { object = apply(abstractBuilding.getLod3MultiSurface()); if (object != null) return object; } if (abstractBuilding.isSetLod4MultiSurface()) { object = apply(abstractBuilding.getLod4MultiSurface()); if (object != null) return object; } if (abstractBuilding.isSetGenericApplicationPropertyOfAbstractBuilding()) { for (ADEComponent ade : new ArrayList<ADEComponent>(abstractBuilding.getGenericApplicationPropertyOfAbstractBuilding())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(AbstractCityObject abstractCityObject) { T object = apply((AbstractFeature)abstractCityObject); if (object != null) return object; if (abstractCityObject.isSetGeneralizesTo()) { for (GeneralizationRelation generalizationRelation : new ArrayList<GeneralizationRelation>(abstractCityObject.getGeneralizesTo())) { object = apply(generalizationRelation); if (object != null) return object; } } if (abstractCityObject.isSetAppearance()) { for (AppearanceProperty appearanceProperty : new ArrayList<AppearanceProperty>(abstractCityObject.getAppearance())) { object = apply(appearanceProperty); if (object != null) return object; } } if (abstractCityObject.isSetGenericApplicationPropertyOfCityObject()) { for (ADEComponent ade : new ArrayList<ADEComponent>(abstractCityObject.getGenericApplicationPropertyOfCityObject())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(AbstractCoverage abstractCoverage) { T object = apply((AbstractFeature)abstractCoverage); if (object != null) return object; if (abstractCoverage.isSetRangeSet()) { RangeSet rangeSet = abstractCoverage.getRangeSet(); if (rangeSet.isSetValueArray()) { for (ValueArray valueArray : new ArrayList<ValueArray>(rangeSet.getValueArray())) { object = apply(valueArray); if (object != null) return object; } } else if (rangeSet.isSetDataBlock()) { DataBlock dataBlock = rangeSet.getDataBlock(); if (dataBlock.isSetRangeParameters() && dataBlock.getRangeParameters().isSetValueObject()) { object = apply(dataBlock.getRangeParameters().getValueObject()); if (object != null) return object; } } else if (rangeSet.isSetFile()) { File file = rangeSet.getFile(); if (file.isSetRangeParameters() && file.getRangeParameters().isSetValueObject()) { object = apply(file.getRangeParameters().getValueObject()); if (object != null) return object; } } } return null; } public T apply(AbstractDiscreteCoverage abstractDiscreteCoverage) { return apply((AbstractCoverage)abstractDiscreteCoverage); } public T apply(AbstractFeature abstractFeature) { T object = apply((AbstractGML)abstractFeature); if (object != null) return object; if (abstractFeature.isSetLocation()) { object = apply(abstractFeature.getLocation()); if (object != null) return object; } if (abstractFeature.isSetGenericADEComponent()) { for (ADEComponent ade : new ArrayList<ADEComponent>(abstractFeature.getGenericADEComponent())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(AbstractFeatureCollection abstractFeatureCollection) { T object = apply((AbstractFeature)abstractFeatureCollection); if (object != null) return object; if (abstractFeatureCollection.isSetFeatureMember()) { for (FeatureMember featureMember : new ArrayList<FeatureMember>(abstractFeatureCollection.getFeatureMember())) { object = apply(featureMember); if (object != null) return object; } } if (abstractFeatureCollection.isSetFeatureMembers()) apply(abstractFeatureCollection.getFeatureMembers()); return null; } public T apply(org.citygml4j.model.citygml.bridge.AbstractOpening abstractOpening) { T object = apply((AbstractCityObject)abstractOpening); if (object != null) return object; if (abstractOpening.isSetLod3MultiSurface()) { object = apply(abstractOpening.getLod3MultiSurface()); if (object != null) return object; } if (abstractOpening.isSetLod4MultiSurface()) { object = apply(abstractOpening.getLod4MultiSurface()); if (object != null) return object; } if (abstractOpening.isSetLod3ImplicitRepresentation()) { object = apply(abstractOpening.getLod3ImplicitRepresentation()); if (object != null) return object; } if (abstractOpening.isSetLod4ImplicitRepresentation()) { object = apply(abstractOpening.getLod4ImplicitRepresentation()); if (object != null) return object; } if (abstractOpening.isSetGenericApplicationPropertyOfOpening()) { for (ADEComponent ade : new ArrayList<ADEComponent>(abstractOpening.getGenericApplicationPropertyOfOpening())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(org.citygml4j.model.citygml.building.AbstractOpening abstractOpening) { T object = apply((AbstractCityObject)abstractOpening); if (object != null) return object; if (abstractOpening.isSetLod3MultiSurface()) { object = apply(abstractOpening.getLod3MultiSurface()); if (object != null) return object; } if (abstractOpening.isSetLod4MultiSurface()) { object = apply(abstractOpening.getLod4MultiSurface()); if (object != null) return object; } if (abstractOpening.isSetLod3ImplicitRepresentation()) { object = apply(abstractOpening.getLod3ImplicitRepresentation()); if (object != null) return object; } if (abstractOpening.isSetLod4ImplicitRepresentation()) { object = apply(abstractOpening.getLod4ImplicitRepresentation()); if (object != null) return object; } if (abstractOpening.isSetGenericApplicationPropertyOfOpening()) { for (ADEComponent ade : new ArrayList<ADEComponent>(abstractOpening.getGenericApplicationPropertyOfOpening())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(AbstractReliefComponent abstractReliefComponent) { T object = apply((AbstractCityObject)abstractReliefComponent); if (object != null) return object; if (abstractReliefComponent.isSetExtent()) { object = apply(abstractReliefComponent.getExtent()); if (object != null) return object; } if (abstractReliefComponent.isSetGenericApplicationPropertyOfReliefComponent()) { for (ADEComponent ade : new ArrayList<ADEComponent>(abstractReliefComponent.getGenericApplicationPropertyOfReliefComponent())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(org.citygml4j.model.citygml.tunnel.AbstractOpening abstractOpening) { T object = apply((AbstractCityObject)abstractOpening); if (object != null) return object; if (abstractOpening.isSetLod3MultiSurface()) { object = apply(abstractOpening.getLod3MultiSurface()); if (object != null) return object; } if (abstractOpening.isSetLod4MultiSurface()) { object = apply(abstractOpening.getLod4MultiSurface()); if (object != null) return object; } if (abstractOpening.isSetLod3ImplicitRepresentation()) { object = apply(abstractOpening.getLod3ImplicitRepresentation()); if (object != null) return object; } if (abstractOpening.isSetLod4ImplicitRepresentation()) { object = apply(abstractOpening.getLod4ImplicitRepresentation()); if (object != null) return object; } if (abstractOpening.isSetGenericApplicationPropertyOfOpening()) { for (ADEComponent ade : new ArrayList<ADEComponent>(abstractOpening.getGenericApplicationPropertyOfOpening())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(AbstractSite abstractSite) { T object = apply((AbstractCityObject)abstractSite); if (object != null) return object; if (abstractSite.isSetGenericApplicationPropertyOfSite()) { for (ADEComponent ade : new ArrayList<ADEComponent>(abstractSite.getGenericApplicationPropertyOfSite())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(AbstractSurfaceData abstractSurfaceData) { T object = apply((AbstractFeature)abstractSurfaceData); if (object != null) return object; if (abstractSurfaceData.isSetGenericApplicationPropertyOfSurfaceData()) { for (ADEComponent ade : new ArrayList<ADEComponent>(abstractSurfaceData.getGenericApplicationPropertyOfSurfaceData())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(AbstractTexture abstractTexture) { T object = apply((AbstractSurfaceData)abstractTexture); if (object != null) return object; if (abstractTexture.isSetGenericApplicationPropertyOfTexture()) { for (ADEComponent ade : new ArrayList<ADEComponent>(abstractTexture.getGenericApplicationPropertyOfTexture())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(AbstractTextureParameterization abstractTextureParameterization) { T object = apply((AbstractGML)abstractTextureParameterization); if (object != null) return object; if (abstractTextureParameterization.isSetGenericADEComponent()) { for (ADEComponent ade : new ArrayList<ADEComponent>(abstractTextureParameterization.getGenericADEComponent())) { object = apply(ade); if (object != null) return object; } } if (abstractTextureParameterization.isSetGenericApplicationPropertyOfTextureParameterization()) { for (ADEComponent ade : new ArrayList<ADEComponent>(abstractTextureParameterization.getGenericApplicationPropertyOfTextureParameterization())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(AbstractTransportationObject abstractTransportationObject) { T object = apply((AbstractCityObject)abstractTransportationObject); if (object != null) return object; if (abstractTransportationObject.isSetGenericApplicationPropertyOfTransportationObject()) { for (ADEComponent ade : new ArrayList<ADEComponent>(abstractTransportationObject.getGenericApplicationPropertyOfTransportationObject())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(AbstractTunnel abstractTunnel) { T object = apply((AbstractSite)abstractTunnel); if (object != null) return object; if (abstractTunnel.isSetOuterTunnelInstallation()) { for (TunnelInstallationProperty tunnelInstallationProperty : new ArrayList<TunnelInstallationProperty>(abstractTunnel.getOuterTunnelInstallation())) { object = apply(tunnelInstallationProperty); if (object != null) return object; } } if (abstractTunnel.isSetInteriorTunnelInstallation()) { for (IntTunnelInstallationProperty intTunnelInstallationProperty : new ArrayList<IntTunnelInstallationProperty>(abstractTunnel.getInteriorTunnelInstallation())) { object = apply(intTunnelInstallationProperty); if (object != null) return object; } } if (abstractTunnel.isSetBoundedBySurface()) { for (org.citygml4j.model.citygml.tunnel.BoundarySurfaceProperty boundarySurfaceProperty : new ArrayList<org.citygml4j.model.citygml.tunnel.BoundarySurfaceProperty>(abstractTunnel.getBoundedBySurface())) { object = apply(boundarySurfaceProperty); if (object != null) return object; } } if (abstractTunnel.isSetConsistsOfTunnelPart()) { for (TunnelPartProperty tunnelPartProperty : new ArrayList<TunnelPartProperty>(abstractTunnel.getConsistsOfTunnelPart())) { object = apply(tunnelPartProperty); if (object != null) return object; } } if (abstractTunnel.isSetInteriorHollowSpace()) { for (InteriorHollowSpaceProperty interiorHollowSpaceProperty : new ArrayList<InteriorHollowSpaceProperty>(abstractTunnel.getInteriorHollowSpace())) { object = apply(interiorHollowSpaceProperty); if (object != null) return object; } } if (abstractTunnel.isSetLod1Solid()) { object = apply(abstractTunnel.getLod1Solid()); if (object != null) return object; } if (abstractTunnel.isSetLod2Solid()) { object = apply(abstractTunnel.getLod2Solid()); if (object != null) return object; } if (abstractTunnel.isSetLod3Solid()) { object = apply(abstractTunnel.getLod3Solid()); if (object != null) return object; } if (abstractTunnel.isSetLod4Solid()) { object = apply(abstractTunnel.getLod4Solid()); if (object != null) return object; } if (abstractTunnel.isSetLod1TerrainIntersection()) { object = apply(abstractTunnel.getLod1TerrainIntersection()); if (object != null) return object; } if (abstractTunnel.isSetLod2TerrainIntersection()) { object = apply(abstractTunnel.getLod2TerrainIntersection()); if (object != null) return object; } if (abstractTunnel.isSetLod3TerrainIntersection()) { object = apply(abstractTunnel.getLod3TerrainIntersection()); if (object != null) return object; } if (abstractTunnel.isSetLod4TerrainIntersection()) { object = apply(abstractTunnel.getLod4TerrainIntersection()); if (object != null) return object; } if (abstractTunnel.isSetLod2MultiCurve()) { object = apply(abstractTunnel.getLod2MultiCurve()); if (object != null) return object; } if (abstractTunnel.isSetLod3MultiCurve()) { object = apply(abstractTunnel.getLod3MultiCurve()); if (object != null) return object; } if (abstractTunnel.isSetLod4MultiCurve()) { object = apply(abstractTunnel.getLod4MultiCurve()); if (object != null) return object; } if (abstractTunnel.isSetLod1MultiSurface()) { object = apply(abstractTunnel.getLod1MultiSurface()); if (object != null) return object; } if (abstractTunnel.isSetLod2MultiSurface()) { object = apply(abstractTunnel.getLod2MultiSurface()); if (object != null) return object; } if (abstractTunnel.isSetLod3MultiSurface()) { object = apply(abstractTunnel.getLod3MultiSurface()); if (object != null) return object; } if (abstractTunnel.isSetLod4MultiSurface()) { object = apply(abstractTunnel.getLod4MultiSurface()); if (object != null) return object; } if (abstractTunnel.isSetGenericApplicationPropertyOfAbstractTunnel()) { for (ADEComponent ade : new ArrayList<ADEComponent>(abstractTunnel.getGenericApplicationPropertyOfAbstractTunnel())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(AbstractVegetationObject abstractVegetationObject) { T object = apply((AbstractCityObject)abstractVegetationObject); if (object != null) return object; if (abstractVegetationObject.isSetGenericApplicationPropertyOfVegetationObject()) { for (ADEComponent ade : new ArrayList<ADEComponent>(abstractVegetationObject.getGenericApplicationPropertyOfVegetationObject())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(AbstractWaterBoundarySurface abstractWaterBoundarySurface) { T object = apply((AbstractCityObject)abstractWaterBoundarySurface); if (object != null) return object; if (abstractWaterBoundarySurface.isSetLod2Surface()) { object = apply(abstractWaterBoundarySurface.getLod2Surface()); if (object != null) return object; } if (abstractWaterBoundarySurface.isSetLod3Surface()) { object = apply(abstractWaterBoundarySurface.getLod3Surface()); if (object != null) return object; } if (abstractWaterBoundarySurface.isSetLod4Surface()) { object = apply(abstractWaterBoundarySurface.getLod4Surface()); if (object != null) return object; } if (abstractWaterBoundarySurface.isSetGenericApplicationPropertyOfWaterBoundarySurface()) { for (ADEComponent ade : new ArrayList<ADEComponent>(abstractWaterBoundarySurface.getGenericApplicationPropertyOfWaterBoundarySurface())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(AbstractWaterObject abstractWaterObject) { T object = apply((AbstractCityObject)abstractWaterObject); if (object != null) return object; if (abstractWaterObject.isSetGenericApplicationPropertyOfWaterObject()) { for (ADEComponent ade : new ArrayList<ADEComponent>(abstractWaterObject.getGenericApplicationPropertyOfWaterObject())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(Appearance appearance) { T object = apply((AbstractFeature)appearance); if (object != null) return object; if (appearance.isSetSurfaceDataMember()) for (SurfaceDataProperty surfaceDataProperty : new ArrayList<SurfaceDataProperty>(appearance.getSurfaceDataMember())) { object = apply(surfaceDataProperty); if (object != null) return object; } if (appearance.isSetGenericApplicationPropertyOfAppearance()) { for (ADEComponent ade : new ArrayList<ADEComponent>(appearance.getGenericApplicationPropertyOfAppearance())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(GeoreferencedTexture georeferencedTexture) { T object = apply((AbstractTexture)georeferencedTexture); if (object != null) return object; if (georeferencedTexture.isSetReferencePoint()) { object = apply(georeferencedTexture.getReferencePoint()); if (object != null) return object; } if (georeferencedTexture.isSetGenericApplicationPropertyOfGeoreferencedTexture()) { for (ADEComponent ade : new ArrayList<ADEComponent>(georeferencedTexture.getGenericApplicationPropertyOfGeoreferencedTexture())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(ParameterizedTexture parameterizedTexture) { T object = apply((AbstractTexture)parameterizedTexture); if (object != null) return object; if (parameterizedTexture.isSetTarget()) { for (TextureAssociation textureAssociation : new ArrayList<TextureAssociation>(parameterizedTexture.getTarget())) { object = apply(textureAssociation); if (object != null) return object; } } if (parameterizedTexture.isSetGenericApplicationPropertyOfParameterizedTexture()) { for (ADEComponent ade : new ArrayList<ADEComponent>(parameterizedTexture.getGenericApplicationPropertyOfParameterizedTexture())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(X3DMaterial x3dMaterial) { T object = apply((AbstractSurfaceData)x3dMaterial); if (object != null) return object; if (x3dMaterial.isSetGenericApplicationPropertyOfX3DMaterial()) { for (ADEComponent ade : new ArrayList<ADEComponent>(x3dMaterial.getGenericApplicationPropertyOfX3DMaterial())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(Bridge bridge) { T object = apply((AbstractBridge)bridge); if (object != null) return object; if (bridge.isSetGenericApplicationPropertyOfBridge()) { for (ADEComponent ade : new ArrayList<ADEComponent>(bridge.getGenericApplicationPropertyOfBridge())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(BridgeConstructionElement bridgeConstructionElement) { T object = apply((AbstractCityObject)bridgeConstructionElement); if (object != null) return object; if (bridgeConstructionElement.isSetBoundedBySurface()) { for (org.citygml4j.model.citygml.bridge.BoundarySurfaceProperty boundarySurfaceProperty : new ArrayList<org.citygml4j.model.citygml.bridge.BoundarySurfaceProperty>(bridgeConstructionElement.getBoundedBySurface())) { object = apply(boundarySurfaceProperty); if (object != null) return object; } } if (bridgeConstructionElement.isSetLod1Geometry()) { object = apply(bridgeConstructionElement.getLod1Geometry()); if (object != null) return object; } if (bridgeConstructionElement.isSetLod2Geometry()) { object = apply(bridgeConstructionElement.getLod2Geometry()); if (object != null) return object; } if (bridgeConstructionElement.isSetLod3Geometry()) { object = apply(bridgeConstructionElement.getLod3Geometry()); if (object != null) return object; } if (bridgeConstructionElement.isSetLod4Geometry()) { object = apply(bridgeConstructionElement.getLod4Geometry()); if (object != null) return object; } if (bridgeConstructionElement.isSetLod1ImplicitRepresentation()) { object = apply(bridgeConstructionElement.getLod1ImplicitRepresentation()); if (object != null) return object; } if (bridgeConstructionElement.isSetLod2ImplicitRepresentation()) { object = apply(bridgeConstructionElement.getLod2ImplicitRepresentation()); if (object != null) return object; } if (bridgeConstructionElement.isSetLod3ImplicitRepresentation()) { object = apply(bridgeConstructionElement.getLod3ImplicitRepresentation()); if (object != null) return object; } if (bridgeConstructionElement.isSetLod4ImplicitRepresentation()) { object = apply(bridgeConstructionElement.getLod4ImplicitRepresentation()); if (object != null) return object; } if (bridgeConstructionElement.isSetLod1TerrainIntersection()) { object = apply(bridgeConstructionElement.getLod1TerrainIntersection()); if (object != null) return object; } if (bridgeConstructionElement.isSetLod2TerrainIntersection()) { object = apply(bridgeConstructionElement.getLod2TerrainIntersection()); if (object != null) return object; } if (bridgeConstructionElement.isSetLod3TerrainIntersection()) { object = apply(bridgeConstructionElement.getLod3TerrainIntersection()); if (object != null) return object; } if (bridgeConstructionElement.isSetLod4TerrainIntersection()) { object = apply(bridgeConstructionElement.getLod4TerrainIntersection()); if (object != null) return object; } if (bridgeConstructionElement.isSetGenericApplicationPropertyOfBridgeConstructionElement()) { for (ADEComponent ade : new ArrayList<ADEComponent>(bridgeConstructionElement.getGenericApplicationPropertyOfBridgeConstructionElement())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(BridgeFurniture bridgeFurniture) { T object = apply((AbstractCityObject)bridgeFurniture); if (object != null) return object; if (bridgeFurniture.isSetLod4Geometry()) { object = apply(bridgeFurniture.getLod4Geometry()); if (object != null) return object; } if (bridgeFurniture.isSetLod4ImplicitRepresentation()) { object = apply(bridgeFurniture.getLod4ImplicitRepresentation()); if (object != null) return object; } if (bridgeFurniture.isSetGenericApplicationPropertyOfBridgeFurniture()) { for (ADEComponent ade : new ArrayList<ADEComponent>(bridgeFurniture.getGenericApplicationPropertyOfBridgeFurniture())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(BridgeInstallation bridgeInstallation) { T object = apply((AbstractCityObject)bridgeInstallation); if (object != null) return object; if (bridgeInstallation.isSetBoundedBySurface()) { for (org.citygml4j.model.citygml.bridge.BoundarySurfaceProperty boundarySurfaceProperty : new ArrayList<org.citygml4j.model.citygml.bridge.BoundarySurfaceProperty>(bridgeInstallation.getBoundedBySurface())) { object = apply(boundarySurfaceProperty); if (object != null) return object; } } if (bridgeInstallation.isSetLod2Geometry()) { object = apply(bridgeInstallation.getLod2Geometry()); if (object != null) return object; } if (bridgeInstallation.isSetLod3Geometry()) { object = apply(bridgeInstallation.getLod3Geometry()); if (object != null) return object; } if (bridgeInstallation.isSetLod4Geometry()) { object = apply(bridgeInstallation.getLod4Geometry()); if (object != null) return object; } if (bridgeInstallation.isSetLod2ImplicitRepresentation()) { object = apply(bridgeInstallation.getLod2ImplicitRepresentation()); if (object != null) return object; } if (bridgeInstallation.isSetLod3ImplicitRepresentation()) { object = apply(bridgeInstallation.getLod3ImplicitRepresentation()); if (object != null) return object; } if (bridgeInstallation.isSetLod4ImplicitRepresentation()) { object = apply(bridgeInstallation.getLod4ImplicitRepresentation()); if (object != null) return object; } if (bridgeInstallation.isSetGenericApplicationPropertyOfBridgeInstallation()) { for (ADEComponent ade : new ArrayList<ADEComponent>(bridgeInstallation.getGenericApplicationPropertyOfBridgeInstallation())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(BridgePart bridgePart) { T object = apply((AbstractBridge)bridgePart); if (object != null) return object; if (bridgePart.isSetGenericApplicationPropertyOfBridgePart()) { for (ADEComponent ade : new ArrayList<ADEComponent>(bridgePart.getGenericApplicationPropertyOfBridgePart())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(BridgeRoom bridgeRoom) { T object = apply((AbstractCityObject)bridgeRoom); if (object != null) return object; if (bridgeRoom.isSetBoundedBySurface()) { for (org.citygml4j.model.citygml.bridge.BoundarySurfaceProperty boundarySurfaceProperty : new ArrayList<org.citygml4j.model.citygml.bridge.BoundarySurfaceProperty>(bridgeRoom.getBoundedBySurface())) { object = apply(boundarySurfaceProperty); if (object != null) return object; } } if (bridgeRoom.isSetInteriorFurniture()) { for (org.citygml4j.model.citygml.bridge.InteriorFurnitureProperty interiorFurnitureProperty : new ArrayList<org.citygml4j.model.citygml.bridge.InteriorFurnitureProperty>(bridgeRoom.getInteriorFurniture())) { object = apply(interiorFurnitureProperty); if (object != null) return object; } } if (bridgeRoom.isSetBridgeRoomInstallation()) { for (IntBridgeInstallationProperty intBridgeInstallationProperty : new ArrayList<IntBridgeInstallationProperty>(bridgeRoom.getBridgeRoomInstallation())) { object = apply(intBridgeInstallationProperty); if (object != null) return object; } } if (bridgeRoom.isSetLod4MultiSurface()) { object = apply(bridgeRoom.getLod4MultiSurface()); if (object != null) return object; } if (bridgeRoom.isSetLod4Solid()) { object = apply(bridgeRoom.getLod4Solid()); if (object != null) return object; } if (bridgeRoom.isSetGenericApplicationPropertyOfBridgeRoom()) { for (ADEComponent ade : new ArrayList<ADEComponent>(bridgeRoom.getGenericApplicationPropertyOfBridgeRoom())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(IntBridgeInstallation intBridgeInstallation) { T object = apply((AbstractCityObject)intBridgeInstallation); if (object != null) return object; if (intBridgeInstallation.isSetBoundedBySurface()) { for (org.citygml4j.model.citygml.bridge.BoundarySurfaceProperty boundarySurfaceProperty : new ArrayList<org.citygml4j.model.citygml.bridge.BoundarySurfaceProperty>(intBridgeInstallation.getBoundedBySurface())) { object = apply(boundarySurfaceProperty); if (object != null) return object; } } if (intBridgeInstallation.isSetLod4Geometry()) { object = apply(intBridgeInstallation.getLod4Geometry()); if (object != null) return object; } if (intBridgeInstallation.isSetLod4ImplicitRepresentation()) { object = apply(intBridgeInstallation.getLod4ImplicitRepresentation()); if (object != null) return object; } if (intBridgeInstallation.isSetGenericApplicationPropertyOfIntBridgeInstallation()) { for (ADEComponent ade : new ArrayList<ADEComponent>(intBridgeInstallation.getGenericApplicationPropertyOfIntBridgeInstallation())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(org.citygml4j.model.citygml.bridge.CeilingSurface ceilingSurface) { T object = apply((org.citygml4j.model.citygml.bridge.AbstractBoundarySurface)ceilingSurface); if (object != null) return object; if (ceilingSurface.isSetGenericApplicationPropertyOfCeilingSurface()) { for (ADEComponent ade : new ArrayList<ADEComponent>(ceilingSurface.getGenericApplicationPropertyOfCeilingSurface())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(org.citygml4j.model.citygml.bridge.OuterCeilingSurface outerCeilingSurface) { T object = apply((org.citygml4j.model.citygml.bridge.AbstractBoundarySurface)outerCeilingSurface); if (object != null) return object; if (outerCeilingSurface.isSetGenericApplicationPropertyOfOuterCeilingSurface()) { for (ADEComponent ade : new ArrayList<ADEComponent>(outerCeilingSurface.getGenericApplicationPropertyOfOuterCeilingSurface())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(org.citygml4j.model.citygml.bridge.ClosureSurface closureSurface) { T object = apply((org.citygml4j.model.citygml.bridge.AbstractBoundarySurface)closureSurface); if (object != null) return object; if (closureSurface.isSetGenericApplicationPropertyOfClosureSurface()) { for (ADEComponent ade : new ArrayList<ADEComponent>(closureSurface.getGenericApplicationPropertyOfClosureSurface())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(org.citygml4j.model.citygml.bridge.FloorSurface floorSurface) { T object = apply((org.citygml4j.model.citygml.bridge.AbstractBoundarySurface)floorSurface); if (object != null) return object; if (floorSurface.isSetGenericApplicationPropertyOfFloorSurface()) { for (ADEComponent ade : new ArrayList<ADEComponent>(floorSurface.getGenericApplicationPropertyOfFloorSurface())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(org.citygml4j.model.citygml.bridge.OuterFloorSurface outerFloorSurface) { T object = apply((org.citygml4j.model.citygml.bridge.AbstractBoundarySurface)outerFloorSurface); if (object != null) return object; if (outerFloorSurface.isSetGenericApplicationPropertyOfOuterFloorSurface()) { for (ADEComponent ade : new ArrayList<ADEComponent>(outerFloorSurface.getGenericApplicationPropertyOfOuterFloorSurface())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(org.citygml4j.model.citygml.bridge.GroundSurface groundSurface) { T object = apply((org.citygml4j.model.citygml.bridge.AbstractBoundarySurface)groundSurface); if (object != null) return object; if (groundSurface.isSetGenericApplicationPropertyOfGroundSurface()) { for (ADEComponent ade : new ArrayList<ADEComponent>(groundSurface.getGenericApplicationPropertyOfGroundSurface())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(org.citygml4j.model.citygml.bridge.InteriorWallSurface interiorWallSurface) { T object = apply((org.citygml4j.model.citygml.bridge.AbstractBoundarySurface)interiorWallSurface); if (object != null) return object; if (interiorWallSurface.isSetGenericApplicationPropertyOfInteriorWallSurface()) { for (ADEComponent ade : new ArrayList<ADEComponent>(interiorWallSurface.getGenericApplicationPropertyOfInteriorWallSurface())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(org.citygml4j.model.citygml.bridge.RoofSurface roofSurface) { T object = apply((org.citygml4j.model.citygml.bridge.AbstractBoundarySurface)roofSurface); if (object != null) return object; if (roofSurface.isSetGenericApplicationPropertyOfRoofSurface()) { for (ADEComponent ade : new ArrayList<ADEComponent>(roofSurface.getGenericApplicationPropertyOfRoofSurface())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(org.citygml4j.model.citygml.bridge.WallSurface wallSurface) { T object = apply((org.citygml4j.model.citygml.bridge.AbstractBoundarySurface)wallSurface); if (object != null) return object; if (wallSurface.isSetGenericApplicationPropertyOfWallSurface()) { for (ADEComponent ade : new ArrayList<ADEComponent>(wallSurface.getGenericApplicationPropertyOfWallSurface())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(org.citygml4j.model.citygml.bridge.Door door) { T object = apply((org.citygml4j.model.citygml.bridge.AbstractOpening)door); if (object != null) return object; if (door.isSetAddress()) { for (AddressProperty addressProperty : new ArrayList<AddressProperty>(door.getAddress())) { object = apply(addressProperty); if (object != null) return object; } } if (door.isSetGenericApplicationPropertyOfDoor()) { for (ADEComponent ade : new ArrayList<ADEComponent>(door.getGenericApplicationPropertyOfDoor())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(org.citygml4j.model.citygml.bridge.Window window) { T object = apply((org.citygml4j.model.citygml.bridge.AbstractOpening)window); if (object != null) return object; if (window.isSetGenericApplicationPropertyOfWindow()) { for (ADEComponent ade : new ArrayList<ADEComponent>(window.getGenericApplicationPropertyOfWindow())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(Building building) { T object = apply((AbstractBuilding)building); if (object != null) return object; if (building.isSetGenericApplicationPropertyOfBuilding()) { for (ADEComponent ade : new ArrayList<ADEComponent>(building.getGenericApplicationPropertyOfBuilding())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(BuildingFurniture buildingFurniture) { T object = apply((AbstractCityObject)buildingFurniture); if (object != null) return object; if (buildingFurniture.isSetLod4Geometry()) { object = apply(buildingFurniture.getLod4Geometry()); if (object != null) return object; } if (buildingFurniture.isSetLod4ImplicitRepresentation()) { object = apply(buildingFurniture.getLod4ImplicitRepresentation()); if (object != null) return object; } if (buildingFurniture.isSetGenericApplicationPropertyOfBuildingFurniture()) { for (ADEComponent ade : new ArrayList<ADEComponent>(buildingFurniture.getGenericApplicationPropertyOfBuildingFurniture())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(BuildingInstallation buildingInstallation) { T object = apply((AbstractCityObject)buildingInstallation); if (object != null) return object; if (buildingInstallation.isSetBoundedBySurface()) { for (org.citygml4j.model.citygml.building.BoundarySurfaceProperty boundarySurfaceProperty : new ArrayList<org.citygml4j.model.citygml.building.BoundarySurfaceProperty>(buildingInstallation.getBoundedBySurface())) { object = apply(boundarySurfaceProperty); if (object != null) return object; } } if (buildingInstallation.isSetLod2Geometry()) { object = apply(buildingInstallation.getLod2Geometry()); if (object != null) return object; } if (buildingInstallation.isSetLod3Geometry()) { object = apply(buildingInstallation.getLod3Geometry()); if (object != null) return object; } if (buildingInstallation.isSetLod4Geometry()) { object = apply(buildingInstallation.getLod4Geometry()); if (object != null) return object; } if (buildingInstallation.isSetLod2ImplicitRepresentation()) { object = apply(buildingInstallation.getLod2ImplicitRepresentation()); if (object != null) return object; } if (buildingInstallation.isSetLod3ImplicitRepresentation()) { object = apply(buildingInstallation.getLod3ImplicitRepresentation()); if (object != null) return object; } if (buildingInstallation.isSetLod4ImplicitRepresentation()) { object = apply(buildingInstallation.getLod4ImplicitRepresentation()); if (object != null) return object; } if (buildingInstallation.isSetGenericApplicationPropertyOfBuildingInstallation()) { for (ADEComponent ade : new ArrayList<ADEComponent>(buildingInstallation.getGenericApplicationPropertyOfBuildingInstallation())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(BuildingPart buildingPart) { T object = apply((AbstractBuilding)buildingPart); if (object != null) return object; if (buildingPart.isSetGenericApplicationPropertyOfBuildingPart()) { for (ADEComponent ade : new ArrayList<ADEComponent>(buildingPart.getGenericApplicationPropertyOfBuildingPart())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(IntBuildingInstallation intBuildingInstallation) { T object = apply((AbstractCityObject)intBuildingInstallation); if (object != null) return object; if (intBuildingInstallation.isSetBoundedBySurface()) { for (org.citygml4j.model.citygml.building.BoundarySurfaceProperty boundarySurfaceProperty : new ArrayList<org.citygml4j.model.citygml.building.BoundarySurfaceProperty>(intBuildingInstallation.getBoundedBySurface())) { object = apply(boundarySurfaceProperty); if (object != null) return object; } } if (intBuildingInstallation.isSetLod4Geometry()) { object = apply(intBuildingInstallation.getLod4Geometry()); if (object != null) return object; } if (intBuildingInstallation.isSetLod4ImplicitRepresentation()) { object = apply(intBuildingInstallation.getLod4ImplicitRepresentation()); if (object != null) return object; } if (intBuildingInstallation.isSetGenericApplicationPropertyOfIntBuildingInstallation()) { for (ADEComponent ade : new ArrayList<ADEComponent>(intBuildingInstallation.getGenericApplicationPropertyOfIntBuildingInstallation())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(Room room) { T object = apply((AbstractCityObject)room); if (object != null) return object; if (room.isSetBoundedBySurface()) { for (org.citygml4j.model.citygml.building.BoundarySurfaceProperty boundarySurfaceProperty : new ArrayList<org.citygml4j.model.citygml.building.BoundarySurfaceProperty>(room.getBoundedBySurface())) { object = apply(boundarySurfaceProperty); if (object != null) return object; } } if (room.isSetInteriorFurniture()) { for (org.citygml4j.model.citygml.building.InteriorFurnitureProperty interiorFurnitureProperty : new ArrayList<org.citygml4j.model.citygml.building.InteriorFurnitureProperty>(room.getInteriorFurniture())) { object = apply(interiorFurnitureProperty); if (object != null) return object; } } if (room.isSetRoomInstallation()) { for (IntBuildingInstallationProperty intBuildingInstallationProperty : new ArrayList<IntBuildingInstallationProperty>(room.getRoomInstallation())) { object = apply(intBuildingInstallationProperty); if (object != null) return object; } } if (room.isSetLod4MultiSurface()) { object = apply(room.getLod4MultiSurface()); if (object != null) return object; } if (room.isSetLod4Solid()) { object = apply(room.getLod4Solid()); if (object != null) return object; } if (room.isSetGenericApplicationPropertyOfRoom()) { for (ADEComponent ade : new ArrayList<ADEComponent>(room.getGenericApplicationPropertyOfRoom())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(org.citygml4j.model.citygml.building.CeilingSurface ceilingSurface) { T object = apply((org.citygml4j.model.citygml.building.AbstractBoundarySurface)ceilingSurface); if (object != null) return object; if (ceilingSurface.isSetGenericApplicationPropertyOfCeilingSurface()) { for (ADEComponent ade : new ArrayList<ADEComponent>(ceilingSurface.getGenericApplicationPropertyOfCeilingSurface())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(org.citygml4j.model.citygml.building.OuterCeilingSurface outerCeilingSurface) { T object = apply((org.citygml4j.model.citygml.building.AbstractBoundarySurface)outerCeilingSurface); if (object != null) return object; if (outerCeilingSurface.isSetGenericApplicationPropertyOfOuterCeilingSurface()) { for (ADEComponent ade : new ArrayList<ADEComponent>(outerCeilingSurface.getGenericApplicationPropertyOfOuterCeilingSurface())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(org.citygml4j.model.citygml.building.ClosureSurface closureSurface) { T object = apply((org.citygml4j.model.citygml.building.AbstractBoundarySurface)closureSurface); if (object != null) return object; if (closureSurface.isSetGenericApplicationPropertyOfClosureSurface()) { for (ADEComponent ade : new ArrayList<ADEComponent>(closureSurface.getGenericApplicationPropertyOfClosureSurface())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(org.citygml4j.model.citygml.building.FloorSurface floorSurface) { T object = apply((org.citygml4j.model.citygml.building.AbstractBoundarySurface)floorSurface); if (object != null) return object; if (floorSurface.isSetGenericApplicationPropertyOfFloorSurface()) { for (ADEComponent ade : new ArrayList<ADEComponent>(floorSurface.getGenericApplicationPropertyOfFloorSurface())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(org.citygml4j.model.citygml.building.OuterFloorSurface outerFloorSurface) { T object = apply((org.citygml4j.model.citygml.building.AbstractBoundarySurface)outerFloorSurface); if (object != null) return object; if (outerFloorSurface.isSetGenericApplicationPropertyOfOuterFloorSurface()) { for (ADEComponent ade : new ArrayList<ADEComponent>(outerFloorSurface.getGenericApplicationPropertyOfOuterFloorSurface())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(org.citygml4j.model.citygml.building.GroundSurface groundSurface) { T object = apply((org.citygml4j.model.citygml.building.AbstractBoundarySurface)groundSurface); if (object != null) return object; if (groundSurface.isSetGenericApplicationPropertyOfGroundSurface()) { for (ADEComponent ade : new ArrayList<ADEComponent>(groundSurface.getGenericApplicationPropertyOfGroundSurface())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(org.citygml4j.model.citygml.building.InteriorWallSurface interiorWallSurface) { T object = apply((org.citygml4j.model.citygml.building.AbstractBoundarySurface)interiorWallSurface); if (object != null) return object; if (interiorWallSurface.isSetGenericApplicationPropertyOfInteriorWallSurface()) { for (ADEComponent ade : new ArrayList<ADEComponent>(interiorWallSurface.getGenericApplicationPropertyOfInteriorWallSurface())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(org.citygml4j.model.citygml.building.RoofSurface roofSurface) { T object = apply((org.citygml4j.model.citygml.building.AbstractBoundarySurface)roofSurface); if (object != null) return object; if (roofSurface.isSetGenericApplicationPropertyOfRoofSurface()) { for (ADEComponent ade : new ArrayList<ADEComponent>(roofSurface.getGenericApplicationPropertyOfRoofSurface())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(org.citygml4j.model.citygml.building.WallSurface wallSurface) { T object = apply((org.citygml4j.model.citygml.building.AbstractBoundarySurface)wallSurface); if (object != null) return object; if (wallSurface.isSetGenericApplicationPropertyOfWallSurface()) { for (ADEComponent ade : new ArrayList<ADEComponent>(wallSurface.getGenericApplicationPropertyOfWallSurface())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(org.citygml4j.model.citygml.building.Door door) { T object = apply((org.citygml4j.model.citygml.building.AbstractOpening)door); if (object != null) return object; if (door.isSetAddress()) { for (AddressProperty addressProperty : new ArrayList<AddressProperty>(door.getAddress())) { object = apply(addressProperty); if (object != null) return object; } } if (door.isSetGenericApplicationPropertyOfDoor()) { for (ADEComponent ade : new ArrayList<ADEComponent>(door.getGenericApplicationPropertyOfDoor())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(org.citygml4j.model.citygml.building.Window window) { T object = apply((org.citygml4j.model.citygml.building.AbstractOpening)window); if (object != null) return object; if (window.isSetGenericApplicationPropertyOfWindow()) { for (ADEComponent ade : new ArrayList<ADEComponent>(window.getGenericApplicationPropertyOfWindow())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(HollowSpace hollowSpace) { T object = apply((AbstractCityObject)hollowSpace); if (object != null) return object; if (hollowSpace.isSetBoundedBySurface()) { for (org.citygml4j.model.citygml.tunnel.BoundarySurfaceProperty boundarySurfaceProperty : new ArrayList<org.citygml4j.model.citygml.tunnel.BoundarySurfaceProperty>(hollowSpace.getBoundedBySurface())) { object = apply(boundarySurfaceProperty); if (object != null) return object; } } if (hollowSpace.isSetInteriorFurniture()) { for (org.citygml4j.model.citygml.tunnel.InteriorFurnitureProperty interiorFurnitureProperty : new ArrayList<org.citygml4j.model.citygml.tunnel.InteriorFurnitureProperty>(hollowSpace.getInteriorFurniture())) { object = apply(interiorFurnitureProperty); if (object != null) return object; } } if (hollowSpace.isSetHollowSpaceInstallation()) { for (IntTunnelInstallationProperty intTunnelInstallationProperty : new ArrayList<IntTunnelInstallationProperty>(hollowSpace.getHollowSpaceInstallation())) { object = apply(intTunnelInstallationProperty); if (object != null) return object; } } if (hollowSpace.isSetLod4MultiSurface()) { object = apply(hollowSpace.getLod4MultiSurface()); if (object != null) return object; } if (hollowSpace.isSetLod4Solid()) { object = apply(hollowSpace.getLod4Solid()); if (object != null) return object; } if (hollowSpace.isSetGenericApplicationPropertyOfHollowSpace()) { for (ADEComponent ade : new ArrayList<ADEComponent>(hollowSpace.getGenericApplicationPropertyOfHollowSpace())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(IntTunnelInstallation intTunnelInstallation) { T object = apply((AbstractCityObject)intTunnelInstallation); if (object != null) return object; if (intTunnelInstallation.isSetBoundedBySurface()) { for (org.citygml4j.model.citygml.tunnel.BoundarySurfaceProperty boundarySurfaceProperty : new ArrayList<org.citygml4j.model.citygml.tunnel.BoundarySurfaceProperty>(intTunnelInstallation.getBoundedBySurface())) { object = apply(boundarySurfaceProperty); if (object != null) return object; } } if (intTunnelInstallation.isSetLod4Geometry()) { object = apply(intTunnelInstallation.getLod4Geometry()); if (object != null) return object; } if (intTunnelInstallation.isSetLod4ImplicitRepresentation()) { object = apply(intTunnelInstallation.getLod4ImplicitRepresentation()); if (object != null) return object; } if (intTunnelInstallation.isSetGenericApplicationPropertyOfIntTunnelInstallation()) { for (ADEComponent ade : new ArrayList<ADEComponent>(intTunnelInstallation.getGenericApplicationPropertyOfIntTunnelInstallation())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(Tunnel tunnel) { T object = apply((AbstractTunnel)tunnel); if (object != null) return object; if (tunnel.isSetGenericApplicationPropertyOfTunnel()) { for (ADEComponent ade : new ArrayList<ADEComponent>(tunnel.getGenericApplicationPropertyOfTunnel())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(TunnelFurniture tunnelFurniture) { T object = apply((AbstractCityObject)tunnelFurniture); if (object != null) return object; if (tunnelFurniture.isSetLod4Geometry()) { object = apply(tunnelFurniture.getLod4Geometry()); if (object != null) return object; } if (tunnelFurniture.isSetLod4ImplicitRepresentation()) { object = apply(tunnelFurniture.getLod4ImplicitRepresentation()); if (object != null) return object; } if (tunnelFurniture.isSetGenericApplicationPropertyOfTunnelFurniture()) { for (ADEComponent ade : new ArrayList<ADEComponent>(tunnelFurniture.getGenericApplicationPropertyOfTunnelFurniture())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(TunnelInstallation tunnelInstallation) { T object = apply((AbstractCityObject)tunnelInstallation); if (object != null) return object; if (tunnelInstallation.isSetBoundedBySurface()) { for (org.citygml4j.model.citygml.tunnel.BoundarySurfaceProperty boundarySurfaceProperty : new ArrayList<org.citygml4j.model.citygml.tunnel.BoundarySurfaceProperty>(tunnelInstallation.getBoundedBySurface())) { object = apply(boundarySurfaceProperty); if (object != null) return object; } } if (tunnelInstallation.isSetLod2Geometry()) { object = apply(tunnelInstallation.getLod2Geometry()); if (object != null) return object; } if (tunnelInstallation.isSetLod3Geometry()) { object = apply(tunnelInstallation.getLod3Geometry()); if (object != null) return object; } if (tunnelInstallation.isSetLod4Geometry()) { object = apply(tunnelInstallation.getLod4Geometry()); if (object != null) return object; } if (tunnelInstallation.isSetLod2ImplicitRepresentation()) { object = apply(tunnelInstallation.getLod2ImplicitRepresentation()); if (object != null) return object; } if (tunnelInstallation.isSetLod3ImplicitRepresentation()) { object = apply(tunnelInstallation.getLod3ImplicitRepresentation()); if (object != null) return object; } if (tunnelInstallation.isSetLod4ImplicitRepresentation()) { object = apply(tunnelInstallation.getLod4ImplicitRepresentation()); if (object != null) return object; } if (tunnelInstallation.isSetGenericApplicationPropertyOfTunnelInstallation()) { for (ADEComponent ade : new ArrayList<ADEComponent>(tunnelInstallation.getGenericApplicationPropertyOfTunnelInstallation())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(TunnelPart tunnelPart) { T object = apply((AbstractTunnel)tunnelPart); if (object != null) return object; if (tunnelPart.isSetGenericApplicationPropertyOfTunnelPart()) { for (ADEComponent ade : new ArrayList<ADEComponent>(tunnelPart.getGenericApplicationPropertyOfTunnelPart())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(org.citygml4j.model.citygml.tunnel.CeilingSurface ceilingSurface) { T object = apply((org.citygml4j.model.citygml.tunnel.AbstractBoundarySurface)ceilingSurface); if (object != null) return object; if (ceilingSurface.isSetGenericApplicationPropertyOfCeilingSurface()) { for (ADEComponent ade : new ArrayList<ADEComponent>(ceilingSurface.getGenericApplicationPropertyOfCeilingSurface())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(org.citygml4j.model.citygml.tunnel.OuterCeilingSurface outerCeilingSurface) { T object = apply((org.citygml4j.model.citygml.tunnel.AbstractBoundarySurface)outerCeilingSurface); if (object != null) return object; if (outerCeilingSurface.isSetGenericApplicationPropertyOfOuterCeilingSurface()) { for (ADEComponent ade : new ArrayList<ADEComponent>(outerCeilingSurface.getGenericApplicationPropertyOfOuterCeilingSurface())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(org.citygml4j.model.citygml.tunnel.ClosureSurface closureSurface) { T object = apply((org.citygml4j.model.citygml.tunnel.AbstractBoundarySurface)closureSurface); if (object != null) return object; if (closureSurface.isSetGenericApplicationPropertyOfClosureSurface()) { for (ADEComponent ade : new ArrayList<ADEComponent>(closureSurface.getGenericApplicationPropertyOfClosureSurface())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(org.citygml4j.model.citygml.tunnel.FloorSurface floorSurface) { T object = apply((org.citygml4j.model.citygml.tunnel.AbstractBoundarySurface)floorSurface); if (object != null) return object; if (floorSurface.isSetGenericApplicationPropertyOfFloorSurface()) { for (ADEComponent ade : new ArrayList<ADEComponent>(floorSurface.getGenericApplicationPropertyOfFloorSurface())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(org.citygml4j.model.citygml.tunnel.OuterFloorSurface outerFloorSurface) { T object = apply((org.citygml4j.model.citygml.tunnel.AbstractBoundarySurface)outerFloorSurface); if (object != null) return object; if (outerFloorSurface.isSetGenericApplicationPropertyOfOuterFloorSurface()) { for (ADEComponent ade : new ArrayList<ADEComponent>(outerFloorSurface.getGenericApplicationPropertyOfOuterFloorSurface())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(org.citygml4j.model.citygml.tunnel.GroundSurface groundSurface) { T object = apply((org.citygml4j.model.citygml.tunnel.AbstractBoundarySurface)groundSurface); if (object != null) return object; if (groundSurface.isSetGenericApplicationPropertyOfGroundSurface()) { for (ADEComponent ade : new ArrayList<ADEComponent>(groundSurface.getGenericApplicationPropertyOfGroundSurface())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(org.citygml4j.model.citygml.tunnel.InteriorWallSurface interiorWallSurface) { T object = apply((org.citygml4j.model.citygml.tunnel.AbstractBoundarySurface)interiorWallSurface); if (object != null) return object; if (interiorWallSurface.isSetGenericApplicationPropertyOfInteriorWallSurface()) { for (ADEComponent ade : new ArrayList<ADEComponent>(interiorWallSurface.getGenericApplicationPropertyOfInteriorWallSurface())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(org.citygml4j.model.citygml.tunnel.RoofSurface roofSurface) { T object = apply((org.citygml4j.model.citygml.tunnel.AbstractBoundarySurface)roofSurface); if (object != null) return object; if (roofSurface.isSetGenericApplicationPropertyOfRoofSurface()) { for (ADEComponent ade : new ArrayList<ADEComponent>(roofSurface.getGenericApplicationPropertyOfRoofSurface())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(org.citygml4j.model.citygml.tunnel.WallSurface wallSurface) { T object = apply((org.citygml4j.model.citygml.tunnel.AbstractBoundarySurface)wallSurface); if (object != null) return object; if (wallSurface.isSetGenericApplicationPropertyOfWallSurface()) { for (ADEComponent ade : new ArrayList<ADEComponent>(wallSurface.getGenericApplicationPropertyOfWallSurface())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(org.citygml4j.model.citygml.tunnel.Door door) { T object = apply((org.citygml4j.model.citygml.tunnel.AbstractOpening)door); if (object != null) return object; if (door.isSetGenericApplicationPropertyOfDoor()) { for (ADEComponent ade : new ArrayList<ADEComponent>(door.getGenericApplicationPropertyOfDoor())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(org.citygml4j.model.citygml.tunnel.Window window) { T object = apply((org.citygml4j.model.citygml.tunnel.AbstractOpening)window); if (object != null) return object; if (window.isSetGenericApplicationPropertyOfWindow()) { for (ADEComponent ade : new ArrayList<ADEComponent>(window.getGenericApplicationPropertyOfWindow())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(CityFurniture cityFurniture) { T object = apply((AbstractCityObject)cityFurniture); if (object != null) return object; if (cityFurniture.isSetLod1Geometry()) { object = apply(cityFurniture.getLod1Geometry()); if (object != null) return object; } if (cityFurniture.isSetLod2Geometry()) { object = apply(cityFurniture.getLod2Geometry()); if (object != null) return object; } if (cityFurniture.isSetLod3Geometry()) { object = apply(cityFurniture.getLod3Geometry()); if (object != null) return object; } if (cityFurniture.isSetLod4Geometry()) { object = apply(cityFurniture.getLod4Geometry()); if (object != null) return object; } if (cityFurniture.isSetLod1TerrainIntersection()) { object = apply(cityFurniture.getLod1TerrainIntersection()); if (object != null) return object; } if (cityFurniture.isSetLod2TerrainIntersection()) { object = apply(cityFurniture.getLod2TerrainIntersection()); if (object != null) return object; } if (cityFurniture.isSetLod3TerrainIntersection()) { object = apply(cityFurniture.getLod3TerrainIntersection()); if (object != null) return object; } if (cityFurniture.isSetLod4TerrainIntersection()) { object = apply(cityFurniture.getLod4TerrainIntersection()); if (object != null) return object; } if (cityFurniture.isSetLod1ImplicitRepresentation()) { object = apply(cityFurniture.getLod1ImplicitRepresentation()); if (object != null) return object; } if (cityFurniture.isSetLod2ImplicitRepresentation()) { object = apply(cityFurniture.getLod2ImplicitRepresentation()); if (object != null) return object; } if (cityFurniture.isSetLod3ImplicitRepresentation()) { object = apply(cityFurniture.getLod3ImplicitRepresentation()); if (object != null) return object; } if (cityFurniture.isSetLod4ImplicitRepresentation()) { object = apply(cityFurniture.getLod4ImplicitRepresentation()); if (object != null) return object; } if (cityFurniture.isSetGenericApplicationPropertyOfCityFurniture()) { for (ADEComponent ade : new ArrayList<ADEComponent>(cityFurniture.getGenericApplicationPropertyOfCityFurniture())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(CityObjectGroup cityObjectGroup) { T object = apply((AbstractCityObject)cityObjectGroup); if (object != null) return object; if (cityObjectGroup.isSetGroupMember()) { for (CityObjectGroupMember cityObjectGroupMember : new ArrayList<CityObjectGroupMember>(cityObjectGroup.getGroupMember())) { object = apply(cityObjectGroupMember); if (object != null) return object; } } if (cityObjectGroup.isSetGroupParent()) { object = apply(cityObjectGroup.getGroupParent()); if (object != null) return object; } if (cityObjectGroup.isSetGeometry()) { object = apply(cityObjectGroup.getGeometry()); if (object != null) return object; } if (cityObjectGroup.isSetGenericApplicationPropertyOfCityObjectGroup()) { for (ADEComponent ade : new ArrayList<ADEComponent>(cityObjectGroup.getGenericApplicationPropertyOfCityObjectGroup())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(Address address) { T object = apply((AbstractFeature)address); if (object != null) return object; if (address.isSetMultiPoint()) { object = apply(address.getMultiPoint()); if (object != null) return object; } if (address.isSetGenericApplicationPropertyOfAddress()) { for (ADEComponent ade : new ArrayList<ADEComponent>(address.getGenericApplicationPropertyOfAddress())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(CityModel cityModel) { T object = apply((AbstractFeatureCollection)cityModel); if (object != null) return object; if (cityModel.isSetCityObjectMember()) { for (CityObjectMember cityObjectMember : new ArrayList<CityObjectMember>(cityModel.getCityObjectMember())) { object = apply(cityObjectMember); if (object != null) return object; } } if (cityModel.isSetAppearanceMember()) { for (AppearanceMember appearanceMember : new ArrayList<AppearanceMember>(cityModel.getAppearanceMember())) { object = apply(appearanceMember); if (object != null) return object; } } if (cityModel.isSetGenericApplicationPropertyOfCityModel()) { for (ADEComponent ade : new ArrayList<ADEComponent>(cityModel.getGenericApplicationPropertyOfCityModel())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(GenericCityObject genericCityObject) { T object = apply((AbstractCityObject)genericCityObject); if (object != null) return object; if (genericCityObject.isSetLod0Geometry()) { object = apply(genericCityObject.getLod0Geometry()); if (object != null) return object; } if (genericCityObject.isSetLod1Geometry()) { object = apply(genericCityObject.getLod1Geometry()); if (object != null) return object; } if (genericCityObject.isSetLod2Geometry()) { object = apply(genericCityObject.getLod2Geometry()); if (object != null) return object; } if (genericCityObject.isSetLod3Geometry()) { object = apply(genericCityObject.getLod3Geometry()); if (object != null) return object; } if (genericCityObject.isSetLod4Geometry()) { object = apply(genericCityObject.getLod4Geometry()); if (object != null) return object; } if (genericCityObject.isSetLod0TerrainIntersection()) { object = apply(genericCityObject.getLod0TerrainIntersection()); if (object != null) return object; } if (genericCityObject.isSetLod1TerrainIntersection()) { object = apply(genericCityObject.getLod1TerrainIntersection()); if (object != null) return object; } if (genericCityObject.isSetLod2TerrainIntersection()) { object = apply(genericCityObject.getLod2TerrainIntersection()); if (object != null) return object; } if (genericCityObject.isSetLod3TerrainIntersection()) { object = apply(genericCityObject.getLod3TerrainIntersection()); if (object != null) return object; } if (genericCityObject.isSetLod4TerrainIntersection()) { object = apply(genericCityObject.getLod4TerrainIntersection()); if (object != null) return object; } if (genericCityObject.isSetLod0ImplicitRepresentation()) { object = apply(genericCityObject.getLod0ImplicitRepresentation()); if (object != null) return object; } if (genericCityObject.isSetLod1ImplicitRepresentation()) { object = apply(genericCityObject.getLod1ImplicitRepresentation()); if (object != null) return object; } if (genericCityObject.isSetLod2ImplicitRepresentation()) { object = apply(genericCityObject.getLod2ImplicitRepresentation()); if (object != null) return object; } if (genericCityObject.isSetLod3ImplicitRepresentation()) { object = apply(genericCityObject.getLod3ImplicitRepresentation()); if (object != null) return object; } if (genericCityObject.isSetLod4ImplicitRepresentation()) { object = apply(genericCityObject.getLod4ImplicitRepresentation()); if (object != null) return object; } return null; } public T apply(LandUse landUse) { T object = apply((AbstractCityObject)landUse); if (object != null) return object; if (landUse.isSetLod0MultiSurface()) { object = apply(landUse.getLod0MultiSurface()); if (object != null) return object; } if (landUse.isSetLod1MultiSurface()) { object = apply(landUse.getLod1MultiSurface()); if (object != null) return object; } if (landUse.isSetLod2MultiSurface()) { object = apply(landUse.getLod2MultiSurface()); if (object != null) return object; } if (landUse.isSetLod3MultiSurface()) { object = apply(landUse.getLod3MultiSurface()); if (object != null) return object; } if (landUse.isSetLod4MultiSurface()) { object = apply(landUse.getLod4MultiSurface()); if (object != null) return object; } if (landUse.isSetGenericApplicationPropertyOfLandUse()) { for (ADEComponent ade : new ArrayList<ADEComponent>(landUse.getGenericApplicationPropertyOfLandUse())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(BreaklineRelief breaklineRelief) { T object = apply((AbstractReliefComponent)breaklineRelief); if (object != null) return object; if (breaklineRelief.isSetBreaklines()) { object = apply(breaklineRelief.getBreaklines()); if (object != null) return object; } if (breaklineRelief.isSetRidgeOrValleyLines()) { object = apply(breaklineRelief.getRidgeOrValleyLines()); if (object != null) return object; } if (breaklineRelief.isSetGenericApplicationPropertyOfBreaklineRelief()) { for (ADEComponent ade : new ArrayList<ADEComponent>(breaklineRelief.getGenericApplicationPropertyOfBreaklineRelief())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(MassPointRelief massPointRelief) { T object = apply((AbstractReliefComponent)massPointRelief); if (object != null) return object; if (massPointRelief.isSetReliefPoints()) { object = apply(massPointRelief.getReliefPoints()); if (object != null) return object; } if (massPointRelief.isSetGenericApplicationPropertyOfMassPointRelief()) { for (ADEComponent ade : new ArrayList<ADEComponent>(massPointRelief.getGenericApplicationPropertyOfMassPointRelief())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(RasterRelief rasterRelief) { T object = apply((AbstractReliefComponent)rasterRelief); if (object != null) return object; if (rasterRelief.isSetGrid()) { object = apply(rasterRelief.getGrid()); if (object != null) return object; } if (rasterRelief.isSetGenericApplicationPropertyOfRasterRelief()) { for (ADEComponent ade : new ArrayList<ADEComponent>(rasterRelief.getGenericApplicationPropertyOfRasterRelief())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(ReliefFeature reliefFeature) { T object = apply((AbstractCityObject)reliefFeature); if (object != null) return object; if (reliefFeature.isSetReliefComponent()) { for (ReliefComponentProperty reliefComponentProperty : new ArrayList<ReliefComponentProperty>(reliefFeature.getReliefComponent())) { object = apply(reliefComponentProperty); if (object != null) return object; } } if (reliefFeature.isSetGenericApplicationPropertyOfReliefFeature()) { for (ADEComponent ade : new ArrayList<ADEComponent>(reliefFeature.getGenericApplicationPropertyOfReliefFeature())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(TINRelief tinRelief) { T object = apply((AbstractReliefComponent)tinRelief); if (object != null) return object; if (tinRelief.isSetTin()) { object = apply(tinRelief.getTin()); if (object != null) return object; } if (tinRelief.isSetGenericApplicationPropertyOfTinRelief()) { for (ADEComponent ade : new ArrayList<ADEComponent>(tinRelief.getGenericApplicationPropertyOfTinRelief())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(AuxiliaryTrafficArea auxiliaryTrafficArea) { T object = apply((AbstractTransportationObject)auxiliaryTrafficArea); if (object != null) return object; if (auxiliaryTrafficArea.isSetLod2MultiSurface()) { object = apply(auxiliaryTrafficArea.getLod2MultiSurface()); if (object != null) return object; } if (auxiliaryTrafficArea.isSetLod3MultiSurface()) { object = apply(auxiliaryTrafficArea.getLod3MultiSurface()); if (object != null) return object; } if (auxiliaryTrafficArea.isSetLod4MultiSurface()) { object = apply(auxiliaryTrafficArea.getLod4MultiSurface()); if (object != null) return object; } if (auxiliaryTrafficArea.isSetGenericApplicationPropertyOfAuxiliaryTrafficArea()) { for (ADEComponent ade : new ArrayList<ADEComponent>(auxiliaryTrafficArea.getGenericApplicationPropertyOfAuxiliaryTrafficArea())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(Railway railway) { T object = apply((TransportationComplex)railway); if (object != null) return object; if (railway.isSetGenericApplicationPropertyOfRailway()) { for (ADEComponent ade : new ArrayList<ADEComponent>(railway.getGenericApplicationPropertyOfRailway())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(RectifiedGridCoverage rectifiedGridCoverage) { T object = apply((AbstractDiscreteCoverage)rectifiedGridCoverage); if (object != null) return object; if (rectifiedGridCoverage.isSetRectifiedGridDomain()) { object = apply(rectifiedGridCoverage.getRectifiedGridDomain()); if (object != null) return object; } return null; } public T apply(Road road) { T object = apply((TransportationComplex)road); if (object != null) return object; if (road.isSetGenericApplicationPropertyOfRoad()) { for (ADEComponent ade : new ArrayList<ADEComponent>(road.getGenericApplicationPropertyOfRoad())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(Square square) { T object = apply((TransportationComplex)square); if (object != null) return object; if (square.isSetGenericApplicationPropertyOfSquare()) { for (ADEComponent ade : new ArrayList<ADEComponent>(square.getGenericApplicationPropertyOfSquare())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(Track track) { T object = apply((TransportationComplex)track); if (object != null) return object; if (track.isSetGenericApplicationPropertyOfTrack()) { for (ADEComponent ade : new ArrayList<ADEComponent>(track.getGenericApplicationPropertyOfTrack())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(TrafficArea trafficArea) { T object = apply((AbstractTransportationObject)trafficArea); if (object != null) return object; if (trafficArea.isSetLod2MultiSurface()) { object = apply(trafficArea.getLod2MultiSurface()); if (object != null) return object; } if (trafficArea.isSetLod3MultiSurface()) { object = apply(trafficArea.getLod3MultiSurface()); if (object != null) return object; } if (trafficArea.isSetLod4MultiSurface()) { object = apply(trafficArea.getLod4MultiSurface()); if (object != null) return object; } if (trafficArea.isSetGenericApplicationPropertyOfTrafficArea()) { for (ADEComponent ade : new ArrayList<ADEComponent>(trafficArea.getGenericApplicationPropertyOfTrafficArea())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(TransportationComplex transportationComplex) { T object = apply((AbstractTransportationObject)transportationComplex); if (object != null) return object; if (transportationComplex.isSetTrafficArea()) { for (TrafficAreaProperty trafficAreaProperty : new ArrayList<TrafficAreaProperty>(transportationComplex.getTrafficArea())) { object = apply(trafficAreaProperty); if (object != null) return object; } } if (transportationComplex.isSetAuxiliaryTrafficArea()) { for (AuxiliaryTrafficAreaProperty auxiliaryTrafficAreaProperty : new ArrayList<AuxiliaryTrafficAreaProperty>(transportationComplex.getAuxiliaryTrafficArea())) { object = apply(auxiliaryTrafficAreaProperty); if (object != null) return object; } } if (transportationComplex.isSetLod0Network()) { for (GeometricComplexProperty geometricComplexProperty : new ArrayList<GeometricComplexProperty>(transportationComplex.getLod0Network())) { object = apply(geometricComplexProperty); if (object != null) return object; } } if (transportationComplex.isSetLod1MultiSurface()) { object = apply(transportationComplex.getLod1MultiSurface()); if (object != null) return object; } if (transportationComplex.isSetLod2MultiSurface()) { object = apply(transportationComplex.getLod2MultiSurface()); if (object != null) return object; } if (transportationComplex.isSetLod3MultiSurface()) { object = apply(transportationComplex.getLod3MultiSurface()); if (object != null) return object; } if (transportationComplex.isSetLod4MultiSurface()) { object = apply(transportationComplex.getLod4MultiSurface()); if (object != null) return object; } if (transportationComplex.isSetGenericApplicationPropertyOfTransportationComplex()) { for (ADEComponent ade : new ArrayList<ADEComponent>(transportationComplex.getGenericApplicationPropertyOfTransportationComplex())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(PlantCover plantCover) { T object = apply((AbstractVegetationObject)plantCover); if (object != null) return object; if (plantCover.isSetLod1MultiSurface()) { object = apply(plantCover.getLod1MultiSurface()); if (object != null) return object; } if (plantCover.isSetLod2MultiSurface()) { object = apply(plantCover.getLod2MultiSurface()); if (object != null) return object; } if (plantCover.isSetLod3MultiSurface()) { object = apply(plantCover.getLod3MultiSurface()); if (object != null) return object; } if (plantCover.isSetLod4MultiSurface()) { object = apply(plantCover.getLod4MultiSurface()); if (object != null) return object; } if (plantCover.isSetLod1MultiSolid()) { object = apply(plantCover.getLod1MultiSolid()); if (object != null) return object; } if (plantCover.isSetLod2MultiSolid()) { object = apply(plantCover.getLod2MultiSolid()); if (object != null) return object; } if (plantCover.isSetLod3MultiSolid()) { object = apply(plantCover.getLod3MultiSolid()); if (object != null) return object; } if (plantCover.isSetLod4MultiSolid()) { object = apply(plantCover.getLod4MultiSolid()); if (object != null) return object; } if (plantCover.isSetGenericApplicationPropertyOfPlantCover()) { for (ADEComponent ade : new ArrayList<ADEComponent>(plantCover.getGenericApplicationPropertyOfPlantCover())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(SolitaryVegetationObject solitaryVegetationObject) { T object = apply((AbstractVegetationObject)solitaryVegetationObject); if (object != null) return object; if (solitaryVegetationObject.isSetLod1Geometry()) { object = apply(solitaryVegetationObject.getLod1Geometry()); if (object != null) return object; } if (solitaryVegetationObject.isSetLod2Geometry()) { object = apply(solitaryVegetationObject.getLod2Geometry()); if (object != null) return object; } if (solitaryVegetationObject.isSetLod3Geometry()) { object = apply(solitaryVegetationObject.getLod3Geometry()); if (object != null) return object; } if (solitaryVegetationObject.isSetLod4Geometry()) { object = apply(solitaryVegetationObject.getLod4Geometry()); if (object != null) return object; } if (solitaryVegetationObject.isSetLod1ImplicitRepresentation()) { object = apply(solitaryVegetationObject.getLod1ImplicitRepresentation()); if (object != null) return object; } if (solitaryVegetationObject.isSetLod2ImplicitRepresentation()) { object = apply(solitaryVegetationObject.getLod2ImplicitRepresentation()); if (object != null) return object; } if (solitaryVegetationObject.isSetLod3ImplicitRepresentation()) { object = apply(solitaryVegetationObject.getLod3ImplicitRepresentation()); if (object != null) return object; } if (solitaryVegetationObject.isSetLod4ImplicitRepresentation()) { object = apply(solitaryVegetationObject.getLod4ImplicitRepresentation()); if (object != null) return object; } if (solitaryVegetationObject.isSetGenericApplicationPropertyOfSolitaryVegetationObject()) { for (ADEComponent ade : new ArrayList<ADEComponent>(solitaryVegetationObject.getGenericApplicationPropertyOfSolitaryVegetationObject())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(WaterBody waterBody) { T object = apply((AbstractWaterObject)waterBody); if (object != null) return object; if (waterBody.isSetBoundedBySurface()) { for (BoundedByWaterSurfaceProperty boundedByWaterSurfaceProperty : new ArrayList<BoundedByWaterSurfaceProperty>(waterBody.getBoundedBySurface())) { object = apply(boundedByWaterSurfaceProperty); if (object != null) return object; } } if (waterBody.isSetLod0MultiCurve()) { object = apply(waterBody.getLod0MultiCurve()); if (object != null) return object; } if (waterBody.isSetLod1MultiCurve()) { object = apply(waterBody.getLod1MultiCurve()); if (object != null) return object; } if (waterBody.isSetLod0MultiSurface()) { object = apply(waterBody.getLod0MultiSurface()); if (object != null) return object; } if (waterBody.isSetLod1MultiSurface()) { object = apply(waterBody.getLod1MultiSurface()); if (object != null) return object; } if (waterBody.isSetLod1Solid()) { object = apply(waterBody.getLod1Solid()); if (object != null) return object; } if (waterBody.isSetLod2Solid()) { object = apply(waterBody.getLod2Solid()); if (object != null) return object; } if (waterBody.isSetLod3Solid()) { object = apply(waterBody.getLod3Solid()); if (object != null) return object; } if (waterBody.isSetLod4Solid()) { object = apply(waterBody.getLod4Solid()); if (object != null) return object; } if (waterBody.isSetGenericApplicationPropertyOfWaterBody()) { for (ADEComponent ade : new ArrayList<ADEComponent>(waterBody.getGenericApplicationPropertyOfWaterBody())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(WaterClosureSurface waterClosureSurface) { T object = apply((AbstractWaterBoundarySurface)waterClosureSurface); if (object != null) return object; if (waterClosureSurface.isSetGenericApplicationPropertyOfWaterClosureSurface()) { for (ADEComponent ade : new ArrayList<ADEComponent>(waterClosureSurface.getGenericApplicationPropertyOfWaterClosureSurface())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(WaterGroundSurface waterGroundSurface) { T object = apply((AbstractWaterBoundarySurface)waterGroundSurface); if (object != null) return object; if (waterGroundSurface.isSetGenericApplicationPropertyOfWaterGroundSurface()) { for (ADEComponent ade : new ArrayList<ADEComponent>(waterGroundSurface.getGenericApplicationPropertyOfWaterGroundSurface())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(WaterSurface waterSurface) { T object = apply((AbstractWaterBoundarySurface)waterSurface); if (object != null) return object; if (waterSurface.isSetGenericApplicationPropertyOfWaterSurface()) { for (ADEComponent ade : new ArrayList<ADEComponent>(waterSurface.getGenericApplicationPropertyOfWaterSurface())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(_AbstractAppearance abstractAppearance) { return apply((AbstractGML)abstractAppearance); } public T apply(CompositeValue compositeValue) { T object = apply((AbstractGML)compositeValue); if (object != null) return object; if (compositeValue.isSetValueComponent()) { for (ValueProperty valueProperty : new ArrayList<ValueProperty>(compositeValue.getValueComponent())) { if (valueProperty.isSetValue()) { object = apply(valueProperty.getValue()); if (object != null) return object; } } } if (compositeValue.isSetValueComponents()) { ValueArrayProperty valueArrayProperty = compositeValue.getValueComponents(); if (valueArrayProperty.isSetValue()) { for (Value value : new ArrayList<Value>(valueArrayProperty.getValue())) { object = apply(value); if (object != null) return object; } } } return null; } public T apply(ValueArray valueArray) { return apply((CompositeValue)valueArray); } public T apply(TexCoordGen texCoordGen) { T object = apply((AbstractTextureParameterization)texCoordGen); if (object != null) return object; if (texCoordGen.isSetGenericApplicationPropertyOfTexCoordGen()) { for (ADEComponent ade : new ArrayList<ADEComponent>(texCoordGen.getGenericApplicationPropertyOfTexCoordGen())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(TexCoordList texCoordList) { T object = apply((AbstractTextureParameterization)texCoordList); if (object != null) return object; if (texCoordList.isSetGenericApplicationPropertyOfTexCoordList()) { for (ADEComponent ade : new ArrayList<ADEComponent>(texCoordList.getGenericApplicationPropertyOfTexCoordList())) { object = apply(ade); if (object != null) return object; } } return null; } public T apply(ImplicitGeometry implicitGeometry) { T object = apply((AbstractGML)implicitGeometry); if (object != null) return object; if (implicitGeometry.isSetRelativeGMLGeometry()) { object = apply(implicitGeometry.getRelativeGMLGeometry()); if (object != null) return object; } if (implicitGeometry.isSetReferencePoint()) { object = apply(implicitGeometry.getReferencePoint()); if (object != null) return object; } return null; } public T apply(_Material material) { return apply((_AbstractAppearance)material); } public T apply(_SimpleTexture simpleTexture) { return apply((_AbstractAppearance)simpleTexture); } public <E extends AbstractGML> T apply(AssociationByRep<E> association) { if (association.isSetObject() && shouldWalk && visited.add(association.getObject())) { T object = association.getObject().accept(this); if (object != null) return object; } return null; } public <E extends AbstractGML> T apply(AssociationByRepOrRef<E> association) { return apply((AssociationByRep<E>)association); } public <E extends AbstractFeature> T apply(FeatureProperty<E> featureProperty) { T object = apply((AssociationByRepOrRef<E>)featureProperty); if (object != null) return object; if (featureProperty.isSetGenericADEComponent()) { object = apply(featureProperty.getGenericADEComponent()); if (object != null) return object; } return null; } public T apply(FeatureArrayProperty featureArrayProperty) { if (featureArrayProperty.isSetFeature()) { for (AbstractFeature feature : new ArrayList<AbstractFeature>(featureArrayProperty.getFeature())) { if (shouldWalk && visited.add(feature)) { T object = feature.accept(this); if (object != null) return object; } } } if (featureArrayProperty.isSetGenericADEComponent()) { for (ADEComponent ade : new ArrayList<ADEComponent>(featureArrayProperty.getGenericADEComponent())) { T object = apply(ade); if (object != null) return object; } } return null; } public <E extends AbstractGeometry> T apply(GeometryProperty<E> geometryProperty) { return apply((AssociationByRepOrRef<E>)geometryProperty); } public <E extends AbstractGeometry> T apply(InlineGeometryProperty<E> geometryProperty) { return apply((AssociationByRep<E>)geometryProperty); } public <E extends AbstractGeometry> T apply(GeometryArrayProperty<E> geometryArrayProperty) { if (geometryArrayProperty.isSetGeometry()) { for (AbstractGeometry abstractGeometry : new ArrayList<AbstractGeometry>(geometryArrayProperty.getGeometry())) { if (shouldWalk && visited.add(abstractGeometry)) { T object = abstractGeometry.accept(this); if (object != null) return object; } } } return null; } public T apply(SurfacePatchArrayProperty surfacePatchArrayProperty) { T object = null; if (surfacePatchArrayProperty.isSetSurfacePatch()) { for (AbstractSurfacePatch abstractSurfacePatch : new ArrayList<AbstractSurfacePatch>(surfacePatchArrayProperty.getSurfacePatch())) { if (shouldWalk && visited.add(abstractSurfacePatch)) { if (abstractSurfacePatch instanceof Triangle) { object = apply((Triangle)abstractSurfacePatch); if (object != null) return object; } else if (abstractSurfacePatch instanceof Rectangle) { object = apply((Rectangle)abstractSurfacePatch); if (object != null) return object; } } } } return null; } public T apply(Element element, ElementDecl decl) { return null; } public T apply(ADEComponent adeComponent) { if (adeComponent.isSetContent() && shouldWalk && visited.add(adeComponent.getContent())) { T object = adeComponent(adeComponent.getContent(), null); if (object != null) return object; } return null; } protected T adeComponent(Element element, ElementDecl decl) { Schema schema = schemaHandler.getSchema(element.getNamespaceURI()); T object = null; if (schema != null) { decl = schema.getElementDecl(element.getLocalName(), decl); if (decl != null && (decl.isAbstractGML() || decl.isFeatureProperty() || decl.isGeometryProperty())) { object = apply(element, decl); if (object != null) return object; } else { object = iterateNodeList(element, decl); if (object != null) return object; } } return null; } protected T iterateNodeList(Element element, ElementDecl decl) { NodeList nodeList = element.getChildNodes(); List<Element> children = new ArrayList<Element>(nodeList.getLength()); for (int i = 0; i < nodeList.getLength(); ++i) { Node node = nodeList.item(i); if (node.getNodeType() == Node.ELEMENT_NODE) children.add((Element)node); } for (Element child : children) { if (shouldWalk && visited.add(child)) { T object = adeComponent((Element)child, decl); if (object != null) return object; } } return null; } protected T apply(Value value) { if (value.isSetGeometry() && shouldWalk && visited.add(value.getGeometry())) { T object = value.getGeometry().accept(this); if (object != null) return object; } else if (value.isSetValueObject()) { T object = apply(value.getValueObject()); if (object != null) return object; } return null; } protected T apply(ValueObject valueObject) { if (valueObject.isSetCompositeValue()) { T object = valueObject.getCompositeValue().accept(this); if (object != null) return object; } return null; } }