Ported getLayersForId

This commit is contained in:
Francesco Mangiacrapa 2022-10-18 14:17:41 +02:00
parent 51a44a3e54
commit a3c10d1b18
10 changed files with 352 additions and 333 deletions

View File

@ -259,68 +259,6 @@ public class GeoportalDataViewer implements EntryPoint {
return listBaseMapLayers;
}
// private void loadGeonaDataViewerProfile() {
//
// Scheduler.get().scheduleDeferred(new ScheduledCommand() {
//
// @Override
// public void execute() {
// GeoportalDataViewerServiceAsync.Util.getInstance()
// .getGeoNaDataViewProfile(new AsyncCallback<GNADataViewerConfigProfile>() {
//
// @Override
// public void onFailure(Throwable caught) {
// Window.alert(caught.getMessage());
//
// }
//
// @Override
// public void onSuccess(GNADataViewerConfigProfile profile) {
// geonaDataViewerProfile = profile;
// GWT.log("Profile: " + geonaDataViewerProfile);
// Iterator<String> it;
//
// String theItemType = null;
// if (theItemType == null) {
// it = geonaDataViewerProfile.getMapLayers().keySet().iterator();
// it.hasNext();
// theItemType = it.next();
// }
//
// GWT.log("getGeoNaDataViewProfile theItemType is: " + theItemType);
//
// LayerItem layerItem = geonaDataViewerProfile.getMapLayers().get(theItemType);
//
//// if (layerItem == null) {
//// Window.alert("Not detected any layer with type: " + theItemType);
//// return;
//// }
//
// GWT.log("ON module load The layerItem is: " + layerItem);
// String layerName = URLUtil.getValueOfParameter("layers", layerItem.getWmsLink());
// layerItem.setName(layerName);
// layerManager.setBaseLayerFromIsProfile(layerItem);
// layerManager.addLayer(theItemType, null, null, layerItem.getWmsLink(), false, false,
// null, false, null, null, null);
//
// 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);
// return;
// }
// GeoNaItemRef gir = new GeoNaItemRef(paramGeonaItemID, paramGeonaItemType);
// applicationBus.fireEvent(new ShowDetailsEvent(gir, null, null));
// }
//
// }
// });
// }
// });
//
// }
/**
* Update window size.

View File

@ -6,10 +6,10 @@ import org.gcube.application.geoportalcommon.shared.GNADataViewerConfigProfile;
import org.gcube.application.geoportalcommon.shared.GeoNaItemRef;
import org.gcube.application.geoportalcommon.shared.ResultSetPaginatedData;
import org.gcube.application.geoportalcommon.shared.SearchingFilter;
import org.gcube.application.geoportalcommon.shared.geoportal.materialization.GCubeSDIViewerLayerDV;
import org.gcube.application.geoportalcommon.shared.geoportal.view.ProjectView;
import org.gcube.application.geoportalcommon.shared.gis.BoundsMap;
import org.gcube.application.geoportalcommon.shared.products.ConcessioneDV;
import org.gcube.application.geoportalcommon.shared.products.model.LayerConcessioneDV;
import org.gcube.application.geoportalcommon.shared.products.model.UploadedImageDV;
import org.gcube.portlets.user.geoportaldataviewer.shared.GeoNaSpatialQueryResult;
import org.gcube.portlets.user.geoportaldataviewer.shared.ItemFieldsResponse;
@ -94,7 +94,7 @@ public interface GeoportalDataViewerService extends RemoteService {
* @param itemId the item id
* @param maxImages the max images
* @return the uploaded images for id
* @throws Exception
* @throws Exception the exception
*/
List<UploadedImageDV> getUploadedImagesForId(String itemType, String itemId, Integer maxImages) throws Exception;
@ -110,12 +110,12 @@ public interface GeoportalDataViewerService extends RemoteService {
/**
* Gets the layers for id.
*
* @param itemType the item type
* @param itemId the item id
* @param theProfileID the the profile ID
* @param theProductID the the product ID
* @return the layers for id
* @throws Exception the exception
*/
List<LayerConcessioneDV> getLayersForId(String itemType, String itemId) throws Exception;
List<GCubeSDIViewerLayerDV> getLayersForId(String theProfileID, String theProductID) throws Exception;
/**
* Gets the WFS features.
@ -130,13 +130,18 @@ public interface GeoportalDataViewerService extends RemoteService {
List<GeoNaSpatialQueryResult> getWFSFeatures(List<LayerObject> layerObjects, String mapSrsName,
BoundsMap selectBBOX, int maxWFSFeature, double zoomLevel);
/**
* Gets the list base layers.
*
* @return the list base layers
*/
List<BaseMapLayer> getListBaseLayers();
/**
* List of fields for searching.
*
* @return the list
* @throws Exception
* @throws Exception the exception
*/
List<ItemFieldsResponse> listOfFieldsForSearching() throws Exception;
@ -178,34 +183,10 @@ public interface GeoportalDataViewerService extends RemoteService {
boolean reloadFromService) throws Exception;
/**
*
*
*
*
*
*
*
*
*
*
*
*
*
*
* NEW CODE HERE
*
*
*
*
*
*
*
*
*
*
*
*
*
* NEW CODE HERE.
*
* @return the initial configuration
* @throws Exception the exception
*/
ViewerConfiguration getInitialConfiguration() throws Exception;

View File

@ -6,10 +6,10 @@ import org.gcube.application.geoportalcommon.shared.GNADataViewerConfigProfile;
import org.gcube.application.geoportalcommon.shared.GeoNaItemRef;
import org.gcube.application.geoportalcommon.shared.ResultSetPaginatedData;
import org.gcube.application.geoportalcommon.shared.SearchingFilter;
import org.gcube.application.geoportalcommon.shared.geoportal.materialization.GCubeSDIViewerLayerDV;
import org.gcube.application.geoportalcommon.shared.geoportal.view.ProjectView;
import org.gcube.application.geoportalcommon.shared.gis.BoundsMap;
import org.gcube.application.geoportalcommon.shared.products.ConcessioneDV;
import org.gcube.application.geoportalcommon.shared.products.model.LayerConcessioneDV;
import org.gcube.application.geoportalcommon.shared.products.model.UploadedImageDV;
import org.gcube.portlets.user.geoportaldataviewer.shared.GeoNaSpatialQueryResult;
import org.gcube.portlets.user.geoportaldataviewer.shared.ItemFieldsResponse;
@ -58,7 +58,7 @@ public interface GeoportalDataViewerServiceAsync {
void getPublicLinksFor(GeoNaItemRef item, AsyncCallback<GeoNaItemRef> asyncCallback);
void getLayersForId(String itemType, String itemId, AsyncCallback<List<LayerConcessioneDV>> asyncCallback);
void getLayersForId(String theProfileID, String theProductID, AsyncCallback<List<GCubeSDIViewerLayerDV>> asyncCallback);
void getWFSFeatures(List<LayerObject> layerObjects, String mapSrsName, BoundsMap selectBBOX, int maxWFSFeature,
double zoomLevel, AsyncCallback<List<GeoNaSpatialQueryResult>> callback);

View File

@ -9,12 +9,14 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.gcube.application.geoportalcommon.shared.geoportal.materialization.GCubeSDIViewerLayerDV;
import org.gcube.application.geoportalcommon.shared.geoportal.materialization.IndexLayerDV;
import org.gcube.application.geoportalcommon.shared.gis.BoundsMap;
import org.gcube.application.geoportalcommon.shared.products.content.WorkspaceContentDV;
import org.gcube.application.geoportalcommon.shared.products.model.UploadedImageDV;
import org.gcube.portlets.user.geoportaldataviewer.client.GeoportalDataViewerConstants.LayerType;
import org.gcube.portlets.user.geoportaldataviewer.client.GeoportalDataViewerConstants.MAP_PROJECTION;
import org.gcube.portlets.user.geoportaldataviewer.client.GeoportalDataViewerConstants.MapEventType;
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;
@ -191,14 +193,12 @@ public class LayerManager {
public void onSuccess(List<GeoNaSpatialQueryResult> listGeonaDataObjects) {
GWT.log("GeoNaDataObject's is/are " + listGeonaDataObjects.size());
// GWT.log("GeoNaDataObject's: " + listGeonaDataObjects);
// GeoportalDataViewerConstants.print("GeoNaDataObject's:
// "+listGeonaDataObjects);
GWT.log("GeoNaDataObject's must be revisited");
/*
if (listGeonaDataObjects == null || listGeonaDataObjects.isEmpty())
return;
@ -307,16 +307,18 @@ public class LayerManager {
if (olMap.getCurrentZoomLevel() > OLMapManager.QUERY_MIN_ZOOM_LEVEL) {
GWT.log("Current zoom level is less than QUERY_MIN_ZOOM_LEVEL, Loading all layers of any product");
for (String theProductId : listUniqueProducts.keySet()) {
GWT.log("Loading layers of theProductId: " + theProductId);
for (final String theProductID : listUniqueProducts.keySet()) {
GWT.log("Loading layers of theProductId: " + theProductID);
// retrieving and showing WMS layers of a concessione if the ZOOM
// level
// is >
// QUERY_MIN_ZOOM_LEVEL
final String theProfileID = "?????";
GeoportalDataViewerServiceAsync.Util.getInstance().getLayersForId(
"concessione", theProductId,
new AsyncCallback<List<LayerConcessioneDV>>() {
theProfileID, theProductID,
new AsyncCallback<List<GCubeSDIViewerLayerDV>>() {
@Override
public void onFailure(Throwable caught) {
@ -325,22 +327,51 @@ public class LayerManager {
}
@Override
public void onSuccess(List<LayerConcessioneDV> result) {
public void onSuccess(
List<GCubeSDIViewerLayerDV> result) {
for (LayerConcessioneDV layer : result) {
GWT.log("Adding layer: "
+ layer.getLayerName());
addLayer("concessione", layer.getLayerName(),
for (GCubeSDIViewerLayerDV layer : result) {
GWT.log("Adding layer: " + layer.getLayerName());
addLayer(LayerObjectType.PROJECT_LAYER,
layer.getLayerName(),
layer.getWmsLink(), false, false,
layer.getLayerUUID(), true,
layer.getLayerName(),
layer.getWMSLink(), false, false, null,
true,
OLMapManager.LAYER_DETAIL_MIN_RESOLUTION,
OLMapManager.LAYER_DETAIL_MAX_RESOLUTION,
layer.getRefersTo());
theProfileID, theProductID);
}
}
});
// GeoportalDataViewerServiceAsync.Util.getInstance().getLayersForId(
// "concessione", theProductID,
// new AsyncCallback<List<LayerConcessioneDV>>() {
//
// @Override
// public void onFailure(Throwable caught) {
// // TODO Auto-generated method stub
//
// }
//
// @Override
// public void onSuccess(List<LayerConcessioneDV> result) {
//
// for (LayerConcessioneDV layer : result) {
// GWT.log("Adding layer: "
// + layer.getLayerName());
// addLayer("concessione", layer.getLayerName(),
// layer.getLayerName(),
// layer.getWmsLink(), false, false,
// layer.getLayerUUID(), true,
// OLMapManager.LAYER_DETAIL_MIN_RESOLUTION,
// OLMapManager.LAYER_DETAIL_MAX_RESOLUTION,
// layer.getRefersTo());
// }
//
// }
// });
}
} else {
// removing all WMS detail layers if the ZOOM level is <
@ -349,9 +380,7 @@ public class LayerManager {
}
}
}
*/
}
});
}
@ -391,7 +420,7 @@ public class LayerManager {
* Parses the geona references.
*
* @param layerObject the layer object
* @param fRow the f row
* @param fRow the f row
* @return the show details event
*/
private ShowDetailsEvent parseGeonaReferences(LayerObject layerObject, FeatureRow fRow) {
@ -446,27 +475,26 @@ public class LayerManager {
}
}
/**
* Adds the layer.
*
* @param lot the lot
* @param layerTitle the layer title
* @param layerName the layer name
* @param wmsLink the wms link
* @param isBase the is base
* @param lot the lot
* @param layerTitle the layer title
* @param layerName the layer name
* @param wmsLink the wms link
* @param isBase the is base
* @param displayInLayerSwitcher the display in layer switcher
* @param UUID the uuid
* @param asDetailLayer the as detail layer
* @param minResolution the min resolution
* @param maxResolution the max resolution
* @param profileID the profile ID
* @param projectID the project ID
* @param UUID the uuid
* @param asDetailLayer the as detail layer
* @param minResolution the min resolution
* @param maxResolution the max resolution
* @param profileID the profile ID
* @param projectID the project ID
*/
public void addLayer(final LayerObjectType lot, final String layerTitle, final String layerName,
final String wmsLink, final boolean isBase, final boolean displayInLayerSwitcher, final String UUID,
final boolean asDetailLayer, Double minResolution, Double maxResolution,
String profileID, String projectID) {
final boolean asDetailLayer, Double minResolution, Double maxResolution, String profileID,
String projectID) {
// final LayoutContainer westPanel = (LayoutContainer) layersPanel.getParent();
//
@ -514,7 +542,7 @@ public class LayerManager {
lo.setProjectId(projectID);
String key = layerItem.getName(); // should be unique //
//layerObjects.put(key, lo);
// layerObjects.put(key, lo);
if (!asDetailLayer) { // is a base layer LayerObject blo =
LayerObject blo = mapBaseLayerObjects.get(key);
@ -545,9 +573,9 @@ public class LayerManager {
*/
public void addIndexLayer(IndexLayerDV layer) {
addLayer(LayerObjectType.INDEX_LAYER, null, null, layer.getLayer().getOgcLinks().get("wms"), false, false, null, false,
null, null, null, null);
addLayer(LayerObjectType.INDEX_LAYER, null, null, layer.getLayer().getOgcLinks().get("wms"), false, false, null,
false, null, null, null, null);
}
/**

View File

@ -62,7 +62,7 @@ public class LayersSectionViewer extends Composite {
String wmsLink = null;
try {
wmsLink = layer.getOgcLinks().get("wms");
wmsLink = layer.getWMSLink();
} catch (Exception e) {
return;
}

View File

@ -25,6 +25,7 @@ import org.gcube.application.geoportal.common.model.useCaseDescriptor.UseCaseDes
import org.gcube.application.geoportal.common.rest.Projects;
import org.gcube.application.geoportalcommon.ConvertToDataValueObjectModel;
import org.gcube.application.geoportalcommon.GeoportalCommon;
import org.gcube.application.geoportalcommon.ProjectDVBuilder;
import org.gcube.application.geoportalcommon.geoportal.GeoportalClientCaller;
import org.gcube.application.geoportalcommon.geoportal.ProjectsCaller;
import org.gcube.application.geoportalcommon.geoportal.UseCaseDescriptorCaller;
@ -37,6 +38,7 @@ import org.gcube.application.geoportalcommon.shared.geoportal.ConfigurationDV;
import org.gcube.application.geoportalcommon.shared.geoportal.DocumentDV;
import org.gcube.application.geoportalcommon.shared.geoportal.ResultDocumentDV;
import org.gcube.application.geoportalcommon.shared.geoportal.config.ItemFieldDV;
import org.gcube.application.geoportalcommon.shared.geoportal.materialization.GCubeSDIViewerLayerDV;
import org.gcube.application.geoportalcommon.shared.geoportal.materialization.IndexLayerDV;
import org.gcube.application.geoportalcommon.shared.geoportal.project.ProjectDV;
import org.gcube.application.geoportalcommon.shared.geoportal.ucd.GEOPORTAL_DATA_HANDLER;
@ -45,7 +47,6 @@ import org.gcube.application.geoportalcommon.shared.geoportal.ucd.UseCaseDescrip
import org.gcube.application.geoportalcommon.shared.geoportal.view.ProjectView;
import org.gcube.application.geoportalcommon.shared.gis.BoundsMap;
import org.gcube.application.geoportalcommon.shared.products.ConcessioneDV;
import org.gcube.application.geoportalcommon.shared.products.model.LayerConcessioneDV;
import org.gcube.application.geoportalcommon.shared.products.model.UploadedImageDV;
import org.gcube.application.geoportalcommon.util.URLParserUtil;
import org.gcube.portlets.user.geoportaldataviewer.client.GeoportalDataViewerService;
@ -92,12 +93,32 @@ public class GeoportalDataViewerServiceImpl extends RemoteServiceServlet impleme
private static final String CACHE_IMAGE_PREVIEW_FOR_CONCESSIONE = "MAP_IMAGE_PREVIEW_FOR_CONCESSIONE";
/**
* The Enum COMMON_IMAGES_FORMAT.
*
* @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it
*
* Oct 18, 2022
*/
public static enum COMMON_IMAGES_FORMAT {
gif, png, jpeg, jpg, bmp, tif, tiff, svg, avif, webp
}
/**
* The Class ImageDetector.
*
* @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it
*
* Oct 18, 2022
*/
public static class ImageDetector {
/**
* Gets the names.
*
* @param e the e
* @return the names
*/
private static String[] getNames(Class<? extends Enum<?>> e) {
return Arrays.stream(e.getEnumConstants()).map(Enum::name).toArray(String[]::new);
}
@ -111,6 +132,12 @@ public class GeoportalDataViewerServiceImpl extends RemoteServiceServlet impleme
}
/**
* Checks if is image.
*
* @param mimeType the mime type
* @return true, if is image
*/
public static boolean isImage(String mimeType) {
if (mimeType == null || mimeType.isEmpty())
return false;
@ -663,34 +690,10 @@ public class GeoportalDataViewerServiceImpl extends RemoteServiceServlet impleme
}
/**
*
*
*
*
*
*
*
*
*
*
*
*
*
*
* NEW CODE HERE
*
*
*
*
*
*
*
*
*
*
*
*
*
* NEW CODE HERE.
*
* @return the initial configuration
* @throws Exception the exception
*/
@Override
@ -786,6 +789,12 @@ public class GeoportalDataViewerServiceImpl extends RemoteServiceServlet impleme
}.execute().getResult();
}
/**
* List of fields for searching.
*
* @return the list
* @throws Exception the exception
*/
@Override
public List<ItemFieldsResponse> listOfFieldsForSearching() throws Exception {
LOG.info("listOfFieldsForSearching called");
@ -811,10 +820,11 @@ public class GeoportalDataViewerServiceImpl extends RemoteServiceServlet impleme
listUseCaseDescriptor = new ArrayList<UseCaseDescriptor>();
}
//List<UseCaseDescriptorDV> listUCDDV = new ArrayList<UseCaseDescriptorDV>(listUseCaseDescriptor.size());
// List<UseCaseDescriptorDV> listUCDDV = new
// ArrayList<UseCaseDescriptorDV>(listUseCaseDescriptor.size());
for (UseCaseDescriptor ucd : listUseCaseDescriptor) {
UseCaseDescriptorDV ucdDV = ConvertToDataValueObjectModel.toUseCaseDescriptorDV(ucd, null);
//listUCDDV.add(ucdDV);
// listUCDDV.add(ucdDV);
HandlerDeclarationDV dataListHandler = getHandlerDeclarationFor(ucdDV,
GEOPORTAL_DATA_HANDLER.geoportal_data_list);
@ -825,7 +835,7 @@ public class GeoportalDataViewerServiceImpl extends RemoteServiceServlet impleme
ItemFieldsResponse ifResponse = new ItemFieldsResponse();
ifResponse.setUseCaseDescriptorDV(ucdDV);
List<ItemFieldDV> listItemFields = (List<ItemFieldDV>) config.getConfiguration();
//map.put(ucdDV.getProfileID(), listItemFields);
// map.put(ucdDV.getProfileID(), listItemFields);
ifResponse.setListItemFields(listItemFields);
listIFResponse.add(ifResponse);
break;
@ -844,6 +854,13 @@ public class GeoportalDataViewerServiceImpl extends RemoteServiceServlet impleme
}
}
/**
* Gets the handler declaration for.
*
* @param useCaseDescriptor the use case descriptor
* @param dataHandler the data handler
* @return the handler declaration for
*/
public static HandlerDeclarationDV getHandlerDeclarationFor(UseCaseDescriptorDV useCaseDescriptor,
GEOPORTAL_DATA_HANDLER dataHandler) {
@ -862,6 +879,12 @@ public class GeoportalDataViewerServiceImpl extends RemoteServiceServlet impleme
}
/**
* Inits the.
*
* @param config the config
* @throws ServletException the servlet exception
*/
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config);
@ -870,10 +893,16 @@ public class GeoportalDataViewerServiceImpl extends RemoteServiceServlet impleme
new GcubeProfilesPerUCDIdCache();
}
/**
* On before request deserialized.
*
* @param serializedRequest the serialized request
*/
@Override
protected void onBeforeRequestDeserialized(String serializedRequest) {
LOG.info("onBeforeRequestDeserialized called");
String scope = "";
try {
new GeoportalServiceIdentityProxy(this.getThreadLocalRequest());
scope = SessionUtil.getCurrentContext(this.getThreadLocalRequest(), true);
@ -967,76 +996,52 @@ public class GeoportalDataViewerServiceImpl extends RemoteServiceServlet impleme
/**
* Gets the layers for id.
*
* @param itemType the item type
* @param itemId the item id
* @param profileID the profile ID
* @param projectID the project ID
* @return the layers for id
* @throws Exception the exception
*/
@Override
public List<LayerConcessioneDV> getLayersForId(String itemType, String itemId) throws Exception {
LOG.info("getLayersForId [itemId: " + itemId + ", itemType: " + itemType + "] called");
public List<GCubeSDIViewerLayerDV> getLayersForId(String profileID, String projectID) throws Exception {
LOG.info("getLayersForId [profileID: " + profileID + ", projectID: " + projectID + "] called");
throw new Exception("getLayersForId must be revisited!!!");
if (profileID == null)
throw new Exception("Invalid parameter. The profileID is null");
/*
* if (itemType == null) throw new
* Exception("Invalid parameter. The itemType is null");
*
* if (itemId == null) throw new
* Exception("Invalid parameter. The itemId is null");
*
* List<LayerConcessioneDV> listLayers = null;
*
* try {
*
* SessionUtil.getCurrentContext(this.getThreadLocalRequest(), true); String
* userName = null; try { userName =
* SessionUtil.getCurrentUser(this.getThreadLocalRequest()).getUsername(); }
* catch (Exception e) { LOG.
* info("User not found in session, the userName for cecking policy will be null"
* ); }
*
* if (itemType.equalsIgnoreCase("concessione")) {
*
* LOG.info("Trying to get concessione for id " + itemId);
* GeoportalServiceIdentityProxy cms = new
* GeoportalServiceIdentityProxy(this.getThreadLocalRequest()); Concessione
* concessione = cms.getItemById(itemId);
*
* BaseConcessioneDV baseConcessione =
* ConvertToDataViewModel.toBaseConcessione(concessione); if (concessione !=
* null) { LOG.info("For id " + itemId + ", got concessione " +
* concessione.getNome() + " from service"); listLayers = new
* ArrayList<LayerConcessioneDV>(); if (concessione.getPianteFineScavo() !=
* null) {
*
* for (LayerConcessione lc : concessione.getPianteFineScavo()) { if
* (GeoNACheckAccessPolicy.isAccessible(lc.getPolicy().name(), userName)) {
* listLayers.add(ConvertToDataViewModel.toLayerConcessione(lc,
* baseConcessione)); } }
*
* LayerConcessione lcPosizionamento = concessione.getPosizionamentoScavo();
*
* if (lcPosizionamento != null) {
*
* if (GeoNACheckAccessPolicy.isAccessible(lcPosizionamento.getPolicy().name(),
* userName)) {
*
* LayerConcessioneDV thePosizScavo = ConvertToDataViewModel
* .toLayerConcessione(lcPosizionamento, baseConcessione); if (thePosizScavo !=
* null) listLayers.add(thePosizScavo); } }
*
* }
*
* } else throw new Exception("Concessione with id '" + itemId +
* "' not available"); } LOG.info("For id " + itemId + ", returning " +
* listLayers.size() + " layer/s"); return listLayers;
*
* } catch (Exception e) { String erroMsg = "Layers are not available for " +
* Concessione.class.getSimpleName() + " with id " + itemId; LOG.error(erroMsg,
* e); throw new Exception(erroMsg); }
*
*/
if (projectID == null)
throw new Exception("Invalid parameter. The projectID is null");
List<GCubeSDIViewerLayerDV> listLayers = null;
try {
SessionUtil.getCurrentContext(this.getThreadLocalRequest(), true);
try {
SessionUtil.getCurrentUser(this.getThreadLocalRequest()).getUsername();
} catch (Exception e) {
LOG.info("User not found in session, the userName for cecking policy will be null");
}
LOG.info("Trying to get project for id " + profileID);
new GeoportalServiceIdentityProxy(this.getThreadLocalRequest());
Project theProject = GeoportalClientCaller.projects().getProjectByID(profileID, projectID);
String jsonDocument = theProject.getTheDocument().toJson();
LOG.trace("JSON Project is: " + jsonDocument);
String materializationJSONPath = String.format("%s.%s.%s", Geoportal_JSON_Mapper.JSON_$_POINTER,
Geoportal_JSON_Mapper.FILESET, Geoportal_JSON_Mapper._MATERIALIZATIONS);
listLayers = Geoportal_JSON_Mapper.readGcubeSDILayersForFileset(materializationJSONPath, jsonDocument);
LOG.info("For projectID " + projectID + ", returning " + listLayers.size() + " layer/s");
return listLayers;
} catch (Exception e) {
String erroMsg = "Layers are not available for profileID " + profileID + " with projectID " + projectID;
LOG.error(erroMsg, e);
throw new Exception(erroMsg);
}
}
@ -1067,10 +1072,11 @@ public class GeoportalDataViewerServiceImpl extends RemoteServiceServlet impleme
LOG.info("Trying to get project for id " + profileID);
GeoportalServiceIdentityProxy geoIP = new GeoportalServiceIdentityProxy(this.getThreadLocalRequest());
UseCaseDescriptorDV ucd = geoIP.getUCDByID(profileID);
ProjectDV theProjectDV = geoIP.getProjectByID(profileID, projectID);
new GeoportalServiceIdentityProxy(this.getThreadLocalRequest());
UseCaseDescriptor ucd = GeoportalClientCaller.useCaseDescriptors().getUCDForId(profileID);
Project theProject = GeoportalClientCaller.projects().getProjectByID(profileID, projectID);
ProjectDVBuilder projectBuilder = ProjectDVBuilder.newBuilder().fullDocumentMap(true);
ProjectDV theProjectDV = ConvertToDataValueObjectModel.toProjectDV(theProject, projectBuilder);
theProjectDV.setProfileName(ucd.getName());
ProjectView projectView = Geoportal_JSON_Mapper.loadProjectView(theProjectDV, scope, userName);

View File

@ -22,6 +22,7 @@ import org.gcube.application.geoportalcommon.shared.geoportal.view.ProjectView;
import org.gcube.application.geoportalcommon.shared.geoportal.view.SectionView;
import org.gcube.application.geoportalcommon.shared.geoportal.view.SubDocumentView;
import org.gcube.portlets.user.geoportaldataviewer.server.GeoportalDataViewerServiceImpl.ImageDetector;
import org.gcube.portlets.user.geoportaldataviewer.server.util.URLParserUtil;
import org.gcube.portlets.widgets.mpformbuilder.shared.metadata.MetaDataProfileBean;
import org.gcube.portlets.widgets.mpformbuilder.shared.metadata.MetadataFieldWrapper;
import org.json.JSONArray;
@ -38,6 +39,10 @@ import com.jayway.jsonpath.spi.json.JsonOrgJsonProvider;
public class Geoportal_JSON_Mapper {
public static final String _PAYLOADS = "_payloads";
public static final String _MATERIALIZATIONS = "_materializations";
private static final Logger LOG = LoggerFactory.getLogger(Geoportal_JSON_Mapper.class);
public static final String FILESET = "fileset";
@ -50,6 +55,8 @@ public class Geoportal_JSON_Mapper {
public static final String JSON_$_POINTER = "$";
public static final String _THEDOCUMENT = "_theDocument";
public static ProjectView loadProjectView(ProjectDV theProjectDV, String scope, String username) throws Exception {
String theWholeProjectAsJSON = theProjectDV.getTheDocument().getDocumentAsJSON();
@ -107,7 +114,7 @@ public class Geoportal_JSON_Mapper {
// Reading Fileset _materializations / layers
listLayers = readGcubeSDILayersForFileset(filesetJSONPath, wholeSectionDoc);
subDocumentView.setListLayers(listLayers);
sectionView.addSubDocument(subDocumentView);
projectView.addSectionView(sectionView);
@ -267,11 +274,11 @@ public class Geoportal_JSON_Mapper {
* @param sectionJSONDocument the section JSON document
* @return the list
*/
private static List<Payload> readPayloadsForFileset(String filesetJSONPath, String sectionJSONDocument) {
public static List<Payload> readPayloadsForFileset(String filesetJSONPath, String sectionJSONDocument) {
LOG.debug("readPayloadsForFileset called");
List<Payload> listPayloads = new ArrayList<Payload>();
String _payloadsJSONPath = String.format("%s.%s", filesetJSONPath, "_payloads");
String _payloadsJSONPath = String.format("%s.%s", filesetJSONPath, _PAYLOADS);
try {
com.jayway.jsonpath.Configuration configuration = com.jayway.jsonpath.Configuration.builder()
.jsonProvider(new JsonOrgJsonProvider()).build();
@ -299,64 +306,24 @@ public class Geoportal_JSON_Mapper {
}
private static List<GCubeSDIViewerLayerDV> readGcubeSDILayersForFileset(String materializationJSONPath,
public static List<GCubeSDIViewerLayerDV> readGcubeSDILayersForFileset(String materializationParentJSONPath,
String sectionJSONDocument) {
LOG.debug("readGcubeSDILayersForFileset called");
List<GCubeSDIViewerLayerDV> listSDILayers = new ArrayList<GCubeSDIViewerLayerDV>();
String _materializationsJSONPath = String.format("%s.%s", materializationJSONPath, "_materializations");
String _materializationsJSONPath = String.format("%s.%s", materializationParentJSONPath, _MATERIALIZATIONS);
try {
com.jayway.jsonpath.Configuration configurationJSONSmart = com.jayway.jsonpath.Configuration.builder()
.jsonProvider(new JsonOrgJsonProvider()).build();
LOG.info("Reading sectionPath at {} into section document {}", _materializationsJSONPath,
sectionJSONDocument);
LOG.info("Reading sectionPath {} into section document {}", _materializationsJSONPath, sectionJSONDocument);
JsonPath theSectionPolycJsonPath = JsonPath.compile(_materializationsJSONPath);
Object _materializations = theSectionPolycJsonPath.read(sectionJSONDocument, configurationJSONSmart)
.toString();
Object _materializations = theSectionPolycJsonPath.read(sectionJSONDocument, configurationJSONSmart);
if (_materializations instanceof String) {
String toStringMater = (String) _materializations;
LOG.trace("The _materializations is a String {}", toStringMater);
JSONArray jsonArray = new JSONArray(toStringMater);
for (int i = 0; i < jsonArray.length(); i++) {
// TODO THIS PART SHOULD BE REVISITED/OPTIMIZED
LOG.trace("_materializations.class(): " + _materializations.getClass());
GCubeSDIViewerLayerDV gsdiLayer = new GCubeSDIViewerLayerDV();
JSONObject thJsonObject = jsonArray.getJSONObject(i);
try {
gsdiLayer.setType(thJsonObject.getString(_TYPE));
} catch (Exception e) {
LOG.warn("No " + _TYPE + " found", e);
}
String toSerializeJSONOBJ = jsonArray.getJSONObject(i).toString();
String jsonPath = null;
try {
jsonPath = String.format("%s.%s", JSON_$_POINTER, _BBOX);
BBOXDV bbox = JsonPath.using(configurationJSONSmart).parse(toSerializeJSONOBJ).read(jsonPath,
BBOXDV.class);
gsdiLayer.setBbox(bbox);
LOG.trace("bbox " + i + " is: " + bbox);
} catch (Exception e) {
LOG.warn(jsonPath + " error: ", e);
}
try {
jsonPath = String.format("%s.%s", JSON_$_POINTER, _OGC_LINKS_WMS);
String jsonString = JsonPath.using(configurationJSONSmart).parse(toSerializeJSONOBJ)
.read(jsonPath).toString();
Gson gson = new Gson();
HashMap map = gson.fromJson(jsonString, HashMap.class);
gsdiLayer.setOgcLinks(map);
LOG.trace("ogcLinks " + i + " is: " + map);
} catch (Exception e) {
LOG.warn(jsonPath + " error: ", e);
}
LOG.trace("gsdiLayer " + i + " is: " + gsdiLayer);
listSDILayers.add(gsdiLayer);
}
}
listSDILayers = recursiveFetchingLayers(configurationJSONSmart, _materializations, listSDILayers);
} catch (Exception e) {
LOG.warn("Error on reading the JSON Path " + _materializationsJSONPath + " in the doc "
@ -367,6 +334,78 @@ public class Geoportal_JSON_Mapper {
}
private static List<GCubeSDIViewerLayerDV> recursiveFetchingLayers(com.jayway.jsonpath.Configuration config,
Object objectJSON, List<GCubeSDIViewerLayerDV> listSDILayers) {
if (objectJSON == null)
return listSDILayers;
if (objectJSON instanceof JSONArray) {
JSONArray theJsonArray = (JSONArray) objectJSON;
LOG.trace("jsonArray: " + theJsonArray.toString(3));
for (int i = 0; i < theJsonArray.length(); i++) {
recursiveFetchingLayers(config, theJsonArray.get(i), listSDILayers);
}
} else if (objectJSON instanceof JSONObject) {
JSONObject theJsonObject = (JSONObject) objectJSON;
LOG.trace("theJSONObject: " + theJsonObject.toString(3));
GCubeSDIViewerLayerDV gsdiLayer = converLayer(config, theJsonObject);
listSDILayers.add(gsdiLayer);
}
return listSDILayers;
}
// TODO THIS PART SHOULD BE REVISITED/OPTIMIZED
private static GCubeSDIViewerLayerDV converLayer(com.jayway.jsonpath.Configuration config,
JSONObject thJsonObject) {
LOG.debug("converLayer called for " + thJsonObject);
GCubeSDIViewerLayerDV gsdiLayer = new GCubeSDIViewerLayerDV();
try {
String theType = thJsonObject.getString(_TYPE);
gsdiLayer.setType(theType);
LOG.debug(_TYPE + " is: " + theType);
} catch (Exception e) {
LOG.warn("No " + _TYPE + " found", e);
}
String toSerializeJSONOBJ = thJsonObject.toString();
String jsonPath = null;
try {
jsonPath = String.format("%s.%s", JSON_$_POINTER, _BBOX);
BBOXDV bbox = JsonPath.using(config).parse(toSerializeJSONOBJ).read(jsonPath, BBOXDV.class);
gsdiLayer.setBbox(bbox);
LOG.debug(_BBOX + " is: " + bbox);
} catch (Exception e) {
LOG.warn(jsonPath + " error: ", e);
}
try {
jsonPath = String.format("%s.%s", JSON_$_POINTER, _OGC_LINKS_WMS);
String jsonString = JsonPath.using(config).parse(toSerializeJSONOBJ).read(jsonPath).toString();
Gson gson = new Gson();
HashMap map = gson.fromJson(jsonString, HashMap.class);
gsdiLayer.setOgcLinks(map);
LOG.debug(_OGC_LINKS_WMS + " are: " + map);
} catch (Exception e) {
LOG.warn(jsonPath + " error: ", e);
}
try {
String wmsLink = gsdiLayer.getWMSLink();
if(wmsLink!=null) {
String layerName = URLParserUtil.extractValueOfParameterFromURL("layers", wmsLink);
gsdiLayer.setLayerName(layerName);
}
} catch (Exception e) {
LOG.warn(jsonPath + " error: ", e);
}
LOG.debug("converLayer returning: " + gsdiLayer);
return gsdiLayer;
}
/**
* Checks if is accessible section according to policy.
*

View File

@ -2,15 +2,6 @@ package org.gcube.portlets.user.geoportaldataviewer.server.mongoservice;
import javax.servlet.http.HttpServletRequest;
import org.gcube.application.geoportal.common.model.document.Project;
import org.gcube.application.geoportal.common.model.useCaseDescriptor.UseCaseDescriptor;
import org.gcube.application.geoportalcommon.ConvertToDataValueObjectModel;
import org.gcube.application.geoportalcommon.ProjectDVBuilder;
import org.gcube.application.geoportalcommon.geoportal.GeoportalClientCaller;
import org.gcube.application.geoportalcommon.geoportal.ProjectsCaller;
import org.gcube.application.geoportalcommon.geoportal.UseCaseDescriptorCaller;
import org.gcube.application.geoportalcommon.shared.geoportal.project.ProjectDV;
import org.gcube.application.geoportalcommon.shared.geoportal.ucd.UseCaseDescriptorDV;
import org.gcube.common.portal.PortalContext;
import org.gcube.portlets.user.geoportaldataviewer.server.mongoservice.accessidentity.GcubeIdentity;
import org.gcube.portlets.user.geoportaldataviewer.server.mongoservice.accessidentity.IAMClientIdentity;
@ -61,38 +52,38 @@ public class GeoportalServiceIdentityProxy {
gCubeIdentity.setIdentity(request);
}
/**
* Gets the project by ID.
*
* @param profileID the profile ID
* @param projectID the project ID
* @return the project by ID
* @throws Exception the exception
*/
public ProjectDV getProjectByID(String profileID, String projectID) throws Exception {
ProjectsCaller clientPrj = GeoportalClientCaller.projects();
Project theProject = clientPrj.getProjectByID(profileID, projectID);
ProjectDVBuilder projectBuilder = ProjectDVBuilder.newBuilder().fullDocumentMap(true);
return ConvertToDataValueObjectModel.toProjectDV(theProject, projectBuilder);
/*
* try { // Obtain the client ConcessioniMongoService concessioniManager = new
* ConcessioniMongoService(); // Returning item by Id return
* concessioniManager.getItemById(mongoItemId); }catch(Exception e) {
* LOG.error("Error on reading itemById: "+mongoItemId, e); throw(e); }finally {
* gCubeIdentity.resetIdentity(); }
*/
}
// /**
// * Gets the project by ID.
// *
// * @param profileID the profile ID
// * @param projectID the project ID
// * @return the project by ID
// * @throws Exception the exception
// */
// public ProjectDV getProjectByID(String profileID, String projectID) throws Exception {
// ProjectsCaller clientPrj = GeoportalClientCaller.projects();
// Project theProject = clientPrj.getProjectByID(profileID, projectID);
// ProjectDVBuilder projectBuilder = ProjectDVBuilder.newBuilder().fullDocumentMap(true);
// return ConvertToDataValueObjectModel.toProjectDV(theProject, projectBuilder);
// /*
// * try { // Obtain the client ConcessioniMongoService concessioniManager = new
// * ConcessioniMongoService(); // Returning item by Id return
// * concessioniManager.getItemById(mongoItemId); }catch(Exception e) {
// * LOG.error("Error on reading itemById: "+mongoItemId, e); throw(e); }finally {
// * gCubeIdentity.resetIdentity(); }
// */
// }
/**
* Gets the UCD by ID.
*
* @param profileID the profile ID
* @return the UCD by ID
* @throws Exception the exception
*/
public UseCaseDescriptorDV getUCDByID(String profileID) throws Exception {
UseCaseDescriptorCaller ucdCaller = GeoportalClientCaller.useCaseDescriptors();
UseCaseDescriptor ucd = ucdCaller.getUCDForId(profileID);
return ConvertToDataValueObjectModel.toUseCaseDescriptorDV(ucd, null);
}
// /**
// * Gets the UCD by ID.
// *
// * @param profileID the profile ID
// * @return the UCD by ID
// * @throws Exception the exception
// */
// public UseCaseDescriptorDV getUCDByID(String profileID) throws Exception {
// UseCaseDescriptorCaller ucdCaller = GeoportalClientCaller.useCaseDescriptors();
// UseCaseDescriptor ucd = ucdCaller.getUCDForId(profileID);
// return ConvertToDataValueObjectModel.toUseCaseDescriptorDV(ucd, null);
// }
}

View File

@ -5,6 +5,7 @@ import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.gcube.portlets.user.geoportaldataviewer.server.mongoservice.GeoportalServiceIdentityProxy;
import org.gcube.portlets.user.geoportaldataviewer.shared.faults.ControlledError;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -33,7 +34,8 @@ public abstract class ContextRequest<T> {
for (Runnable r : preoperations)
r.run();
}
new GeoportalServiceIdentityProxy(request);
LOG.debug("Context is " + SessionUtil.getCurrentContext(request, true));
LOG.debug("Context is " + SessionUtil.getCurrentToken(request, true) == null ? null : "***");
LOG.trace("Executing actual method..");

View File

@ -1,17 +1,22 @@
package org.gcube.portlets.user.geoportaldataviewer;
import java.util.List;
import org.gcube.application.geoportal.common.model.document.Project;
import org.gcube.application.geoportalcommon.ConvertToDataValueObjectModel;
import org.gcube.application.geoportalcommon.ProjectDVBuilder;
import org.gcube.application.geoportalcommon.geoportal.GeoportalClientCaller;
import org.gcube.application.geoportalcommon.geoportal.ProjectsCaller;
import org.gcube.application.geoportalcommon.geoportal.UseCaseDescriptorCaller;
import org.gcube.application.geoportalcommon.shared.geoportal.materialization.GCubeSDIViewerLayerDV;
import org.gcube.application.geoportalcommon.shared.geoportal.project.ProjectDV;
import org.gcube.application.geoportalcommon.shared.geoportal.view.ProjectView;
import org.gcube.common.authorization.library.provider.SecurityTokenProvider;
import org.gcube.common.scope.api.ScopeProvider;
import org.gcube.portlets.user.geoportaldataviewer.server.GeoportalDataViewerServiceImpl;
import org.gcube.portlets.user.geoportaldataviewer.server.Geoportal_JSON_Mapper;
import org.gcube.portlets.user.geoportaldataviewer.server.mongoservice.GeoportalServiceIdentityProxy;
import org.gcube.portlets.user.geoportaldataviewer.server.util.SessionUtil;
import org.junit.Before;
import org.junit.Test;
@ -36,7 +41,7 @@ public class GeoportalViewer_Tests {
private static String PROFILE_ID = "profiledConcessioni";
private static String PROJECT_ID = "6311d408900dde90e44d9265";
private static String USERNAME = "francesco.mangiacrapa";
/**
@ -53,7 +58,7 @@ public class GeoportalViewer_Tests {
clientProjects = GeoportalClientCaller.projects();
}
@Test
//@Test
public void getProjectViewForID() {
try {
@ -62,7 +67,7 @@ public class GeoportalViewer_Tests {
Project project = clientProjects.getProjectByID(PROFILE_ID, PROJECT_ID);
ProjectDVBuilder projectBuilder = ProjectDVBuilder.newBuilder().fullDocumentMap(true);
ProjectDV projectDV = ConvertToDataValueObjectModel.toProjectDV(project, projectBuilder);
ScopeProvider.instance.set(CONTEXT);
SecurityTokenProvider.instance.set(TOKEN);
ProjectView projectView = Geoportal_JSON_Mapper.loadProjectView(projectDV, CONTEXT, USERNAME);
@ -73,4 +78,33 @@ public class GeoportalViewer_Tests {
}
}
@Test
public void getLayersForId() {
System.out.println("getLayersForId [profileID: " + PROFILE_ID + ", projectID: " + PROJECT_ID + "] called");
List<GCubeSDIViewerLayerDV> listLayers = null;
try {
ScopeProvider.instance.set(CONTEXT);
SecurityTokenProvider.instance.set(TOKEN);
Project project = clientProjects.getProjectByID(PROFILE_ID, PROJECT_ID);
String jsonDocument = project.getTheDocument().toJson();
System.out.println("JSON Project is: " + jsonDocument);
String materializationParentJSONPath = String.format("%s..%s", Geoportal_JSON_Mapper.JSON_$_POINTER,
Geoportal_JSON_Mapper.FILESET);
listLayers = Geoportal_JSON_Mapper.readGcubeSDILayersForFileset(materializationParentJSONPath, jsonDocument);
listLayers.stream().forEach(s -> System.out.println(s));
} catch (Exception e) {
String erroMsg = "Layers are not available for profileID " + PROFILE_ID + " with projectID " + PROJECT_ID;
System.out.println(erroMsg);
e.printStackTrace();
}
}
}