package org.jgrasstools.nww.gui.listeners;
import java.awt.Component;
import java.util.LinkedHashMap;
import java.util.Map.Entry;
import java.util.Set;
import javax.swing.JOptionPane;
import org.jgrasstools.gui.utils.GuiUtilities;
import org.jgrasstools.nww.shapes.FeatureStoreInfo;
import org.jgrasstools.nww.shapes.IFeatureShape;
import org.jgrasstools.nww.shapes.IInfoShape;
import org.jgrasstools.nww.utils.NwwUtilities;
import org.opengis.feature.simple.SimpleFeature;
import gov.nasa.worldwind.event.SelectEvent;
import gov.nasa.worldwind.event.SelectListener;
import gov.nasa.worldwind.pick.PickedObject;
public class GenericSelectListener implements SelectListener {
private Component parent;
public GenericSelectListener(Component parent) {
this.parent = parent;
}
@Override
public void selected(SelectEvent event) {
PickedObject topObject = event.getTopPickedObject();
String eventAction = event.getEventAction();
if (eventAction.equals(SelectEvent.LEFT_CLICK)) {
Object object = topObject.getObject();
String msg = null;
if (object instanceof IFeatureShape) {
IFeatureShape featureShape = (IFeatureShape) object;
SimpleFeature feature = featureShape.getFeature();
FeatureStoreInfo featureStoreInfo = featureShape.getFeatureStoreInfo();
LinkedHashMap<String, String> feature2AlphanumericToHashmap = NwwUtilities
.feature2AlphanumericToHashmap(feature);
if (featureStoreInfo.getFeatureStore() == null) {
StringBuilder sb = new StringBuilder();
for (Entry<String, String> entry : feature2AlphanumericToHashmap.entrySet()) {
sb.append(entry.getKey()).append(": ").append(entry.getValue()).append("\n");
}
msg = sb.toString();
} else {
int size = feature2AlphanumericToHashmap.size();
String[] fieldNames = new String[size];
String[] values = new String[size];
Set<Entry<String, String>> entrySet = feature2AlphanumericToHashmap.entrySet();
int count = 0;
for (Entry<String, String> entry : entrySet) {
fieldNames[count] = entry.getKey();
String value = entry.getValue();
if (value == null) {
value = "";
}
values[count] = value;
count++;
}
String[] editedValues = GuiUtilities.showMultiInputDialog(parent, "Edit feature", fieldNames,
values, featureStoreInfo.getField2ValuesMap());
if (editedValues != null) {
SimpleFeature modifiedFeature = featureShape.modifyFeatureAttribute(fieldNames, editedValues);
if (modifiedFeature != null) {
featureShape.setFeature(modifiedFeature);
}
}
}
}
if (object instanceof IInfoShape) {
IInfoShape infoShape = (IInfoShape) object;
msg = infoShape.getInfo();
}
if (msg != null) {
if (msg.trim().length() == 0) {
msg = "No additional info available";
}
JOptionPane.showMessageDialog(parent, msg);
event.consume();
}
}
}
}