package org.openstreetmap.josm.plugins.osminspector;
import java.util.HashMap;
import java.util.Iterator;
import org.geotools.data.memory.MemoryFeatureCollection;
import org.geotools.feature.FeatureCollection;
import org.geotools.feature.FeatureIterator;
import org.opengis.feature.simple.SimpleFeature;
import org.opengis.feature.simple.SimpleFeatureType;
public class OSMIFeatureTracker {
private HashMap<Long, SimpleFeature> hashFeatures;
private MemoryFeatureCollection features;
public OSMIFeatureTracker(
FeatureCollection<SimpleFeatureType, SimpleFeature> featuresIn) {
hashFeatures = new HashMap<>();
features = new MemoryFeatureCollection(featuresIn.getSchema());
for (Iterator<?> it = features.iterator(); it.hasNext();) {
SimpleFeature element = (SimpleFeature) it.next();
try {
Long ID = (Long.parseLong((String) element
.getAttribute("problem_id")));
if (!hashFeatures.containsKey(ID)) {
hashFeatures.put(ID, element);
features.add(element);
}
} catch (NumberFormatException e) {
continue;
}
}
try (FeatureIterator<SimpleFeature> it = featuresIn.features()) {
while (it.hasNext()) {
features.add(it.next());
}
}
}
public boolean mergeFeatures(
FeatureCollection<SimpleFeatureType, SimpleFeature> newFeatures) {
try (FeatureIterator<SimpleFeature> it = newFeatures.features()) {
while (it.hasNext()) {
SimpleFeature element = (SimpleFeature) it.next();
try {
Long ID = (Long.parseLong((String) element
.getAttribute("problem_id")));
if (!hashFeatures.containsKey(ID)) {
hashFeatures.put(ID, element);
features.add(element);
}
} catch (NumberFormatException e) {
continue;
}
}
}
return true;
}
public HashMap<Long, SimpleFeature> getFeatureHash() {
return hashFeatures;
}
public FeatureCollection<SimpleFeatureType, SimpleFeature> getFeatures() {
return features;
}
}