managed the init

This commit is contained in:
Francesco Mangiacrapa 2020-11-18 17:28:44 +01:00
parent 9920698d75
commit 87514c4f43
10 changed files with 224 additions and 153 deletions

View File

@ -2,13 +2,19 @@ package org.gcube.portlets.user.geoportaldataviewer.client;
import java.util.Iterator;
import org.gcube.portlets.user.geoportaldataviewer.client.events.AddedLayerToMapEvent;
import org.gcube.portlets.user.geoportaldataviewer.client.events.AddedLayerToMapEventHandler;
import org.gcube.portlets.user.geoportaldataviewer.client.events.QueryDataEvent;
import org.gcube.portlets.user.geoportaldataviewer.client.events.ShowDetailsEvent;
import org.gcube.portlets.user.geoportaldataviewer.client.events.ShowDetailsEventHandler;
import org.gcube.portlets.user.geoportaldataviewer.client.gis.MapUtils;
import org.gcube.portlets.user.geoportaldataviewer.client.ui.GeonaDataViewMainPanel;
import org.gcube.portlets.user.geoportaldataviewer.shared.GeoNaDataViewerProfile;
import org.gcube.portlets.user.geoportaldataviewer.shared.GeoNaItemRef;
import org.gcube.portlets.user.geoportaldataviewer.shared.gis.GeoQuery;
import org.gcube.portlets.user.geoportaldataviewer.shared.gis.LayerItem;
import org.gcube.portlets.user.geoportaldataviewer.shared.products.ConcessioneDV;
import org.gcube.portlets.user.geoportaldataviewer.shared.products.model.RecordDV;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
@ -21,6 +27,8 @@ import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.RootPanel;
import ol.Coordinate;
/**
* Entry point classes define <code>onModuleLoad()</code>.
*
@ -50,10 +58,10 @@ public class GeoportalDataViewer implements EntryPoint {
/** The param layer title. */
private String paramLayerTitle;
private HandlerManager eventBus = new HandlerManager("");
private HandlerManager applicationBus = new HandlerManager("");
/** The layer manager. */
private LayerManager layerManager = new LayerManager(eventBus);
private LayerManager layerManager = new LayerManager(applicationBus);
private String paramGeonaItemID;
@ -61,6 +69,7 @@ public class GeoportalDataViewer implements EntryPoint {
private OLMapManager olMapMng = null;
//https://data.d4science.org/gis-viewer-app/?wmsrequest=https%3A%2F%2Fgeona-proto.d4science.org%2Fgeoserver%2Fconcessioni_conf%2Fwms%3Fservice%3DWMS%26version%3D1.1.0%26request%3DGetMap%26layers%3Dconcessioni_conf%3Acentroids_concessioni%26styles%3D%26bbox%3D8.476%2C39.179%2C17.391%2C45.772%26width%3D768%26height%3D567%26srs%3DEPSG%3A4326%26format%3Dapplication%2Fopenlayers&zoom=6&centermap=12.45%2C42.98
/**
@ -68,7 +77,7 @@ public class GeoportalDataViewer implements EntryPoint {
*/
public void onModuleLoad() {
mainPanel = new GeonaDataViewMainPanel(eventBus, getClientHeight());
mainPanel = new GeonaDataViewMainPanel(applicationBus, getClientHeight());
RootPanel.get(APP_DIV).add(mainPanel);
@ -77,7 +86,7 @@ public class GeoportalDataViewer implements EntryPoint {
@Override
public void execute() {
olMapMng = new OLMapManager(mainPanel.getMapPanel().getElement().getId(),layerManager.getEventBus());
olMapMng = new OLMapManager(mainPanel.getMapPanel().getElement().getId(),layerManager.getLayerManagerBus());
layerManager.setOlMap(olMapMng.getOLOSMMap());
mainPanel.setMap(olMapMng.getOLOSMMap());
updateSize();
@ -150,7 +159,7 @@ public class GeoportalDataViewer implements EntryPoint {
return;
}
GeoNaItemRef gir = new GeoNaItemRef(new Long(paramGeonaItemID), paramGeonaItemType);
eventBus.fireEvent(new ShowDetailsEvent(gir, null, null));
applicationBus.fireEvent(new ShowDetailsEvent(gir, null, null));
}
}
@ -185,7 +194,7 @@ public class GeoportalDataViewer implements EntryPoint {
*/
private void bindEvents() {
eventBus.addHandler(ShowDetailsEvent.TYPE, new ShowDetailsEventHandler() {
applicationBus.addHandler(ShowDetailsEvent.TYPE, new ShowDetailsEventHandler() {
@Override
public void onShowDetails(ShowDetailsEvent showDetailsEvent) {
@ -198,41 +207,58 @@ public class GeoportalDataViewer implements EntryPoint {
return;
}
String tabName = showDetailsEvent.getItemName()==null?"Dettagli Prodotto":showDetailsEvent.getItemName();
// boolean found = mainPanel.selectTabForProductId(id);
//TODO
boolean found = false;
GWT.log("Product with id: "+id+" found? "+found);
if(!found) {
if(showDetailsEvent.getGeonaItemType().equalsIgnoreCase("Concessione")) {
//final Tab theTab = mainPanel.addAsTab(tabName, true, null);
GeoportalDataViewerServiceAsync.Util.getInstance().getConcessioneForId(id, new AsyncCallback<ConcessioneDV>() {
@Override
public void onFailure(Throwable caught) {
Window.alert(caught.getMessage());
// theTab.clear();
// theTab.setIcon(IconType.WARNING_SIGN);
// theTab.add(new HTML(caught.getMessage()));
mainPanel.hidePanelDetails();
}
@Override
public void onSuccess(ConcessioneDV concessioneDV) {
GWT.log("Showing: "+concessioneDV);
//mainPanel.renderProductIntoTab(theTab, concessioneDV, showDetailsEvent.getGeonaItemRef());
mainPanel.showAsDetails(concessioneDV, showDetailsEvent.getGeonaItemRef());
}
});
}
}
}
});
applicationBus.addHandler(AddedLayerToMapEvent.TYPE, new AddedLayerToMapEventHandler() {
@Override
public void onLayerRendered(AddedLayerToMapEvent addedLayerToMapEvent) {
GWT.log("Fired AddedLayerToMapEvent "+addedLayerToMapEvent.getLayerItem());
if(paramGeonaItemID!=null && mainPanel.getDisplyedRecord()!=null) {
RecordDV record = mainPanel.getDisplyedRecord();
GWT.log("record instanceof ConcessioneDV: " +(record instanceof ConcessioneDV));
if(record instanceof ConcessioneDV) {
ConcessioneDV concessioneDV = (ConcessioneDV) record;
Double x = concessioneDV.getCentroidLong();
Double y = concessioneDV.getCentroidLat();
Coordinate transfCoord = MapUtils.transformCoordiante(new Coordinate(x, y), GeoportalDataViewerConstants.EPSG_4326, GeoportalDataViewerConstants.EPSG_3857);
GeoQuery select = olMapMng.toDataPointQuery(transfCoord);
layerManager.getLayerManagerBus().fireEvent(new QueryDataEvent(select, transfCoord));
}
}
}
});
}
}

View File

@ -9,6 +9,8 @@ import java.util.List;
import java.util.Map;
import org.gcube.portlets.user.geoportaldataviewer.client.GeoportalDataViewerConstants.LayerType;
import org.gcube.portlets.user.geoportaldataviewer.client.events.AddedLayerToMapEvent;
import org.gcube.portlets.user.geoportaldataviewer.client.events.AddedLayerToMapEventHandler;
import org.gcube.portlets.user.geoportaldataviewer.client.events.QueryDataEvent;
import org.gcube.portlets.user.geoportaldataviewer.client.events.QueryDataEventHandler;
import org.gcube.portlets.user.geoportaldataviewer.client.events.ShowDetailsEvent;
@ -62,7 +64,7 @@ public class LayerManager {
private List<LayerObject> layerObjects = new ArrayList<LayerObject>();
private HandlerManager eventBus = new HandlerManager("");
private HandlerManager layerManagerBus = new HandlerManager("");
private HandlerManager applicationBus;
@ -82,7 +84,7 @@ public class LayerManager {
*/
private void bindEvents() {
eventBus.addHandler(QueryDataEvent.TYPE, new QueryDataEventHandler() {
layerManagerBus.addHandler(QueryDataEvent.TYPE, new QueryDataEventHandler() {
@Override
public void onQueryInteraction(final QueryDataEvent queryEvent) {
@ -308,6 +310,16 @@ public class LayerManager {
}
}
});
layerManagerBus.addHandler(AddedLayerToMapEvent.TYPE, new AddedLayerToMapEventHandler() {
@Override
public void onLayerRendered(AddedLayerToMapEvent addedLayerToMapEvent) {
GWT.log("Fired into layerManagerBus");
applicationBus.fireEvent(addedLayerToMapEvent);
}
});
}
@ -373,7 +385,7 @@ public class LayerManager {
lo.setLayerItem(layerItem);
lo.setItemType(geonaItemType);
layerObjects.add(lo);
olMap.addWMSLayer(layerItem.getMapServerHost(), layerItem.getName());
olMap.addWMSLayer(layerItem);
}
});
}
@ -476,14 +488,9 @@ public class LayerManager {
public void setOlMap(OpenLayerOSM olMap) {
this.olMap = olMap;
}
/**
* Gets the event bus.
*
* @return the event bus
*/
public HandlerManager getEventBus() {
return eventBus;
public HandlerManager getLayerManagerBus() {
return layerManagerBus;
}
}

View File

@ -18,7 +18,7 @@ import ol.OLFactory;
public class OLMapManager {
private String targetId;
private HandlerManager eventBus;
private HandlerManager layerManagerBus;
private OpenLayerOSM olMap;
private ol.Extent dragStartExtent = null;
private Double zoomStart = null;
@ -26,15 +26,15 @@ public class OLMapManager {
private ol.Extent dragEndExtent = null;
private static final int QUERY_MIN_ZOOM_LEVEL = 13;
public OLMapManager(String targetId, HandlerManager eventBus) {
public OLMapManager(String targetId, HandlerManager layerManagerBus) {
this.targetId = targetId;
this.eventBus = eventBus;
this.layerManagerBus = layerManagerBus;
instanceOLMap();
}
public void instanceOLMap() {
olMap = new OpenLayerOSM(targetId, eventBus) {
olMap = new OpenLayerOSM(targetId, layerManagerBus) {
@Override
public void clickListener(MapBrowserEvent event) {
@ -44,7 +44,7 @@ public class OLMapManager {
if (olMap.isQueryPointActive()) {
GeoQuery select = toDataPointQuery(coordinate);
eventBus.fireEvent(new QueryDataEvent(select, coordinate));
layerManagerBus.fireEvent(new QueryDataEvent(select, coordinate));
}
@ -117,7 +117,7 @@ public class OLMapManager {
* @param coordinate the coordinate
* @return the geo query
*/
private GeoQuery toDataPointQuery(Coordinate coordinate) {
public GeoQuery toDataPointQuery(Coordinate coordinate) {
double lon = coordinate.getX();
double lat = coordinate.getY();
@ -166,12 +166,12 @@ public class OLMapManager {
GWT.log("the distance is: " + dist);
if (dist > 5000 || startExt.containsExtent(endExt)) {
GeoQuery select = toDataBoxQuery(dragEndExtent);
eventBus.fireEvent(new QueryDataEvent(select, endExt.getCenter()));
layerManagerBus.fireEvent(new QueryDataEvent(select, endExt.getCenter()));
}
}
else if(zoomStart!=null && zoomEnd!=null) {
if(zoomEnd<QUERY_MIN_ZOOM_LEVEL & !olMap.isQueryPointActive()) {
if(zoomEnd<QUERY_MIN_ZOOM_LEVEL && !olMap.isQueryPointActive()) {
olMap.hidePopup();
}
}

View File

@ -0,0 +1,60 @@
package org.gcube.portlets.user.geoportaldataviewer.client.events;
import org.gcube.portlets.user.geoportaldataviewer.shared.gis.LayerItem;
import com.google.gwt.event.shared.GwtEvent;
/**
* The Class AddedLayerToMapEvent.
*
* @author Francesco Mangiacrapa at ISTI-CNR (francesco.mangiacrapa@isti.cnr.it)
*
* Nov 18, 2020
*/
public class AddedLayerToMapEvent extends GwtEvent<AddedLayerToMapEventHandler> {
public static Type<AddedLayerToMapEventHandler> TYPE = new Type<AddedLayerToMapEventHandler>();
private LayerItem layerItem;
/**
* Instantiates a new added layer to map event.
*
* @param layerItem the layer item
*/
public AddedLayerToMapEvent(LayerItem layerItem) {
this.layerItem = layerItem;
}
/**
* Gets the associated type.
*
* @return the associated type
*/
@Override
public Type<AddedLayerToMapEventHandler> getAssociatedType() {
return TYPE;
}
/**
* Dispatch.
*
* @param handler the handler
*/
@Override
protected void dispatch(AddedLayerToMapEventHandler handler) {
handler.onLayerRendered(this);
}
/**
* Gets the layer item.
*
* @return the layer item
*/
public LayerItem getLayerItem() {
return layerItem;
}
}

View File

@ -0,0 +1,20 @@
package org.gcube.portlets.user.geoportaldataviewer.client.events;
import com.google.gwt.event.shared.EventHandler;
/**
* The Interface AddedLayerToMapEventHandler.
*
* @author Francesco Mangiacrapa at ISTI-CNR (francesco.mangiacrapa@isti.cnr.it)
*
* Nov 18, 2020
*/
public interface AddedLayerToMapEventHandler extends EventHandler {
/**
* On layer rendered.
*
* @param addedLayerToMapEvent the added layer to map event
*/
void onLayerRendered(AddedLayerToMapEvent addedLayerToMapEvent);
}

View File

@ -1,6 +1,8 @@
package org.gcube.portlets.user.geoportaldataviewer.client.gis;
import org.gcube.portlets.user.geoportaldataviewer.client.GeoportalDataViewerConstants;
import org.gcube.portlets.user.geoportaldataviewer.client.events.AddedLayerToMapEvent;
import org.gcube.portlets.user.geoportaldataviewer.shared.gis.LayerItem;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Style.Visibility;
@ -268,19 +270,19 @@ public abstract class OpenLayerOSM {
}-*/;
/**
* Adds the WMS layer.
*
* @param mapServerHost the map server host
* @param layerName the layer name
* @param layerItem the layer item
*/
public void addWMSLayer(String mapServerHost, String layerName) {
public void addWMSLayer(LayerItem layerItem) {
ImageWmsParams imageWMSParams = OLFactory.createOptions();
imageWMSParams.setLayers(layerName);
imageWMSParams.setLayers(layerItem.getName());
ImageWmsOptions imageWMSOptions = OLFactory.createOptions();
imageWMSOptions.setUrl(mapServerHost);
imageWMSOptions.setUrl(layerItem.getMapServerHost());
imageWMSOptions.setParams(imageWMSParams);
//imageWMSOptions.setRatio(1.5f);
@ -294,8 +296,39 @@ public abstract class OpenLayerOSM {
//visibleLayerItems
map.addLayer(wmsLayer);
GWT.log("Fired the event Added Layer");
eventBus.fireEvent(new AddedLayerToMapEvent(layerItem));
}
// /**
// * Adds the WMS layer.
// *
// * @param mapServerHost the map server host
// * @param layerName the layer name
// */
// public void addWMSLayer(String mapServerHost, String layerName) {
//
// ImageWmsParams imageWMSParams = OLFactory.createOptions();
// imageWMSParams.setLayers(layerName);
//
// ImageWmsOptions imageWMSOptions = OLFactory.createOptions();
// imageWMSOptions.setUrl(mapServerHost);
// imageWMSOptions.setParams(imageWMSParams);
// //imageWMSOptions.setRatio(1.5f);
//
// ImageWms imageWMSSource = new ImageWms(imageWMSOptions);
//
// LayerOptions layerOptions = OLFactory.createOptions();
// layerOptions.setSource(imageWMSSource);
//
// Image wmsLayer = new Image(layerOptions);
//
// //visibleLayerItems
//
// map.addLayer(wmsLayer);
// }
/**
* Adds the point vector source.
@ -475,8 +508,7 @@ public abstract class OpenLayerOSM {
public boolean mapInstancied() {
return this.map!=null;
}
}
}

View File

@ -3,6 +3,7 @@ package org.gcube.portlets.user.geoportaldataviewer.client.ui;
import org.gcube.portlets.user.geoportaldataviewer.client.ui.products.concessioni.ConcessioneView;
import org.gcube.portlets.user.geoportaldataviewer.shared.GeoNaItemRef;
import org.gcube.portlets.user.geoportaldataviewer.shared.products.ConcessioneDV;
import org.gcube.portlets.user.geoportaldataviewer.shared.products.model.RecordDV;
import com.github.gwtbootstrap.client.ui.Button;
import com.github.gwtbootstrap.client.ui.constants.ButtonType;
@ -28,6 +29,8 @@ public class DetailsPanel extends Composite {
@UiField
HTMLPanel detailsHTMLPanel;
private RecordDV displayedRecord = null;
interface DetailsPanelUiBinder extends UiBinder<Widget, DetailsPanel> {
}
@ -42,7 +45,7 @@ public class DetailsPanel extends Composite {
@Override
public void onClick(ClickEvent event) {
showPanelDetails(false);
hidePanelDetails();
}
});
@ -50,16 +53,27 @@ public class DetailsPanel extends Composite {
public void showDetailsFor(ConcessioneDV cdv, GeoNaItemRef geonaItemRef) {
this.displayedRecord = cdv;
datailsContainerPanel.clear();
if(detailsHTMLPanel.getParent()!=null)
detailsHTMLPanel.getParent().getElement().setScrollTop(0);
datailsContainerPanel.add(new ConcessioneView(geonaItemRef, cdv));
showPanelDetails(true);
showPanelDetails();
}
private void showPanelDetails(boolean visible) {
detailsHTMLPanel.setVisible(visible);
private void showPanelDetails() {
detailsHTMLPanel.setVisible(true);
}
public void hidePanelDetails() {
this.displayedRecord = null;
datailsContainerPanel.clear();
detailsHTMLPanel.setVisible(false);
}
public RecordDV getDisplayedRecord() {
return displayedRecord;
}
}

View File

@ -1,17 +1,12 @@
package org.gcube.portlets.user.geoportaldataviewer.client.ui;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.gcube.portlets.user.geoportaldataviewer.client.gis.OpenLayerOSM;
import org.gcube.portlets.user.geoportaldataviewer.shared.GeoNaItemRef;
import org.gcube.portlets.user.geoportaldataviewer.shared.products.ConcessioneDV;
import org.gcube.portlets.user.geoportaldataviewer.shared.products.model.RecordDV;
import com.github.gwtbootstrap.client.ui.Button;
import com.github.gwtbootstrap.client.ui.NavLink;
import com.github.gwtbootstrap.client.ui.Tab;
import com.github.gwtbootstrap.client.ui.constants.IconType;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
@ -49,21 +44,14 @@ public class GeonaDataViewMainPanel extends Composite {
@UiField
Button removeQuery;
// @UiField
// TabPanel mainTabPanel;
@UiField
DetailsPanel detailsPanel;
private List<Tab> listTabs = new ArrayList<Tab>();
private MapPanel mapPanel;
private OpenLayerOSM map;
private HandlerManager eventBus;
private Map<Long, Tab> mapProducts = new HashMap<Long, Tab>();
public GeonaDataViewMainPanel(HandlerManager eventBus, int mapHeight) {
initWidget(uiBinder.createAndBindUi(this));
@ -104,8 +92,6 @@ public class GeonaDataViewMainPanel extends Composite {
map.addPointVectorSource();
}
removeQuery.setVisible(true);
//dataBoxSelection.setActive(false);
//dataBoxSelection.getElement().removeClassName("active");
}
});
@ -119,8 +105,6 @@ public class GeonaDataViewMainPanel extends Composite {
map.addExtentInteraction();
}
removeQuery.setVisible(true);
//dataPointSelection.setActive(false);
//dataPointSelection.getElement().removeClassName("active");
}
});
@ -134,96 +118,19 @@ public class GeonaDataViewMainPanel extends Composite {
});
}
// public void renderProductIntoTab(Tab tab, ConcessioneDV cdv, GeoNaItemRef geonaItemRef) {
// tab.clear();
// tab.setHeading(cdv.getNome());
// tab.add(new ConcessioneView(geonaItemRef, cdv));
// mapProducts.put(cdv.getId(), tab);
// selectTabForProductId(cdv.getId());
// }
// public boolean selectTabForProductId(long productId) {
//
// Tab product = mapProducts.get(productId);
// if(product!=null) {
// selectTab(product);
// //found
// return true;
// }
// //not found
// return false;
//
// }
// /**
// * Adds the as tab.
// *
// * @param tabTitle the tab title
// * @param tabDescr the tab descr
// * @param spinner the spinner
// * @param w the w
// * @return the tab
// */
// public Tab addAsTab(String tabTitle, boolean spinner, Widget w){
//
//// field_create_analytics_request.setActive(false);
//
// Tab tab = new Tab();
// mainTabPanel.add(tab);
//
// if(spinner) {
// LoaderIcon loader = new LoaderIcon("Loading...");
// tab.add(loader);
// }
//
// tab.addClickHandler(new ClickHandler() {
//
// @Override
// public void onClick(ClickEvent event) {
//
// }
// });
//
// //tab.setActive(true);
// tab.setHeading(tabTitle);
// listTabs.add(tab);
//
// if(w!=null)
// tab.add(w);
//
// Scheduler.get().scheduleDeferred(new ScheduledCommand() {
//
// @Override
// public void execute() {
// selectTab(tab);
//
// }
// });
//
// return tab;
//
//// tab.setActive(true);
// }
// private void selectTab(Tab theTab) {
// int i = 1;
// for (Tab tab : listTabs) {
// GWT.log("Selecting "+tab);
// tab.setActive(false);
// if(tab.equals(theTab)) {
// GWT.log("Tab selected "+tab);
// mainTabPanel.selectTab(i);
// }
// i++;
// }
//
// }
public void showAsDetails(ConcessioneDV concessioneDV, GeoNaItemRef geonaItemRef) {
detailsPanel.showDetailsFor(concessioneDV, geonaItemRef);
}
public void hidePanelDetails() {
detailsPanel.hidePanelDetails();
}
public RecordDV getDisplyedRecord() {
return detailsPanel.getDisplayedRecord();
}
}

View File

@ -16,13 +16,18 @@
right: 20px;
position: absolute;
}
.margin-bottom-10 {
margin-bottom: 10px;
}
</ui:style>
<g:HTMLPanel ui:field="pageViewDetails">
<!-- <g:HTMLPanel ui:field="sharePanel" -->
<!-- addStyleNames="{style.align-to-right}"> -->
<!-- </g:HTMLPanel> -->
<!-- <g:HTMLPanel ui:field="sharePanel" -->
<!-- addStyleNames="{style.align-to-right}"> -->
<!-- </g:HTMLPanel> -->
<b:PageHeader ui:field="titolo"></b:PageHeader>
<g:HorizontalPanel>
<g:HorizontalPanel
addStyleNames="{style.margin-bottom-10}">
<b:Button ui:field="shareButton">Share</b:Button>
<b:Button ui:field="openButton">Open</b:Button>
</g:HorizontalPanel>

View File

@ -171,7 +171,7 @@ body {
/*margin-top: 30px;*/
padding-left: 5px;
overflow-y: auto;
transition: width 0.2s;
transition: width 0.5s;
z-index: 1000;
}