From d19f2939302715c3fb489f2ca979241cd1f23feb Mon Sep 17 00:00:00 2001 From: "francesco.mangiacrapa" Date: Thu, 2 Dec 2021 17:13:55 +0100 Subject: [PATCH] created GR "GNA-DataEntry-Configs" and using it --- .../client/ui/GeonaMainTabPanel.java | 25 +- .../server/GeoportalDataEntryServiceImpl.java | 20 +- .../server/config/FileUtil.java | 100 ++++--- .../server/config/GNADataEntryConfigs.java | 38 +++ .../GNADataEntryConfigsProfileReader.java | 282 ++++++++++++++++++ .../config/GNARoleRitghtsConfigReader.java | 166 ----------- .../config/GNA_RoleRights_Configurations.csv | 5 - .../geoportaldataentry/client/TestClass.java | 227 +++++++------- 8 files changed, 525 insertions(+), 338 deletions(-) create mode 100644 src/main/java/org/gcube/portlets/user/geoportaldataentry/server/config/GNADataEntryConfigs.java create mode 100644 src/main/java/org/gcube/portlets/user/geoportaldataentry/server/config/GNADataEntryConfigsProfileReader.java delete mode 100644 src/main/java/org/gcube/portlets/user/geoportaldataentry/server/config/GNARoleRitghtsConfigReader.java delete mode 100644 src/main/java/org/gcube/portlets/user/geoportaldataentry/server/config/GNA_RoleRights_Configurations.csv diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/GeonaMainTabPanel.java b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/GeonaMainTabPanel.java index 1f7df32..952d21a 100644 --- a/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/GeonaMainTabPanel.java +++ b/src/main/java/org/gcube/portlets/user/geoportaldataentry/client/ui/GeonaMainTabPanel.java @@ -249,6 +249,11 @@ public class GeonaMainTabPanel extends Composite { @Override public void onClick(ClickEvent event) { alertSearchFor.setText(record_FIELD.getDisplayName()); + + if(searchField.getText().length() >= MIN_LENGHT_SERCHING_STRING) { + doSearchEvent(); + } + } }); } @@ -315,14 +320,7 @@ public class GeonaMainTabPanel extends Composite { GWT.log("CHAR CODE: " + event.getCharCode()); if (com.google.gwt.event.dom.client.KeyCodes.KEY_ENTER == event.getCharCode()) { GWT.log(searchField.getText()); - String searchText = searchField.getText(); - if (searchText.length() < MIN_LENGHT_SERCHING_STRING) { - Window.alert("Please enter at least "+MIN_LENGHT_SERCHING_STRING+" characters"); - return; - } - - resetSearch.setVisible(true); - appManagerBus.fireEvent(new GetListOfRecordsEvent(RECORD_TYPE.CONCESSIONE, getCurrentSortFilter())); + doSearchEvent(); } } @@ -339,6 +337,17 @@ public class GeonaMainTabPanel extends Composite { }); } + + private void doSearchEvent() { + String searchText = searchField.getText(); + if (searchText.length() < MIN_LENGHT_SERCHING_STRING) { + Window.alert("Please enter at least "+MIN_LENGHT_SERCHING_STRING+" characters"); + return; + } + + resetSearch.setVisible(true); + appManagerBus.fireEvent(new GetListOfRecordsEvent(RECORD_TYPE.CONCESSIONE, getCurrentSortFilter())); + } private String toLabelFilter(RECORD_FIELD orderBy, ORDER direction) { String labelFilter = orderBy.getDisplayName() + LABEL_FILTER_SEPARATOR + direction.name(); diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataentry/server/GeoportalDataEntryServiceImpl.java b/src/main/java/org/gcube/portlets/user/geoportaldataentry/server/GeoportalDataEntryServiceImpl.java index 6e3ba6e..d20761d 100644 --- a/src/main/java/org/gcube/portlets/user/geoportaldataentry/server/GeoportalDataEntryServiceImpl.java +++ b/src/main/java/org/gcube/portlets/user/geoportaldataentry/server/GeoportalDataEntryServiceImpl.java @@ -35,7 +35,8 @@ import org.gcube.portlets.user.geoportaldataentry.client.ConcessioniFormCardTitl import org.gcube.portlets.user.geoportaldataentry.client.ConstantsGeoPortalDataEntryApp.RECORD_FIELD; import org.gcube.portlets.user.geoportaldataentry.client.ConstantsGeoPortalDataEntryApp.RECORD_TYPE; import org.gcube.portlets.user.geoportaldataentry.client.GeoportalDataEntryService; -import org.gcube.portlets.user.geoportaldataentry.server.config.GNARoleRitghtsConfigReader; +import org.gcube.portlets.user.geoportaldataentry.server.config.GNADataEntryConfigs; +import org.gcube.portlets.user.geoportaldataentry.server.config.GNADataEntryConfigsProfileReader; import org.gcube.portlets.user.geoportaldataentry.shared.ACTION_ON_ITEM; import org.gcube.portlets.user.geoportaldataentry.shared.CommitReport; import org.gcube.portlets.user.geoportaldataentry.shared.DisplayField; @@ -552,13 +553,19 @@ public class GeoportalDataEntryServiceImpl extends RemoteServiceServlet implemen } Iterator concessioni = clientMongo.query(request); + int i = 0; while (concessioni.hasNext()) { Concessione concessione = concessioni.next(); ConcessioneDV concessioneDV = ConvertToDataViewModel.toMetadataConcessione(concessione, true); toReturnList.add(concessioneDV); + i++; } + LOG.debug("read " + toReturnList +" project/s"); searchedData.setData(toReturnList); + + //TODO WORKAROUND MUST BE REMOVE AFTER THE QUERY COUNT + // AND LIST.SIZE WILL BE AVAILABLE IN THE SERVICE if(filter.getSearchInto()!=null){ searchedData.setTotalItems(toReturnList.size()); } @@ -593,12 +600,9 @@ public class GeoportalDataEntryServiceImpl extends RemoteServiceServlet implemen public List listDisplayFields() { List listDisplayFields = new ArrayList(); - DisplayField df = new DisplayField("Name", Arrays.asList("nome"), true); // etc - return listDisplayFields; - } /** @@ -916,12 +920,14 @@ public class GeoportalDataEntryServiceImpl extends RemoteServiceServlet implemen try { PortalContext pContext = PortalContext.getConfiguration(); user = pContext.getCurrentUser(this.getThreadLocalRequest()); - - List listUserRightsForRole = GNARoleRitghtsConfigReader.readRoleRightsConfig(); + SessionUtil.getCurrentContext(this.getThreadLocalRequest(), true); + GNADataEntryConfigsProfileReader gnaConfigReader = new GNADataEntryConfigsProfileReader(); + GNADataEntryConfigs config = gnaConfigReader.readProfileFromInfrastrucure(); + List listUserRightsForRole = config.getPermissionsForRole(); // DEV MODE if (!SessionUtil.isIntoPortal()) { LOG.warn("OUT OF PORTAL - DEV MODE detected"); - GcubeUserRole myRole = GcubeUserRole.DATA_MANAGER; + GcubeUserRole myRole = GcubeUserRole.DATA_EDITOR; for (RoleRights roleRight : listUserRightsForRole) { if (roleRight.getUserRole().equals(myRole)) { diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataentry/server/config/FileUtil.java b/src/main/java/org/gcube/portlets/user/geoportaldataentry/server/config/FileUtil.java index 0902cac..f1b25e5 100644 --- a/src/main/java/org/gcube/portlets/user/geoportaldataentry/server/config/FileUtil.java +++ b/src/main/java/org/gcube/portlets/user/geoportaldataentry/server/config/FileUtil.java @@ -1,5 +1,6 @@ package org.gcube.portlets.user.geoportaldataentry.server.config; +import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; @@ -7,62 +8,93 @@ import java.io.InputStream; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; +import java.nio.file.StandardCopyOption; -// TODO: Auto-generated Javadoc /** * The Class FileUtil. * - * @author Francesco Mangiacrapa at ISTI-CNR Pisa (Italy) - * Apr 21, 2020 + * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it + * + * Dec 2, 2021 */ public class FileUtil { - - + /** * Input stream to temp file. * * @param inputStream the input stream - * @param fileName the file name + * @param fileName the file name * @return the file * @throws IOException Signals that an I/O exception has occurred. */ // InputStream -> Temp File - public static File inputStreamToTempFile(InputStream inputStream, String fileName) - throws IOException { - - File tempFile = File.createTempFile(fileName, ".tmp"); - //File tempFile = File.createTempFile("MyAppName-", ".tmp"); - try (FileOutputStream outputStream = new FileOutputStream(tempFile)) { + public static File inputStreamToTempFile(InputStream inputStream, String fileName) throws IOException { - int read; - byte[] bytes = new byte[1024]; + File tempFile = File.createTempFile(fileName, ".tmp"); + // File tempFile = File.createTempFile("MyAppName-", ".tmp"); + try (FileOutputStream outputStream = new FileOutputStream(tempFile)) { - while ((read = inputStream.read(bytes)) != -1) { - outputStream.write(bytes, 0, read); - } - - return tempFile; + int read; + byte[] bytes = new byte[1024]; - }finally { - tempFile.deleteOnExit(); + while ((read = inputStream.read(bytes)) != -1) { + outputStream.write(bytes, 0, read); + } + + return tempFile; + + } finally { + tempFile.deleteOnExit(); } - } - - - /** - * Copy input stream to file. - * - * @param is the is - * @param to the to - * @return the file - * @throws IOException Signals that an I/O exception has occurred. - */ - public static File copyInputStreamToFile(InputStream is, String to) throws IOException { + } + + /** + * Input stream to temp file. + * + * @param copyString the copy string + * @return + * @throws IOException Signals that an I/O exception has occurred. + */ + public static File inputStreamToTempFile(String copyString, String prefixFile) throws IOException { + + File targetFile = null; + try { + InputStream initialStream = new ByteArrayInputStream(copyString.getBytes()); + targetFile = File.createTempFile(prefixFile, ".tmp"); + + java.nio.file.Files.copy(initialStream, targetFile.toPath(), StandardCopyOption.REPLACE_EXISTING); + + try { + if (initialStream != null) { + initialStream.close(); + } + } catch (IOException ioe) { + // ignore + } + return targetFile; + } finally { + try { + if (targetFile != null) + targetFile.deleteOnExit(); + } catch (Exception e) { + + } + } + } + + /** + * Copy input stream to file. + * + * @param is the is + * @param to the to + * @return the file + * @throws IOException Signals that an I/O exception has occurred. + */ + public static File copyInputStreamToFile(InputStream is, String to) throws IOException { Path dest = Paths.get(to); Files.copy(is, dest); return new File(to); } - } diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataentry/server/config/GNADataEntryConfigs.java b/src/main/java/org/gcube/portlets/user/geoportaldataentry/server/config/GNADataEntryConfigs.java new file mode 100644 index 0000000..cea91a9 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/geoportaldataentry/server/config/GNADataEntryConfigs.java @@ -0,0 +1,38 @@ +package org.gcube.portlets.user.geoportaldataentry.server.config; + +import java.util.List; + +import org.gcube.portlets.user.geoportaldataentry.shared.RoleRights; + + +public class GNADataEntryConfigs { + + List permissionsForRole = null; + + public GNADataEntryConfigs() { + + } + + public GNADataEntryConfigs(List permissionsForRole) { + super(); + this.permissionsForRole = permissionsForRole; + } + + public List getPermissionsForRole() { + return permissionsForRole; + } + + public void setPermissionsForRole(List permissionsForRole) { + this.permissionsForRole = permissionsForRole; + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("GNADataEntryConfigs [permissionsForRole="); + builder.append(permissionsForRole); + builder.append("]"); + return builder.toString(); + } + +} diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataentry/server/config/GNADataEntryConfigsProfileReader.java b/src/main/java/org/gcube/portlets/user/geoportaldataentry/server/config/GNADataEntryConfigsProfileReader.java new file mode 100644 index 0000000..bf267e9 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/geoportaldataentry/server/config/GNADataEntryConfigsProfileReader.java @@ -0,0 +1,282 @@ +package org.gcube.portlets.user.geoportaldataentry.server.config; + +import static org.gcube.resources.discovery.icclient.ICFactory.client; + +import java.io.File; +import java.io.StringReader; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; + +import org.gcube.application.geoportalcommon.shared.exception.ApplicationProfileNotFoundException; +import org.gcube.common.resources.gcore.utils.XPathHelper; +import org.gcube.common.scope.api.ScopeProvider; +import org.gcube.portlets.user.geoportaldataentry.shared.ACTION_ON_ITEM; +import org.gcube.portlets.user.geoportaldataentry.shared.GNAUserRightsConfigException; +import org.gcube.portlets.user.geoportaldataentry.shared.GcubeUserRole; +import org.gcube.portlets.user.geoportaldataentry.shared.RoleRights; +import org.gcube.portlets.user.geoportaldataentry.shared.RoleRights.OPERATION_TYPE; +import org.gcube.resources.discovery.client.api.DiscoveryClient; +import org.gcube.resources.discovery.client.queries.api.Query; +import org.gcube.resources.discovery.client.queries.impl.QueryBox; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.w3c.dom.Document; +import org.xml.sax.InputSource; + +/** + * The Class GNADataEntryConfigsProfileReader. + * + * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it + * + * Dec 2, 2021 + */ +public class GNADataEntryConfigsProfileReader { + + private static final String RESOURCE_PROFILE_BODY = "/Resource/Profile/Body"; + public static final String SECONDARY_TYPE = "ApplicationProfile"; + public static final String GENERIC_RESOURCE_NAME = "GNA-DataEntry-Configs"; + private static final String TEMP_ROLE_RIGHTS_CONFIG_FILENAME = "GNA_RoleRights_Configurations"; + + private String scope; + + private static final Logger LOG = LoggerFactory.getLogger(GNADataEntryConfigsProfileReader.class); + + /** + * Instantiates a new application profile reader. + */ + public GNADataEntryConfigsProfileReader() { + } + + /** + * Read profile from infrastrucure. + * + * @return the map + * @throws Exception the exception + */ + public GNADataEntryConfigs readProfileFromInfrastrucure() throws Exception { + LOG.info("called readProfileFromInfrastrucure"); + String queryString = getGcubeGenericQueryString(SECONDARY_TYPE, GENERIC_RESOURCE_NAME); + LOG.info("Scope " + scope + ", trying to perform query: " + queryString); + this.scope = ScopeProvider.instance.get(); + + if (scope == null) + throw new Exception("Scope is null, set scope into ScopeProvider"); + + GNADataEntryConfigs gnDEC = new GNADataEntryConfigs(); + String permissions_for_role = ""; + try { + + LOG.info("Trying to fetch GR named: " + GENERIC_RESOURCE_NAME + ", in the scope: " + scope + + ", SecondaryType: " + SECONDARY_TYPE); + Query q = new QueryBox(queryString); + DiscoveryClient client = client(); + List appProfile = client.submit(q); + + if (appProfile == null || appProfile.size() == 0) + throw new ApplicationProfileNotFoundException("GR with SecondaryType: " + SECONDARY_TYPE + + ", and name: " + GENERIC_RESOURCE_NAME + " is not registered in the scope: " + scope); + else { + String elem = appProfile.get(0); + DocumentBuilder docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); + Document doc = docBuilder.parse(new InputSource(new StringReader(elem))); + + XPathHelper helper = new XPathHelper(doc.getDocumentElement()); + + List currValue = null; + String xPathExp = RESOURCE_PROFILE_BODY + "/permssions_for_role/text()"; + currValue = helper.evaluate(xPathExp); + + if (currValue != null && currValue.size() > 0) { + permissions_for_role = currValue.get(0); + } else + throw new Exception("I'm not able to read the path: " + xPathExp); + + //replacing \n with new_line string + LOG.debug("read permissions_for_role: " + permissions_for_role); + String pfr_with_new_lines = permissions_for_role.replaceAll("\\\\n", System.lineSeparator()); + LOG.debug("permissions_for_role with new lines: " + pfr_with_new_lines); + + List listRoleRights = readRoleRightsConfig(pfr_with_new_lines); + gnDEC.setPermissionsForRole(listRoleRights); + LOG.info("returning: " + gnDEC); + return gnDEC; + } + + } catch (Exception e) { + LOG.error("Error while trying to read the " + SECONDARY_TYPE + " with SecondaryType " + + GENERIC_RESOURCE_NAME + " from scope " + scope, e); + return null; + } finally { + + } + + } + + /** + * To gcube user role. + * + * @param name the name + * @return the gcube user role + */ + public static GcubeUserRole toGcubeUserRole(String name) { + + for (GcubeUserRole gCubeUserRole : GcubeUserRole.values()) { + if (gCubeUserRole.getName().equalsIgnoreCase(name)) + return gCubeUserRole; + } + + return null; + } + + /** + * Read user rights config. + * + * @param permissions_for_role the permissions for role + * @return the list + * @throws GNAUserRightsConfigException the GNA user rights config not found + * exception + */ + public List readRoleRightsConfig(String permissions_for_role) throws GNAUserRightsConfigException { + LOG.debug("readRoleRightsConfig called"); + + File configurationFile = null; + List listUserRights = new ArrayList(); + try { + configurationFile = FileUtil.inputStreamToTempFile(permissions_for_role, TEMP_ROLE_RIGHTS_CONFIG_FILENAME); + + CSVReader reader = new CSVReader(configurationFile); + CSVFile csvFile = reader.getCsvFile(); + + List headerKeys = csvFile.getHeaderRow().getListValues(); + List rows = csvFile.getValueRows(); + + // MAPPING OPERATION TYPE AS READ, WRITE, etc. + Map mapOperationTypes = new HashMap(); + CSVRow operationTypeRow = rows.get(0); + List rowValues = operationTypeRow.getListValues(); + for (int j = 1; j < rowValues.size(); j++) { + String operationType = rowValues.get(j); + RoleRights.OPERATION_TYPE ot = RoleRights.OPERATION_TYPE.UNKNOWN; + if (operationType.equalsIgnoreCase("R")) { + ot = RoleRights.OPERATION_TYPE.READ; + } else if (operationType.equalsIgnoreCase("RW")) { + ot = RoleRights.OPERATION_TYPE.READ_WRITE; + } else if (operationType.equalsIgnoreCase("W")) { + ot = RoleRights.OPERATION_TYPE.WRITE; + } + + mapOperationTypes.put(headerKeys.get(j), ot); + } + + LOG.debug("Map of operation types: " + mapOperationTypes); + + // Starting from index 1 (means the second row in the CSV) + for (int i = 1; i < rows.size(); i++) { + LOG.trace(i + " row"); + RoleRights useRights = new RoleRights(); + CSVRow row = rows.get(i); + + // to map properties + rowValues = row.getListValues(); + + LOG.debug("rowValues: " + rowValues); + Map mapUserRolePermissions = new HashMap(); + + GcubeUserRole gCubeUserRole = toGcubeUserRole(rowValues.get(0)); + + if (gCubeUserRole == null) { + LOG.warn("The Role " + rowValues.get(0) + " not found into roleName of: " + GcubeUserRole.values()); + continue; + } + + useRights.setUserRole(gCubeUserRole); + + for (int j = 1; j < rowValues.size(); j++) { + mapUserRolePermissions.put(headerKeys.get(j), rowValues.get(j)); + } + LOG.debug("Role: " + useRights.getUserRole()); + LOG.debug("Permissions read: " + mapUserRolePermissions); + + Map listPermessions = new HashMap(); + + for (ACTION_ON_ITEM value : ACTION_ON_ITEM.values()) { + String yesno = mapUserRolePermissions.get(value.name()); + + if (yesno != null && yesno.equalsIgnoreCase("yes")) { + listPermessions.put(value, mapOperationTypes.get(value.name())); + } + + } + + useRights.setListPermessions(listPermessions); + +// String writeOwn = mapUserRolePermissions.get(WRITE_OWN_CONFIG); +// if (writeOwn != null && writeOwn.equalsIgnoreCase("yes")) { +// useRights.setWriteOwn(true); +// } +// +// String writeAny = mapUserRolePermissions.get(WRITE_ANY_CONFIG); +// if (writeAny != null && writeAny.equalsIgnoreCase("yes")) { +// useRights.setWriteAny(true); +// } + + listUserRights.add(useRights); + + } + LOG.info("Returning user rights config: " + listUserRights); + return listUserRights; + + } catch (Exception e) { + LOG.error("An error occurred on reading the GNA DataEntry config from: " + permissions_for_role, e); + throw new GNAUserRightsConfigException("Error on reading the GNA DataEntry from: " + permissions_for_role); + } finally { + + if (configurationFile != null) { + try { + configurationFile.delete(); + } catch (Exception e) { + // silent + } + } + } + + } + + /** + * Gets the gcube generic query string. + * + * @param secondaryType the secondary type + * @param genericResourceName the generic resource name + * @return the gcube generic query string + */ + public static String getGcubeGenericQueryString(String secondaryType, String genericResourceName) { + + return "for $profile in collection('/db/Profiles/GenericResource')//Resource " + + "where $profile/Profile/SecondaryType/string() eq '" + secondaryType + + "' and $profile/Profile/Name/string() " + " eq '" + genericResourceName + "'" + "return $profile"; + } + + /** + * Gets the secondary type. + * + * @return the secondary type + */ + public String getSecondaryType() { + return SECONDARY_TYPE; + } + + /** + * Gets the scope. + * + * @return the scope + */ + public String getScope() { + return scope; + } + +} diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataentry/server/config/GNARoleRitghtsConfigReader.java b/src/main/java/org/gcube/portlets/user/geoportaldataentry/server/config/GNARoleRitghtsConfigReader.java deleted file mode 100644 index 1c6319f..0000000 --- a/src/main/java/org/gcube/portlets/user/geoportaldataentry/server/config/GNARoleRitghtsConfigReader.java +++ /dev/null @@ -1,166 +0,0 @@ -package org.gcube.portlets.user.geoportaldataentry.server.config; - -import java.io.File; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.gcube.portlets.user.geoportaldataentry.shared.ACTION_ON_ITEM; -import org.gcube.portlets.user.geoportaldataentry.shared.GNAUserRightsConfigException; -import org.gcube.portlets.user.geoportaldataentry.shared.GcubeUserRole; -import org.gcube.portlets.user.geoportaldataentry.shared.RoleRights; -import org.gcube.portlets.user.geoportaldataentry.shared.RoleRights.OPERATION_TYPE; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.allen_sauer.gwt.log.client.Log; - -/** - * The Class GNARoleRitghtsConfigReader. - * - * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it - * - * Nov 25, 2021 - */ -public class GNARoleRitghtsConfigReader { - - private static final String USER_RIGHTS_CONFIG_FILENAME = "GNA_RoleRights_Configurations.csv"; - private static Logger LOG = LoggerFactory.getLogger(GNARoleRitghtsConfigReader.class); - - public static final String WRITE_OWN_CONFIG = "WRITE_OWN"; - public static final String WRITE_ANY_CONFIG = "WRITE_ANY"; - - /** - * Read user rights config. - * - * @return the list - * @throws GNAUserRightsConfigException the GNA user rights config not - * found exception - */ - public static List readRoleRightsConfig() throws GNAUserRightsConfigException { - LOG.debug("readRoleRightsConfig called"); - - File configurationFile = null; - - try { - - InputStream in = (InputStream) GNARoleRitghtsConfigReader.class.getResourceAsStream(USER_RIGHTS_CONFIG_FILENAME); - configurationFile = FileUtil.inputStreamToTempFile(in, USER_RIGHTS_CONFIG_FILENAME); - CSVReader reader = new CSVReader(configurationFile); - CSVFile csvFile = reader.getCsvFile(); - List listUserRights = new ArrayList(); - - List headerKeys = csvFile.getHeaderRow().getListValues(); - List rows = csvFile.getValueRows(); - - // MAPPING OPERATION TYPE AS READ, WRITE, etc. - Map mapOperationTypes = new HashMap(); - CSVRow operationTypeRow = rows.get(0); - List rowValues = operationTypeRow.getListValues(); - for (int j = 1; j < rowValues.size(); j++) { - String operationType = rowValues.get(j); - RoleRights.OPERATION_TYPE ot = RoleRights.OPERATION_TYPE.UNKNOWN; - if (operationType.equalsIgnoreCase("R")) { - ot = RoleRights.OPERATION_TYPE.READ; - } else if (operationType.equalsIgnoreCase("RW")) { - ot = RoleRights.OPERATION_TYPE.READ_WRITE; - } else if (operationType.equalsIgnoreCase("W")) { - ot = RoleRights.OPERATION_TYPE.WRITE; - } - - mapOperationTypes.put(headerKeys.get(j), ot); - } - - LOG.debug("Map of operation types: " + mapOperationTypes); - - //Starting from index 1 (means the second row in the CSV) - for (int i = 1; i < rows.size(); i++) { - LOG.trace(i + " row"); - RoleRights useRights = new RoleRights(); - CSVRow row = rows.get(i); - - // to map properties - rowValues = row.getListValues(); - - LOG.debug("rowValues: " + rowValues); - Map mapUserRolePermissions = new HashMap(); - - GcubeUserRole gCubeUserRole = toGcubeUserRole(rowValues.get(0)); - - if (gCubeUserRole == null) { - LOG.warn("The Role " + rowValues.get(0) + " not found into roleName of: " + GcubeUserRole.values()); - continue; - } - - useRights.setUserRole(gCubeUserRole); - - for (int j = 1; j < rowValues.size(); j++) { - mapUserRolePermissions.put(headerKeys.get(j), rowValues.get(j)); - } - LOG.debug("Role: " + useRights.getUserRole()); - LOG.debug("Permissions read: " + mapUserRolePermissions); - - Map listPermessions = new HashMap(); - - for (ACTION_ON_ITEM value : ACTION_ON_ITEM.values()) { - String yesno = mapUserRolePermissions.get(value.name()); - - if (yesno != null && yesno.equalsIgnoreCase("yes")) { - listPermessions.put(value, mapOperationTypes.get(value.name())); - } - - } - - useRights.setListPermessions(listPermessions); - -// String writeOwn = mapUserRolePermissions.get(WRITE_OWN_CONFIG); -// if (writeOwn != null && writeOwn.equalsIgnoreCase("yes")) { -// useRights.setWriteOwn(true); -// } -// -// String writeAny = mapUserRolePermissions.get(WRITE_ANY_CONFIG); -// if (writeAny != null && writeAny.equalsIgnoreCase("yes")) { -// useRights.setWriteAny(true); -// } - - listUserRights.add(useRights); - - } - Log.info("Returning user rights config: " + listUserRights); - return listUserRights; - - } catch (Exception e) { - LOG.error("An error occurred on reading the configuration file " + USER_RIGHTS_CONFIG_FILENAME, e); - throw new GNAUserRightsConfigException("Error on reading the configuration file. Is the file '" - + USER_RIGHTS_CONFIG_FILENAME + "' in the application path?"); - } finally { - - if (configurationFile != null) { - try { - configurationFile.delete(); - } catch (Exception e) { - // silent - } - } - } - - } - - /** - * To gcube user role. - * - * @param name the name - * @return the gcube user role - */ - public static GcubeUserRole toGcubeUserRole(String name) { - - for (GcubeUserRole gCubeUserRole : GcubeUserRole.values()) { - if (gCubeUserRole.getName().equalsIgnoreCase(name)) - return gCubeUserRole; - } - - return null; - } -} diff --git a/src/main/java/org/gcube/portlets/user/geoportaldataentry/server/config/GNA_RoleRights_Configurations.csv b/src/main/java/org/gcube/portlets/user/geoportaldataentry/server/config/GNA_RoleRights_Configurations.csv deleted file mode 100644 index 8678509..0000000 --- a/src/main/java/org/gcube/portlets/user/geoportaldataentry/server/config/GNA_RoleRights_Configurations.csv +++ /dev/null @@ -1,5 +0,0 @@ -,CREATE_NEW_PROJECT,VIEW_ON_MAP,VIEW_REPORT,EDIT_PROJECT,DELETE_PROJECT -OPERATION_TYPE,W,R,RW,RW,RW -Data-Member,no,yes,no,no,no -Data-Editor,yes,yes,yes,yes,yes -Data-Manager,yes,yes,yes,yes,yes diff --git a/src/test/java/org/gcube/portlets/user/geoportaldataentry/client/TestClass.java b/src/test/java/org/gcube/portlets/user/geoportaldataentry/client/TestClass.java index db9597f..ea61850 100644 --- a/src/test/java/org/gcube/portlets/user/geoportaldataentry/client/TestClass.java +++ b/src/test/java/org/gcube/portlets/user/geoportaldataentry/client/TestClass.java @@ -18,8 +18,7 @@ import org.gcube.application.geoportal.common.model.rest.QueryRequest.PagedReque import org.gcube.application.geoportal.common.rest.MongoConcessioni; import org.gcube.common.authorization.library.provider.SecurityTokenProvider; import org.gcube.common.scope.api.ScopeProvider; -import org.gcube.portlets.user.geoportaldataentry.server.config.GNARoleRitghtsConfigReader; -import org.gcube.portlets.user.geoportaldataentry.shared.RoleRights; +import org.gcube.portlets.user.geoportaldataentry.server.config.GNADataEntryConfigsProfileReader; import org.junit.Before; import org.junit.Test; @@ -39,7 +38,7 @@ public class TestClass { SecurityTokenProvider.instance.set(TOKEN); } - //@Test + // @Test public void getListConcessioniTest() throws Exception { MongoConcessioni clientMongo = mongoConcessioni().build(); Iterator concessioni = clientMongo.getList(); @@ -56,68 +55,61 @@ public class TestClass { System.out.println(++i + " " + concessione); } } - - @Test + + // @Test public void queryConcessioniTest() throws Exception { try { - MongoConcessioni clientMongo = mongoConcessioni().build(); - int offsetIndex = 0; - int limitIndex = 25; - Direction sDirection = Direction.ASCENDING; - List orderByFields = Arrays.asList("nome"); - - Map searchFields = new HashMap(); - searchFields.put("nome", "test"); - searchFields.put("authors", "fra"); + MongoConcessioni clientMongo = mongoConcessioni().build(); + int offsetIndex = 0; + int limitIndex = 25; + Direction sDirection = Direction.ASCENDING; + List orderByFields = Arrays.asList("nome"); - - QueryRequest request = new QueryRequest(); - PagedRequest paging = new PagedRequest(); - paging.setOffset(offsetIndex); - paging.setLimit(limitIndex); - request.setPaging(paging); + Map searchFields = new HashMap(); + searchFields.put("nome", "test"); + searchFields.put("authors", "fra"); - OrderedRequest ordering = new OrderedRequest(); + QueryRequest request = new QueryRequest(); + PagedRequest paging = new PagedRequest(); + paging.setOffset(offsetIndex); + paging.setLimit(limitIndex); + request.setPaging(paging); - ordering.setDirection(sDirection); + OrderedRequest ordering = new OrderedRequest(); + + ordering.setDirection(sDirection); + + ordering.setFields(orderByFields); + request.setOrdering(ordering); + + Document query = null; + + if (searchFields != null) { + + BasicDBObjectBuilder builder = BasicDBObjectBuilder.start(); + + query = new Document(); + + for (String key : searchFields.keySet()) { + // builder.append(key, new BasicDBObject("$eq", searchFields.get(key))); + BasicDBObject bs = new BasicDBObject(); + bs.append("$regex", searchFields.get(key)); + bs.append("$options", "i"); + builder.append(key, bs); + // query.put(key, new BasicDBObject("$eq", searchFields.get(key))); + // query = new Document(key, searchFields.get(key)); + } - ordering.setFields(orderByFields); - request.setOrdering(ordering); - - Document query = null; - - if(searchFields!=null) { - - BasicDBObjectBuilder builder = BasicDBObjectBuilder.start(); - - - - query = new Document(); - - for (String key : searchFields.keySet()) { - //builder.append(key, new BasicDBObject("$eq", searchFields.get(key))); - BasicDBObject bs = new BasicDBObject(); - bs.append("$regex", searchFields.get(key)); - bs.append("$options", "i"); - builder.append(key, bs); - //query.put(key, new BasicDBObject("$eq", searchFields.get(key))); - //query = new Document(key, searchFields.get(key)); - } - // query.putAll(builder.get().toMap()); // request.setFilter(query); - - - - BasicDBList list = new BasicDBList(); - list.add(builder.get().toMap()); - query.put("$or", list); - //or(query); - request.setFilter(query); - - - //************************************************ AND + BasicDBList list = new BasicDBList(); + list.add(builder.get().toMap()); + query.put("$or", list); + // or(query); + request.setFilter(query); + + // ************************************************ AND // query = new Document(); // for (String key : searchFields.keySet()) { // //AND @@ -128,75 +120,74 @@ public class TestClass { // // } // request.setFilter(query); - //******************************************** END AND - } - - //OR - /*query = new Document(); - BasicDBObject container = new BasicDBObject(); - BsonArray bArray = new BsonArray(); - for (String key : searchFields.keySet()) { - //AND - BasicDBObject bs = new BasicDBObject(); - bs.append("$regex", searchFields.get(key)); - bs.append("$options", "i"); - query.put(key, bs); - - //container.put(key, bs); - - -// BasicDBObject bs2 = new BasicDBObject(); -// bs2.append("$regex", searchFields.get(key)); -// bs2.append("$options", "i"); -// BsonDocument bsK = new BsonDocument(); -// bsK.append(key, new BsonString(bs2.toJson())); -// bArray.add(bsK); - - } -// query.put("$or", bArray); - - BasicDBList list = new BasicDBList(); - list.add(query); - - Document orDocument = new Document(); - orDocument.put("$or", list); -// - query = orDocument; - request.setFilter(query);*/ - - - - System.out.println("Paging offset: " + offsetIndex + ", limit: " + limitIndex); - System.out.println("Direction: " + sDirection); - System.out.println("Order by Fields: " + orderByFields); - System.out.println("Search for: " + query); - System.out.println("Search for Query to JSON: "+query.toJson()); - - Iterator concessioni = clientMongo.query(request); - - if(concessioni.hasNext()) { - System.out.println("Found concessioni, printing them..."); - }else - System.out.println("No concessione found"); - - if (concessioni != null) { - while (concessioni.hasNext()) { - Concessione concessione = (Concessione) concessioni.next(); - System.out.println(concessione.getNome()); + // ******************************************** END AND + } + + // OR + /* + * query = new Document(); BasicDBObject container = new BasicDBObject(); + * BsonArray bArray = new BsonArray(); for (String key : searchFields.keySet()) + * { //AND BasicDBObject bs = new BasicDBObject(); bs.append("$regex", + * searchFields.get(key)); bs.append("$options", "i"); query.put(key, bs); + * + * //container.put(key, bs); + * + * + * // BasicDBObject bs2 = new BasicDBObject(); // bs2.append("$regex", + * searchFields.get(key)); // bs2.append("$options", "i"); // BsonDocument bsK = + * new BsonDocument(); // bsK.append(key, new BsonString(bs2.toJson())); // + * bArray.add(bsK); + * + * } // query.put("$or", bArray); + * + * BasicDBList list = new BasicDBList(); list.add(query); + * + * Document orDocument = new Document(); orDocument.put("$or", list); // query = + * orDocument; request.setFilter(query); + */ + + System.out.println("Paging offset: " + offsetIndex + ", limit: " + limitIndex); + System.out.println("Direction: " + sDirection); + System.out.println("Order by Fields: " + orderByFields); + System.out.println("Search for: " + query); + System.out.println("Search for Query to JSON: " + query.toJson()); + + Iterator concessioni = clientMongo.query(request); + + if (concessioni.hasNext()) { + System.out.println("Found concessioni, printing them..."); + } else + System.out.println("No concessione found"); + + if (concessioni != null) { + while (concessioni.hasNext()) { + Concessione concessione = (Concessione) concessioni.next(); + System.out.println(concessione.getNome()); + + } } - - } - }catch (Exception e) { + } catch (Exception e) { e.printStackTrace(); } } - //@Test + // @Test +// public void readUserRights() throws Exception { +// new GNARoleRitghtsConfigReader(); +// List listUserRights = GNARoleRitghtsConfigReader.readRoleRightsConfig(); +// System.out.println(listUserRights); +// } + + @Test public void readUserRights() throws Exception { - new GNARoleRitghtsConfigReader(); - List listUserRights = GNARoleRitghtsConfigReader.readRoleRightsConfig(); - System.out.println(listUserRights); + GNADataEntryConfigsProfileReader r = new GNADataEntryConfigsProfileReader(); + try { + r.readProfileFromInfrastrucure(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } } }