Commit ffe66fd4 authored by Riegel's avatar Riegel
Browse files

Merge branch 'dev_visitor_rework' into 'dev'

Visitor rework

See merge request !30
parents d12da32a 120466a0
Pipeline #11077 passed with stage
in 1 minute and 20 seconds
package de.hft.stuttgart.citydoctor2.gui.tree;
import de.hft.stuttgart.citydoctor2.datastructure.Tunnel;
import de.hft.stuttgart.citydoctor2.gui.Renderer;
import java.util.List;
public class AllTunnelsNode extends Renderable{
private final List<Tunnel> tunnels;
public AllTunnelsNode(List<Tunnel> tunnels) {
this.tunnels = tunnels;
}
@Override
public void refreshTextColor() {
// no color changes
}
@Override
public String getText() {
return "Tunnels";
}
@Override
public void visit(Renderer renderer) {
renderer.renderTunnels(tunnels);
}
}
package de.hft.stuttgart.citydoctor2.gui.tree;
import java.util.List;
import de.hft.stuttgart.citydoctor2.datastructure.Vegetation;
import de.hft.stuttgart.citydoctor2.gui.Renderer;
public class AllVegetationNode extends Renderable {
private final List<Vegetation> vegetation;
public AllVegetationNode(List<Vegetation> vegetation) {
this.vegetation = vegetation;
}
@Override
public void refreshTextColor() {
// no use
}
@Override
public String getText() {
return "Vegetation";
}
@Override
public void visit(Renderer renderer) {
renderer.renderVegetation(vegetation);
}
}
package de.hft.stuttgart.citydoctor2.gui.tree;
import java.util.List;
import de.hft.stuttgart.citydoctor2.datastructure.WaterObject;
import de.hft.stuttgart.citydoctor2.gui.Renderer;
public class AllWaterNode extends Renderable {
private final List<WaterObject> water;
public AllWaterNode(List<WaterObject> water) {
this.water = water;
}
@Override
public void refreshTextColor() {
// no use
}
@Override
public String getText() {
return "Water";
}
@Override
public void visit(Renderer renderer) {
renderer.renderWater(water);
}
}
package de.hft.stuttgart.citydoctor2.gui.tree;
import de.hft.stuttgart.citydoctor2.datastructure.BoundarySurface;
import de.hft.stuttgart.citydoctor2.gui.CheckStatus;
import de.hft.stuttgart.citydoctor2.gui.Renderer;
public class BoundarySurfaceNode extends Renderable {
private final BoundarySurface bs;
public BoundarySurfaceNode(BoundarySurface bs) {
this.bs = bs;
}
@Override
public String getText() {
return bs.getGmlId().getGmlString() + " [" + bs.getType() + "]";
}
@Override
public void visit(Renderer renderer) {
renderer.render(bs);
}
@Override
public void refreshTextColor() {
if (!bs.isValidated()) {
setStatus(CheckStatus.NOT_CHECKED);
} else if (bs.containsAnyError()) {
setStatus(CheckStatus.ERROR);
} else {
setStatus(CheckStatus.OK);
}
}
}
/*-
* Copyright 2023 Beuth Hochschule für Technik Berlin, Hochschule für Technik Stuttgart
*
* This file is part of CityDoctor2.
*
* CityDoctor2 is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* CityDoctor2 is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with CityDoctor2. If not, see <https://www.gnu.org/licenses/>.
*/
package de.hft.stuttgart.citydoctor2.gui.tree;
import de.hft.stuttgart.citydoctor2.datastructure.BridgeConstructiveElement;
import de.hft.stuttgart.citydoctor2.gui.CheckStatus;
import de.hft.stuttgart.citydoctor2.gui.Renderer;
public class BridgeConstructiveElementNode extends Renderable {
private final BridgeConstructiveElement bce;
public BridgeConstructiveElementNode(BridgeConstructiveElement bce) {
this.bce = bce;
}
@Override
public String getText() {
return bce.getGmlId().getGmlString();
}
@Override
public void visit(Renderer renderer) {
renderer.render(bce);
}
@Override
public void refreshTextColor() {
if (!bce.isValidated()) {
setStatus(CheckStatus.NOT_CHECKED);
} else if (bce.containsAnyError()) {
setStatus(CheckStatus.ERROR);
} else {
setStatus(CheckStatus.OK);
}
}
}
/*-
* Copyright 2022 Beuth Hochschule für Technik Berlin, Hochschule für Technik Stuttgart
*
* This file is part of CityDoctor2.
*
* CityDoctor2 is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* CityDoctor2 is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with CityDoctor2. If not, see <https://www.gnu.org/licenses/>.
*/
package de.hft.stuttgart.citydoctor2.gui.tree;
import de.hft.stuttgart.citydoctor2.datastructure.BridgeObject;
import de.hft.stuttgart.citydoctor2.datastructure.CityObject;
import de.hft.stuttgart.citydoctor2.gui.CheckStatus;
import de.hft.stuttgart.citydoctor2.gui.Renderer;
public class BridgeNode extends Renderable implements FeatureNode {
private final BridgeObject bridge;
public BridgeNode(BridgeObject bridge) {
this.bridge = bridge;
}
@Override
public String getText() {
return bridge.getGmlId().getGmlString();
}
@Override
public void visit(Renderer renderer) {
renderer.render(bridge);
}
@Override
public void refreshTextColor() {
if (!bridge.isValidated()) {
setStatus(CheckStatus.NOT_CHECKED);
} else if (bridge.containsAnyError()) {
setStatus(CheckStatus.ERROR);
} else {
setStatus(CheckStatus.OK);
}
}
@Override
public CityObject getFeature() {
return bridge;
}
}
package de.hft.stuttgart.citydoctor2.gui.tree;
import de.hft.stuttgart.citydoctor2.datastructure.Building;
import de.hft.stuttgart.citydoctor2.datastructure.CityObject;
import de.hft.stuttgart.citydoctor2.gui.CheckStatus;
import de.hft.stuttgart.citydoctor2.gui.Renderer;
public class BuildingNode extends Renderable implements FeatureNode {
private final Building building;
public BuildingNode(Building building) {
this.building = building;
}
@Override
public String getText() {
return building.getGmlId().getGmlString();
}
public Building getBuilding() {
return building;
}
@Override
public void visit(Renderer renderer) {
renderer.render(building);
}
@Override
public void refreshTextColor() {
if (!building.isValidated()) {
setStatus(CheckStatus.NOT_CHECKED);
} else if (building.containsAnyError()) {
setStatus(CheckStatus.ERROR);
} else {
setStatus(CheckStatus.OK);
}
}
@Override
public CityObject getFeature() {
return building;
}
}
package de.hft.stuttgart.citydoctor2.gui.tree;
import de.hft.stuttgart.citydoctor2.datastructure.BuildingPart;
import de.hft.stuttgart.citydoctor2.gui.CheckStatus;
import de.hft.stuttgart.citydoctor2.gui.Renderer;
public class BuildingPartNode extends Renderable {
private final BuildingPart bp;
public BuildingPartNode(BuildingPart bp) {
this.bp = bp;
}
@Override
public String getText() {
return bp.getGmlId().getGmlString();
}
@Override
public void visit(Renderer renderer) {
renderer.render(bp);
}
@Override
public void refreshTextColor() {
if (!bp.isValidated()) {
setStatus(CheckStatus.NOT_CHECKED);
} else if (bp.containsAnyError()) {
setStatus(CheckStatus.ERROR);
} else {
setStatus(CheckStatus.OK);
}
}
}
package de.hft.stuttgart.citydoctor2.gui.tree;
import de.hft.stuttgart.citydoctor2.datastructure.BuildingUnit;
import de.hft.stuttgart.citydoctor2.gui.CheckStatus;
import de.hft.stuttgart.citydoctor2.gui.Renderer;
public class BuildingUnitNode extends Renderable{
private final BuildingUnit buildingUnit;
public BuildingUnitNode(BuildingUnit buildingUnit) {
this.buildingUnit = buildingUnit;
}
@Override
public String getText() {
return buildingUnit.getGmlId().getGmlString();
}
@Override
public void visit(Renderer renderer) {
renderer.render(buildingUnit);
}
@Override
public void refreshTextColor() {
if (!buildingUnit.isValidated()) {
setStatus(CheckStatus.NOT_CHECKED);
} else if (buildingUnit.containsAnyError()) {
setStatus(CheckStatus.ERROR);
} else {
setStatus(CheckStatus.OK);
}
}
}
......@@ -46,6 +46,11 @@ import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
import de.hft.stuttgart.citydoctor2.gui.CheckStatus;
import de.hft.stuttgart.citydoctor2.gui.tree.node.EdgeNode;
import de.hft.stuttgart.citydoctor2.gui.tree.node.LinearRingNode;
import de.hft.stuttgart.citydoctor2.gui.tree.node.PolygonNode;
import de.hft.stuttgart.citydoctor2.gui.tree.node.TextNode;
import de.hft.stuttgart.citydoctor2.gui.tree.node.VertexNode;
import de.hft.stuttgart.citydoctor2.math.Triangle3d;
import de.hft.stuttgart.citydoctor2.utils.Localization;
import de.hft.stuttgart.citydoctor2.utils.PolygonIntersection;
......
package de.hft.stuttgart.citydoctor2.gui.tree;
import de.hft.stuttgart.citydoctor2.datastructure.CityObject;
public interface FeatureNode {
public CityObject getFeature();
}
package de.hft.stuttgart.citydoctor2.gui.tree;
import de.hft.stuttgart.citydoctor2.datastructure.AbstractFurniture;
import de.hft.stuttgart.citydoctor2.gui.CheckStatus;
import de.hft.stuttgart.citydoctor2.gui.Renderer;
public class FurnitureNode extends Renderable{
private final AbstractFurniture furniture;
public FurnitureNode(AbstractFurniture furniture) {
this.furniture = furniture;
}
@Override
public String getText() {
return furniture.getGmlId().getGmlString();
}
@Override
public void visit(Renderer renderer) {
renderer.render(furniture);
}
@Override
public void refreshTextColor() {
if (!furniture.isValidated()) {
setStatus(CheckStatus.NOT_CHECKED);
} else if (furniture.containsAnyError()) {
setStatus(CheckStatus.ERROR);
} else {
setStatus(CheckStatus.OK);
}
}
}
package de.hft.stuttgart.citydoctor2.gui.tree;
import de.hft.stuttgart.citydoctor2.datastructure.CityObject;
import de.hft.stuttgart.citydoctor2.datastructure.GenericCityObject;
import de.hft.stuttgart.citydoctor2.gui.CheckStatus;
import de.hft.stuttgart.citydoctor2.gui.Renderer;
public class GenericCityObjectsNode extends Renderable implements FeatureNode {
private final GenericCityObject gcobject;
public GenericCityObjectsNode(GenericCityObject gcobject) {
this.gcobject = gcobject;
}
@Override
public String getText() {
return gcobject.getGmlId().getGmlString();
}
@Override
public void visit(Renderer renderer) {
renderer.render(gcobject);
}
@Override
public void refreshTextColor() {
if (!gcobject.isValidated()) {
setStatus(CheckStatus.NOT_CHECKED);
} else if (gcobject.containsAnyError()) {
setStatus(CheckStatus.ERROR);
} else {
setStatus(CheckStatus.OK);
}
}
@Override
public CityObject getFeature() {
return gcobject;
}
}
package de.hft.stuttgart.citydoctor2.gui.tree;
import de.hft.stuttgart.citydoctor2.datastructure.Installation;
import de.hft.stuttgart.citydoctor2.gui.CheckStatus;
import de.hft.stuttgart.citydoctor2.gui.Renderer;
public class InstallationNode extends Renderable {
private final Installation bi;
public InstallationNode(Installation bi) {
this.bi = bi;
}
@Override
public String getText() {
return bi.getGmlId().getGmlString();
}
@Override
public void visit(Renderer renderer) {
renderer.render(bi);
}
@Override
public void refreshTextColor() {
if (!bi.isValidated()) {
setStatus(CheckStatus.NOT_CHECKED);
} else if (bi.containsAnyError()) {
setStatus(CheckStatus.ERROR);
} else {
setStatus(CheckStatus.OK);
}
}
}
\ No newline at end of file
/*-
* Copyright 2022 Beuth Hochschule für Technik Berlin, Hochschule für Technik Stuttgart
*
* This file is part of CityDoctor2.
*
* CityDoctor2 is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* CityDoctor2 is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with CityDoctor2. If not, see <https://www.gnu.org/licenses/>.
*/
package de.hft.stuttgart.citydoctor2.gui.tree;
import de.hft.stuttgart.citydoctor2.datastructure.LandObject;
import de.hft.stuttgart.citydoctor2.gui.CheckStatus;
import de.hft.stuttgart.citydoctor2.gui.Renderer;
public class LandUseNode extends Renderable {
private final LandObject landUse;
public LandUseNode(LandObject landUse) {
this.landUse = landUse;
}
@Override
public void refreshTextColor() {
if (!landUse.isValidated()) {
setStatus(CheckStatus.NOT_CHECKED);
} else if (landUse.containsAnyError()) {
setStatus(CheckStatus.ERROR);
} else {
setStatus(CheckStatus.OK);
}
}
@Override
public String getText() {
return "[LandUse] " + landUse.getGmlId().getGmlString();
}
@Override
public void visit(Renderer renderer) {
renderer.render(landUse);
}
}
/*-
* Copyright 2022 Beuth Hochschule für Technik Berlin, Hochschule für Technik Stuttgart
*
* This file is part of CityDoctor2.
*
* CityDoctor2 is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* CityDoctor2 is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with CityDoctor2. If not, see <https://www.gnu.org/licenses/>.
*/
package de.hft.stuttgart.citydoctor2.gui.tree;
import de.hft.stuttgart.citydoctor2.datastructure.ReliefObject;
import de.hft.stuttgart.citydoctor2.gui.CheckStatus;
import de.hft.stuttgart.citydoctor2.gui.Renderer;
public class ReliefNode extends Renderable {
private final ReliefObject relief;
public ReliefNode(ReliefObject relief) {
this.relief = relief;
}
@Override
public void refreshTextColor() {
if (!relief.isValidated()) {
setStatus(CheckStatus.NOT_CHECKED);
} else if (relief.containsAnyError()) {
setStatus(CheckStatus.ERROR);
} else {
setStatus(CheckStatus.OK);
}
}
@Override
public String getText() {
return "[ReliefFeature] " + relief.getGmlId().getGmlString();
}
@Override
public void visit(Renderer renderer) {
renderer.render(relief);
}
}
package de.hft.stuttgart.citydoctor2.gui.tree;
import de.hft.stuttgart.citydoctor2.gui.CheckStatus;
import de.hft.stuttgart.citydoctor2.gui.MainWindow;
import de.hft.stuttgart.citydoctor2.gui.Renderer;
import de.hft.stuttgart.citydoctor2.utils.Localization;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.scene.input.Clipboard;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import static javafx.scene.input.Clipboard.getSystemClipboard;
public abstract class Renderable {
private final ObjectProperty<CheckStatus> statusProperty = new SimpleObjectProperty<>();
private static Logger logger = LogManager.getLogger(Renderable.class);
/**
* @return the status
*/
......@@ -31,4 +40,18 @@ public abstract class Renderable {
public abstract String getText();
public abstract void visit(Renderer renderer);
public void getClipboardAction(MainWindow mainWindow) {
Clipboard clipboard = getSystemClipboard();
clipboard.clear();
if (logger.isInfoEnabled()) {
logger.info(Localization.getText("MainWindow.infoTopLevelCopyID"));
}
}
public void getFeatureExportAction(MainWindow mainWindow) {
if (logger.isInfoEnabled()) {
logger.info(Localization.getText("MainWindow.infoTopLevelExport"));
}
}
}
package de.hft.stuttgart.citydoctor2.gui.tree;
import de.hft.stuttgart.citydoctor2.datastructure.AbstractRoom;
import de.hft.stuttgart.citydoctor2.gui.CheckStatus;
import de.hft.stuttgart.citydoctor2.gui.Renderer;
public class RoomNode extends Renderable{
private final AbstractRoom room;
public RoomNode(AbstractRoom room) {
this.room = room;
}
@Override
public String getText() {
return room.getGmlId().getGmlString();
}
@Override
public void visit(Renderer renderer) {
renderer.render(room);
}
@Override
public void refreshTextColor() {
if (!room.isValidated()) {
setStatus(CheckStatus.NOT_CHECKED);
} else if (room.containsAnyError()) {
setStatus(CheckStatus.ERROR);
} else {
setStatus(CheckStatus.OK);
}
}
}
package de.hft.stuttgart.citydoctor2.gui.tree;
import de.hft.stuttgart.citydoctor2.datastructure.Storey;
import de.hft.stuttgart.citydoctor2.gui.CheckStatus;
import de.hft.stuttgart.citydoctor2.gui.Renderer;
public class StoreyNode extends Renderable{
private final Storey storey;
public StoreyNode(Storey storey) {
this.storey = storey;
}
@Override
public String getText() {
return storey.getGmlId().getGmlString();
}
@Override
public void visit(Renderer renderer) {
renderer.render(storey);
}
@Override
public void refreshTextColor() {
if (!storey.isValidated()) {
setStatus(CheckStatus.NOT_CHECKED);
} else if (storey.containsAnyError()) {
setStatus(CheckStatus.ERROR);
} else {
setStatus(CheckStatus.OK);
}
}
}
/*-
* Copyright 2022 Beuth Hochschule für Technik Berlin, Hochschule für Technik Stuttgart
*
* This file is part of CityDoctor2.
*
* CityDoctor2 is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* CityDoctor2 is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with CityDoctor2. If not, see <https://www.gnu.org/licenses/>.
*/
package de.hft.stuttgart.citydoctor2.gui.tree;
import de.hft.stuttgart.citydoctor2.datastructure.TinObject;
import de.hft.stuttgart.citydoctor2.gui.CheckStatus;
import de.hft.stuttgart.citydoctor2.gui.Renderer;
public class TinNode extends Renderable {
private final TinObject tin;
public TinNode(TinObject tin) {
this.tin = tin;
}
@Override
public void refreshTextColor() {
if (!tin.isValidated()) {
setStatus(CheckStatus.NOT_CHECKED);
} else if (tin.containsAnyError()) {
setStatus(CheckStatus.ERROR);
} else {
setStatus(CheckStatus.OK);
}
}
@Override
public String getText() {
return "[TINRelief] " + tin.getGmlId().getGmlString();
}
@Override
public void visit(Renderer renderer) {
renderer.render(tin);
}
}
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