auth-portlet-manager/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyAddDialog.java

557 lines
18 KiB
Java
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package org.gcube.portlets.admin.authportletmanager.client.pagelayout;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import org.gcube.portlets.admin.authportletmanager.client.AuthManagerController;
import org.gcube.portlets.admin.authportletmanager.client.Entities;
import org.gcube.portlets.admin.authportletmanager.client.event.AddPoliciesEvent;
import org.gcube.portlets.admin.authportletmanager.client.event.UpdatePolicyEvent;
import org.gcube.portlets.admin.authportletmanager.client.resource.AuthResources;
import org.gcube.portlets.admin.authportletmanager.client.widget.InputListWidget;
import org.gcube.portlets.admin.authportletmanager.client.widget.WindowBox;
import org.gcube.portlets.admin.authportletmanager.shared.Access;
import org.gcube.portlets.admin.authportletmanager.shared.Caller;
import org.gcube.portlets.admin.authportletmanager.shared.Caller.TypeCaller;
import org.gcube.portlets.admin.authportletmanager.shared.ConstantsSharing;
import org.gcube.portlets.admin.authportletmanager.shared.PolicyAuth;
import org.gcube.portlets.admin.authportletmanager.shared.Service;
import org.gcube.portlets.widgets.widgettour.client.extendedclasses.GCubeTour;
import com.ait.toolkit.hopscotch.client.Placement;
import com.ait.toolkit.hopscotch.client.TourStep;
import com.github.gwtbootstrap.client.ui.Alert;
import com.github.gwtbootstrap.client.ui.Button;
import com.github.gwtbootstrap.client.ui.ButtonGroup;
import com.github.gwtbootstrap.client.ui.Image;
import com.github.gwtbootstrap.client.ui.ListBox;
import com.github.gwtbootstrap.client.ui.Row;
import com.github.gwtbootstrap.client.ui.base.AlertBase;
import com.github.gwtbootstrap.client.ui.event.ClosedEvent;
import com.github.gwtbootstrap.client.ui.event.ClosedHandler;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.Widget;
/**
* Dialog Box for add a policy
*
* @author "Alessandro Pieve " <a
* href="mailto:alessandro.pieve@isti.cnr.it">alessandro.pieve@isti.cnr.it</a>
*
*/
public class PolicyAddDialog extends WindowBox {
private static final Binder binder = GWT.create(Binder.class);
interface Binder extends UiBinder<Widget, PolicyAddDialog> {
}
private Boolean error_display=false;
private ArrayList<PolicyAuth>listModifyPolicy;
private Boolean modifyPolicy=false;
private ArrayList<PolicyAuth>listAddPolicy;
public InputListWidget ListWidget;
@UiField
FlowPanel text_caller_policy;
@UiField
ListBox l_service_class_policy;
@UiField
ListBox l_service_name_policy;
@UiField
ListBox l_service_id_policy;
@UiField
ListBox l_access_policy;
@UiField
ButtonGroup b_caller_checkbox;
@UiField
Button b_caller_all_user;
@UiField
Button b_caller_all_role;
@UiField
Button b_caller_except;
@UiField
Button b_add_multiple_user_role;
@UiField
Button b_add_multiple_service;
@UiField
Button b_exit_dialog_policy;
@UiField
Button b_save_policy;
@UiField
Row r_loader_space;
@UiField
FlowPanel idAddCallerPolicy;
@UiField
FlowPanel idAddServicePolicy;
@UiField
FlowPanel idAddAccessPolicy;
public PolicyAddDialog() {
super(true, false);
this.setWidget(binder.createAndBindUi(this));
//this.setGlassEnabled(true);
this.setWidth("800px");
this.setAnimationEnabled(true);
this.setGlassEnabled(true);
this.center();
this.setText("Add/Update Policy");
idAddCallerPolicy.getElement().setId("idAddCallerPolicy");
idAddServicePolicy.getElement().setId("idAddServicePolicy");
idAddAccessPolicy.getElement().setId("idAddAccessPolicy");
//istance a new list policy for modify
listModifyPolicy=new ArrayList<PolicyAuth>();
//Initialize a suggest for caller
text_caller_policy.setStyleName("auto_suggest");
ListWidget=new InputListWidget();
text_caller_policy.add(ListWidget);
//disable except
b_caller_except.setEnabled(false);
//load Handler for service class
l_service_class_policy.addChangeHandler(new ChangeHandler() {
@SuppressWarnings("rawtypes")
public void onChange(ChangeEvent event) {
int indexC = l_service_class_policy.getSelectedIndex();
String newValue =l_service_class_policy.getValue(indexC);
l_service_name_policy.clear();
if (newValue.equals(ConstantsSharing.Star)){
l_service_name_policy.setEnabled(false);
l_service_name_policy.addItem(ConstantsSharing.StarLabel,ConstantsSharing.Star);
l_service_id_policy.setEnabled(false);
}
else{
l_service_name_policy.setEnabled(true);
l_service_id_policy.setEnabled(true);
//order by service name
@SuppressWarnings("unchecked")
List<String> sortedServiceName=new ArrayList(Entities.getServicesMap().get(newValue));
Collections.sort(sortedServiceName);
//filter distinct service
List<String> distinctServiceName = new ArrayList<String>();
for (String serviceName :sortedServiceName )
{
if (!distinctServiceName.contains(serviceName)){
l_service_name_policy.addItem(serviceName);
distinctServiceName.add(serviceName);
}
}
}
}
});
loadListService();
loadListAccessPolicy();
r_loader_space.clear();
GCubeTour tourAddDialogPolicy = new GCubeTour("tour-auth add dialog", "auth-portlet-manager", 1, "Would you like to see again this tour next time ?", "Tour Policy use");
tourAddDialogPolicy.setShowPrevButton(true);
if (!this.modifyPolicy){
TourStep firstStep = new TourStep(Placement.RIGHT, "idAddCallerPolicy");
firstStep.setContent("Here you can add a single or multiple caller that denies an access on a selected service:"
+ "<br>If insert an user digit @,<br>If insert a role digit #, <br>If you want insert a service digit $.");
firstStep.setTitle("Add Caller");
firstStep.centerXOffset();
firstStep.centerArrowOffset();
tourAddDialogPolicy.addStep(firstStep);
}
TourStep secondStep = new TourStep(Placement.TOP, "idAddServicePolicy");
secondStep.setTitle("Select Service");
secondStep.setContent("Specify a service class and service name ");
secondStep.centerXOffset();
secondStep.centerArrowOffset();
TourStep thirdStep = new TourStep(Placement.TOP, "idAddAccessPolicy");
thirdStep.setTitle("Select Access");
thirdStep.setContent("Specify an acces type");
thirdStep.centerXOffset();
thirdStep.centerArrowOffset();
tourAddDialogPolicy.addStep(secondStep);
tourAddDialogPolicy.addStep(thirdStep);
tourAddDialogPolicy.startTour();
}
/**
* Click all user
* @param e ClickEvent
*/
@UiHandler("b_caller_all_user")
void onClickAddAllUser(ClickEvent e) {
if (!b_caller_all_user.isToggled()){
//selected checkbox all user
b_caller_all_user.setFocus(false);
b_caller_all_role.setFocus(false);
b_caller_all_role.setActive(false);
b_add_multiple_user_role.setEnabled(false);
b_add_multiple_service.setEnabled(false);
b_caller_except.setEnabled(true);
b_caller_except.setActive(false);
//Caller allCallerUser= new Caller("user","ALL");
Caller allCallerUser= new Caller(TypeCaller.user,"ALL");
ListWidget.clearList();
ListWidget.addCaller(allCallerUser);
}
else{
//not selected checkbox all user
b_caller_all_role.setEnabled(true);
b_add_multiple_user_role.setEnabled(true);
b_add_multiple_service.setEnabled(true);
b_caller_except.setEnabled(false);
ListWidget.clearList();
}
}
/**
* Click all role
* @param e ClickEvent
*/
@UiHandler("b_caller_all_role")
void onClickAddAllRole(ClickEvent e) {
if (!b_caller_all_role.isToggled()){
//selected checkbox all role
b_caller_all_role.setFocus(false);
b_caller_all_user.setFocus(false);
b_caller_all_user.setActive(false);
b_add_multiple_user_role.setEnabled(false);
b_add_multiple_service.setEnabled(false);
b_caller_except.setEnabled(true);
b_caller_except.setActive(false);
Caller allCallerRole= new Caller(TypeCaller.role,"ALL");
ListWidget.clearList();
ListWidget.addCaller(allCallerRole);
}
else{
//not selected checkbox all role
b_caller_all_user.setEnabled(true);
b_add_multiple_user_role.setEnabled(true);
b_add_multiple_service.setEnabled(true);
b_caller_except.setEnabled(false);
ListWidget.clearList();
}
}
/**
* Click except
* @param e ClickEvent
*/
@UiHandler("b_caller_except")
void onClickExcept(ClickEvent e) {
//selected except
if (!b_caller_except.isToggled())
ListWidget.enabledList();
else{
ListWidget.clearList();
if (!b_caller_all_role.isToggled()){
Caller allCallerUser= new Caller(TypeCaller.user,"ALL");
ListWidget.addCaller(allCallerUser);
}
else if (!b_caller_all_user.isToggled()){
Caller allCallerRole= new Caller(TypeCaller.role,"ALL");
ListWidget.addCaller(allCallerRole);
}
}
}
/**
* Click open dialog for multiple caller user or role
* @param e
*/
@UiHandler("b_add_multiple_user_role")
void onClickAddCaller(ClickEvent e) {
DialogAddMultipleCallerUserRole popup = new DialogAddMultipleCallerUserRole();
popup.initList(ListWidget.callerSelected,this);
popup.show();
}
/**
* Click open dialog for multiple caller service
* @param e
*/
@UiHandler("b_add_multiple_service")
void onClickAddCallerService(ClickEvent e) {
DialogAddMultipleCallerService popup = new DialogAddMultipleCallerService(ListWidget.callerSelected,this);
//popup.initList();
popup.show();
}
/**
* Click close dialog
* @param e
*/
@UiHandler("b_exit_dialog_policy")
void onClickExitDialogPolicy(ClickEvent e) {
this.hide();
this.clear();
}
/**
* Click add policy
* @param e
*/
@UiHandler("b_save_policy")
void onClickSavePolicy(ClickEvent e) {
//verify if a modify any
if (this.modifyPolicy){
//verifico se ho cambiato qualcosa
for (PolicyAuth verifyPolicy:listModifyPolicy){
String serviceClass =l_service_class_policy.getValue(l_service_class_policy.getSelectedIndex());
String serviceName =l_service_name_policy.getValue(l_service_name_policy.getSelectedIndex());
String serviceId =l_service_id_policy.getValue(l_service_id_policy.getSelectedIndex());
Service service=new Service(serviceClass,serviceName,serviceId);
Access access =Access.valueOf(l_access_policy.getValue(l_access_policy.getSelectedIndex()));
if ((verifyPolicy.getService().equals(service) )&& (verifyPolicy.getAccess().equals(access))){
if (!error_display)
ErrorText("Not changed");
error_display=true;
return ;
}
}
}
if (ListWidget.callerSelected.isEmpty()){
if (!error_display)
ErrorText("Insert Caller");
error_display=true;
}
else{
error_display=false;
String serviceClass =l_service_class_policy.getValue(l_service_class_policy.getSelectedIndex());
String serviceName =l_service_name_policy.getValue(l_service_name_policy.getSelectedIndex());
String serviceId =l_service_id_policy.getValue(l_service_id_policy.getSelectedIndex());
Service service=new Service(serviceClass,serviceName,serviceId);
//Access access = Access.valueOf(l_access_policy.getSelectedValue());
int indexA = l_access_policy.getSelectedIndex();
Access access =Access.valueOf(l_access_policy.getValue(indexA));
if (listModifyPolicy.isEmpty()){
//policy to be added
//verify if a insert simple or exception
if (b_caller_except.isToggled()){
GWT.log("AuthManager - Insert new policy with execption and service:"+service.getServiceClass());
PolicyAuth policy= new PolicyAuth();
List<Caller> callerList=new ArrayList<Caller>();
//order a list caller
if (ListWidget.callerSelected.size() > 0) {
Collections.sort(ListWidget.callerSelected, new Comparator<Caller>() {
@Override
public int compare(final Caller o1, final Caller o2) {
return o1.getCallerName().compareTo(o2.getCallerName());
}
} );
}
for (Caller caller:ListWidget.callerSelected){
GWT.log("add"+caller.getCallerName());
callerList.add(caller);
}
policy.setCaller(callerList);
policy.setService(service);
policy.setAccess(access);
policy.setExcludesCaller(true);
listAddPolicy=new ArrayList<PolicyAuth>();
listAddPolicy.add(policy);
AuthManagerController.eventBus.fireEvent(new AddPoliciesEvent(listAddPolicy, this));
}
else{
listAddPolicy=new ArrayList<PolicyAuth>();
for (Caller caller:ListWidget.callerSelected){
GWT.log("AuthManager - Insert new policy:"+caller.getCallerName()+" with type:"+caller.getTypecaller().toString()+"and service:"+service.getServiceClass()+" and access:"+access.toString());
PolicyAuth policy= new PolicyAuth();
List<Caller> callerList=new ArrayList<Caller>();
callerList.add(caller);
policy.setCaller(callerList);
policy.setService(service);
policy.setAccess(access);
listAddPolicy.add(policy);
}
AuthManagerController.eventBus.fireEvent(new AddPoliciesEvent(listAddPolicy, this));
}
}
else{
for (PolicyAuth modifyPolicy:listModifyPolicy){
Long idPolicy=modifyPolicy.getIdpolicy();
GWT.log("AuthManager - Update policy:"+idPolicy);
modifyPolicy.setService(service);
modifyPolicy.setAccess(access);
AuthManagerController.eventBus.fireEvent(new UpdatePolicyEvent(modifyPolicy,this));
}
}
}
}
/**
* Array list for policy modified
* @param listPolicy
*/
public void setModifyPolicy(ArrayList<PolicyAuth> listPolicy) {
String serviceClass = null;
String serviceName = null;
String serviceId = null;
Access access = null;
this.listModifyPolicy = listPolicy;
this.modifyPolicy=true;
for (PolicyAuth result :listPolicy){
List<Caller> callerList= result.getCaller();
Service service = result.getService();
serviceClass=service.getServiceClass();
serviceName=service.getServiceName();
serviceId=service.getServiceId();
access=result.getAccess();
if (result.getExcludesCaller()){
TypeCaller typeCaller=result.getCallerType();
callerList.add(new Caller(typeCaller,"ALL"));
}
ListWidget.addListCaller(callerList, false);
GWT.log("AuthManager - Modify existing Policy identifier:"+result.getIdpolicy()+" from caller:"+result.getCallerAsString()+ "with access:"+access);
}
//DISABLE ADD ANOTHER CALLER
b_caller_all_user.setEnabled(false);
b_caller_all_role.setEnabled(false);
b_add_multiple_user_role.setEnabled(false);
b_add_multiple_service.setEnabled(false);
//RETRIVE A SERVICE SELECT
l_service_name_policy.addItem("ALL");
GWT.log("access:"+serviceClass);
if (!serviceClass.equals("ALL")){
List<String> distinctServiceName = new ArrayList<String>();
for (String serviceNameList : Entities.getServicesMap().get(serviceClass)){
if (!distinctServiceName.contains(serviceNameList)){
l_service_name_policy.addItem(serviceNameList);
distinctServiceName.add(serviceNameList);
}
}
//selected the values of policy
l_service_class_policy.setSelectedValue(serviceClass);
l_service_name_policy.setSelectedValue(serviceName);
l_service_id_policy.setSelectedValue(serviceId);
}
l_access_policy.setSelectedValue(access.toString());
}
/**
* Retrieve information from dialog multiple caller
* @param listCaller
*/
public void setListCallerUserRole(List<Caller> listCaller){
List<Caller> selectedCaller= new ArrayList<Caller>();
for (Caller caller: ListWidget.callerSelected){
if (caller.getTypecaller().equals(TypeCaller.service)){
selectedCaller.add(caller);
}
}
selectedCaller.addAll(listCaller);
ListWidget.replaceListCaller(selectedCaller);
}
/**
*
* @param listCaller
*/
public void setListCallerService(List<Caller> listCaller) {
List<Caller> selectedCaller= new ArrayList<Caller>();
for (Caller caller: ListWidget.callerSelected){
if ((caller.getTypecaller().equals(TypeCaller.user))||(caller.getTypecaller().equals(TypeCaller.role))){
selectedCaller.add(caller);
}
}
selectedCaller.addAll(listCaller);
ListWidget.replaceListCaller(selectedCaller);
}
/**
* Load a service into select service class
*/
public void loadListService(){
l_service_class_policy.addItem(ConstantsSharing.StarLabel,ConstantsSharing.Star);
l_service_name_policy.setEnabled(false);
l_service_name_policy.addItem(ConstantsSharing.StarLabel,ConstantsSharing.Star);
l_service_id_policy.setEnabled(false);
//order by serviceClass
@SuppressWarnings({ "unchecked", "rawtypes" })
List<String> sortedServiceClass=new ArrayList(Entities.getServicesMap().keySet());
Collections.sort(sortedServiceClass);
for (String serviceClass :sortedServiceClass )
{
l_service_class_policy.addItem(serviceClass);
}
l_service_id_policy.addItem(ConstantsSharing.StarLabel,ConstantsSharing.Star);
}
/**
* Load a list access into select access
*/
public void loadListAccessPolicy(){
l_access_policy.ensureDebugId("l_access_policy");
l_access_policy.setHeight("30px");
l_access_policy.setVisibleItemCount(1);
//order by Access
/*
@SuppressWarnings({ "rawtypes", "unchecked" })
List<String> sortedAccess=new ArrayList(Entities.getAccess());
Collections.sort(sortedAccess);
*/
for( Access access : Access.values() ) {
l_access_policy.addItem(access.toString());
}
}
/**
* Alert for msg error
* @param stringMsg
*/
public void ErrorText(String stringMsg) {
Alert msg = new Alert();
msg.setAnimation(true);
msg.setText(stringMsg);
msg.addClosedHandler(new ClosedHandler<AlertBase>() {
@Override
public void onClosed(ClosedEvent<AlertBase> event) {
error_display=false;
}
});
r_loader_space.add(msg);
}
/**
* Start Animation loading
*/
public void AppLoadingView() {
b_exit_dialog_policy.setEnabled(false);
b_save_policy.setEnabled(false);
Image imgLoading = new Image(AuthResources.INSTANCE.loaderIcon());
r_loader_space.clear();
r_loader_space.add(imgLoading);
}
/**
* Stop animation loading
*/
public void StopAppLoadingView() {
b_exit_dialog_policy.setEnabled(true);
b_save_policy.setEnabled(true);
clear();
hide();
}
}