private void updateFigureCollection() {
FeatureCollection<SimpleFeatureType, SimpleFeature> featureCollection = vectorDataNode.getFeatureCollection();
Figure[] figures = figureCollection.getFigures();
Map<SimpleFeature, SimpleFeatureFigure> figureMap = new HashMap<>();
for (Figure figure : figures) {
if (figure instanceof SimpleFeatureFigure) {
SimpleFeatureFigure simpleFeatureFigure = (SimpleFeatureFigure) figure;
figureMap.put(simpleFeatureFigure.getSimpleFeature(), simpleFeatureFigure);
}
}
FeatureIterator<SimpleFeature> featureIterator = featureCollection.features();
while (featureIterator.hasNext()) {
SimpleFeature simpleFeature = featureIterator.next();
SimpleFeatureFigure featureFigure = figureMap.get(simpleFeature);
if (featureFigure != null) {
figureMap.remove(simpleFeature);
final String css = SimpleFeatureFigureFactory.getStyleCss(simpleFeature, vectorDataNode.getDefaultStyleCss());
final FigureStyle normalStyle = DefaultFigureStyle.createFromCss(css);
final FigureStyle selectedStyle = getFigureFactory().deriveSelectedStyle(normalStyle);
featureFigure.setNormalStyle(normalStyle);
featureFigure.setSelectedStyle(selectedStyle);
} else {
featureFigure = getFigureFactory().createSimpleFeatureFigure(simpleFeature, vectorDataNode.getDefaultStyleCss());
figureCollection.addFigure(featureFigure);
}
featureFigure.forceRegeneration();
}
Collection<SimpleFeatureFigure> remainingFigures = figureMap.values();
figureCollection.removeFigures(remainingFigures.toArray(new Figure[remainingFigures.size()]));
}