diff --git a/.classpath b/.classpath index d8ef8c7..728c32a 100644 --- a/.classpath +++ b/.classpath @@ -1,12 +1,12 @@ - + - + @@ -35,5 +35,5 @@ - + diff --git a/.settings/com.gwtplugins.gdt.eclipse.core.prefs b/.settings/com.gwtplugins.gdt.eclipse.core.prefs index 988b8c4..984d1b0 100644 --- a/.settings/com.gwtplugins.gdt.eclipse.core.prefs +++ b/.settings/com.gwtplugins.gdt.eclipse.core.prefs @@ -1,4 +1,4 @@ eclipse.preferences.version=1 -lastWarOutDir=/home/francescomangiacrapa/git/geoportal-data-viewer-app/target/geoportal-data-viewer-app-3.0.1-SNAPSHOT +lastWarOutDir=/home/francescomangiacrapa/git/geoportal-data-viewer-app/target/geoportal-data-viewer-app-3.1.0-SNAPSHOT warSrcDir=src/main/webapp warSrcDirIsOutput=false diff --git a/.settings/org.eclipse.wst.common.component b/.settings/org.eclipse.wst.common.component index 78bef0d..c8dbacc 100644 --- a/.settings/org.eclipse.wst.common.component +++ b/.settings/org.eclipse.wst.common.component @@ -1,5 +1,5 @@ - + @@ -38,8 +38,10 @@ - - + + + + @@ -79,7 +81,8 @@ - + + @@ -119,7 +122,8 @@ - + + @@ -159,7 +163,8 @@ - + + @@ -199,7 +204,8 @@ - + + @@ -239,10 +245,14 @@ + + uses + - + + @@ -282,7 +292,8 @@ - + + @@ -322,7 +333,8 @@ - + + @@ -362,7 +374,8 @@ - + + diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/server/GeoportalDataViewerServiceImpl.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/server/GeoportalDataViewerServiceImpl.java index a920063..b1ea6d9 100644 --- a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/server/GeoportalDataViewerServiceImpl.java +++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/server/GeoportalDataViewerServiceImpl.java @@ -35,6 +35,8 @@ 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.geoportal.access.GeportalCheckAccessPolicy; +import org.gcube.application.geoportalcommon.geoportal.access.GeportalCheckAccessPolicy.ACCESS_POLICY; import org.gcube.application.geoportalcommon.shared.GNADataViewerConfigProfile; import org.gcube.application.geoportalcommon.shared.GeoportalItemReferences; import org.gcube.application.geoportalcommon.shared.SearchingFilter; @@ -642,7 +644,7 @@ public class GeoportalDataViewerServiceImpl extends RemoteServiceServlet impleme // Saving client PROJECTION LinkedHashMap originalProjection = filter.getProjection(); - + // Setting PROJECTION ONLY FOR PROEJCT ID LinkedHashMap projectionForIDs = new LinkedHashMap(); projectionForIDs.put(Project.ID, 1); @@ -662,26 +664,26 @@ public class GeoportalDataViewerServiceImpl extends RemoteServiceServlet impleme LOG.info("Total Docs read from config: " + totalProjectForProfile); // FIRST QUERY TO RETRIEVE IDs - // LIMIT IS NULL AND START = 0 MEANS THAT IT IS EQUAL TO NUMBER TOTAL OF DOCUMENTS + // LIMIT IS NULL AND START = 0 MEANS THAT IT IS EQUAL TO NUMBER TOTAL OF + // DOCUMENTS final Iterator projectsIDs = client.queryOnMongo(theProfileID, totalProjectForProfile, 0, null, filter); - //Getting the Project IDs from the Iterable + // Getting the Project IDs from the Iterable Iterable itP = () -> projectsIDs; Stream targetStream = StreamSupport.stream(itP.spliterator(), false); List listProjectIDs = targetStream.map(Project::getId).collect(Collectors.toList()); searchedDataIDs.setResultSetProjectIDs(listProjectIDs); - //Total number of Projects are exactly listProjectIDs.size() + // Total number of Projects are exactly listProjectIDs.size() int totalItems = listProjectIDs.size(); searchedDataIDs.setTotalItems(totalItems); LOG.info("Total IDs read from query: " + totalItems); - //NOW PERFORMING THE (REAL) SECOND QUERY FROM CLIENT + // NOW PERFORMING THE (REAL) SECOND QUERY FROM CLIENT // SETTING ORIGINAL PROJECTION FROM CLIENT filter.setProjection(originalProjection); // LIMIT IS FROM CLIENT - Iterator projects = client.queryOnMongo(theProfileID, totalItems, start, limit, - filter); + Iterator projects = client.queryOnMongo(theProfileID, totalItems, start, limit, filter); searchedDataIDs.setClientStartIndex(start); searchedDataIDs.setLimit(limit); @@ -749,24 +751,38 @@ public class GeoportalDataViewerServiceImpl extends RemoteServiceServlet impleme try { SessionUtil.getCurrentContext(this.getThreadLocalRequest(), true); + String username = null; try { - SessionUtil.getCurrentUser(this.getThreadLocalRequest()).getUsername(); + username = SessionUtil.getCurrentUser(this.getThreadLocalRequest()).getUsername(); } catch (Exception e) { - LOG.info("User not found in session, the userName for checking policy will be null"); + LOG.info("User not found in session, the userName for checking the policy will be null"); } - LOG.info("Trying to get project for id " + profileID); - + LOG.trace("Trying to get project for id " + projectID); new GeoportalServiceIdentityProxy(this.getThreadLocalRequest()); Project theProject = GeoportalClientCaller.projects().getProjectByID(profileID, projectID); String jsonDocument = theProject.getTheDocument().toJson(); LOG.trace("JSON Project is: " + jsonDocument); - String materializationParentJSONPath = String.format("%s..%s", Geoportal_JSON_Mapper.JSON_$_POINTER, - Geoportal_JSON_Mapper.FILESET); + LOG.debug("Checking access policy for the layer..."); + ACCESS_POLICY accessPolicy = GeportalCheckAccessPolicy.accessPolicyFromSessionLogin(username); + LOG.info("Access policy for discovering the layers is: " + accessPolicy); - listLayers = Geoportal_JSON_Mapper.readGcubeSDILayersForFileset(materializationParentJSONPath, - jsonDocument); + String filesetParentJSONPath = null; + + //(see ticket #24390) + if (accessPolicy.equals(ACCESS_POLICY.OPEN)) { + // Filtering for ACCESS_POLICY.OPEN from the fileset when the username is not in session. IAM + // identity is running, no logged in user. + filesetParentJSONPath = String.format("%s..%s[?(@._access._policy=='%s')]", + Geoportal_JSON_Mapper.JSON_$_POINTER, Geoportal_JSON_Mapper.FILESET, accessPolicy); + } else { + // Accessing to all fileset (with any ACCESS_POLICY) when the user is logged in. + filesetParentJSONPath = String.format("%s..%s", Geoportal_JSON_Mapper.JSON_$_POINTER, + Geoportal_JSON_Mapper.FILESET); + } + + listLayers = Geoportal_JSON_Mapper.readGcubeSDILayersForFileset(filesetParentJSONPath, jsonDocument); LOG.info("For projectID " + projectID + ", returning " + listLayers.size() + " layer/s"); return listLayers; @@ -973,11 +989,12 @@ public class GeoportalDataViewerServiceImpl extends RemoteServiceServlet impleme public List getDataResult(List layerObjects, String mapSrsName, BoundsMap selectBBOX, int maxWFSFeature, double zoomLevel) throws Exception { LOG.info("getDataResult called"); - + for (LayerObject layerObject : layerObjects) { - LOG.info("ProfileID: "+layerObject.getProfileID() + ", ProjectID: " +layerObject.getProjectID() + ", TYPE: "+layerObject.getType()); + LOG.info("ProfileID: " + layerObject.getProfileID() + ", ProjectID: " + layerObject.getProjectID() + + ", TYPE: " + layerObject.getType()); } - + if (LOG.isDebugEnabled()) { LOG.debug("getDataResult parmeters layerObjects: " + layerObjects, ", mapSrsName: " + mapSrsName + ", selectBBOX: " + selectBBOX + ", maxWFSFeature: " + maxWFSFeature @@ -1007,8 +1024,8 @@ public class GeoportalDataViewerServiceImpl extends RemoteServiceServlet impleme // Expected more than 1 feature for the BBOX of the Map FeatureRow fRow = features.get(0); - //using only the first feature returned from BBOX of the Map - //when querying the centroid layers + // using only the first feature returned from BBOX of the Map + // when querying the centroid layers geoDAO.setFeatures(Arrays.asList(fRow)); if (fRow.getMapProperties() != null) { List productIDs = fRow.getMapProperties() @@ -1137,11 +1154,11 @@ public class GeoportalDataViewerServiceImpl extends RemoteServiceServlet impleme } LOG.info("returning " + listDAO.size() + " geona data objects"); - - if(LOG.isDebugEnabled()) { + + if (LOG.isDebugEnabled()) { LOG.debug("returning " + listDAO + " geona data objects"); } - + return listDAO; } diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/server/Geoportal_JSON_Mapper.java b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/server/Geoportal_JSON_Mapper.java index e92b4d7..1b7f2d2 100644 --- a/src/main/java/org/gcube/portlets/user/geoportaldataviewer/server/Geoportal_JSON_Mapper.java +++ b/src/main/java/org/gcube/portlets/user/geoportaldataviewer/server/Geoportal_JSON_Mapper.java @@ -55,6 +55,8 @@ public class Geoportal_JSON_Mapper { public static final String _MATERIALIZATIONS = "_materializations"; + public static final String _TYPE_GCUBE_SDI_LAYER = "gcube-sdi-layer"; + private static final Logger LOG = LoggerFactory.getLogger(Geoportal_JSON_Mapper.class); public static final String FILESET = "fileset"; @@ -68,7 +70,7 @@ public class Geoportal_JSON_Mapper { public static final String JSON_$_POINTER = "$"; public static final String _THEDOCUMENT = "_theDocument"; - + public static ProjectEdit loadProjectEdit(ProjectDV theProjectDV, String scope, String username) throws Exception { String theWholeProjectAsJSON = theProjectDV.getTheDocument().getDocumentAsJSON(); @@ -112,19 +114,20 @@ public class Geoportal_JSON_Mapper { com.jayway.jsonpath.Configuration configuration = com.jayway.jsonpath.Configuration.builder() .jsonProvider(new JsonOrgJsonProvider()).build(); - - //LinkedHashMap mapOfProfilesBeanExt = new LinkedHashMap(); - + + // LinkedHashMap mapOfProfilesBeanExt = new + // LinkedHashMap(); + ArrayList listOfProfilesBeanExt = new ArrayList(); // Reading the Project according to list of Profile defined in the UCD for (GcubeProfilesMetadataForUCD gcubeProfileMetaForUCD : listProfilesBean) { - + GcubeProfileDV gcubeProfileDV = gcubeProfileMetaForUCD.getGcubeProfile(); // SectionView sectionView = new SectionView(); // sectionView.setSectionTitle(gcubeProfileDV.getSectionTitle()); - - System.out.println("\n\n##### Sto creando la sezione: "+gcubeProfileDV.getSectionTitle()); + + System.out.println("\n\n##### Sto creando la sezione: " + gcubeProfileDV.getSectionTitle()); LOG.debug("\n\nThe profile is: " + gcubeProfileDV); // Building JSON/section full PATH and section name String sectionJSONPath = ""; @@ -178,17 +181,16 @@ public class Geoportal_JSON_Mapper { LOG.debug("Result for " + gcubeProfileDV.getSectionName() + " is: " + listBSONDocument); List theProfileBeans = gcubeProfileMetaForUCD.getListMetadataProfileBean(); MetaDataProfileBean theProfileBean = theProfileBeans.get(0); - - + // For each bson.Document filling the MetaDataProfileBean and its file for (int i = 0; i < listBSONDocument.size(); i++) { - - System.out.println("DOCUMENT number "+i+ " of the section: "+theProfileBean.getTitle()); + + System.out.println("DOCUMENT number " + i + " of the section: " + theProfileBean.getTitle()); MetaDataProfileBeanExt theProfileBeanExt = new MetaDataProfileBeanExt(); theProfileBeanExt.setCategories(theProfileBean.getCategories()); theProfileBeanExt.setTitle(theProfileBean.getTitle()); theProfileBeanExt.setType(theProfileBean.getType()); - + // System.out.println("\nPRINTING PROJECT VIEW ON START: "); // for (int j = 0; j < listOfProfilesBeanExt.size(); j++) { // MetaDataProfileBeanExt metaDataProfileBeanExt = listOfProfilesBeanExt.get(j); @@ -198,56 +200,57 @@ public class Geoportal_JSON_Mapper { // System.out.println("\t MetadataFieldWrapper index: " + z++ + " " + mfw); // } // } - - - Document fromSectionDoc = listBSONDocument.get(i); - LOG.debug("\n\nNew section DOC for index " + i + " is: " + new JSONObject(fromSectionDoc.toJson()).toString(2)); - //Creating the corresponding MetaDataProfileBeanExt for each section - //Reading policy and license statically - //eg. "_access":{"_policy":"OPEN","_license":"CC0-1.0"}} + Document fromSectionDoc = listBSONDocument.get(i); + LOG.debug("\n\nNew section DOC for index " + i + " is: " + + new JSONObject(fromSectionDoc.toJson()).toString(2)); + // Creating the corresponding MetaDataProfileBeanExt for each section + + // Reading policy and license statically + // eg. "_access":{"_policy":"OPEN","_license":"CC0-1.0"}} Document docAccess = null; Access access = null; try { docAccess = fromSectionDoc.get("_access", Document.class); - System.out.println("docAccess is: "+docAccess); + System.out.println("docAccess is: " + docAccess); access = new Access(); access.setPolicy(AccessPolicy.valueOf(docAccess.getString("_policy"))); access.setLicense(docAccess.getString("_license")); - // Access. access.get("_policy"); - // access.get("_license"); - System.out.println("access is: "+access); - }catch (Exception e) { + // Access. access.get("_policy"); + // access.get("_license"); + System.out.println("access is: " + access); + } catch (Exception e) { e.printStackTrace(); } - - //List copyOfMetadataFields = new ArrayList(theProfileBean.getMetadataFields()); - //int forIndex = 0; - + + // List copyOfMetadataFields = new + // ArrayList(theProfileBean.getMetadataFields()); + // int forIndex = 0; + List cloneListOfMFW = cloneList(theProfileBean.getMetadataFields()); - + for (MetadataFieldWrapper metadataField : cloneListOfMFW) { String theFieldName = metadataField.getFieldId() != null ? metadataField.getFieldId() : metadataField.getFieldName(); LOG.debug("reading theFieldName: " + theFieldName); Object theOBJFieldValue = fromSectionDoc.get(theFieldName); - metadataField.setCurrentValue(theOBJFieldValue+""); - - if(access!=null) { - if(theFieldName.equalsIgnoreCase("policy")) { + metadataField.setCurrentValue(theOBJFieldValue + ""); + + if (access != null) { + if (theFieldName.equalsIgnoreCase("policy")) { metadataField.setCurrentValue(access.getPolicy().name()); - }else if(theFieldName.equalsIgnoreCase("licenseID")) { + } else if (theFieldName.equalsIgnoreCase("licenseID")) { metadataField.setCurrentValue(access.getLicense()); } } - //copyOfMetadataFields.set(forIndex++, metadataField); + // copyOfMetadataFields.set(forIndex++, metadataField); } - - LOG.debug("Before assigning it Metadata fields are: "+cloneListOfMFW); - + + LOG.debug("Before assigning it Metadata fields are: " + cloneListOfMFW); + theProfileBeanExt.setMetadataFields(new ArrayList(cloneListOfMFW)); - LOG.debug("Metadata fields are: "+theProfileBeanExt.getMetadataFields()); + LOG.debug("Metadata fields are: " + theProfileBeanExt.getMetadataFields()); // Reading filePaths List filePaths = gcubeProfileDV.getFilePaths(); @@ -272,17 +275,18 @@ public class Geoportal_JSON_Mapper { } // Reading Fileset _materializations - //listLayers = readGcubeSDILayersForFileset(filesetJSONPath, fromSectionDocJSON); - //theProfileBeanExt.set + // listLayers = readGcubeSDILayersForFileset(filesetJSONPath, + // fromSectionDocJSON); + // theProfileBeanExt.set } theProfileBeanExt.setListFileset(listFiles); } - - System.out.println("\nputting theProfileBeanExt: "+theProfileBeanExt); + + System.out.println("\nputting theProfileBeanExt: " + theProfileBeanExt); listOfProfilesBeanExt.add(theProfileBeanExt); - + // System.out.println("\nPRINTING PROJECT VIEW ON END: "); // for (int j = 0; j < listOfProfilesBeanExt.size(); j++) { // MetaDataProfileBeanExt metaDataProfileBeanExt = listOfProfilesBeanExt.get(j); @@ -294,15 +298,15 @@ public class Geoportal_JSON_Mapper { // } // // System.out.println(listProfileBeansExt.get(listProfileBeansExt.size()-1)); - //Geoportal_JSON_Mapper.prettyPrintProjectEdit(projectView); + // Geoportal_JSON_Mapper.prettyPrintProjectEdit(projectView); } } - + projectView.setTheProfileBeans(listOfProfilesBeanExt); - //Geoportal_JSON_Mapper.prettyPrintProjectEdit(projectView); - + // Geoportal_JSON_Mapper.prettyPrintProjectEdit(projectView); + return projectView; } @@ -647,22 +651,29 @@ public class Geoportal_JSON_Mapper { LOG.info("readGcubeSDILayersForFileset called"); List listSDILayers = new ArrayList(); - String _materializationsJSONPath = String.format("%s.%s", materializationParentJSONPath, _MATERIALIZATIONS); + // _materializations AT THE MOMENT ARE ONLY OF TYPE gcube-sdi-layer. I'm adding + // the filtering "_type": "gcube-sdi-layer" to be sure of reading SDI layer + String _materializationsJSONPath = String.format("%s.%s[?(@._type=='%s')]", materializationParentJSONPath, + _MATERIALIZATIONS, _TYPE_GCUBE_SDI_LAYER); + // [?(@._access._policy=='%s')] try { com.jayway.jsonpath.Configuration configurationJSONSmart = com.jayway.jsonpath.Configuration.builder() .jsonProvider(new JsonOrgJsonProvider()).build(); - LOG.debug("Reading sectionPath {} into section document {}", _materializationsJSONPath, sectionJSONDocument); - JsonPath theSectionPolycJsonPath = JsonPath.compile(_materializationsJSONPath); - Object _materializations = theSectionPolycJsonPath.read(sectionJSONDocument, configurationJSONSmart); + LOG.debug("GcubeSDILayers Reading sectionPath {} into section document {}", _materializationsJSONPath, + sectionJSONDocument); + + JsonPath theSectionMaterializationJsonPath = JsonPath.compile(_materializationsJSONPath); + Object _materializations = theSectionMaterializationJsonPath.read(sectionJSONDocument, + configurationJSONSmart); LOG.trace("_materializations.class(): " + _materializations.getClass()); listSDILayers = recursiveFetchingLayers(configurationJSONSmart, _materializations, listSDILayers); } catch (Exception e) { - LOG.warn("Error on reading the JSON Path " + _materializationsJSONPath + " in the doc " + LOG.debug("Error on reading the JSON Path " + _materializationsJSONPath + " in the doc " + sectionJSONDocument, e); } LOG.info("returning list of layers {}", listSDILayers); @@ -686,14 +697,14 @@ public class Geoportal_JSON_Mapper { if (objectJSON instanceof JSONArray) { JSONArray theJsonArray = (JSONArray) objectJSON; - LOG.trace("jsonArray: " + theJsonArray.toString(3)); + LOG.debug("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)); + LOG.debug("theJSONObject: " + theJsonObject.toString(3)); GCubeSDIViewerLayerDV gsdiLayer = converLayer(config, theJsonObject); listSDILayers.add(gsdiLayer); } @@ -806,7 +817,7 @@ public class Geoportal_JSON_Mapper { * @param myLogin the my login * @return true, if is accessible section according to policy */ - private static boolean isAccessibleSectionAccordingToPolicy(Document section, String sectionJSONPath, + public static boolean isAccessibleSectionAccordingToPolicy(Document section, String sectionJSONPath, String myLogin) { LOG.debug("isAccessibleSectionAccordingToPolicy called"); boolean isAccessible = true; @@ -829,8 +840,8 @@ public class Geoportal_JSON_Mapper { private static boolean checkAccessPolicy(String sectionDocumentJSON, String myLogin) { LOG.info("checkAccessPolicy called"); // CHECKING THE POLICY - //see ticket #24390 - //First reading the access policy from the fileset + // see ticket #24390 + // First reading the access policy from the fileset String accessPolicyPath = JSON_$_POINTER + ".fileset._access._policy"; boolean isAccessible = true; try { @@ -842,36 +853,37 @@ public class Geoportal_JSON_Mapper { try { JsonPath theSectionPolycJsonPath = JsonPath.compile(accessPolicyPath); _policy = theSectionPolycJsonPath.read(sectionDocumentJSON, configuration).toString(); - - if(_policy==null) + + if (_policy == null) throw new Exception("Policy is null"); - - }catch (Exception e) { - LOG.debug("Access policy not found in: "+accessPolicyPath); + + } catch (Exception e) { + LOG.debug("Access policy not found in: " + accessPolicyPath); } - - //If policy does not exist into fileset, reading from the parent section - if(_policy==null) { + + // If policy does not exist into fileset, reading from the parent section + if (_policy == null) { accessPolicyPath = JSON_$_POINTER + "._access._policy"; - LOG.debug("Reading access policy at {} into section document {}", accessPolicyPath, sectionDocumentJSON); + LOG.debug("Reading access policy at {} into section document {}", accessPolicyPath, + sectionDocumentJSON); try { JsonPath theSectionPolycJsonPath = JsonPath.compile(accessPolicyPath); _policy = theSectionPolycJsonPath.read(sectionDocumentJSON, configuration).toString(); - - if(_policy==null) + + if (_policy == null) throw new Exception("Policy is null"); - - }catch (Exception e) { - LOG.debug("Access policy not found in: "+accessPolicyPath); + + } catch (Exception e) { + LOG.debug("Access policy not found in: " + accessPolicyPath); } } - + LOG.debug("The section {} has policy {}", accessPolicyPath, _policy); isAccessible = GeportalCheckAccessPolicy.isAccessible(_policy, myLogin); } catch (Exception e) { LOG.error(accessPolicyPath + " not found. Check OK"); } - LOG.info("Is the section {} accessible? {}", sectionDocumentJSON, isAccessible); + LOG.info("It is {} accessible the section {} accessible? {}", isAccessible, sectionDocumentJSON); return isAccessible; } diff --git a/src/test/java/org/gcube/portlets/user/geoportaldataviewer/GeoportalViewer_Tests.java b/src/test/java/org/gcube/portlets/user/geoportaldataviewer/GeoportalViewer_Tests.java index ac50277..690b09a 100644 --- a/src/test/java/org/gcube/portlets/user/geoportaldataviewer/GeoportalViewer_Tests.java +++ b/src/test/java/org/gcube/portlets/user/geoportaldataviewer/GeoportalViewer_Tests.java @@ -22,6 +22,8 @@ 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.geoportal.access.GeportalCheckAccessPolicy; +import org.gcube.application.geoportalcommon.geoportal.access.GeportalCheckAccessPolicy.ACCESS_POLICY; import org.gcube.application.geoportalcommon.geoportal.util.GisUtil; import org.gcube.application.geoportalcommon.shared.SearchingFilter; import org.gcube.application.geoportalcommon.shared.SearchingFilter.LOGICAL_OP; @@ -40,6 +42,7 @@ import org.gcube.portlets.user.geoportaldataviewer.server.Geoportal_JSON_Mapper; import org.gcube.portlets.user.geoportaldataviewer.shared.ProjectEdit; import org.json.JSONObject; import org.junit.Before; +import org.junit.Test; /** * The Class GeoportalViewer_Tests. @@ -54,14 +57,15 @@ public class GeoportalViewer_Tests { private ProjectsCaller clientProjects; - private static String CONTEXT = "/pred4s/preprod/preVRE"; - private static String TOKEN = ""; //preVRE + //private static String CONTEXT = "/pred4s/preprod/preVRE"; + private static String CONTEXT = "/d4science.research-infrastructures.eu/D4OS/GNA"; + private static String TOKEN = ""; //GNA //private static String CONTEXT = "/gcube/devsec/devVRE"; //private static String TOKEN = ""; // devVRE private static String PROFILE_ID = "profiledConcessioni"; - private static String PROJECT_ID = "637ceb4d21dd0d6fb9f24706"; + private static String PROJECT_ID = "6388ea6ca1e60e66b7b584e0"; private static String USERNAME = "francesco.mangiacrapa"; @@ -99,7 +103,7 @@ public class GeoportalViewer_Tests { } } - // @Test + //@Test public void getLayersForId() { System.out.println("getLayersForId [profileID: " + PROFILE_ID + ", projectID: " + PROJECT_ID + "] called"); @@ -112,10 +116,26 @@ public class GeoportalViewer_Tests { Project project = clientProjects.getProjectByID(PROFILE_ID, PROJECT_ID); String jsonDocument = project.getTheDocument().toJson(); System.out.println("JSON Project is: " + jsonDocument); + + ACCESS_POLICY accessPolicy = GeportalCheckAccessPolicy.accessPolicyFromSessionLogin(null); + + String materializationParentJSONPath = null; + + if(accessPolicy.equals(ACCESS_POLICY.OPEN)) { + //Filtering for ACCESS_POLICY.OPEN when the username is not in session. IAM identity is running, no logged in user. + materializationParentJSONPath = String.format("%s..%s[?(@._access._policy=='%s')]", Geoportal_JSON_Mapper.JSON_$_POINTER, + Geoportal_JSON_Mapper.FILESET, accessPolicy); + }else { + //Accessing to all fileset (with any ACCESS_POLICY) when the user is logged in. + materializationParentJSONPath = String.format("%s..%s", Geoportal_JSON_Mapper.JSON_$_POINTER, + Geoportal_JSON_Mapper.FILESET); + } + + System.out.println("jsonPathQuery is: "+materializationParentJSONPath); - String materializationParentJSONPath = String.format("%s..%s", Geoportal_JSON_Mapper.JSON_$_POINTER, - Geoportal_JSON_Mapper.FILESET); - +// String materializationParentJSONPath = String.format("%s..%s", Geoportal_JSON_Mapper.JSON_$_POINTER, +// Geoportal_JSON_Mapper.FILESET); +// listLayers = Geoportal_JSON_Mapper.readGcubeSDILayersForFileset(materializationParentJSONPath, jsonDocument);