Integrated the roles defined in the UCD with the ActionDefinitions

This commit is contained in:
Francesco Mangiacrapa 2022-09-15 17:58:04 +02:00
parent 25ff6fb152
commit 59a16651ce
6 changed files with 134 additions and 26 deletions

View File

@ -250,14 +250,7 @@ public class GeoPortalDataEntryApp implements EntryPoint {
myRights = gNADataEntryConfig.getUserRights();
initGUI();
GcubeUserRole userRole = myRights.getRoleRights().getUserRole();
String msg = "Logged in as ";
if (userRole != null && userRole.getName() != null) {
msg += userRole.getName().substring(userRole.getName().indexOf("-") + 1,
userRole.getName().length());
} else
msg += "Member";
mainTabPanel.setRoleLabel(msg);
mainTabPanel.setRole(userRole);
RoleRights roleRights = myRights.getRoleRights();
boolean canCreateNewItem = roleRights.getListPermessions().keySet()

View File

@ -10,6 +10,7 @@ import org.gcube.application.geoportalcommon.shared.SearchingFilter;
import org.gcube.application.geoportalcommon.shared.SearchingFilter.LOGICAL_OP;
import org.gcube.application.geoportalcommon.shared.SearchingFilter.ORDER;
import org.gcube.application.geoportalcommon.shared.WhereClause;
import org.gcube.application.geoportalcommon.shared.config.GcubeUserRole;
import org.gcube.application.geoportalcommon.shared.config.OPERATION_ON_ITEM;
import org.gcube.application.geoportalcommon.shared.geoportal.ConfigurationDV;
import org.gcube.application.geoportalcommon.shared.geoportal.DocumentDV;
@ -180,6 +181,8 @@ public class GeonaMainTabPanel extends Composite {
private CacheSearchingFilterParametersFromConfig cacheSearchingFilterParameters;
private GcubeUserRole userRole;
/**
* Instantiates a new geona main tab panel.
*
@ -440,9 +443,17 @@ public class GeonaMainTabPanel extends Composite {
/**
* Sets the role label.
*
* @param msg the new role label
* @param userRole the user role
* @param roleTitle the role title
*/
public void setRoleLabel(String msg) {
public void setRole(GcubeUserRole userRole) {
this.userRole = userRole;
String msg = "Logged in as ";
if (userRole != null && userRole.getName() != null) {
msg += userRole.getName().substring(userRole.getName().indexOf("-") + 1,
userRole.getName().length());
} else
msg += "Member";
roleLabel.setText(msg);
}
@ -739,7 +750,7 @@ public class GeonaMainTabPanel extends Composite {
public <T> void showActionsOnSelected(List<T> selectItems) {
actionListPanel.showActionsOnSelected(selectItems);
actionListPanel.showActionsOnSelected(selectItems, userRole);
}
/**

View File

@ -0,0 +1,25 @@
package org.gcube.portlets.user.geoportaldataentry.client.ui.action;
import org.gcube.application.geoportalcommon.shared.geoportal.config.ActionDefinitionDV;
import com.github.gwtbootstrap.client.ui.Button;
public class ActionDefButton {
private ActionDefinitionDV actionDefinitionDV;
private Button button;
public ActionDefButton(ActionDefinitionDV actionDefinitionDV, Button button) {
this.actionDefinitionDV = actionDefinitionDV;
this.button = button;
}
public ActionDefinitionDV getActionDefinitionDV() {
return actionDefinitionDV;
}
public Button getButton() {
return button;
}
}

View File

@ -5,7 +5,9 @@ import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.gcube.application.geoportalcommon.shared.config.GcubeUserRole;
import org.gcube.application.geoportalcommon.shared.geoportal.ResultDocumentDV;
import org.gcube.application.geoportalcommon.shared.geoportal.config.ActionDefinitionDV;
import org.gcube.portlets.user.geoportaldataentry.client.events.WorkflowActionOnSelectedItemEvent;
@ -52,7 +54,7 @@ public class ActionListPanel extends Composite {
@UiField
HTMLPanel actionListBasePanel;
private Map<String, List<Button>> mapPhaseListButtons;
private Map<String, List<ActionDefButton>> mapPhaseListButtons;
private void initActions(List<ActionDefinitionDV> listActionDef) {
@ -62,7 +64,7 @@ public class ActionListPanel extends Composite {
ButtonGroup buttonGroup = new ButtonGroup();
buttonGroup.getElement().addClassName("actions-button-group");
mapPhaseListButtons = new LinkedHashMap<String, List<Button>>();
mapPhaseListButtons = new LinkedHashMap<String, List<ActionDefButton>>();
for (ActionDefinitionDV actionDefinitionDV : listActionDef) {
Button butt = new Button();
@ -82,11 +84,11 @@ public class ActionListPanel extends Composite {
String[] displayOnPhases = actionDefinitionDV.getDisplayOnPhase();
for (String displayOnPhase : displayOnPhases) {
List<Button> mapPhase = mapPhaseListButtons.get(displayOnPhase);
List<ActionDefButton> mapPhase = mapPhaseListButtons.get(displayOnPhase);
if (mapPhase == null)
mapPhase = new ArrayList<Button>();
mapPhase = new ArrayList<ActionDefButton>();
mapPhase.add(butt);
mapPhase.add(new ActionDefButton(actionDefinitionDV, butt));
mapPhaseListButtons.put(displayOnPhase, mapPhase);
}
buttonGroup.add(butt);
@ -99,7 +101,7 @@ public class ActionListPanel extends Composite {
}
public <T> void showActionsOnSelected(List<T> listSelected) {
public <T> void showActionsOnSelected(List<T> listSelected, GcubeUserRole userRole) {
setAllActionsVisible(false);
if (listSelected.size() == 1) {
@ -110,10 +112,23 @@ public class ActionListPanel extends Composite {
String itemPhase = ((ResultDocumentDV) item).getLifecycleInfo().getPhase();
List<Button> listButtons = mapPhaseListButtons.get(itemPhase);
for (Button button : listButtons) {
button.setVisible(true);
actionListBasePanel.setVisible(true);
List<ActionDefButton> listButtons = mapPhaseListButtons.get(itemPhase);
for (ActionDefButton actionDefButton : listButtons) {
Set<String> roles = actionDefButton.getActionDefinitionDV().getRoles();
//No role/s defined means enable the action by default
if(roles.isEmpty()) {
actionDefButton.getButton().setVisible(true);
actionListBasePanel.setVisible(true);
}else {
//Checking if the userRole is matching the role defined in the ActionDefinition
boolean isRoleIntoActionDef= roles.stream().anyMatch(userRole.getName()::equalsIgnoreCase);
if(isRoleIntoActionDef) {
actionDefButton.getButton().setVisible(true);
actionListBasePanel.setVisible(true);
}
}
}
}
}
@ -122,11 +137,11 @@ public class ActionListPanel extends Composite {
}
private void setAllActionsVisible(boolean bool) {
Iterator<List<Button>> collIterator = mapPhaseListButtons.values().iterator();
Iterator<List<ActionDefButton>> collIterator = mapPhaseListButtons.values().iterator();
while (collIterator.hasNext()) {
List<Button> listButton = collIterator.next();
for (Button button : listButton) {
button.setVisible(bool);
List<ActionDefButton> listButton = collIterator.next();
for (ActionDefButton actionDefButton : listButton) {
actionDefButton.getButton().setVisible(bool);
}
}

View File

@ -1,5 +1,7 @@
package org.gcube.portlets.user.geoportaldataentry.client.ui.utils;
import com.google.gwt.dom.client.Element;
/**
* The Class HTMLUtil.
*
@ -78,4 +80,66 @@ public class HTMLUtil {
return "</" + tag.name() + ">";
}
/**
* Json to HTML.
*
* @param jsonTxt the json txt
* @param cssClassToTable the css class to table
* @return the element
*/
public static native Element jsonToHTML(String jsonTxt, String cssClassToTable)/*-{
try {
var jsonObj = JSON.parse(jsonTxt);
//console.log(jsonObj.length)
if (jsonObj.length == undefined)
jsonObj = [ jsonObj ]
//console.log(jsonObj.length)
// EXTRACT VALUE FOR HTML HEADER.
var col = [];
for (var i = 0; i < jsonObj.length; i++) {
for ( var key in jsonObj[i]) {
//console.log('key json' +key)
if (col.indexOf(key) === -1) {
col.push(key);
}
}
}
// CREATE DYNAMIC TABLE.
var table = document.createElement("table");
var addDefaultCss = "json-to-html-table-column";
if (cssClassToTable) {
addDefaultCss = cssClassToTable;
}
try {
table.classList.add(addDefaultCss);
} catch (e) {
console.log('invalid css add', e);
}
// ADD JSON DATA TO THE TABLE AS ROWS.
for (var i = 0; i < col.length; i++) {
tr = table.insertRow(-1);
var firstCell = tr.insertCell(-1);
//firstCell.style.cssText="font-weight: bold; text-align: center; vertical-align: middle;";
firstCell.innerHTML = col[i];
for (var j = 0; j < jsonObj.length; j++) {
var tabCell = tr.insertCell(-1);
var theValue = jsonObj[j][col[i]];
tabCell.innerHTML = theValue;
}
}
return table;
} catch (e) {
console.log('invalid json', e);
}
}-*/;
}

View File

@ -745,7 +745,7 @@ public class GeoportalDataEntryServiceImpl extends RemoteServiceServlet implemen
// 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)) {