|
|
|
@ -28,14 +28,13 @@ import com.google.gwt.http.client.RequestBuilder;
|
|
|
|
|
import com.google.gwt.http.client.RequestCallback;
|
|
|
|
|
import com.google.gwt.http.client.RequestException;
|
|
|
|
|
import com.google.gwt.http.client.Response;
|
|
|
|
|
import com.google.gwt.json.client.JSONParser;
|
|
|
|
|
import com.google.gwt.json.client.JSONString;
|
|
|
|
|
import com.google.gwt.json.client.JSONValue;
|
|
|
|
|
import com.google.gwt.http.client.URL;
|
|
|
|
|
import com.google.gwt.uibinder.client.UiBinder;
|
|
|
|
|
import com.google.gwt.uibinder.client.UiField;
|
|
|
|
|
import com.google.gwt.user.client.ui.Composite;
|
|
|
|
|
import com.google.gwt.user.client.ui.Widget;
|
|
|
|
|
|
|
|
|
|
import jsinterop.base.JsPropertyMap;
|
|
|
|
|
import ol.Feature;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@ -65,10 +64,10 @@ public class CrossFilteringLayerPanel extends Composite {
|
|
|
|
|
|
|
|
|
|
private LayerItem layerItem;
|
|
|
|
|
|
|
|
|
|
private LinkedHashMap<Integer, HashMap<String, SelectableItem>> mapInnestedFeatures = new LinkedHashMap<Integer, HashMap<String, SelectableItem>>();
|
|
|
|
|
|
|
|
|
|
private LinkedHashMap<Integer, List<? extends LayerIDV>> mapInnestedFiltering = new LinkedHashMap<Integer, List<? extends LayerIDV>>();
|
|
|
|
|
|
|
|
|
|
private LinkedHashMap<Integer, HashMap<String, SelectableItem>> mapInnestedFeatures = new LinkedHashMap<Integer, HashMap<String, SelectableItem>>();
|
|
|
|
|
|
|
|
|
|
private LinkedHashMap<Integer, List<ListBox>> mapInnestedListBoxes = new LinkedHashMap<Integer, List<ListBox>>();
|
|
|
|
|
|
|
|
|
|
private GroupedLayersDV<? extends LayerIDV> groupedLayersDV;
|
|
|
|
@ -192,26 +191,40 @@ public class CrossFilteringLayerPanel extends Composite {
|
|
|
|
|
addListBoxesLevelToPanel(theLevel, mapInnestedFiltering.get(theLevel));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// filleSelectableLevel(level, mapInnestedFiltering.get(level),
|
|
|
|
|
// mapInnestedListBoxes.get(level));
|
|
|
|
|
filleSelectableLevel(level, null);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void filleSelectableLevel(int level, List<? extends LayerIDV> layersIDV, List<ListBox> listBoxes) {
|
|
|
|
|
private void filleSelectableLevel(int level, SelectableItem selectedItem) {
|
|
|
|
|
|
|
|
|
|
//HashMap<String, SelectableItem> mapOfFeatureAtLevel = mapInnestedFeatures.get(level);
|
|
|
|
|
List<? extends LayerIDV> layersIDV = mapInnestedFiltering.get(level);
|
|
|
|
|
List<ListBox> listBoxes = mapInnestedListBoxes.get(level);
|
|
|
|
|
|
|
|
|
|
if (layersIDV == null)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
HashMap<String, SelectableItem> mapSelectableFeatures = mapInnestedFeatures.get(level);
|
|
|
|
|
// final HashMap<String, SelectableItem> mapSelectableFeatures = mapOfFeatureAtLevel == null
|
|
|
|
|
// ? new HashMap<String, SelectableItem>()
|
|
|
|
|
// : mapOfFeatureAtLevel;
|
|
|
|
|
|
|
|
|
|
if (mapSelectableFeatures == null) {
|
|
|
|
|
mapSelectableFeatures = new HashMap<String, SelectableItem>();
|
|
|
|
|
HashMap<String, SelectableItem> mapFeatures = new HashMap<String, SelectableItem>();
|
|
|
|
|
final HashMap<String, SelectableItem> mapSelectableFeatures = new HashMap<String, CrossFilteringLayerPanel.SelectableItem>();
|
|
|
|
|
|
|
|
|
|
// if (mapSelectableFeatures.isEmpty()) {
|
|
|
|
|
|
|
|
|
|
LayerIDV layerIDV = layersIDV.get(0); // Expected one
|
|
|
|
|
|
|
|
|
|
for (LayerIDV layerIDV : layersIDV) {
|
|
|
|
|
if (layerIDV instanceof CrossFilteringLayerDV) {
|
|
|
|
|
CrossFilteringLayerDV crossFilteringLayer = (CrossFilteringLayerDV) layerIDV;
|
|
|
|
|
String wfsURL = crossFilteringLayer.getWFS_URL();
|
|
|
|
|
|
|
|
|
|
if (selectedItem != null) {
|
|
|
|
|
|
|
|
|
|
String cqlFilterValue = crossFilteringLayer.getTable_parent_key_field() + "=" + selectedItem.getKey();
|
|
|
|
|
wfsURL += "&CQL_FILTER=" + URL.encode(cqlFilterValue);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
GWT.log("wfsURL request: " + wfsURL);
|
|
|
|
|
RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, wfsURL);
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
@ -222,24 +235,33 @@ public class CrossFilteringLayerPanel extends Composite {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void onResponseReceived(Request request, Response response) {
|
|
|
|
|
JSONString json = new JSONString(response.getText());
|
|
|
|
|
JSONValue parser = JSONParser.parse(response.getText());
|
|
|
|
|
GWT.log("wfsURL response: " + response.getText());
|
|
|
|
|
Feature[] features = OLGeoJSONUtil.readGeoJsonFeatures(MAP_PROJECTION.EPSG_4326,
|
|
|
|
|
response.getText());
|
|
|
|
|
|
|
|
|
|
for (Feature feature : features) {
|
|
|
|
|
String key = feature.get(crossFilteringLayer.getTable_key_field());
|
|
|
|
|
String parentKey = feature.get(crossFilteringLayer.getTable_parent_key_field());
|
|
|
|
|
String itemField = feature.get(crossFilteringLayer.getTable_show_field());
|
|
|
|
|
JsPropertyMap<Object> properties = feature.getProperties();
|
|
|
|
|
Object key = properties.get(crossFilteringLayer.getTable_key_field());
|
|
|
|
|
Object itemField = properties.get(crossFilteringLayer.getTable_show_field());
|
|
|
|
|
|
|
|
|
|
Object parentKey = null;
|
|
|
|
|
if (crossFilteringLayer.getTable_parent_key_field() != null
|
|
|
|
|
&& !crossFilteringLayer.getTable_parent_key_field().isEmpty())
|
|
|
|
|
parentKey = properties.get(crossFilteringLayer.getTable_parent_key_field());
|
|
|
|
|
|
|
|
|
|
parentKey = parentKey == null ? "" : parentKey;
|
|
|
|
|
|
|
|
|
|
SelectableItem selectableItem = new SelectableItem(key, parentKey, itemField,
|
|
|
|
|
SelectableItem selectableItem = new SelectableItem(key + "", parentKey + "", itemField + "",
|
|
|
|
|
crossFilteringLayer.getName());
|
|
|
|
|
GWT.log("select item: " + selectableItem);
|
|
|
|
|
|
|
|
|
|
String mapKey = "root_" + parentKey + key;
|
|
|
|
|
mapFeatures.put(mapKey, selectableItem);
|
|
|
|
|
String pathFeatureKey = pathFeatureKey(selectableItem);
|
|
|
|
|
mapSelectableFeatures.put(pathFeatureKey, selectableItem);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
mapInnestedFeatures.put(level, mapSelectableFeatures);
|
|
|
|
|
String placholder = placeholderLayer(layersIDV.get(0)); // Expected one
|
|
|
|
|
fillListBoxLevel(level, mapSelectableFeatures, listBoxes, placholder);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
@ -247,13 +269,21 @@ public class CrossFilteringLayerPanel extends Composite {
|
|
|
|
|
// Code omitted for clarity
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
mapSelectableFeatures.putAll(mapFeatures);
|
|
|
|
|
|
|
|
|
|
// } else {
|
|
|
|
|
//
|
|
|
|
|
// String placholder = placeholderLayer(layersIDV.get(0)); // Expected one
|
|
|
|
|
// fillListBoxLevel(level, mapInnestedFeatures.get(level), listBoxes, placholder);
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fillListBoxLevel(level, mapSelectableFeatures, listBoxes);
|
|
|
|
|
// mapInnestedFeatures.put(level, mapSelectableFeatures);
|
|
|
|
|
private String pathFeatureKey(SelectableItem selectableItem) {
|
|
|
|
|
return "root_" + selectableItem.getParentKey() + "_"+selectableItem.getKey();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private String placeholderLayer(LayerIDV layersIDV) {
|
|
|
|
|
return "Select " + layersIDV.getTitle() + "...";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void addListBoxesLevelToPanel(int level, List<? extends LayerIDV> layersIDV) {
|
|
|
|
@ -268,9 +298,10 @@ public class CrossFilteringLayerPanel extends Composite {
|
|
|
|
|
ControlLabel cl = new ControlLabel(layerIDV.getTitle());
|
|
|
|
|
Controls controls = new Controls();
|
|
|
|
|
ListBox listBox = new ListBox();
|
|
|
|
|
listBox.addItem("Select " + layerIDV.getTitle() + " ...");
|
|
|
|
|
String placeholder = placeholderLayer(layerIDV);
|
|
|
|
|
listBox.addItem(placeholder);
|
|
|
|
|
setEnabledBox(listBox, false);
|
|
|
|
|
listBoxes.add(listBox);
|
|
|
|
|
|
|
|
|
|
controls.add(listBox);
|
|
|
|
|
cg.add(cl);
|
|
|
|
|
cg.add(controls);
|
|
|
|
@ -281,13 +312,36 @@ public class CrossFilteringLayerPanel extends Composite {
|
|
|
|
|
mapInnestedListBoxes.put(level, listBoxes);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void setEnabledBox(ListBox listBox, boolean bool) {
|
|
|
|
|
listBox.setEnabled(bool);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void clearListBox(ListBox listBox, boolean bool) {
|
|
|
|
|
listBox.setEnabled(bool);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void resetListBoxLevel(int level) {
|
|
|
|
|
|
|
|
|
|
List<ListBox> listBoxes = mapInnestedListBoxes.get(level);
|
|
|
|
|
if(listBoxes!=null) {
|
|
|
|
|
for (ListBox listBox : listBoxes) {
|
|
|
|
|
listBox.clear();
|
|
|
|
|
setEnabledBox(listBox, false);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void fillListBoxLevel(int level, HashMap<String, SelectableItem> mapSelectableFeatures,
|
|
|
|
|
List<ListBox> listBoxes) {
|
|
|
|
|
List<ListBox> listBoxes, String placeholder) {
|
|
|
|
|
GWT.log("fillBox level: " + level + " map: " + mapSelectableFeatures);
|
|
|
|
|
|
|
|
|
|
if (mapSelectableFeatures == null)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
ListBox listBox = listBoxes.get(0); // Expected one
|
|
|
|
|
listBox.clear();
|
|
|
|
|
listBox.addItem(placeholder);
|
|
|
|
|
listBox.getElement().getFirstChildElement().setAttribute("disabled", "disabled");
|
|
|
|
|
|
|
|
|
|
for (String key : mapSelectableFeatures.keySet()) {
|
|
|
|
|
SelectableItem selItem = mapSelectableFeatures.get(key);
|
|
|
|
@ -298,13 +352,30 @@ public class CrossFilteringLayerPanel extends Composite {
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void onChange(ChangeEvent event) {
|
|
|
|
|
loadInnerLevel(level);
|
|
|
|
|
loadInnerLevel(level, listBox.getSelectedValue());
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
setEnabledBox(listBox, true);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void loadInnerLevel(int level) {
|
|
|
|
|
// TODO Auto-generated method stub
|
|
|
|
|
private void loadInnerLevel(int level, String selectableItemValue) {
|
|
|
|
|
GWT.log("selected level " + level + " selectableItemValue " + selectableItemValue);
|
|
|
|
|
HashMap<String, SelectableItem> mapSelectableItem = mapInnestedFeatures.get(level);
|
|
|
|
|
SelectableItem selectedItem = mapSelectableItem.get(selectableItemValue);
|
|
|
|
|
|
|
|
|
|
GWT.log("selected selectableItem " + selectedItem);
|
|
|
|
|
int innerLevel = level + 1;
|
|
|
|
|
List<? extends LayerIDV> selectedLayers = mapInnestedFiltering.get(innerLevel);
|
|
|
|
|
|
|
|
|
|
//if layer filtering exists at this level
|
|
|
|
|
if (selectedLayers != null) {
|
|
|
|
|
|
|
|
|
|
List<ListBox> selectedListBoxes = mapInnestedListBoxes.get(innerLevel);
|
|
|
|
|
GWT.log("loading inner layers " + selectedLayers);
|
|
|
|
|
GWT.log("loading selectedListBoxes " + selectedListBoxes);
|
|
|
|
|
filleSelectableLevel(innerLevel, selectedItem);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|