package org.gcube.portlets.user.geoportaldataviewer.server; import java.util.HashMap; import java.util.List; import java.util.Map; import org.gcube.application.geoportal.managers.AbstractRecordManager; import org.gcube.application.geoportal.managers.ManagerFactory; import org.gcube.application.geoportal.model.Record; import org.gcube.application.geoportal.model.concessioni.Concessione; import org.gcube.common.scope.api.ScopeProvider; import org.gcube.portlets.user.geoportaldataviewer.client.GeoportalDataViewerService; import org.gcube.portlets.user.geoportaldataviewer.server.gis.FeatureParser; import org.gcube.portlets.user.geoportaldataviewer.server.gis.WMSUrlValidator; import org.gcube.portlets.user.geoportaldataviewer.server.util.SessionUtil; import org.gcube.portlets.user.geoportaldataviewer.shared.GeoNaDataObject; import org.gcube.portlets.user.geoportaldataviewer.shared.gis.BoundsMap; import org.gcube.portlets.user.geoportaldataviewer.shared.gis.LayerItem; import org.gcube.portlets.user.geoportaldataviewer.shared.gis.wms.GeoInformationForWMSRequest; import org.gcube.portlets.user.geoportaldataviewer.shared.gis.wms.Styles; import org.gcube.portlets.user.geoportaldataviewer.shared.gis.wms.ZAxis; import org.gcube.portlets.user.geoportaldataviewer.shared.products.ConcessioneDV; import org.gcube.spatial.data.geoutility.GeoNcWMSMetadataUtility; import org.gcube.spatial.data.geoutility.bean.LayerStyles; import org.gcube.spatial.data.geoutility.bean.LayerZAxis; import org.gcube.spatial.data.geoutility.bean.WmsParameters; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.gwt.user.server.rpc.RemoteServiceServlet; /** * The server side implementation of the RPC service. */ @SuppressWarnings("serial") public class GeoportalDataViewerServiceImpl extends RemoteServiceServlet implements GeoportalDataViewerService { public static final String PRODUCT_ID = "product_id"; /** The Constant LOG. */ private static final Logger LOG = LoggerFactory.getLogger(GeoportalDataViewerServiceImpl.class); @Override public GeoInformationForWMSRequest parseWmsRequest(String wmsRequest, String layerName) throws Exception { return loadGeoInfoForWmsRequest(wmsRequest, layerName); } /* Load geo info for wms request. * * @param wmsRequest the wms request * @param layerName the layer name * @return the gis viewer wms valid parameters * @throws Exception the exception */ public static GeoInformationForWMSRequest loadGeoInfoForWmsRequest(String wmsRequest, String layerName) throws Exception{ try { WMSUrlValidator validator = new WMSUrlValidator(wmsRequest, layerName); String wmsServiceHost = validator.getWmsServiceHost(); String validWMSRequest = validator.parseWMSRequest(true, true); layerName = validator.getLayerName(); String versionWms = validator.getValueOfParsedWMSParameter(WmsParameters.VERSION); String crs = validator.getValueOfParsedWMSParameter(WmsParameters.CRS); // HashMap mapWmsNotStandard = new HashMap(); if(validator.getMapWmsNoStandardParams()!=null){ mapWmsNotStandard.putAll(validator.getMapWmsNoStandardParams()); } // GeoNcWMSMetadataUtility geoGS = new GeoNcWMSMetadataUtility(validWMSRequest, 4000); //STYLES LayerStyles layerStyle = geoGS.loadStyles(); Map mapNcWmsStyles = layerStyle.getMapNcWmsStyles()==null?new HashMap(1):layerStyle.getMapNcWmsStyles(); mapWmsNotStandard.putAll(mapNcWmsStyles); //MAP STYLES INTO GWT-SERIALIZABLE OBJECT Styles styles = new Styles(layerStyle.getGeoStyles(), layerStyle.getMapNcWmsStyles(), layerStyle.isNcWms()); //ZAxis LayerZAxis layerZAxis = geoGS.loadZAxis(); //MAP ZAXIS INTO GWT-SERIALIZABLE OBJECT ZAxis zAxis = layerZAxis!=null?new ZAxis(layerZAxis.getUnits(), layerZAxis.isPositive(), layerZAxis.getValues()):null; return new GeoInformationForWMSRequest(wmsServiceHost, validWMSRequest, layerName, versionWms, crs, mapWmsNotStandard, styles, styles.isNcWms(), zAxis); } catch (Exception e) { String msg = "An error occurred during wms request validation for layer: "+layerName; LOG.error(msg,e); throw new Exception(msg); } } /* * (non-Javadoc) * * @see * org.gcube.portlets.user.gisviewer.client.GisViewerService#getDataResult(java. * util.List, java.lang.String, int) */ @Override public List getDataResult(List layerItems, String mapSrsName, BoundsMap selectBBOX, int maxWFSFeature, double zoomLevel) { LOG.info("getDataResult called"); List result = FeatureParser.getDataResults(layerItems, mapSrsName, selectBBOX, maxWFSFeature); /*for (GeoNaDataObject geoNaDataObject : result) { List features = geoNaDataObject.getFeatures(); for (FeatureRow feature : features) { List theProductIds = feature.getMapProperties().get(PRODUCT_ID); try { if (theProductIds != null && theProductIds.size() > 0) { String theProductID = theProductIds.get(0); LOG.info("Found: "+PRODUCT_ID + " loading "+ConcessioneDV.class.getSimpleName()); long productID = Long.parseLong(theProductID); ConcessioneDV concessioneDV = getConcessioneForId(productID); geoNaDataObject.setConcessioneDV(concessioneDV); LOG.debug("Added "+ConcessioneDV.class.getSimpleName()+" as "+concessioneDV); } } catch (Exception e) { LOG.error("Error:", e); } } }*/ return result; } @Override public ConcessioneDV getConcessioneForId(Long id) throws Exception{ LOG.info("getConcessioneForId "+id+ "called"); if(!SessionUtil.isIntoPortal()) { LOG.warn("OUT OF PORTAL setting HARD-CODED SCOPE"); String scope = "/gcube/devNext/NextNext"; LOG.warn("SCOPE is: "+scope); ScopeProvider.instance.set(scope); } if(id==null) throw new Exception("Invalid parameter. The Id is null"); try { LOG.info("Trying to get record for id "+id); AbstractRecordManager abmRecord = ManagerFactory.getByRecordID(id); LOG.info("Got record for id "+id); Record record = abmRecord.getRecord(); Concessione concessione = null; if(record !=null && record instanceof Concessione) { concessione = (Concessione) record; return ConvertToDataViewModel.toConcessione(concessione); }else throw new Exception("No Concessione with id '"+id+"' is available"); }catch (Exception e) { String erroMsg = Concessione.class.getSimpleName() +" with id "+id+" not available"; LOG.error(erroMsg,e); throw new Exception(erroMsg); } } }