Commit 3ff0eb11 authored by Luna Riegel's avatar Luna Riegel
Browse files

Perf: Fixed excessive loading times for filtering

parent 9de70078
...@@ -752,9 +752,11 @@ public class CityDoctorController { ...@@ -752,9 +752,11 @@ public class CityDoctorController {
} }
private void filterBuildingTree(String searchString) { private void filterBuildingTree(String searchString) {
Supplier<Stream<Building>> foundBuildings = () -> model.getBuildings(). List<GmlId> foundIds = model.getFeatureIds().stream().filter(id -> featureIdFilter(id, searchString)).toList();
filter(co -> featureFilter(co, searchString)); Supplier<Stream<Building>> foundBuildings = () -> foundIds.stream().map( id -> (Building) model.getCityObject(id));
int featureCount = (int) foundBuildings.get().count(); // Supplier<Stream<Building>> foundBuildings = () -> model.getBuildings().
// filter(co -> featureFilter(co, searchString));
int featureCount = foundIds.size();
TreeView<Renderable> buildingsView = mainWindow.getBuildingsView(); TreeView<Renderable> buildingsView = mainWindow.getBuildingsView();
TreeItem<Renderable> root = buildingsView.getRoot(); TreeItem<Renderable> root = buildingsView.getRoot();
root.getChildren().clear(); root.getChildren().clear();
...@@ -764,9 +766,9 @@ public class CityDoctorController { ...@@ -764,9 +766,9 @@ public class CityDoctorController {
} }
private void filterBridgeTree(String searchString) { private void filterBridgeTree(String searchString) {
Supplier<Stream<BridgeObject>> foundBridges = () -> model.getBridges(). List<GmlId> foundIds = model.getFeatureIds().stream().filter(id -> featureIdFilter(id, searchString)).toList();
filter(co -> featureFilter(co, searchString)); Supplier<Stream<BridgeObject>> foundBridges = () -> foundIds.stream().map( id -> (BridgeObject) model.getCityObject(id));
int featureCount = (int) foundBridges.get().count(); int featureCount = foundIds.size();
TreeView<Renderable> bridgeView = mainWindow.getBridgeView(); TreeView<Renderable> bridgeView = mainWindow.getBridgeView();
TreeItem<Renderable> root = bridgeView.getRoot(); TreeItem<Renderable> root = bridgeView.getRoot();
root.getChildren().clear(); root.getChildren().clear();
...@@ -776,8 +778,9 @@ public class CityDoctorController { ...@@ -776,8 +778,9 @@ public class CityDoctorController {
} }
private void filterTunnelTree(String searchString) { private void filterTunnelTree(String searchString) {
Supplier<Stream<Tunnel>> foundTunnel = () -> model.getTunnels().filter(co -> featureFilter(co, searchString)); List<GmlId> foundIds = model.getFeatureIds().stream().filter(id -> featureIdFilter(id, searchString)).toList();
int featureCount = (int) foundTunnel.get().count(); Supplier<Stream<Tunnel>> foundTunnel = () -> foundIds.stream().map( id -> (Tunnel) model.getCityObject(id));
int featureCount = foundIds.size();
TreeView<Renderable> tunnelView = mainWindow.getTunnelView(); TreeView<Renderable> tunnelView = mainWindow.getTunnelView();
TreeItem<Renderable> root = tunnelView.getRoot(); TreeItem<Renderable> root = tunnelView.getRoot();
root.getChildren().clear(); root.getChildren().clear();
...@@ -787,9 +790,9 @@ public class CityDoctorController { ...@@ -787,9 +790,9 @@ public class CityDoctorController {
} }
private void filterVegetationTree(String searchString) { private void filterVegetationTree(String searchString) {
Supplier<Stream<Vegetation>> foundVegetation = () -> model.getVegetation(). List<GmlId> foundIds = model.getFeatureIds().stream().filter(id -> featureIdFilter(id, searchString)).toList();
filter(co -> featureFilter(co, searchString)); Supplier<Stream<Vegetation>> foundVegetation = () -> foundIds.stream().map( id -> (Vegetation) model.getCityObject(id));
int featureCount = (int) foundVegetation.get().count(); int featureCount = foundIds.size();
TreeView<Renderable> vegetationView = mainWindow.getVegetationView(); TreeView<Renderable> vegetationView = mainWindow.getVegetationView();
TreeItem<Renderable> root = vegetationView.getRoot(); TreeItem<Renderable> root = vegetationView.getRoot();
root.getChildren().clear(); root.getChildren().clear();
...@@ -799,9 +802,9 @@ public class CityDoctorController { ...@@ -799,9 +802,9 @@ public class CityDoctorController {
} }
private void filterTransportationTree(String searchString) { private void filterTransportationTree(String searchString) {
Supplier<Stream<TransportationObject>> foundTransportation = () -> model.getTransportation(). List<GmlId> foundIds = model.getFeatureIds().stream().filter(id -> featureIdFilter(id, searchString)).toList();
filter(co -> featureFilter(co, searchString)); Supplier<Stream<TransportationObject>> foundTransportation = () -> foundIds.stream().map( id -> (TransportationObject) model.getCityObject(id));
int featureCount = (int) foundTransportation.get().count(); int featureCount = foundIds.size();
TreeView<Renderable> transportationView = mainWindow.getTransportationView(); TreeView<Renderable> transportationView = mainWindow.getTransportationView();
TreeItem<Renderable> root = transportationView.getRoot(); TreeItem<Renderable> root = transportationView.getRoot();
root.getChildren().clear(); root.getChildren().clear();
...@@ -812,8 +815,9 @@ public class CityDoctorController { ...@@ -812,8 +815,9 @@ public class CityDoctorController {
} }
private void filterWaterTree(String searchString) { private void filterWaterTree(String searchString) {
Supplier<Stream<WaterObject>> foundWater = () -> model.getWater().filter(co -> featureFilter(co, searchString)); List<GmlId> foundIds = model.getFeatureIds().stream().filter(id -> featureIdFilter(id, searchString)).toList();
int featureCount = (int) foundWater.get().count(); Supplier<Stream<WaterObject>> foundWater = () -> foundIds.stream().map( id -> (WaterObject) model.getCityObject(id));
int featureCount = foundIds.size();
TreeView<Renderable> waterView = mainWindow.getWaterView(); TreeView<Renderable> waterView = mainWindow.getWaterView();
TreeItem<Renderable> root = waterView.getRoot(); TreeItem<Renderable> root = waterView.getRoot();
root.getChildren().clear(); root.getChildren().clear();
...@@ -822,8 +826,9 @@ public class CityDoctorController { ...@@ -822,8 +826,9 @@ public class CityDoctorController {
} }
private void filterLandTree(String searchString) { private void filterLandTree(String searchString) {
Supplier<Stream<CityObject>> foundLand = () -> model.getLand().filter(co -> featureFilter(co, searchString)); List<GmlId> foundIds = model.getFeatureIds().stream().filter(id -> featureIdFilter(id, searchString)).toList();
int featureCount = (int) foundLand.get().count(); Supplier<Stream<CityObject>> foundLand = () -> foundIds.stream().map( id -> model.getCityObject(id));
int featureCount = foundIds.size();
TreeView<Renderable> landView = mainWindow.getTerrainView(); TreeView<Renderable> landView = mainWindow.getTerrainView();
TreeItem<Renderable> root = landView.getRoot(); TreeItem<Renderable> root = landView.getRoot();
root.getChildren().clear(); root.getChildren().clear();
...@@ -832,9 +837,9 @@ public class CityDoctorController { ...@@ -832,9 +837,9 @@ public class CityDoctorController {
} }
private void filterCityFurnitureTree(String searchString) { private void filterCityFurnitureTree(String searchString) {
Supplier<Stream<CityFurniture>> foundCityFurniture = () -> model.getCityFurniture(). List<GmlId> foundIds = model.getFeatureIds().stream().filter(id -> featureIdFilter(id, searchString)).toList();
filter(co -> featureFilter(co, searchString)); Supplier<Stream<CityFurniture>> foundCityFurniture = () -> foundIds.stream().map( id -> (CityFurniture) model.getCityObject(id));
int featureCount = (int) foundCityFurniture.get().count(); int featureCount = foundIds.size();
TreeView<Renderable> cityFurnitureView = mainWindow.getCityFurnitureView(); TreeView<Renderable> cityFurnitureView = mainWindow.getCityFurnitureView();
TreeItem<Renderable> root = cityFurnitureView.getRoot(); TreeItem<Renderable> root = cityFurnitureView.getRoot();
root.getChildren().clear(); root.getChildren().clear();
...@@ -843,9 +848,9 @@ public class CityDoctorController { ...@@ -843,9 +848,9 @@ public class CityDoctorController {
} }
private void filterOtherCityObjectsTree(String searchString) { private void filterOtherCityObjectsTree(String searchString) {
Supplier<Stream<CityObject>> foundGenericCityObject = () -> model.getOtherCityObjects(). List<GmlId> foundIds = model.getFeatureIds().stream().filter(id -> featureIdFilter(id, searchString)).toList();
filter(co ->featureFilter(co, searchString)); Supplier<Stream<CityObject>> foundGenericCityObject = () -> foundIds.stream().map( id -> (CityObject) model.getCityObject(id));
int featureCount = (int) foundGenericCityObject.get().count(); int featureCount = foundIds.size();
TreeView<Renderable> genericCityObjectView = mainWindow.getOtherCityObjectView(); TreeView<Renderable> genericCityObjectView = mainWindow.getOtherCityObjectView();
TreeItem<Renderable> root = genericCityObjectView.getRoot(); TreeItem<Renderable> root = genericCityObjectView.getRoot();
root.getChildren().clear(); root.getChildren().clear();
...@@ -854,18 +859,8 @@ public class CityDoctorController { ...@@ -854,18 +859,8 @@ public class CityDoctorController {
foundGenericCityObject, featureCount); foundGenericCityObject, featureCount);
} }
private <T extends CityObject> List<T> filterFeatures(String searchString, List<T> features) { private boolean featureIdFilter(GmlId id, String searchString) {
List<T> foundFeatures = new ArrayList<>(); return id.getGmlString().contains(searchString);
for (T t : features) {
if (t.getGmlId().getGmlString().contains(searchString)) {
foundFeatures.add(t);
}
}
return foundFeatures;
}
private boolean featureFilter(CityObject co, String searchString) {
return co.getGmlId().getGmlString().contains(searchString);
} }
public void resetSearch(FeatureType selectedTab) { public void resetSearch(FeatureType selectedTab) {
......
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