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); 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); } ConcessioneDV concessionDV = null; 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; concessionDV = ConvertToDataViewModel.toConcessione(concessione); } if(concessionDV==null) throw new Exception("Concessione not retrieved"); return concessionDV; }catch (Exception e) { String erroMsg = Concessione.class.getSimpleName() +" with id "+id+" not available"; LOG.error(erroMsg,e); Concessione concessione= TestModel.prepareConcessione(); LOG.warn("DUMMY CONCESSIONE: "+concessione); ConcessioneDV theConcessione = ConvertToDataViewModel.toConcessione(concessione); LOG.warn("RETURNING DUMMY CONCESSIONE: "+theConcessione+"!!!!!\n\n\n\n"); return theConcessione; //throw new Exception(erroMsg); } } }