Commit 0b280dc5 authored by Riegel's avatar Riegel
Browse files

Add getTopLevelCityObject method to CityObjects

parent 3dba0e5e
...@@ -374,10 +374,12 @@ public abstract class AbstractBuilding extends CityObject { ...@@ -374,10 +374,12 @@ public abstract class AbstractBuilding extends CityObject {
public void addStorey(Storey storey) { public void addStorey(Storey storey) {
buildingStoreys.add(storey); buildingStoreys.add(storey);
storey.setParent(this);
} }
public void addBuildingUnit(BuildingUnit buildingUnit) { public void addBuildingUnit(BuildingUnit buildingUnit) {
buildingUnits.add(buildingUnit); buildingUnits.add(buildingUnit);
buildingUnit.setParent(this);
} }
public void setGmlObject(org.citygml4j.core.model.building.AbstractBuilding ab) { public void setGmlObject(org.citygml4j.core.model.building.AbstractBuilding ab) {
......
...@@ -29,8 +29,9 @@ public abstract class AbstractBuildingSubdivision extends CityObject { ...@@ -29,8 +29,9 @@ public abstract class AbstractBuildingSubdivision extends CityObject {
private final List<Installation> buildingInstallations = new ArrayList<>(2); private final List<Installation> buildingInstallations = new ArrayList<>(2);
private final List<BoundarySurface> boundarySurfaceList = new ArrayList<>(); private final List<BoundarySurface> boundarySurfaceList = new ArrayList<>();
private final List<BuildingRoom> buildingRooms = new ArrayList<>(); private final List<BuildingRoom> buildingRooms = new ArrayList<>();
private final List<BuildingRoomFurniture> buildingRoomFurnitureList = new ArrayList<>(); private final List<BuildingRoomFurniture> buildingRoomFurnitureList = new ArrayList<>();
private AbstractBuilding parent;
protected org.citygml4j.core.model.building.AbstractBuildingSubdivision abs; protected org.citygml4j.core.model.building.AbstractBuildingSubdivision abs;
/** /**
...@@ -52,6 +53,19 @@ public abstract class AbstractBuildingSubdivision extends CityObject { ...@@ -52,6 +53,19 @@ public abstract class AbstractBuildingSubdivision extends CityObject {
return FeatureType.BUILDING_SUBDIVISION; return FeatureType.BUILDING_SUBDIVISION;
} }
public void setParent(AbstractBuilding parent) {
this.parent = parent;
}
public AbstractBuilding getParent() {
return parent;
}
@Override
public CityObject getTopLevelCityObject() {
return getParent().getTopLevelCityObject();
}
@Override @Override
public void unsetGmlGeometries() { public void unsetGmlGeometries() {
abs.setLod1Solid(null); abs.setLod1Solid(null);
......
...@@ -92,6 +92,11 @@ public abstract class AbstractFurniture extends CityObject { ...@@ -92,6 +92,11 @@ public abstract class AbstractFurniture extends CityObject {
return af; return af;
} }
@Override
public CityObject getTopLevelCityObject(){
return parent;
}
public void addBoundarySurface(BoundarySurface boundarySurface) { public void addBoundarySurface(BoundarySurface boundarySurface) {
boundarySurfaceList.add(boundarySurface); boundarySurfaceList.add(boundarySurface);
boundarySurface.setParent(this); boundarySurface.setParent(this);
......
...@@ -350,6 +350,7 @@ public abstract class AbstractTunnel extends CityObject { ...@@ -350,6 +350,7 @@ public abstract class AbstractTunnel extends CityObject {
public void addTunnelConstructiveElement(TunnelConstructiveElement te) { public void addTunnelConstructiveElement(TunnelConstructiveElement te) {
tunnelConstructiveElements.add(te); tunnelConstructiveElements.add(te);
te.setParent(this);
} }
public void addTunnelPart(TunnelPart tunnelPart) { public void addTunnelPart(TunnelPart tunnelPart) {
......
...@@ -207,6 +207,11 @@ public class BoundarySurface extends CityObject { ...@@ -207,6 +207,11 @@ public class BoundarySurface extends CityObject {
} }
} }
@Override
public CityObject getTopLevelCityObject() {
return getParent().getTopLevelCityObject();
}
@Override @Override
public String toString() { public String toString() {
return "BoundarySurface [type=" + type + ", id=" + getGmlId() + "]"; return "BoundarySurface [type=" + type + ", id=" + getGmlId() + "]";
......
...@@ -52,12 +52,21 @@ public class BridgeConstructiveElement extends CityObject { ...@@ -52,12 +52,21 @@ public class BridgeConstructiveElement extends CityObject {
private final org.citygml4j.core.model.bridge.BridgeConstructiveElement gmlBridgeElement; private final org.citygml4j.core.model.bridge.BridgeConstructiveElement gmlBridgeElement;
private final List<BoundarySurface> boundarySurfaceList = new ArrayList<>(); private final List<BoundarySurface> boundarySurfaceList = new ArrayList<>();
private BridgeObject parent;
public BridgeConstructiveElement(org.citygml4j.core.model.bridge.BridgeConstructiveElement gmlObject) { public BridgeConstructiveElement(org.citygml4j.core.model.bridge.BridgeConstructiveElement gmlObject) {
this.gmlBridgeElement = gmlObject; this.gmlBridgeElement = gmlObject;
} }
public void setParent(BridgeObject parent) {
this.parent = parent;
}
public BridgeObject getParent() {
return parent;
}
@Override @Override
public Copyable createCopyInstance() { public Copyable createCopyInstance() {
return new BridgeConstructiveElement(gmlBridgeElement); return new BridgeConstructiveElement(gmlBridgeElement);
...@@ -244,6 +253,11 @@ public class BridgeConstructiveElement extends CityObject { ...@@ -244,6 +253,11 @@ public class BridgeConstructiveElement extends CityObject {
} }
} }
@Override
public CityObject getTopLevelCityObject() {
return getParent().getTopLevelCityObject();
}
@Override @Override
public FeatureType getFeatureType() { public FeatureType getFeatureType() {
return FeatureType.BRIDGE_CONSTRUCTION_ELEMENT; return FeatureType.BRIDGE_CONSTRUCTION_ELEMENT;
......
...@@ -56,10 +56,24 @@ public class BridgeObject extends CityObject { ...@@ -56,10 +56,24 @@ public class BridgeObject extends CityObject {
private final List<BridgeRoom> bridgeRooms = new ArrayList<>(2); private final List<BridgeRoom> bridgeRooms = new ArrayList<>(2);
private AbstractBridge ab; private AbstractBridge ab;
private BridgeType type; private BridgeType type;
private BridgeObject parent;
public BridgeObject(BridgeType type, AbstractBridge ab) { public BridgeObject(AbstractBridge ab) {
this.ab = ab;
this.type = BridgeType.BRIDGE;
this.parent = null;
}
public BridgeObject(AbstractBridge ab, BridgeObject parent) {
this.ab = ab;
this.type = BridgeType.BRIDGE_PART;
this.parent = parent;
}
private BridgeObject(BridgeType type, AbstractBridge ab, BridgeObject parent) {
this.ab = ab; this.ab = ab;
this.type = type; this.type = type;
this.parent = parent;
} }
@Override @Override
...@@ -401,6 +415,14 @@ public class BridgeObject extends CityObject { ...@@ -401,6 +415,14 @@ public class BridgeObject extends CityObject {
} }
@Override
public CityObject getTopLevelCityObject() {
if (parent != null){
return parent.getTopLevelCityObject();
}
return this;
}
@Override @Override
public String toString() { public String toString() {
return "BridgeObject [type=" + type + ", id=" + getGmlId() + "]"; return "BridgeObject [type=" + type + ", id=" + getGmlId() + "]";
...@@ -543,11 +565,12 @@ public class BridgeObject extends CityObject { ...@@ -543,11 +565,12 @@ public class BridgeObject extends CityObject {
public void addConstructiveElement(BridgeConstructiveElement element) { public void addConstructiveElement(BridgeConstructiveElement element) {
getConstructiveElements().add(element); getConstructiveElements().add(element);
element.setParent(this);
} }
@Override @Override
public Copyable createCopyInstance() { public Copyable createCopyInstance() {
return new BridgeObject(type, ab); return new BridgeObject(type, ab, parent);
} }
public List<BridgeObject> getParts() { public List<BridgeObject> getParts() {
......
...@@ -37,6 +37,11 @@ public class BridgeRoom extends AbstractRoom { ...@@ -37,6 +37,11 @@ public class BridgeRoom extends AbstractRoom {
parent = handler.getCopyInstance(oRoom.getParent()); parent = handler.getCopyInstance(oRoom.getParent());
} }
@Override
public CityObject getTopLevelCityObject() {
return getParent();
}
@Override @Override
public void collectInstances(CopyHandler handler) { public void collectInstances(CopyHandler handler) {
super.collectInstances(handler); super.collectInstances(handler);
......
...@@ -52,6 +52,11 @@ public class Building extends AbstractBuilding { ...@@ -52,6 +52,11 @@ public class Building extends AbstractBuilding {
} }
} }
@Override
public CityObject getTopLevelCityObject() {
return this;
}
@Override @Override
public void accept(Check c) { public void accept(Check c) {
super.accept(c); super.accept(c);
......
...@@ -42,6 +42,11 @@ public class BuildingPart extends AbstractBuilding { ...@@ -42,6 +42,11 @@ public class BuildingPart extends AbstractBuilding {
return parent; return parent;
} }
@Override
public CityObject getTopLevelCityObject() {
return getParent().getTopLevelCityObject();
}
@Override @Override
public FeatureType getFeatureType() { public FeatureType getFeatureType() {
return FeatureType.BUILDING_PART; return FeatureType.BUILDING_PART;
......
...@@ -50,6 +50,11 @@ public class BuildingRoom extends AbstractRoom { ...@@ -50,6 +50,11 @@ public class BuildingRoom extends AbstractRoom {
parent = handler.getCopyInstance(oRoom.getParent()); parent = handler.getCopyInstance(oRoom.getParent());
} }
@Override
public CityObject getTopLevelCityObject() {
return getParent().getTopLevelCityObject();
}
@Override @Override
public void collectInstances(CopyHandler handler) { public void collectInstances(CopyHandler handler) {
super.collectInstances(handler); super.collectInstances(handler);
......
...@@ -50,6 +50,11 @@ public class CityFurniture extends CityObject { ...@@ -50,6 +50,11 @@ public class CityFurniture extends CityObject {
cgmlCityFurniture.getDeprecatedProperties().setLod4Geometry(null); cgmlCityFurniture.getDeprecatedProperties().setLod4Geometry(null);
} }
@Override
public CityObject getTopLevelCityObject() {
return this;
}
@Override @Override
public void reCreateGeometries(GeometryFactory factory, ParserConfiguration config) { public void reCreateGeometries(GeometryFactory factory, ParserConfiguration config) {
for (Geometry geom : getGeometries()) { for (Geometry geom : getGeometries()) {
......
...@@ -102,6 +102,11 @@ public abstract class CityObject extends GmlElement { ...@@ -102,6 +102,11 @@ public abstract class CityObject extends GmlElement {
return highestLodGeometry; return highestLodGeometry;
} }
/**
* Returns the top-level CityObject (like Building or Tunnel) belonging to this object.
*/
public abstract CityObject getTopLevelCityObject();
public void addGenericAttribute(GenericAttribute genericAttribute) { public void addGenericAttribute(GenericAttribute genericAttribute) {
genericAttributeList.add(genericAttribute); genericAttributeList.add(genericAttribute);
} }
......
...@@ -213,6 +213,11 @@ public class GenericCityObject extends CityObject { ...@@ -213,6 +213,11 @@ public class GenericCityObject extends CityObject {
} }
} }
@Override
public CityObject getTopLevelCityObject() {
return this;
}
public void setGmlObject(org.citygml4j.core.model.generics.GenericOccupiedSpace gos) { public void setGmlObject(org.citygml4j.core.model.generics.GenericOccupiedSpace gos) {
this.cgmlGos = gos; this.cgmlGos = gos;
} }
......
...@@ -195,6 +195,11 @@ public class Installation extends CityObject { ...@@ -195,6 +195,11 @@ public class Installation extends CityObject {
} }
} }
@Override
public CityObject getTopLevelCityObject() {
return getParent().getTopLevelCityObject();
}
private void removeGeometriesFromBridgeInstallation(BridgeInstallation localBi) { private void removeGeometriesFromBridgeInstallation(BridgeInstallation localBi) {
localBi.getDeprecatedProperties().setLod2Geometry(null); localBi.getDeprecatedProperties().setLod2Geometry(null);
localBi.getDeprecatedProperties().setLod3Geometry(null); localBi.getDeprecatedProperties().setLod3Geometry(null);
......
...@@ -105,6 +105,11 @@ public class LandObject extends CityObject { ...@@ -105,6 +105,11 @@ public class LandObject extends CityObject {
lu.getDeprecatedProperties().setLod4MultiSurface(null); lu.getDeprecatedProperties().setLod4MultiSurface(null);
} }
@Override
public CityObject getTopLevelCityObject() {
return this;
}
public void setGmlObject(LandUse landUse) { public void setGmlObject(LandUse landUse) {
lu = landUse; lu = landUse;
} }
......
...@@ -135,6 +135,11 @@ public class Opening extends CityObject { ...@@ -135,6 +135,11 @@ public class Opening extends CityObject {
ao.getDeprecatedProperties().setLod4MultiSurface(null); ao.getDeprecatedProperties().setLod4MultiSurface(null);
} }
@Override
public CityObject getTopLevelCityObject() {
return partOf.getTopLevelCityObject();
}
@Override @Override
public String toString() { public String toString() {
return "Opening [type=" + type + ", id=" + getGmlId() + "]"; return "Opening [type=" + type + ", id=" + getGmlId() + "]";
......
...@@ -146,6 +146,11 @@ public class ReliefObject extends CityObject { ...@@ -146,6 +146,11 @@ public class ReliefObject extends CityObject {
// no geometries // no geometries
} }
@Override
public CityObject getTopLevelCityObject() {
return this;
}
@Override @Override
public FeatureType getFeatureType() { public FeatureType getFeatureType() {
return FeatureType.LAND; return FeatureType.LAND;
......
...@@ -91,6 +91,11 @@ public class TinObject extends CityObject { ...@@ -91,6 +91,11 @@ public class TinObject extends CityObject {
gmlRelief.setTin(null); gmlRelief.setTin(null);
} }
@Override
public CityObject getTopLevelCityObject() {
return this;
}
@Override @Override
public FeatureType getFeatureType() { public FeatureType getFeatureType() {
return FeatureType.LAND; return FeatureType.LAND;
......
...@@ -267,6 +267,11 @@ public class TransportationObject extends CityObject { ...@@ -267,6 +267,11 @@ public class TransportationObject extends CityObject {
} }
} }
@Override
public CityObject getTopLevelCityObject() {
return this;
}
public void setGmlObject(AbstractCityObject tc) { public void setGmlObject(AbstractCityObject tc) {
ato = tc; ato = tc;
} }
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment