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();
//
// GWT.log("LIST CUSTOM LAYERS: " + result.getListCustomLayers());
// if (result.getListCustomLayers() != null && result.getListCustomLayers().size() > 0) {
// mainPanel.setCustomLayers(result.getListCustomLayers());
// }
loadConfigureduGroupedLayersForUCD();
@ -333,7 +328,7 @@ public class GeoportalDataViewer implements EntryPoint {
@Override
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) {
Map<String, GCubeCollection> collections = viewerConfiguration.getAvailableCollections();
@ -365,7 +360,7 @@ public class GeoportalDataViewer implements EntryPoint {
@Override
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) {
Map<String, GCubeCollection> collections = viewerConfiguration.getAvailableCollections();

View File

@ -342,6 +342,16 @@ public class GeonaDataViewMainPanel extends Composite {
}
}, 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.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;
/**
@ -49,8 +48,8 @@ public class CrossFilteringLayerPanel extends Composite {
public static String COLORSCALERANGE = "COLORSCALERANGE";
//@UiField
//WellForm panelContainer;
// @UiField
// WellForm panelContainer;
@UiField
Fieldset fieldSet;
@ -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,70 +191,101 @@ 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;
final HashMap<String, SelectableItem> mapSelectableFeatures = new HashMap<String, CrossFilteringLayerPanel.SelectableItem>();
if (mapSelectableFeatures == null) {
mapSelectableFeatures = new HashMap<String, SelectableItem>();
HashMap<String, SelectableItem> mapFeatures = new HashMap<String, SelectableItem>();
// if (mapSelectableFeatures.isEmpty()) {
for (LayerIDV layerIDV : layersIDV) {
if (layerIDV instanceof CrossFilteringLayerDV) {
CrossFilteringLayerDV crossFilteringLayer = (CrossFilteringLayerDV) layerIDV;
String wfsURL = crossFilteringLayer.getWFS_URL();
RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, wfsURL);
LayerIDV layerIDV = layersIDV.get(0); // Expected one
try {
if (layerIDV instanceof CrossFilteringLayerDV) {
CrossFilteringLayerDV crossFilteringLayer = (CrossFilteringLayerDV) layerIDV;
String wfsURL = crossFilteringLayer.getWFS_URL();
Request response = builder.sendRequest(null, new RequestCallback() {
public void onError(Request request, Throwable exception) {
// Code omitted for clarity
}
if (selectedItem != null) {
public void onResponseReceived(Request request, Response response) {
JSONString json = new JSONString(response.getText());
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());
String cqlFilterValue = crossFilteringLayer.getTable_parent_key_field() + "=" + selectedItem.getKey();
wfsURL += "&CQL_FILTER=" + URL.encode(cqlFilterValue);
parentKey = parentKey == null ? "" : parentKey;
}
GWT.log("wfsURL request: " + wfsURL);
RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, wfsURL);
SelectableItem selectableItem = new SelectableItem(key, parentKey, itemField,
crossFilteringLayer.getName());
try {
String mapKey = "root_" + parentKey + key;
mapFeatures.put(mapKey, selectableItem);
}
}
});
} catch (RequestException e) {
Request response = builder.sendRequest(null, new RequestCallback() {
public void onError(Request request, Throwable exception) {
// 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);
// mapInnestedFeatures.put(level, mapSelectableFeatures);
// } else {
//
// 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) {
if (layersIDV == null)
@ -268,26 +298,50 @@ 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);
fieldSet.add(cg);
}
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);
}
}

View File

@ -114,12 +114,6 @@ public class OverlayCustomLayerPanel extends Composite {
@Override
public void onValueChange(ValueChangeEvent<Boolean> event) {
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()) {
// OPEN COLLECTION
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
* @return the geo json
*/
public static GeoJson buildGeoJSON(MAP_PROJECTION projection, String geoJSONString) {
public static GeoJson buildGeoJSON(MAP_PROJECTION projection) {
GeoJsonFeatureOptions fo = new GeoJsonFeatureOptions();
ProjectionOptions projectionOptions = new ProjectionOptions();
projectionOptions.setCode(projection.getName());
@ -48,7 +48,7 @@ public class OLGeoJSONUtil {
* @return the feature[]
*/
public static Feature[] readGeoJsonFeatures(MAP_PROJECTION projection, String geoJSONString) {
GeoJson geoJson = buildGeoJSON(projection, geoJSONString);
GeoJson geoJson = buildGeoJSON(projection);
return geoJson.readFeatures(geoJSONString);
}

View File

@ -508,19 +508,6 @@ public class GeoportalDataViewerServiceImpl extends RemoteServiceServlet impleme
GCubeCollection coll = new GCubeCollection();
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
// user credentials