Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
CityDoctor
CityDoctor2
Commits
3ff0eb11
Commit
3ff0eb11
authored
Jun 16, 2026
by
Luna Riegel
Browse files
Perf: Fixed excessive loading times for filtering
parent
9de70078
Changes
1
Hide whitespace changes
Inline
Side-by-side
CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/CityDoctorController.java
View file @
3ff0eb11
...
@@ -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
)
{
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment