in progress cross filtering

This commit is contained in:
Francesco Mangiacrapa 2023-05-26 17:49:59 +02:00
parent a208b37791
commit 9d48e78fac
6 changed files with 140 additions and 83 deletions

View File

@ -285,11 +285,6 @@ public class GeoportalDataViewer implements EntryPoint {
} }
mainPanel.openCollectionMenu(); mainPanel.openCollectionMenu();
//
// GWT.log("LIST CUSTOM LAYERS: " + result.getListCustomLayers());
// if (result.getListCustomLayers() != null && result.getListCustomLayers().size() > 0) {
// mainPanel.setCustomLayers(result.getListCustomLayers());
// }
loadConfigureduGroupedLayersForUCD(); loadConfigureduGroupedLayersForUCD();
@ -333,7 +328,7 @@ public class GeoportalDataViewer implements EntryPoint {
@Override @Override
public void onSuccess(Map<String, List<GroupedLayersDV<? extends LayerIDV>>> result) { public void onSuccess(Map<String, List<GroupedLayersDV<? extends LayerIDV>>> result) {
GWT.log(GEOPORTAL_DATA_HANDLER.geoportal_grouped_overlay_layers +" returned: "+result); GWT.log(GEOPORTAL_DATA_HANDLER.geoportal_grouped_overlay_layers + " returned: " + result);
if (result != null && result.size() > 0) { if (result != null && result.size() > 0) {
Map<String, GCubeCollection> collections = viewerConfiguration.getAvailableCollections(); Map<String, GCubeCollection> collections = viewerConfiguration.getAvailableCollections();
@ -365,7 +360,7 @@ public class GeoportalDataViewer implements EntryPoint {
@Override @Override
public void onSuccess(Map<String, List<GroupedLayersDV<? extends LayerIDV>>> result) { public void onSuccess(Map<String, List<GroupedLayersDV<? extends LayerIDV>>> result) {
GWT.log(GEOPORTAL_DATA_HANDLER.geoportal_grouped_cross_filtering+" returned: "+result); GWT.log(GEOPORTAL_DATA_HANDLER.geoportal_grouped_cross_filtering + " returned: " + result);
if (result != null && result.size() > 0) { if (result != null && result.size() > 0) {
Map<String, GCubeCollection> collections = viewerConfiguration.getAvailableCollections(); Map<String, GCubeCollection> collections = viewerConfiguration.getAvailableCollections();

View File

@ -342,6 +342,16 @@ public class GeonaDataViewMainPanel extends Composite {
} }
}, ClickEvent.getType()); }, ClickEvent.getType());
linkCrossFilteringLayers.addDomHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
// event.preventDefault();
event.stopPropagation();
}
}, ClickEvent.getType());
} }
/** /**

View File

@ -28,14 +28,13 @@ import com.google.gwt.http.client.RequestBuilder;
import com.google.gwt.http.client.RequestCallback; import com.google.gwt.http.client.RequestCallback;
import com.google.gwt.http.client.RequestException; import com.google.gwt.http.client.RequestException;
import com.google.gwt.http.client.Response; import com.google.gwt.http.client.Response;
import com.google.gwt.json.client.JSONParser; import com.google.gwt.http.client.URL;
import com.google.gwt.json.client.JSONString;
import com.google.gwt.json.client.JSONValue;
import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Widget; import com.google.gwt.user.client.ui.Widget;
import jsinterop.base.JsPropertyMap;
import ol.Feature; import ol.Feature;
/** /**
@ -49,8 +48,8 @@ public class CrossFilteringLayerPanel extends Composite {
public static String COLORSCALERANGE = "COLORSCALERANGE"; public static String COLORSCALERANGE = "COLORSCALERANGE";
//@UiField // @UiField
//WellForm panelContainer; // WellForm panelContainer;
@UiField @UiField
Fieldset fieldSet; Fieldset fieldSet;
@ -65,10 +64,10 @@ public class CrossFilteringLayerPanel extends Composite {
private LayerItem layerItem; 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, 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 LinkedHashMap<Integer, List<ListBox>> mapInnestedListBoxes = new LinkedHashMap<Integer, List<ListBox>>();
private GroupedLayersDV<? extends LayerIDV> groupedLayersDV; private GroupedLayersDV<? extends LayerIDV> groupedLayersDV;
@ -192,70 +191,101 @@ public class CrossFilteringLayerPanel extends Composite {
addListBoxesLevelToPanel(theLevel, mapInnestedFiltering.get(theLevel)); addListBoxesLevelToPanel(theLevel, mapInnestedFiltering.get(theLevel));
} }
// filleSelectableLevel(level, mapInnestedFiltering.get(level), filleSelectableLevel(level, null);
// mapInnestedListBoxes.get(level));
} }
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) if (layersIDV == null)
return; return;
HashMap<String, SelectableItem> mapSelectableFeatures = mapInnestedFeatures.get(level); // final HashMap<String, SelectableItem> mapSelectableFeatures = mapOfFeatureAtLevel == null
// ? new HashMap<String, SelectableItem>()
// : mapOfFeatureAtLevel;
final HashMap<String, SelectableItem> mapSelectableFeatures = new HashMap<String, CrossFilteringLayerPanel.SelectableItem>();
if (mapSelectableFeatures == null) { // if (mapSelectableFeatures.isEmpty()) {
mapSelectableFeatures = new HashMap<String, SelectableItem>();
HashMap<String, SelectableItem> mapFeatures = new HashMap<String, SelectableItem>();
for (LayerIDV layerIDV : layersIDV) { LayerIDV layerIDV = layersIDV.get(0); // Expected one
if (layerIDV instanceof CrossFilteringLayerDV) {
CrossFilteringLayerDV crossFilteringLayer = (CrossFilteringLayerDV) layerIDV;
String wfsURL = crossFilteringLayer.getWFS_URL();
RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, wfsURL);
try { if (layerIDV instanceof CrossFilteringLayerDV) {
CrossFilteringLayerDV crossFilteringLayer = (CrossFilteringLayerDV) layerIDV;
String wfsURL = crossFilteringLayer.getWFS_URL();
Request response = builder.sendRequest(null, new RequestCallback() { if (selectedItem != null) {
public void onError(Request request, Throwable exception) {
// Code omitted for clarity
}
public void onResponseReceived(Request request, Response response) { String cqlFilterValue = crossFilteringLayer.getTable_parent_key_field() + "=" + selectedItem.getKey();
JSONString json = new JSONString(response.getText()); wfsURL += "&CQL_FILTER=" + URL.encode(cqlFilterValue);
JSONValue parser = JSONParser.parse(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());
parentKey = parentKey == null ? "" : parentKey; }
GWT.log("wfsURL request: " + wfsURL);
RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, wfsURL);
SelectableItem selectableItem = new SelectableItem(key, parentKey, itemField, try {
crossFilteringLayer.getName());
String mapKey = "root_" + parentKey + key; Request response = builder.sendRequest(null, new RequestCallback() {
mapFeatures.put(mapKey, selectableItem); public void onError(Request request, Throwable exception) {
}
}
});
} catch (RequestException e) {
// Code omitted for clarity // Code omitted for clarity
} }
}
public void onResponseReceived(Request request, Response response) {
GWT.log("wfsURL response: " + response.getText());
Feature[] features = OLGeoJSONUtil.readGeoJsonFeatures(MAP_PROJECTION.EPSG_4326,
response.getText());
for (Feature feature : features) {
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 + "",
crossFilteringLayer.getName());
GWT.log("select item: " + 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);
}
});
} catch (RequestException e) {
// Code omitted for clarity
} }
mapSelectableFeatures.putAll(mapFeatures);
} }
fillListBoxLevel(level, mapSelectableFeatures, listBoxes); // } else {
// mapInnestedFeatures.put(level, mapSelectableFeatures); //
// String placholder = placeholderLayer(layersIDV.get(0)); // Expected one
// fillListBoxLevel(level, mapInnestedFeatures.get(level), listBoxes, placholder);
// }
} }
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) { private void addListBoxesLevelToPanel(int level, List<? extends LayerIDV> layersIDV) {
if (layersIDV == null) if (layersIDV == null)
@ -268,26 +298,50 @@ public class CrossFilteringLayerPanel extends Composite {
ControlLabel cl = new ControlLabel(layerIDV.getTitle()); ControlLabel cl = new ControlLabel(layerIDV.getTitle());
Controls controls = new Controls(); Controls controls = new Controls();
ListBox listBox = new ListBox(); ListBox listBox = new ListBox();
listBox.addItem("Select " + layerIDV.getTitle() + " ..."); String placeholder = placeholderLayer(layerIDV);
listBox.addItem(placeholder);
setEnabledBox(listBox, false);
listBoxes.add(listBox); listBoxes.add(listBox);
controls.add(listBox); controls.add(listBox);
cg.add(cl); cg.add(cl);
cg.add(controls); cg.add(controls);
fieldSet.add(cg); fieldSet.add(cg);
} }
mapInnestedListBoxes.put(level, listBoxes); 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, 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) if (mapSelectableFeatures == null)
return; return;
ListBox listBox = listBoxes.get(0); // Expected one ListBox listBox = listBoxes.get(0); // Expected one
listBox.clear();
listBox.addItem(placeholder);
listBox.getElement().getFirstChildElement().setAttribute("disabled", "disabled");
for (String key : mapSelectableFeatures.keySet()) { for (String key : mapSelectableFeatures.keySet()) {
SelectableItem selItem = mapSelectableFeatures.get(key); SelectableItem selItem = mapSelectableFeatures.get(key);
@ -298,13 +352,30 @@ public class CrossFilteringLayerPanel extends Composite {
@Override @Override
public void onChange(ChangeEvent event) { public void onChange(ChangeEvent event) {
loadInnerLevel(level); loadInnerLevel(level, listBox.getSelectedValue());
} }
}); });
setEnabledBox(listBox, true);
} }
private void loadInnerLevel(int level) { private void loadInnerLevel(int level, String selectableItemValue) {
// TODO Auto-generated method stub 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);
}
} }

View File

@ -114,12 +114,6 @@ public class OverlayCustomLayerPanel extends Composite {
@Override @Override
public void onValueChange(ValueChangeEvent<Boolean> event) { public void onValueChange(ValueChangeEvent<Boolean> event) {
GWT.log("CustomLayer selector flag changed to value : " + event.toDebugString()); GWT.log("CustomLayer selector flag changed to value : " + event.toDebugString());
// String collectionID = ((CheckBox) event.getSource()).getId().replace("gcubeCollectionSelector_",
// "");
// GWT.log("Collection ID is : " + collectionID + ", event value: " +
// event.getValue());
if (event.getValue()) { if (event.getValue()) {
// OPEN COLLECTION // OPEN COLLECTION
applicationBus.fireEvent(new OverlayCustomLayerToMapEvent(layerItem, OverlayCustomLayerToMapEvent.ACTION_TYPE.VISIBILITY, true)); applicationBus.fireEvent(new OverlayCustomLayerToMapEvent(layerItem, OverlayCustomLayerToMapEvent.ACTION_TYPE.VISIBILITY, true));

View File

@ -26,7 +26,7 @@ public class OLGeoJSONUtil {
* @param geoJSONString the geo JSON string * @param geoJSONString the geo JSON string
* @return the geo json * @return the geo json
*/ */
public static GeoJson buildGeoJSON(MAP_PROJECTION projection, String geoJSONString) { public static GeoJson buildGeoJSON(MAP_PROJECTION projection) {
GeoJsonFeatureOptions fo = new GeoJsonFeatureOptions(); GeoJsonFeatureOptions fo = new GeoJsonFeatureOptions();
ProjectionOptions projectionOptions = new ProjectionOptions(); ProjectionOptions projectionOptions = new ProjectionOptions();
projectionOptions.setCode(projection.getName()); projectionOptions.setCode(projection.getName());
@ -48,7 +48,7 @@ public class OLGeoJSONUtil {
* @return the feature[] * @return the feature[]
*/ */
public static Feature[] readGeoJsonFeatures(MAP_PROJECTION projection, String geoJSONString) { public static Feature[] readGeoJsonFeatures(MAP_PROJECTION projection, String geoJSONString) {
GeoJson geoJson = buildGeoJSON(projection, geoJSONString); GeoJson geoJson = buildGeoJSON(projection);
return geoJson.readFeatures(geoJSONString); return geoJson.readFeatures(geoJSONString);
} }

View File

@ -508,19 +508,6 @@ public class GeoportalDataViewerServiceImpl extends RemoteServiceServlet impleme
GCubeCollection coll = new GCubeCollection(); GCubeCollection coll = new GCubeCollection();
coll.setUcd(ucdDV); coll.setUcd(ucdDV);
// // Loading geoportal_grouped_overlay_layers if exists
// GEOPORTAL_DATA_HANDLER theHandler = GEOPORTAL_DATA_HANDLER.geoportal_grouped_overlay_layers;
// List<HandlerDeclaration> handlers = u.getHandlersByType(theHandler.getType());
//
// if (handlers != null && handlers.size() > 0) {
// // Loading Handler gcube_profiles
// HandlerDeclaration handler = handlers.get(0);
// List<GroupedLayersDV> listCustomLayers = getGroupedOverlayLayers(u, handler,
// GEOPORTAL_DATA_HANDLER.geoportal_grouped_overlay_layers);
// config.setGroupCustomLayers(listCustomLayers);
// } else
// LOG.warn("No handler " + theHandler + "found into UCD " + u.getId() + ", continue...");
// TODO TO Check index flag should be in configuration or evaluated according to // TODO TO Check index flag should be in configuration or evaluated according to
// user credentials // user credentials