2020-10-23 18:18:06 +02:00
|
|
|
package org.gcube.portlets.user.geoportaldataviewer.client;
|
|
|
|
|
2023-01-16 14:08:23 +01:00
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.Collections;
|
2023-01-31 15:24:45 +01:00
|
|
|
import java.util.HashMap;
|
2021-12-14 15:26:09 +01:00
|
|
|
import java.util.LinkedHashMap;
|
2021-11-12 12:37:15 +01:00
|
|
|
import java.util.List;
|
2022-10-13 16:53:33 +02:00
|
|
|
import java.util.Set;
|
2020-11-03 13:09:08 +01:00
|
|
|
|
2021-12-21 16:52:35 +01:00
|
|
|
import org.gcube.application.geoportalcommon.shared.GNADataViewerConfigProfile;
|
2022-10-18 17:32:12 +02:00
|
|
|
import org.gcube.application.geoportalcommon.shared.GeoportalItemReferences;
|
2023-01-31 15:24:45 +01:00
|
|
|
import org.gcube.application.geoportalcommon.shared.geoportal.geojson.GeoJSON;
|
2022-10-14 15:31:32 +02:00
|
|
|
import org.gcube.application.geoportalcommon.shared.geoportal.materialization.IndexLayerDV;
|
2023-01-31 15:24:45 +01:00
|
|
|
import org.gcube.application.geoportalcommon.shared.geoportal.project.ProjectDV;
|
2022-11-03 17:03:15 +01:00
|
|
|
import org.gcube.application.geoportalcommon.shared.geoportal.project.RelationshipDV;
|
2022-10-11 15:00:39 +02:00
|
|
|
import org.gcube.application.geoportalcommon.shared.geoportal.view.ProjectView;
|
2021-09-01 12:51:06 +02:00
|
|
|
import org.gcube.portlets.user.geoportaldataviewer.client.GeoportalDataViewerConstants.MAP_PROJECTION;
|
2021-08-31 18:21:17 +02:00
|
|
|
import org.gcube.portlets.user.geoportaldataviewer.client.GeoportalDataViewerConstants.MapEventType;
|
2022-11-09 11:42:44 +01:00
|
|
|
import org.gcube.portlets.user.geoportaldataviewer.client.events.AddLayerToMapEvent;
|
|
|
|
import org.gcube.portlets.user.geoportaldataviewer.client.events.AddLayerToMapEventHandler;
|
2020-11-19 15:19:27 +01:00
|
|
|
import org.gcube.portlets.user.geoportaldataviewer.client.events.AddedLayerToMapEvent;
|
2021-10-14 11:34:04 +02:00
|
|
|
import org.gcube.portlets.user.geoportaldataviewer.client.events.AddedLayerToMapEvent.LAYER_TYPE;
|
2020-11-19 15:19:27 +01:00
|
|
|
import org.gcube.portlets.user.geoportaldataviewer.client.events.AddedLayerToMapEventHandler;
|
2021-11-12 12:37:15 +01:00
|
|
|
import org.gcube.portlets.user.geoportaldataviewer.client.events.ChangeMapLayerEvent;
|
|
|
|
import org.gcube.portlets.user.geoportaldataviewer.client.events.ChangeMapLayerEventHandler;
|
2020-11-19 15:19:27 +01:00
|
|
|
import org.gcube.portlets.user.geoportaldataviewer.client.events.ClosedViewDetailsEvent;
|
|
|
|
import org.gcube.portlets.user.geoportaldataviewer.client.events.ClosedViewDetailsEventHandler;
|
2021-10-14 11:34:04 +02:00
|
|
|
import org.gcube.portlets.user.geoportaldataviewer.client.events.DoActionOnDetailLayersEvent;
|
|
|
|
import org.gcube.portlets.user.geoportaldataviewer.client.events.DoActionOnDetailLayersEvent.DO_LAYER_ACTION;
|
2021-10-15 17:51:09 +02:00
|
|
|
import org.gcube.portlets.user.geoportaldataviewer.client.events.DoActionOnDetailLayersEvent.SwapLayer;
|
2021-10-14 11:34:04 +02:00
|
|
|
import org.gcube.portlets.user.geoportaldataviewer.client.events.DoActionOnDetailLayersEventHandler;
|
2021-09-01 16:26:07 +02:00
|
|
|
import org.gcube.portlets.user.geoportaldataviewer.client.events.MapExtentToEvent;
|
|
|
|
import org.gcube.portlets.user.geoportaldataviewer.client.events.MapExtentToEventHandler;
|
2020-11-19 15:19:27 +01:00
|
|
|
import org.gcube.portlets.user.geoportaldataviewer.client.events.QueryDataEvent;
|
2021-12-14 15:26:09 +01:00
|
|
|
import org.gcube.portlets.user.geoportaldataviewer.client.events.SearchPerformedEvent;
|
|
|
|
import org.gcube.portlets.user.geoportaldataviewer.client.events.SearchPerformedEventHandler;
|
2020-11-03 13:09:08 +01:00
|
|
|
import org.gcube.portlets.user.geoportaldataviewer.client.events.ShowDetailsEvent;
|
2022-12-22 11:59:07 +01:00
|
|
|
import org.gcube.portlets.user.geoportaldataviewer.client.events.ShowDetailsEvent.EVENT_SOURCE;
|
2020-11-03 13:09:08 +01:00
|
|
|
import org.gcube.portlets.user.geoportaldataviewer.client.events.ShowDetailsEventHandler;
|
2023-01-12 11:00:09 +01:00
|
|
|
import org.gcube.portlets.user.geoportaldataviewer.client.events.ShowPopupOnCentroidEvent;
|
|
|
|
import org.gcube.portlets.user.geoportaldataviewer.client.events.ShowPopupOnCentroidEventHandler;
|
2022-11-03 17:03:15 +01:00
|
|
|
import org.gcube.portlets.user.geoportaldataviewer.client.events.TimelineProjectRelationsEvent;
|
|
|
|
import org.gcube.portlets.user.geoportaldataviewer.client.events.TimelineProjectRelationsEvent.EVENT_TYPE;
|
|
|
|
import org.gcube.portlets.user.geoportaldataviewer.client.events.TimelineProjectRelationsEventHandler;
|
2020-11-19 15:19:27 +01:00
|
|
|
import org.gcube.portlets.user.geoportaldataviewer.client.events.ZoomOutOverMinimumEvent;
|
|
|
|
import org.gcube.portlets.user.geoportaldataviewer.client.events.ZoomOutOverMinimumEventHandler;
|
2022-10-17 16:52:22 +02:00
|
|
|
import org.gcube.portlets.user.geoportaldataviewer.client.events.collections.CloseCollectionEvent;
|
|
|
|
import org.gcube.portlets.user.geoportaldataviewer.client.events.collections.CloseCollectionEventHandler;
|
2022-10-13 16:53:33 +02:00
|
|
|
import org.gcube.portlets.user.geoportaldataviewer.client.events.collections.OpenCollectionEvent;
|
|
|
|
import org.gcube.portlets.user.geoportaldataviewer.client.events.collections.OpenCollectionEventHandler;
|
2021-09-08 14:40:36 +02:00
|
|
|
import org.gcube.portlets.user.geoportaldataviewer.client.gis.ExtentWrapped;
|
2020-11-19 15:19:27 +01:00
|
|
|
import org.gcube.portlets.user.geoportaldataviewer.client.gis.MapUtils;
|
2021-11-12 14:54:54 +01:00
|
|
|
import org.gcube.portlets.user.geoportaldataviewer.client.gis.OpenLayerMap;
|
2022-11-03 17:03:15 +01:00
|
|
|
import org.gcube.portlets.user.geoportaldataviewer.client.resources.GNAImages;
|
2020-10-23 18:18:06 +02:00
|
|
|
import org.gcube.portlets.user.geoportaldataviewer.client.ui.GeonaDataViewMainPanel;
|
2022-11-08 10:45:39 +01:00
|
|
|
import org.gcube.portlets.user.geoportaldataviewer.client.ui.cms.project.relation.TimelineManagerStatus;
|
2022-10-13 16:53:33 +02:00
|
|
|
import org.gcube.portlets.user.geoportaldataviewer.client.util.ControlledCallBack;
|
2021-11-19 15:02:48 +01:00
|
|
|
import org.gcube.portlets.user.geoportaldataviewer.client.util.LoaderIcon;
|
2022-11-28 15:20:21 +01:00
|
|
|
import org.gcube.portlets.user.geoportaldataviewer.client.util.URLUtil;
|
2022-10-13 16:53:33 +02:00
|
|
|
import org.gcube.portlets.user.geoportaldataviewer.shared.GCubeCollection;
|
2022-10-17 16:52:22 +02:00
|
|
|
import org.gcube.portlets.user.geoportaldataviewer.shared.ItemFieldsResponse;
|
2022-10-13 16:53:33 +02:00
|
|
|
import org.gcube.portlets.user.geoportaldataviewer.shared.ViewerConfiguration;
|
2021-11-12 12:37:15 +01:00
|
|
|
import org.gcube.portlets.user.geoportaldataviewer.shared.gis.BaseMapLayer;
|
2020-11-19 15:19:27 +01:00
|
|
|
import org.gcube.portlets.user.geoportaldataviewer.shared.gis.GeoQuery;
|
2023-01-31 15:24:45 +01:00
|
|
|
import org.gcube.portlets.user.geoportaldataviewer.shared.gis.LayerItem;
|
2020-10-23 18:18:06 +02:00
|
|
|
|
2022-11-15 10:08:02 +01:00
|
|
|
import com.github.gwtbootstrap.client.ui.Popover;
|
|
|
|
import com.github.gwtbootstrap.client.ui.constants.Placement;
|
2020-10-23 18:18:06 +02:00
|
|
|
import com.google.gwt.core.client.EntryPoint;
|
|
|
|
import com.google.gwt.core.client.GWT;
|
|
|
|
import com.google.gwt.core.client.Scheduler;
|
|
|
|
import com.google.gwt.core.client.Scheduler.ScheduledCommand;
|
2021-07-19 18:04:14 +02:00
|
|
|
import com.google.gwt.core.client.ScriptInjector;
|
2020-10-26 11:01:07 +01:00
|
|
|
import com.google.gwt.event.logical.shared.ResizeEvent;
|
|
|
|
import com.google.gwt.event.logical.shared.ResizeHandler;
|
2020-11-03 13:09:08 +01:00
|
|
|
import com.google.gwt.event.shared.HandlerManager;
|
2022-10-24 12:23:52 +02:00
|
|
|
import com.google.gwt.user.client.Timer;
|
2020-10-26 11:01:07 +01:00
|
|
|
import com.google.gwt.user.client.Window;
|
2020-11-03 13:09:08 +01:00
|
|
|
import com.google.gwt.user.client.rpc.AsyncCallback;
|
2022-11-28 09:49:46 +01:00
|
|
|
import com.google.gwt.user.client.ui.FlowPanel;
|
2021-11-11 16:32:49 +01:00
|
|
|
import com.google.gwt.user.client.ui.HTML;
|
2022-11-28 09:49:46 +01:00
|
|
|
import com.google.gwt.user.client.ui.Image;
|
2020-10-23 18:18:06 +02:00
|
|
|
import com.google.gwt.user.client.ui.RootPanel;
|
2022-11-15 10:08:02 +01:00
|
|
|
import com.google.gwt.user.client.ui.Widget;
|
2020-10-23 18:18:06 +02:00
|
|
|
|
2020-11-19 15:19:27 +01:00
|
|
|
import ol.Coordinate;
|
2023-01-31 15:24:45 +01:00
|
|
|
import ol.Feature;
|
|
|
|
import ol.OLFactory;
|
|
|
|
import ol.format.GeoJson;
|
|
|
|
import ol.format.GeoJsonFeatureOptions;
|
|
|
|
import ol.format.GeoJsonOptions;
|
|
|
|
import ol.proj.Projection;
|
|
|
|
import ol.proj.ProjectionOptions;
|
2020-11-19 15:19:27 +01:00
|
|
|
|
2020-10-23 18:18:06 +02:00
|
|
|
/**
|
|
|
|
* Entry point classes define <code>onModuleLoad()</code>.
|
2020-10-27 16:04:34 +01:00
|
|
|
*
|
|
|
|
* @author Francesco Mangiacrapa at ISTI-CNR (francesco.mangiacrapa@isti.cnr.it)
|
|
|
|
*
|
2021-09-02 12:54:39 +02:00
|
|
|
* Oct 27, 2020
|
2020-10-23 18:18:06 +02:00
|
|
|
*/
|
|
|
|
public class GeoportalDataViewer implements EntryPoint {
|
2020-10-27 16:04:34 +01:00
|
|
|
|
2022-11-03 17:03:15 +01:00
|
|
|
public static final String DIV_TIMELINE_DATA = "timeline-data";
|
2022-11-21 15:16:36 +01:00
|
|
|
|
2022-11-14 14:12:50 +01:00
|
|
|
public static final String APP_NOTIFIER = "app-notifier";
|
2022-11-03 17:03:15 +01:00
|
|
|
|
2020-10-27 16:04:34 +01:00
|
|
|
/** The Constant APP_DIV. */
|
|
|
|
public final static String APP_DIV = "geoportal-data-viewer";
|
|
|
|
|
|
|
|
/** The ol map. */
|
2021-11-12 14:54:54 +01:00
|
|
|
// private OpenLayerMap olMap = null;
|
2020-10-27 16:04:34 +01:00
|
|
|
|
|
|
|
/** The main panel. */
|
|
|
|
private GeonaDataViewMainPanel mainPanel;
|
|
|
|
|
|
|
|
/** The param wms request. */
|
|
|
|
private String paramWmsRequest;
|
2021-09-02 12:54:39 +02:00
|
|
|
|
2020-10-27 16:04:34 +01:00
|
|
|
/** The param UUID. */
|
2021-09-02 12:54:39 +02:00
|
|
|
// private String paramUUID;
|
|
|
|
|
2020-11-19 15:19:27 +01:00
|
|
|
private String paramGeonaItemType;
|
2021-09-02 12:54:39 +02:00
|
|
|
|
2020-10-27 16:04:34 +01:00
|
|
|
/** The param layer title. */
|
|
|
|
private String paramLayerTitle;
|
2021-09-02 12:54:39 +02:00
|
|
|
|
2020-11-19 15:19:27 +01:00
|
|
|
private HandlerManager applicationBus = new HandlerManager("");
|
2021-09-02 12:54:39 +02:00
|
|
|
|
2020-10-27 16:04:34 +01:00
|
|
|
/** The layer manager. */
|
2020-11-19 15:19:27 +01:00
|
|
|
private LayerManager layerManager = new LayerManager(applicationBus);
|
|
|
|
|
|
|
|
private String paramGeonaItemID;
|
2021-09-02 12:54:39 +02:00
|
|
|
|
2021-12-21 16:52:35 +01:00
|
|
|
private GNADataViewerConfigProfile geonaDataViewerProfile;
|
2021-09-02 12:54:39 +02:00
|
|
|
|
2020-11-19 15:19:27 +01:00
|
|
|
private OLMapManager olMapMng = null;
|
2021-09-02 12:54:39 +02:00
|
|
|
|
2020-12-02 18:48:12 +01:00
|
|
|
int attempt = 0;
|
2022-10-13 16:53:33 +02:00
|
|
|
|
2022-11-03 17:03:15 +01:00
|
|
|
private LoaderIcon loaderApp = new LoaderIcon("Loading application... please wait",
|
|
|
|
new com.google.gwt.user.client.ui.Image(GNAImages.ICONS.spinnerEarth()));
|
2022-10-13 16:53:33 +02:00
|
|
|
|
2021-11-12 12:37:15 +01:00
|
|
|
private HTML attributionDiv = new HTML();
|
2022-10-13 16:53:33 +02:00
|
|
|
|
2021-11-16 14:07:59 +01:00
|
|
|
private static List<BaseMapLayer> listBaseMapLayers = null;
|
2022-10-13 16:53:33 +02:00
|
|
|
|
|
|
|
private static ViewerStatus viewerStatus = new ViewerStatus();
|
2022-11-09 11:42:44 +01:00
|
|
|
|
2022-11-08 10:45:39 +01:00
|
|
|
private TimelineManagerStatus timelineMS = new TimelineManagerStatus(applicationBus);
|
2021-09-02 12:54:39 +02:00
|
|
|
|
2022-11-08 13:55:52 +01:00
|
|
|
private boolean initApplication;
|
|
|
|
|
2023-01-31 15:24:45 +01:00
|
|
|
// A cache (Layer_ID, GeoJSON) of layer features loaded via GetFeature Request
|
|
|
|
private HashMap<String, String> layerFeaturesCache = new HashMap<String, String>();
|
|
|
|
|
2020-10-27 16:04:34 +01:00
|
|
|
/**
|
|
|
|
* This is the entry point method.
|
|
|
|
*/
|
|
|
|
public void onModuleLoad() {
|
2021-11-19 15:02:48 +01:00
|
|
|
|
|
|
|
loaderApp.getElement().addClassName("loader-gna-app");
|
|
|
|
RootPanel.get(APP_DIV).add(loaderApp);
|
2022-10-13 16:53:33 +02:00
|
|
|
|
2021-11-12 12:37:15 +01:00
|
|
|
paramWmsRequest = Window.Location.getParameter(GeoportalDataViewerConstants.GET_WMS_PARAMETER);
|
|
|
|
paramGeonaItemType = Window.Location.getParameter(GeoportalDataViewerConstants.GET_GEONA_ITEM_TYPE);
|
|
|
|
paramGeonaItemID = Window.Location.getParameter(GeoportalDataViewerConstants.GET_GEONA_ITEM_ID);
|
|
|
|
paramLayerTitle = Window.Location.getParameter(GeoportalDataViewerConstants.GET_LAYER_TITLE);
|
|
|
|
GWT.log(GeoportalDataViewerConstants.GET_WMS_PARAMETER + " = " + paramWmsRequest);
|
|
|
|
GWT.log(GeoportalDataViewerConstants.GET_GEONA_ITEM_TYPE + " = " + paramGeonaItemType);
|
|
|
|
GWT.log(GeoportalDataViewerConstants.GET_GEONA_ITEM_ID + " = " + paramGeonaItemID);
|
|
|
|
GWT.log(GeoportalDataViewerConstants.GET_LAYER_TITLE + " = " + paramLayerTitle);
|
2021-12-07 17:13:20 +01:00
|
|
|
|
2022-11-03 17:03:15 +01:00
|
|
|
// RootPanel.get(APP_DIV).add(loaderApp);
|
|
|
|
|
2022-11-08 10:45:39 +01:00
|
|
|
timelineMS.hideTimelineProjectRelations();
|
2021-07-21 17:08:45 +02:00
|
|
|
|
2022-10-13 16:53:33 +02:00
|
|
|
GeoportalDataViewerServiceAsync.Util.getInstance()
|
2022-10-27 16:18:54 +02:00
|
|
|
.getConfigListOfFieldsForSearching(new AsyncCallback<List<ItemFieldsResponse>>() {
|
2021-11-12 12:37:15 +01:00
|
|
|
|
|
|
|
@Override
|
|
|
|
public void onFailure(Throwable caught) {
|
2022-11-28 09:49:46 +01:00
|
|
|
RootPanel.get(APP_DIV).remove(loaderApp);
|
|
|
|
Window.alert(caught.getMessage());
|
2023-01-17 17:02:23 +01:00
|
|
|
RootPanel.get(APP_DIV).setHeight("800px");
|
2022-11-28 09:49:46 +01:00
|
|
|
RootPanel.get(APP_DIV).add(getGeneralErrorPanel());
|
2021-11-12 12:37:15 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2022-10-17 16:52:22 +02:00
|
|
|
public void onSuccess(List<ItemFieldsResponse> itemFieldsResult) {
|
|
|
|
GWT.log("listOfFieldsForSearching: " + itemFieldsResult);
|
2022-10-13 16:53:33 +02:00
|
|
|
|
2022-10-24 12:23:52 +02:00
|
|
|
mainPanel = new GeonaDataViewMainPanel(applicationBus, getClientHeight(), itemFieldsResult);
|
2022-10-13 16:53:33 +02:00
|
|
|
RootPanel.get(APP_DIV).add(mainPanel);
|
|
|
|
|
|
|
|
initApplication();
|
2022-10-17 16:52:22 +02:00
|
|
|
}
|
2021-11-12 12:37:15 +01:00
|
|
|
});
|
2021-07-21 17:08:45 +02:00
|
|
|
|
2021-11-16 14:07:59 +01:00
|
|
|
}
|
2021-07-21 17:08:45 +02:00
|
|
|
|
2023-01-31 15:24:45 +01:00
|
|
|
/**
|
|
|
|
* Inits the application.
|
|
|
|
*/
|
2022-10-13 16:53:33 +02:00
|
|
|
private void initApplication() {
|
2022-11-09 11:42:44 +01:00
|
|
|
|
2022-11-08 13:55:52 +01:00
|
|
|
initApplication = true;
|
2022-10-13 16:53:33 +02:00
|
|
|
|
|
|
|
Scheduler.get().scheduleDeferred(new ScheduledCommand() {
|
2021-07-21 17:08:45 +02:00
|
|
|
@Override
|
|
|
|
public void execute() {
|
2022-10-13 16:53:33 +02:00
|
|
|
|
2021-07-21 17:08:45 +02:00
|
|
|
GeoportalDataViewerServiceAsync.Util.getInstance()
|
2022-10-13 16:53:33 +02:00
|
|
|
.getInitialConfiguration(new ControlledCallBack<ViewerConfiguration>() {
|
2021-07-19 18:04:14 +02:00
|
|
|
|
|
|
|
@Override
|
|
|
|
public void onFailure(Throwable caught) {
|
2022-11-28 09:49:46 +01:00
|
|
|
RootPanel.get(APP_DIV).remove(loaderApp);
|
2021-07-19 18:04:14 +02:00
|
|
|
Window.alert(caught.getMessage());
|
2022-11-28 09:49:46 +01:00
|
|
|
RootPanel.get(APP_DIV).add(getGeneralErrorPanel());
|
2022-10-13 16:53:33 +02:00
|
|
|
}
|
2021-07-21 17:08:45 +02:00
|
|
|
|
2022-10-13 16:53:33 +02:00
|
|
|
@Override
|
|
|
|
public void after() {
|
|
|
|
RootPanel.get(APP_DIV).remove(loaderApp);
|
2020-11-19 15:19:27 +01:00
|
|
|
}
|
2021-07-19 18:04:14 +02:00
|
|
|
|
|
|
|
@Override
|
2022-10-13 16:53:33 +02:00
|
|
|
public void onSuccess(ViewerConfiguration result) {
|
|
|
|
super.onSuccess(result);
|
2021-07-21 17:08:45 +02:00
|
|
|
|
2022-10-13 16:53:33 +02:00
|
|
|
GWT.log("Received init config : " + result);
|
|
|
|
GWT.log("Loading base layers, count : " + result.getBaseLayers().size());
|
2021-07-21 17:08:45 +02:00
|
|
|
|
2022-10-13 16:53:33 +02:00
|
|
|
GeoportalDataViewer.getStatus().setConfig(result);
|
|
|
|
|
|
|
|
listBaseMapLayers = result.getBaseLayers();
|
|
|
|
mainPanel.setBaseLayers(result.getBaseLayers());
|
|
|
|
|
|
|
|
BaseMapLayer firstBaseLayer = result.getBaseLayers().get(0);
|
|
|
|
// Passing the first base map layer that will be applied as first base layer
|
|
|
|
olMapMng = new OLMapManager(mainPanel.getMapPanel().getElement().getId(),
|
|
|
|
layerManager.getLayerManagerBus(), firstBaseLayer);
|
|
|
|
OpenLayerMap olMap = olMapMng.getOLMap();
|
|
|
|
layerManager.setOLMap(olMap);
|
|
|
|
mainPanel.setMap(olMap);
|
|
|
|
|
|
|
|
updateSize();
|
|
|
|
|
|
|
|
ScriptInjector.fromUrl(
|
|
|
|
"//cdnjs.cloudflare.com/ajax/libs/nanogallery2/3.0.5/jquery.nanogallery2.min.js")
|
|
|
|
.setWindow(ScriptInjector.TOP_WINDOW).inject();
|
2022-11-03 17:03:15 +01:00
|
|
|
|
2023-01-16 14:08:23 +01:00
|
|
|
if (result.getAvailableCollections() == null
|
|
|
|
|| result.getAvailableCollections().size() == 0) {
|
|
|
|
RootPanel.get(APP_DIV).remove(loaderApp);
|
|
|
|
Window.alert("No available collection in this context");
|
|
|
|
RootPanel.get(APP_DIV).add(getGeneralErrorPanel());
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2022-10-13 16:53:33 +02:00
|
|
|
GWT.log("Loading collections, count " + result.getAvailableCollections().size());
|
|
|
|
|
2023-01-16 14:08:23 +01:00
|
|
|
ArrayList<GCubeCollection> listColl = new ArrayList<GCubeCollection>();
|
|
|
|
listColl.addAll(result.getAvailableCollections().values());
|
|
|
|
Collections.sort(listColl);
|
|
|
|
mainPanel.setAvailableCollections(listColl, paramGeonaItemType);
|
2021-07-21 17:08:45 +02:00
|
|
|
|
|
|
|
if (paramGeonaItemID != null) {
|
|
|
|
if (paramGeonaItemType == null) {
|
|
|
|
Window.alert(
|
|
|
|
"Missing parameter " + GeoportalDataViewerConstants.GET_GEONA_ITEM_TYPE
|
|
|
|
+ " (GeoNa Data Type) where to search the item id: "
|
|
|
|
+ paramGeonaItemID);
|
2021-07-19 18:04:14 +02:00
|
|
|
return;
|
|
|
|
}
|
2022-10-24 12:23:52 +02:00
|
|
|
GeoportalItemReferences gir = new GeoportalItemReferences(paramGeonaItemID,
|
|
|
|
paramGeonaItemType);
|
2023-01-12 11:00:09 +01:00
|
|
|
applicationBus.fireEvent(
|
|
|
|
new ShowDetailsEvent(gir, null, true, true, EVENT_SOURCE.LOCATE_ON_INIT));
|
2021-07-19 18:04:14 +02:00
|
|
|
}
|
2022-11-21 15:16:36 +01:00
|
|
|
|
2022-11-09 11:42:44 +01:00
|
|
|
mainPanel.openCollectionMenu();
|
2022-11-21 15:16:36 +01:00
|
|
|
|
2022-10-13 16:53:33 +02:00
|
|
|
GWT.log("DONE INIT LOAD");
|
2022-11-03 17:03:15 +01:00
|
|
|
|
2021-07-19 18:04:14 +02:00
|
|
|
}
|
2022-10-13 16:53:33 +02:00
|
|
|
|
2021-07-19 18:04:14 +02:00
|
|
|
});
|
2020-10-27 16:04:34 +01:00
|
|
|
}
|
2021-07-21 17:08:45 +02:00
|
|
|
});
|
2022-10-13 16:53:33 +02:00
|
|
|
|
|
|
|
Window.addResizeHandler(new ResizeHandler() {
|
|
|
|
@Override
|
|
|
|
public void onResize(ResizeEvent event) {
|
|
|
|
updateSize();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
bindEvents();
|
|
|
|
|
|
|
|
RootPanel.get(APP_DIV).add(attributionDiv);
|
|
|
|
}
|
|
|
|
|
2023-01-31 15:24:45 +01:00
|
|
|
/**
|
|
|
|
* Gets the status.
|
|
|
|
*
|
|
|
|
* @return the status
|
|
|
|
*/
|
2022-10-13 16:53:33 +02:00
|
|
|
public static ViewerStatus getStatus() {
|
|
|
|
return viewerStatus;
|
|
|
|
}
|
|
|
|
|
2023-01-31 15:24:45 +01:00
|
|
|
/**
|
|
|
|
* Gets the list base map layers.
|
|
|
|
*
|
|
|
|
* @return the list base map layers
|
|
|
|
*/
|
2022-10-13 16:53:33 +02:00
|
|
|
public static List<BaseMapLayer> getListBaseMapLayers() {
|
|
|
|
return listBaseMapLayers;
|
2020-11-03 13:09:08 +01:00
|
|
|
}
|
2021-09-02 12:54:39 +02:00
|
|
|
|
2020-11-19 15:19:27 +01:00
|
|
|
/**
|
|
|
|
* Update window size.
|
|
|
|
*/
|
|
|
|
public void updateSize() {
|
2020-11-03 13:09:08 +01:00
|
|
|
|
2020-11-19 15:19:27 +01:00
|
|
|
int rootHeight = getClientHeight();
|
|
|
|
int height = rootHeight;
|
|
|
|
mainPanel.setPanelsHeight(height);
|
2021-09-02 12:54:39 +02:00
|
|
|
GWT.log("Set height: " + height);
|
|
|
|
|
2020-11-19 15:19:27 +01:00
|
|
|
}
|
2021-09-02 12:54:39 +02:00
|
|
|
|
2023-01-31 15:24:45 +01:00
|
|
|
/**
|
|
|
|
* Gets the client height.
|
|
|
|
*
|
|
|
|
* @return the client height
|
|
|
|
*/
|
2020-11-19 15:19:27 +01:00
|
|
|
public int getClientHeight() {
|
|
|
|
RootPanel principalDiv = RootPanel.get(APP_DIV);
|
|
|
|
int topBorder = principalDiv.getAbsoluteTop();
|
|
|
|
int rootHeight = Window.getClientHeight() - topBorder;
|
|
|
|
return rootHeight;
|
|
|
|
}
|
2021-09-02 12:54:39 +02:00
|
|
|
|
2020-11-19 15:19:27 +01:00
|
|
|
/**
|
|
|
|
* Bind events.
|
|
|
|
*/
|
2020-11-03 13:09:08 +01:00
|
|
|
private void bindEvents() {
|
2020-11-19 15:19:27 +01:00
|
|
|
|
2022-10-13 16:53:33 +02:00
|
|
|
applicationBus.addHandler(OpenCollectionEvent.TYPE, new OpenCollectionEventHandler() {
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void onOpenCollection(OpenCollectionEvent openCollectionEvent) {
|
2022-10-17 16:52:22 +02:00
|
|
|
GWT.log("OpenCollectionEvent Fired event: " + openCollectionEvent);
|
2022-10-13 16:53:33 +02:00
|
|
|
// Check if ID is available
|
|
|
|
String collId = openCollectionEvent.getCollectionId();
|
|
|
|
ViewerConfiguration theConfig = GeoportalDataViewer.getStatus().getViewerConfig();
|
|
|
|
|
|
|
|
Set<String> ucdIds = theConfig.getAvailableCollections().keySet();
|
|
|
|
|
|
|
|
if (!ucdIds.contains(collId)) {
|
|
|
|
GWT.log("!! Collection " + collId + " is not available");
|
|
|
|
Window.alert("Collection " + collId + " is not found.");
|
|
|
|
} else {
|
|
|
|
GCubeCollection toOpen = theConfig.getAvailableCollections().get(collId);
|
|
|
|
|
|
|
|
// Check if indexes is empty
|
|
|
|
if (toOpen.getIndexes() == null || toOpen.getIndexes().isEmpty()) {
|
|
|
|
GWT.log("Unexpected empty indexes in collection " + toOpen);
|
|
|
|
Window.alert("Cannot open collection index layer for " + toOpen.getUcd().getName() + ".");
|
2022-11-28 15:20:21 +01:00
|
|
|
return;
|
2022-10-13 16:53:33 +02:00
|
|
|
}
|
|
|
|
// TODO Get Default Index Layer
|
|
|
|
// For now we just take the first - only 1 is expected
|
2022-10-14 15:31:32 +02:00
|
|
|
IndexLayerDV layer = toOpen.getIndexes().get(0);
|
2022-10-13 16:53:33 +02:00
|
|
|
// Open Index Layer
|
|
|
|
|
2022-10-27 17:40:04 +02:00
|
|
|
layerManager.addIndexLayer(layer, toOpen.getUcd().getProfileID());
|
2022-11-03 17:03:15 +01:00
|
|
|
|
2022-10-13 16:53:33 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2022-10-17 16:52:22 +02:00
|
|
|
applicationBus.addHandler(CloseCollectionEvent.TYPE, new CloseCollectionEventHandler() {
|
|
|
|
|
2022-10-27 17:40:04 +02:00
|
|
|
@Override
|
|
|
|
public void onCloseCollection(CloseCollectionEvent closeCollectionEvent) {
|
|
|
|
|
|
|
|
String collId = closeCollectionEvent.getCollectionId();
|
2022-10-17 16:52:22 +02:00
|
|
|
|
2022-10-27 17:40:04 +02:00
|
|
|
if (collId != null) {
|
|
|
|
|
|
|
|
ViewerConfiguration theConfig = GeoportalDataViewer.getStatus().getViewerConfig();
|
|
|
|
GCubeCollection toCLose = theConfig.getAvailableCollections().get(collId);
|
|
|
|
IndexLayerDV layer = toCLose.getIndexes().get(0);
|
|
|
|
layerManager.removeIndexLayer(layer);
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
});
|
2022-10-13 16:53:33 +02:00
|
|
|
|
2022-11-09 11:42:44 +01:00
|
|
|
applicationBus.addHandler(AddLayerToMapEvent.TYPE, new AddLayerToMapEventHandler() {
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void onAddingLayerForProject(AddLayerToMapEvent addLayerToMapEvent) {
|
|
|
|
|
|
|
|
if (addLayerToMapEvent.getTheProjectDV() != null) {
|
|
|
|
layerManager.addLayerToMapForProject(addLayerToMapEvent.getTheProjectDV().getProfileID(),
|
2022-11-21 15:16:36 +01:00
|
|
|
addLayerToMapEvent.getTheProjectDV().getId(), addLayerToMapEvent.getTheProjectDV(),
|
|
|
|
addLayerToMapEvent.isNotifyClashing());
|
2022-11-09 11:42:44 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2020-11-19 15:19:27 +01:00
|
|
|
applicationBus.addHandler(ShowDetailsEvent.TYPE, new ShowDetailsEventHandler() {
|
2021-09-02 12:54:39 +02:00
|
|
|
|
2020-11-03 13:09:08 +01:00
|
|
|
@Override
|
2022-11-03 17:03:15 +01:00
|
|
|
public void onShowDetails(final ShowDetailsEvent showDetailsEvent) {
|
2021-09-02 12:54:39 +02:00
|
|
|
GWT.log("Fired event: " + showDetailsEvent);
|
|
|
|
|
2022-10-13 16:53:33 +02:00
|
|
|
String projectID = showDetailsEvent.getProjectID();
|
|
|
|
String profileID = showDetailsEvent.getProfileID();
|
2020-11-19 15:19:27 +01:00
|
|
|
|
2022-10-11 15:00:39 +02:00
|
|
|
if (projectID == null) {
|
2020-11-19 15:19:27 +01:00
|
|
|
Window.alert("Item Id not found");
|
|
|
|
return;
|
|
|
|
}
|
2021-09-02 12:54:39 +02:00
|
|
|
|
|
|
|
// TODO
|
2020-11-19 15:19:27 +01:00
|
|
|
boolean found = false;
|
2022-10-11 15:00:39 +02:00
|
|
|
GWT.log("Product with id: " + projectID + " found? " + found);
|
2021-09-02 12:54:39 +02:00
|
|
|
|
2022-12-22 11:59:07 +01:00
|
|
|
final EVENT_SOURCE sourceEvent = showDetailsEvent.getSourceEvent();
|
2023-01-12 11:00:09 +01:00
|
|
|
|
|
|
|
if (!sourceEvent.equals(EVENT_SOURCE.LOCATE_FROM_TIMELINE)) {
|
2022-12-21 11:00:12 +01:00
|
|
|
timelineMS.hideTimelineProjectRelations();
|
2022-12-22 11:59:07 +01:00
|
|
|
}
|
2023-01-12 11:00:09 +01:00
|
|
|
|
|
|
|
if (sourceEvent.equals(EVENT_SOURCE.LOCATE_SEARCHED)) {
|
2022-12-22 11:59:07 +01:00
|
|
|
layerManager.removeAllDetailLayers();
|
|
|
|
}
|
2022-12-21 11:00:12 +01:00
|
|
|
|
2022-10-13 16:53:33 +02:00
|
|
|
GeoportalDataViewerServiceAsync.Util.getInstance().getProjectViewForId(profileID, projectID,
|
|
|
|
new AsyncCallback<ProjectView>() {
|
2021-09-02 12:54:39 +02:00
|
|
|
|
2022-10-13 16:53:33 +02:00
|
|
|
@Override
|
|
|
|
public void onFailure(Throwable caught) {
|
2022-10-14 15:31:32 +02:00
|
|
|
Window.alert(caught.getMessage());
|
|
|
|
mainPanel.hidePanelDetails();
|
2022-10-13 16:53:33 +02:00
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void onSuccess(ProjectView result) {
|
|
|
|
mainPanel.showAsDetails(result, showDetailsEvent.getGeonaItemRef());
|
2022-11-03 17:03:15 +01:00
|
|
|
|
|
|
|
List<RelationshipDV> relationships = result.getTheProjectDV().getRelationships();
|
2022-11-09 11:42:44 +01:00
|
|
|
|
|
|
|
if (showDetailsEvent.isLoadTimelineRelationships() && relationships != null
|
|
|
|
&& relationships.size() > 0) {
|
2022-11-03 17:03:15 +01:00
|
|
|
GWT.log("LoadTimelineRelationships is true and the project has Relationships");
|
2022-11-14 14:12:50 +01:00
|
|
|
timelineMS.showTimelineProjectRelations(result.getTheProjectDV(), false);
|
2022-11-09 11:42:44 +01:00
|
|
|
}
|
2022-12-22 11:59:07 +01:00
|
|
|
|
2023-01-12 11:00:09 +01:00
|
|
|
if (sourceEvent != null) {
|
|
|
|
|
|
|
|
switch (sourceEvent) {
|
|
|
|
case LOCATE_FROM_TIMELINE:
|
|
|
|
case LOCATE_SEARCHED: {
|
|
|
|
applicationBus.fireEvent(new ShowPopupOnCentroidEvent(result));
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case LOCATE_ON_INIT: {
|
|
|
|
applicationBus.fireEvent(new ShowPopupOnCentroidEvent(result));
|
|
|
|
layerManager.fireGoToLayers();
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
2022-12-22 11:59:07 +01:00
|
|
|
}
|
2022-10-13 16:53:33 +02:00
|
|
|
}
|
|
|
|
});
|
2022-10-11 15:00:39 +02:00
|
|
|
|
2020-11-19 15:19:27 +01:00
|
|
|
}
|
2021-09-02 12:54:39 +02:00
|
|
|
|
2020-11-19 15:19:27 +01:00
|
|
|
});
|
2021-09-02 12:54:39 +02:00
|
|
|
|
2020-11-19 15:19:27 +01:00
|
|
|
applicationBus.addHandler(AddedLayerToMapEvent.TYPE, new AddedLayerToMapEventHandler() {
|
2021-09-02 12:54:39 +02:00
|
|
|
|
2020-11-19 15:19:27 +01:00
|
|
|
@Override
|
|
|
|
public void onLayerRendered(AddedLayerToMapEvent addedLayerToMapEvent) {
|
2022-10-13 16:53:33 +02:00
|
|
|
GWT.log("Fired AddedLayerToMapEvent " + addedLayerToMapEvent.getLayerItem() + "layer type: "
|
|
|
|
+ addedLayerToMapEvent.getLayerType());
|
|
|
|
|
2021-10-14 11:34:04 +02:00
|
|
|
LAYER_TYPE layerType = addedLayerToMapEvent.getLayerType();
|
|
|
|
|
|
|
|
if (layerType != null) {
|
|
|
|
|
|
|
|
switch (layerType) {
|
|
|
|
case BASE:
|
|
|
|
|
|
|
|
break;
|
|
|
|
case OVERLAY:
|
|
|
|
mainPanel.showOverlayLayers(layerManager.getOverlayLayerManager().getPanel());
|
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-11-19 15:19:27 +01:00
|
|
|
}
|
|
|
|
});
|
2021-09-02 12:54:39 +02:00
|
|
|
|
2020-11-19 15:19:27 +01:00
|
|
|
applicationBus.addHandler(ZoomOutOverMinimumEvent.TYPE, new ZoomOutOverMinimumEventHandler() {
|
2021-09-02 12:54:39 +02:00
|
|
|
|
2020-11-19 15:19:27 +01:00
|
|
|
@Override
|
|
|
|
public void onZoomOut(ZoomOutOverMinimumEvent zoomOutEvent) {
|
2021-09-02 12:54:39 +02:00
|
|
|
|
2022-10-24 12:23:52 +02:00
|
|
|
if (mainPanel.getDisplayedProject() == null && !olMapMng.isQueryPointActive()) {
|
2020-11-19 15:19:27 +01:00
|
|
|
olMapMng.hidePopInfo();
|
2021-09-08 14:40:36 +02:00
|
|
|
layerManager.removeAllDetailLayers();
|
2021-10-14 11:34:04 +02:00
|
|
|
|
2020-11-19 15:19:27 +01:00
|
|
|
}
|
2021-09-02 12:54:39 +02:00
|
|
|
|
2021-10-14 11:34:04 +02:00
|
|
|
mainPanel.hideOverlayLayers();
|
2020-11-19 15:19:27 +01:00
|
|
|
}
|
|
|
|
});
|
2021-09-02 12:54:39 +02:00
|
|
|
|
2020-11-19 15:19:27 +01:00
|
|
|
applicationBus.addHandler(ClosedViewDetailsEvent.TYPE, new ClosedViewDetailsEventHandler() {
|
2021-09-02 12:54:39 +02:00
|
|
|
|
2020-11-19 15:19:27 +01:00
|
|
|
@Override
|
|
|
|
public void onClosed(ClosedViewDetailsEvent closedViewDetailsEvent) {
|
|
|
|
olMapMng.hidePopInfo();
|
2022-11-03 17:03:15 +01:00
|
|
|
applicationBus.fireEvent(new TimelineProjectRelationsEvent(null, EVENT_TYPE.HIDE));
|
2020-11-03 13:09:08 +01:00
|
|
|
}
|
|
|
|
});
|
2021-09-02 12:54:39 +02:00
|
|
|
|
2021-09-01 16:26:07 +02:00
|
|
|
applicationBus.addHandler(MapExtentToEvent.TYPE, new MapExtentToEventHandler() {
|
2021-09-02 12:54:39 +02:00
|
|
|
|
2021-09-01 16:26:07 +02:00
|
|
|
@Override
|
|
|
|
public void onExtentEvent(MapExtentToEvent mapExtentToEvent) {
|
|
|
|
// TODO Auto-generated method stub
|
2021-09-02 12:54:39 +02:00
|
|
|
|
2021-09-01 16:26:07 +02:00
|
|
|
}
|
|
|
|
});
|
2021-09-02 12:54:39 +02:00
|
|
|
|
2022-11-03 17:03:15 +01:00
|
|
|
applicationBus.addHandler(TimelineProjectRelationsEvent.TYPE, new TimelineProjectRelationsEventHandler() {
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void onTimelineRelationEvent(TimelineProjectRelationsEvent timelineProjectRelationsEvent) {
|
|
|
|
|
|
|
|
switch (timelineProjectRelationsEvent.getEventType()) {
|
|
|
|
case SHOW: {
|
2022-11-14 14:12:50 +01:00
|
|
|
timelineMS.showTimelineProjectRelations(timelineProjectRelationsEvent.getTheProjectDV(), true);
|
2022-11-03 17:03:15 +01:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
case HIDE:
|
|
|
|
default: {
|
2022-11-08 10:45:39 +01:00
|
|
|
timelineMS.hideTimelineProjectRelations();
|
2022-11-03 17:03:15 +01:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2021-10-14 11:34:04 +02:00
|
|
|
applicationBus.addHandler(DoActionOnDetailLayersEvent.TYPE, new DoActionOnDetailLayersEventHandler() {
|
|
|
|
|
|
|
|
@Override
|
2023-01-31 15:24:45 +01:00
|
|
|
public void onDoActionOnDetailLayers(final DoActionOnDetailLayersEvent doLayerActionEvent) {
|
2021-10-14 11:34:04 +02:00
|
|
|
|
|
|
|
DO_LAYER_ACTION doAction = doLayerActionEvent.getDoAction();
|
2022-10-13 16:53:33 +02:00
|
|
|
GWT.log("event: " + doAction);
|
|
|
|
GWT.log("layer source: " + doLayerActionEvent.getLayerItem().getName());
|
2021-11-12 14:54:54 +01:00
|
|
|
OpenLayerMap olMap = olMapMng.getOLMap();
|
2022-10-13 16:53:33 +02:00
|
|
|
|
2021-10-14 11:34:04 +02:00
|
|
|
switch (doAction) {
|
|
|
|
case OPACITY:
|
2022-10-13 16:53:33 +02:00
|
|
|
GWT.log("opacity: " + doLayerActionEvent.getOpacity());
|
|
|
|
olMap.setWMSDetailLayerOpacity(doLayerActionEvent.getLayerItem(), doLayerActionEvent.getOpacity());
|
2021-10-14 11:34:04 +02:00
|
|
|
break;
|
|
|
|
|
|
|
|
case SWAP:
|
2021-10-15 17:51:09 +02:00
|
|
|
SwapLayer swLS = doLayerActionEvent.getSourceLayerSwap();
|
|
|
|
SwapLayer swLT = doLayerActionEvent.getTargetLayerSwap();
|
2022-10-13 16:53:33 +02:00
|
|
|
GWT.log("SWAPPING source " + swLS.getLayerItem().getName() + ", target: "
|
|
|
|
+ swLT.getLayerItem().getName());
|
2021-10-15 17:51:09 +02:00
|
|
|
olMap.swapDetailsLayers(swLS, swLT);
|
2021-10-14 11:34:04 +02:00
|
|
|
break;
|
|
|
|
|
|
|
|
case VISIBILITY:
|
2022-10-13 16:53:33 +02:00
|
|
|
GWT.log("visibility: " + doLayerActionEvent.getVisibility());
|
2021-10-14 11:34:04 +02:00
|
|
|
olMap.setWMSDetailLayerVisible(doLayerActionEvent.getLayerItem(),
|
|
|
|
doLayerActionEvent.getVisibility());
|
2022-10-13 16:53:33 +02:00
|
|
|
|
2021-10-14 11:34:04 +02:00
|
|
|
break;
|
2023-01-31 15:24:45 +01:00
|
|
|
case LOCATE_LAYER:
|
|
|
|
|
|
|
|
final LayerItem layerItem = doLayerActionEvent.getLayerItem();
|
|
|
|
|
|
|
|
boolean layerHighlighted = olMap.areLayerFeaturesAsHighlight(layerItem);
|
|
|
|
|
|
|
|
if (layerHighlighted) {
|
|
|
|
doLayerActionEvent.getSourceEventUI().setVisibleLoaderFeatures(false, null);
|
|
|
|
olMap.removeLayerFeaturesAsHighlight(layerItem.getName());
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
final String geoJSONFeatures = layerFeaturesCache.get(layerItem.getName());
|
|
|
|
|
|
|
|
if (geoJSONFeatures == null) {
|
|
|
|
|
|
|
|
GeoportalDataViewerServiceAsync.Util.getInstance().getWFSResponse(layerItem,
|
|
|
|
olMap.getProjectionCode(), null, 0, "json", new AsyncCallback<String>() {
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void onFailure(Throwable caught) {
|
|
|
|
doLayerActionEvent.getSourceEventUI().setVisibleLoaderFeatures(false, null);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void onSuccess(String geoJSONFeaturesResp) {
|
|
|
|
doLayerActionEvent.getSourceEventUI().setVisibleLoaderFeatures(false, null);
|
|
|
|
|
|
|
|
if (geoJSONFeaturesResp != null && !geoJSONFeaturesResp.isEmpty()) {
|
|
|
|
layerFeaturesCache.put(layerItem.getName(), geoJSONFeaturesResp);
|
|
|
|
|
|
|
|
GWT.log("GeoJSON: " + geoJSONFeaturesResp);
|
|
|
|
|
|
|
|
showLayerFeatures(layerItem, geoJSONFeaturesResp,
|
|
|
|
doLayerActionEvent.getLayerObject().getProjectDV());
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
});
|
|
|
|
} else {
|
|
|
|
|
|
|
|
doLayerActionEvent.getSourceEventUI().setVisibleLoaderFeatures(false, null);
|
|
|
|
showLayerFeatures(layerItem, geoJSONFeatures,
|
|
|
|
doLayerActionEvent.getLayerObject().getProjectDV());
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
break;
|
2021-10-14 11:34:04 +02:00
|
|
|
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
});
|
2022-10-13 16:53:33 +02:00
|
|
|
|
2021-11-12 12:37:15 +01:00
|
|
|
applicationBus.addHandler(ChangeMapLayerEvent.TYPE, new ChangeMapLayerEventHandler() {
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void onChangeBaseMapLayer(ChangeMapLayerEvent changeMapLayerEvent) {
|
|
|
|
|
|
|
|
BaseMapLayer baseLayer = changeMapLayerEvent.getBaseMapLayer();
|
|
|
|
|
|
|
|
if (baseLayer == null)
|
|
|
|
return;
|
|
|
|
|
|
|
|
String attributionHTML = "<div class='map-credits'><div class='map-credits-container'>"
|
|
|
|
+ baseLayer.getAttribution() + "</div></div>";
|
2021-11-12 14:54:54 +01:00
|
|
|
olMapMng.getOLMap().changeBaseMap(baseLayer);
|
2021-11-12 16:57:57 +01:00
|
|
|
|
|
|
|
// THE OSM Contributors are automatically added by gwt-ol, others ones not.
|
|
|
|
if (!baseLayer.getType().equals(BaseMapLayer.OL_BASE_MAP.OSM)) {
|
2021-11-12 12:37:15 +01:00
|
|
|
attributionDiv.setHTML(attributionHTML);
|
2021-11-12 16:57:57 +01:00
|
|
|
} else
|
2021-11-12 12:37:15 +01:00
|
|
|
attributionDiv.setHTML("");
|
|
|
|
|
|
|
|
}
|
|
|
|
});
|
2022-10-13 16:53:33 +02:00
|
|
|
|
2023-01-12 11:00:09 +01:00
|
|
|
applicationBus.addHandler(ShowPopupOnCentroidEvent.TYPE, new ShowPopupOnCentroidEventHandler() {
|
2022-10-25 11:35:03 +02:00
|
|
|
|
|
|
|
@Override
|
2023-01-12 11:00:09 +01:00
|
|
|
public void onShowPopup(ShowPopupOnCentroidEvent showPopupOnCentroiEvent) {
|
|
|
|
GWT.log("ShowPopupOnCentroidEvent: " + showPopupOnCentroiEvent);
|
2023-01-16 14:08:23 +01:00
|
|
|
|
|
|
|
// Showing popup after clicking on map
|
2022-11-21 15:16:36 +01:00
|
|
|
if (showPopupOnCentroiEvent.getProfileID() != null && showPopupOnCentroiEvent.getProjectID() != null) {
|
|
|
|
Coordinate transfCoord = MapUtils
|
|
|
|
.geoJSONTToBBoxCenter(showPopupOnCentroiEvent.getSpatialReference(), null, null);
|
|
|
|
|
|
|
|
performWFSQueryOnCentroid(showPopupOnCentroiEvent.getProjectID(), transfCoord.getX(),
|
|
|
|
transfCoord.getY());
|
2023-01-16 14:08:23 +01:00
|
|
|
|
|
|
|
// Showing popup after locate on Map
|
|
|
|
} else if (showPopupOnCentroiEvent.getProjectView() != null) {
|
2023-01-12 11:00:09 +01:00
|
|
|
layerManager.showPopupInfoForCentroidLayer(showPopupOnCentroiEvent.getProjectView());
|
2022-11-21 15:16:36 +01:00
|
|
|
}
|
2022-10-25 11:35:03 +02:00
|
|
|
|
|
|
|
}
|
|
|
|
});
|
2022-10-13 16:53:33 +02:00
|
|
|
|
2021-12-14 15:26:09 +01:00
|
|
|
applicationBus.addHandler(SearchPerformedEvent.TYPE, new SearchPerformedEventHandler() {
|
2022-10-13 16:53:33 +02:00
|
|
|
|
2021-12-14 15:26:09 +01:00
|
|
|
@Override
|
|
|
|
public void onSearchDone(SearchPerformedEvent searchPerformedEvent) {
|
2022-10-13 16:53:33 +02:00
|
|
|
|
|
|
|
if (searchPerformedEvent != null) {
|
|
|
|
|
2022-11-28 09:49:46 +01:00
|
|
|
LinkedHashMap<String, ol.layer.Image> wmsMap = olMapMng.getOLMap().getWmsLayerMap();
|
2021-12-14 15:26:09 +01:00
|
|
|
String firstWMSKey = wmsMap.keySet().iterator().next();
|
2022-11-28 09:49:46 +01:00
|
|
|
List<String> result = searchPerformedEvent.getListProjectIDs();
|
2022-11-28 15:20:21 +01:00
|
|
|
ViewerConfiguration viewerConfig = GeoportalDataViewer.getStatus().getViewerConfig();
|
|
|
|
|
|
|
|
String layerName = null;
|
|
|
|
try {
|
2022-12-21 11:00:12 +01:00
|
|
|
|
|
|
|
GCubeCollection toOpen = viewerConfig.getAvailableCollections()
|
|
|
|
.get(searchPerformedEvent.getProfileID());
|
2022-11-28 15:20:21 +01:00
|
|
|
// Check if indexes is empty
|
|
|
|
if (toOpen.getIndexes() == null || toOpen.getIndexes().isEmpty()) {
|
|
|
|
GWT.log("SearchPerformedEvent Unexpected empty indexes in collection " + toOpen);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
// TODO Get Default Index Layer
|
|
|
|
// For now we just take the first - only 1 is expected
|
|
|
|
IndexLayerDV layer = toOpen.getIndexes().get(0);
|
|
|
|
// Open Index Layer
|
2022-12-21 11:00:12 +01:00
|
|
|
|
2022-11-28 15:20:21 +01:00
|
|
|
String wmsLink = layer.getLayer().getOgcLinks().get("wms");
|
|
|
|
layerName = URLUtil.extractValueOfParameterFromURL("layers", wmsLink);
|
2022-12-21 11:00:12 +01:00
|
|
|
} catch (Exception e) {
|
2022-11-28 15:20:21 +01:00
|
|
|
// TODO: handle exception
|
|
|
|
}
|
2022-12-21 11:00:12 +01:00
|
|
|
|
|
|
|
String setCqlFilter = null; // default
|
|
|
|
|
2022-10-13 16:53:33 +02:00
|
|
|
if (result != null && result.size() > 0) {
|
2022-10-27 15:09:07 +02:00
|
|
|
String cqlFilter = GeoportalDataViewerConstants.PROJECT_ID_KEY_FEATURE + " IN(";
|
2022-11-28 09:49:46 +01:00
|
|
|
for (String projectId : result) {
|
|
|
|
cqlFilter += "'" + projectId + "',";
|
2021-12-14 15:26:09 +01:00
|
|
|
}
|
2022-10-13 16:53:33 +02:00
|
|
|
cqlFilter = cqlFilter.substring(0, cqlFilter.length() - 1) + ")";
|
2022-11-28 15:20:21 +01:00
|
|
|
setCqlFilter = cqlFilter;
|
2021-12-14 15:26:09 +01:00
|
|
|
olMapMng.getOLMap().setCQLFilterToWMSLayer(firstWMSKey, cqlFilter);
|
2022-11-28 15:20:21 +01:00
|
|
|
|
2022-10-13 16:53:33 +02:00
|
|
|
} else {
|
2021-12-14 15:26:09 +01:00
|
|
|
olMapMng.getOLMap().setCQLFilterToWMSLayer(firstWMSKey, null);
|
2022-12-21 11:00:12 +01:00
|
|
|
setCqlFilter = null; // is already null
|
2021-12-14 15:26:09 +01:00
|
|
|
}
|
2022-10-13 16:53:33 +02:00
|
|
|
|
|
|
|
if (searchPerformedEvent.isSearchReset()) {
|
2021-12-14 15:26:09 +01:00
|
|
|
olMapMng.getOLMap().setCQLFilterToWMSLayer(firstWMSKey, null);
|
2022-12-21 11:00:12 +01:00
|
|
|
setCqlFilter = null; // is already null
|
2021-12-14 15:26:09 +01:00
|
|
|
}
|
2022-12-21 11:00:12 +01:00
|
|
|
|
|
|
|
if (layerName != null)
|
2022-11-28 15:20:21 +01:00
|
|
|
layerManager.setCQLForLayerToIndexLayer(layerName, setCqlFilter);
|
2021-12-14 15:26:09 +01:00
|
|
|
|
|
|
|
}
|
2022-10-13 16:53:33 +02:00
|
|
|
|
2021-12-14 15:26:09 +01:00
|
|
|
}
|
|
|
|
});
|
2021-10-14 11:34:04 +02:00
|
|
|
|
2020-10-27 16:04:34 +01:00
|
|
|
}
|
2021-09-02 12:54:39 +02:00
|
|
|
|
2023-01-31 15:24:45 +01:00
|
|
|
/**
|
|
|
|
* Sets the.
|
|
|
|
*
|
|
|
|
* @param json the json
|
|
|
|
* @return the object
|
|
|
|
*/
|
|
|
|
public static native Object toJSON(String json) /*-{
|
|
|
|
var jsonObj = JSON.parse(json);
|
|
|
|
//console.log("jsonObj: "+jsonObj);
|
|
|
|
return jsonObj;
|
|
|
|
}-*/;
|
2021-10-14 11:34:04 +02:00
|
|
|
// /**
|
|
|
|
// * Handler popu closer.
|
|
|
|
// *
|
|
|
|
// * @param divId the div id
|
|
|
|
// * @param overlayId the overlay id
|
|
|
|
// */
|
|
|
|
// public static native void handlerPopuCloser(String divId, String overlayId) /*-{
|
|
|
|
// var closer = $doc.getElementById(divId);
|
|
|
|
// var overlay = $doc.getElementById(overlayId);
|
|
|
|
// closer.onclick = function() {
|
|
|
|
// overlay.setPosition(undefined);
|
|
|
|
// closer.blur();
|
|
|
|
// return false;
|
|
|
|
// };
|
|
|
|
//
|
|
|
|
// }-*/;
|
|
|
|
|
2023-01-31 15:24:45 +01:00
|
|
|
/**
|
|
|
|
* Perform WFS query on centroid.
|
|
|
|
*
|
|
|
|
* @param projectID the project ID
|
|
|
|
* @param centroidLong the centroid long
|
|
|
|
* @param centroidLat the centroid lat
|
|
|
|
*/
|
2022-10-25 11:35:03 +02:00
|
|
|
private void performWFSQueryOnCentroid(String projectID, Double centroidLong, Double centroidLat) {
|
2022-10-27 15:09:07 +02:00
|
|
|
GWT.log("Perform performWFSQueryOnCentroid: " + projectID + " long: " + centroidLong + ", lat: " + centroidLat);
|
2022-10-25 11:35:03 +02:00
|
|
|
if (projectID != null) {
|
|
|
|
Double x = centroidLong;
|
|
|
|
Double y = centroidLat;
|
2022-10-24 12:23:52 +02:00
|
|
|
GWT.log("X: " + x + ", Y:" + y);
|
|
|
|
if (x != null && y != null) {
|
|
|
|
Coordinate transfCoord = MapUtils.transformCoordiante(new Coordinate(x, y),
|
|
|
|
MAP_PROJECTION.EPSG_4326.getName(), MAP_PROJECTION.EPSG_3857.getName());
|
|
|
|
GeoQuery select = olMapMng.toDataPointQuery(transfCoord, false);
|
|
|
|
GWT.log("GeoQuery: " + select);
|
|
|
|
// GeoportalDataViewerConstants.print("fireEvent QueryDataEvent");
|
|
|
|
ExtentWrapped toExt = new ExtentWrapped(transfCoord.getX(), transfCoord.getY(), transfCoord.getX(),
|
|
|
|
transfCoord.getY());
|
2022-10-25 11:35:03 +02:00
|
|
|
layerManager.getLayerManagerBus().fireEvent(
|
|
|
|
new QueryDataEvent(select, toExt, projectID, true, MapEventType.ADDED_CENTROID_LAYER_TO_MAP));
|
2022-10-24 12:23:52 +02:00
|
|
|
} else {
|
|
|
|
GeoportalDataViewerConstants
|
|
|
|
.printJs("I cannot select the point one or both coordiantes are null. X: " + x + ", Y:" + y);
|
2020-12-02 18:48:12 +01:00
|
|
|
}
|
2022-10-24 12:23:52 +02:00
|
|
|
|
2020-12-02 18:48:12 +01:00
|
|
|
}
|
|
|
|
}
|
2022-11-21 15:16:36 +01:00
|
|
|
|
2023-01-31 15:24:45 +01:00
|
|
|
/**
|
|
|
|
* Show popover.
|
|
|
|
*
|
|
|
|
* @param w the w
|
|
|
|
* @param message the message
|
|
|
|
* @param heading the heading
|
|
|
|
*/
|
2022-11-15 10:08:02 +01:00
|
|
|
public static void showPopover(final Widget w, String message, String heading) {
|
|
|
|
|
|
|
|
final Popover popover = new Popover();
|
|
|
|
popover.setWidget(w);
|
|
|
|
popover.setText(message);
|
|
|
|
if (heading != null)
|
|
|
|
popover.setHeading(heading);
|
|
|
|
popover.setPlacement(Placement.BOTTOM);
|
|
|
|
popover.reconfigure();
|
|
|
|
popover.show();
|
|
|
|
Timer timer = new Timer() {
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void run() {
|
|
|
|
popover.hide();
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
timer.schedule(3000);
|
|
|
|
}
|
2020-10-26 11:01:07 +01:00
|
|
|
|
2023-01-31 15:24:45 +01:00
|
|
|
/**
|
|
|
|
* Gets the general error panel.
|
|
|
|
*
|
|
|
|
* @return the general error panel
|
|
|
|
*/
|
2022-11-28 09:49:46 +01:00
|
|
|
private FlowPanel getGeneralErrorPanel() {
|
|
|
|
Image geoportalError = new Image(GNAImages.ICONS.geoportaServiceError());
|
|
|
|
FlowPanel errorPanelMsg = new FlowPanel();
|
|
|
|
errorPanelMsg.getElement().addClassName("general_error");
|
|
|
|
errorPanelMsg.add(geoportalError);
|
|
|
|
errorPanelMsg.add(new HTML("D4S GeoPortal"));
|
|
|
|
HTML erroMessage = new HTML(
|
|
|
|
"Oops something went wrong, please refresh and try again. Feel free to contact us if the problem persists");
|
|
|
|
errorPanelMsg.add(erroMessage);
|
|
|
|
return errorPanelMsg;
|
|
|
|
}
|
|
|
|
|
2023-01-31 15:24:45 +01:00
|
|
|
/**
|
|
|
|
* Show layer features.
|
|
|
|
*
|
|
|
|
* @param layerItem the layer item
|
|
|
|
* @param geoJSONFeatures the geo JSON features
|
|
|
|
* @param projectDV the project DV
|
|
|
|
*/
|
|
|
|
private void showLayerFeatures(LayerItem layerItem, String geoJSONFeatures, ProjectDV projectDV) {
|
|
|
|
|
|
|
|
GeoJsonFeatureOptions fo = new GeoJsonFeatureOptions();
|
|
|
|
ProjectionOptions projectionOptions = new ProjectionOptions();
|
|
|
|
projectionOptions.setCode(MAP_PROJECTION.EPSG_4326.getName());
|
|
|
|
Projection fp = new Projection(projectionOptions);
|
|
|
|
fo.setFeatureProjection(fp);
|
|
|
|
fo.setDataProjection(fp);
|
|
|
|
GeoJsonOptions geoJsonOpt = new GeoJsonOptions();
|
|
|
|
geoJsonOpt.setDefaultDataProjection(fp);
|
|
|
|
geoJsonOpt.setFeatureProjection(fp);
|
|
|
|
GeoJson geoJson = OLFactory.createGeoJSON(geoJsonOpt);
|
|
|
|
|
|
|
|
Feature[] features = geoJson.readFeatures(geoJSONFeatures);
|
|
|
|
|
|
|
|
GWT.log("features: " + features);
|
|
|
|
olMapMng.getOLMap().addLayerFeaturesAsHighlight(layerItem, features);
|
|
|
|
|
|
|
|
if (projectDV != null) {
|
|
|
|
GeoJSON spatialReference = projectDV.getSpatialReference();
|
|
|
|
|
|
|
|
GWT.log("spatialReference is: " + spatialReference);
|
|
|
|
Coordinate transfCoord = MapUtils.geoJSONTToBBoxCenter(spatialReference, MAP_PROJECTION.EPSG_4326.getName(),
|
|
|
|
MAP_PROJECTION.EPSG_3857.getName());
|
|
|
|
GWT.log("transfCoord is: " + transfCoord);
|
|
|
|
if (transfCoord != null)
|
|
|
|
olMapMng.getOLMap().setCenter(transfCoord);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-10-23 18:18:06 +02:00
|
|
|
}
|