2015-03-05 18:47:07 +01:00
/ * *
*
* /
package org.gcube.portlets.user.workspace ;
import java.util.ArrayList ;
import java.util.List ;
import java.util.Map ;
import org.gcube.common.homelibrary.home.HomeLibrary ;
import org.gcube.common.homelibrary.home.exceptions.HomeNotFoundException ;
import org.gcube.common.homelibrary.home.exceptions.InternalErrorException ;
import org.gcube.common.homelibrary.home.exceptions.UserNotFoundException ;
import org.gcube.common.homelibrary.home.workspace.Workspace ;
import org.gcube.common.homelibrary.home.workspace.WorkspaceFolder ;
import org.gcube.common.homelibrary.home.workspace.accessmanager.ACLType ;
import org.gcube.common.homelibrary.home.workspace.exceptions.ItemNotFoundException ;
import org.gcube.common.homelibrary.home.workspace.exceptions.WorkspaceFolderNotFoundException ;
import org.gcube.common.scope.api.ScopeProvider ;
import org.gcube.common.scope.impl.ScopeBean ;
import org.gcube.portlets.user.workspace.server.util.AclTypeComparator ;
2015-03-06 16:12:21 +01:00
import org.gcube.portlets.user.workspace.shared.ReportAssignmentACL ;
2015-03-05 18:47:07 +01:00
/ * *
*
* @author Francesco Mangiacrapa francesco . mangiacrapa @isti.cnr.it
* @Jan 29 , 2014
*
* /
public class EditPermissionsTest {
// public static String DEFAULT_SCOPE = "/d4science.research-infrastructures.eu/gCubeApps"; //PRODUCTION
public static String DEFAULT_SCOPE = " /gcube/devsec " ; //DEV
public static String TEST_USER = " francesco.mangiacrapa " ;
// public static String ITEMID = "63832213-098d-42d1-8774-89b6349764c0"; //Activity T3.4 working drafts/T2-EC-IMAR-HO-14-015 iMarine Sustainability WP - Business Model tools.pdf
// public static String ITEMID = "42fa2601-39d0-4951-aabf-27d2a2f1dca7";
// protected static Logger logger = Logger.getLogger(EditPermissionsTest.class);
public static void main ( String [ ] args ) {
ScopeBean scope = new ScopeBean ( DEFAULT_SCOPE ) ;
ScopeProvider . instance . set ( scope . toString ( ) ) ;
System . out . println ( " init HL " ) ;
try {
Workspace ws = HomeLibrary
. getHomeManagerFactory ( )
. getHomeManager ( )
. getHome ( TEST_USER )
. getWorkspace ( ) ;
2015-03-05 19:00:56 +01:00
WorkspaceFolder sharedFolder = ( WorkspaceFolder ) ws . getItem ( " bd5fa899-225d-4547-a3c5-79b5333cde20 " ) ;
2015-03-05 18:47:07 +01:00
System . out . println ( sharedFolder . getACLOwner ( ) ) ;
ArrayList < String > list = new ArrayList < String > ( ) ;
list . add ( " francesco.mangiacrapa " ) ;
list . add ( " massimiliano.assante " ) ;
list . add ( " pasquale.pagano " ) ;
2015-03-06 16:12:21 +01:00
list . add ( " valentina.marioli " ) ;
2015-03-05 18:47:07 +01:00
2015-03-06 16:12:21 +01:00
validateACLToUser ( sharedFolder , list , ACLType . READ_ONLY . toString ( ) ) ;
2015-03-05 18:47:07 +01:00
} catch ( WorkspaceFolderNotFoundException e ) {
// TODO Auto-generated catch block
e . printStackTrace ( ) ;
} catch ( InternalErrorException e ) {
// TODO Auto-generated catch block
e . printStackTrace ( ) ;
} catch ( HomeNotFoundException e ) {
// TODO Auto-generated catch block
e . printStackTrace ( ) ;
} catch ( UserNotFoundException e ) {
// TODO Auto-generated catch block
e . printStackTrace ( ) ;
} catch ( ItemNotFoundException e ) {
// TODO Auto-generated catch block
e . printStackTrace ( ) ;
2015-03-06 16:12:21 +01:00
} catch ( Exception e ) {
// TODO Auto-generated catch block
e . printStackTrace ( ) ;
2015-03-05 18:47:07 +01:00
}
}
2015-03-06 16:12:21 +01:00
private static ReportAssignmentACL validateACLToUser ( WorkspaceFolder folder , List < String > listLogins , String aclType ) throws Exception {
ReportAssignmentACL reportValidation = new ReportAssignmentACL ( ) ;
2015-03-05 18:47:07 +01:00
try {
2015-03-06 16:12:21 +01:00
2015-03-05 18:47:07 +01:00
Map < ACLType , List < String > > mapACL = folder . getACLOwner ( ) ;
ACLType settingACL = ACLType . valueOf ( aclType ) ;
System . out . println ( " Tentative setting: " + settingACL ) ;
2015-03-06 16:12:21 +01:00
System . out . println ( " For Logins: " + listLogins ) ;
2015-03-05 18:47:07 +01:00
AclTypeComparator comparator = new AclTypeComparator ( ) ;
List < String > admins = mapACL . get ( ACLType . ADMINISTRATOR ) ;
for ( String admin : admins ) {
listLogins . remove ( admin ) ;
System . out . println ( " Reject username: " + admin + " as " + ACLType . ADMINISTRATOR ) ;
}
2015-03-06 16:12:21 +01:00
List < String > validLogins = new ArrayList < String > ( listLogins ) ;
List < String > errors = new ArrayList < String > ( ) ;
2015-03-05 18:47:07 +01:00
for ( String username : listLogins ) {
2015-03-05 19:00:56 +01:00
System . out . println ( " \ nChecking username: " + username ) ;
2015-03-05 18:47:07 +01:00
for ( ACLType aclHL : mapACL . keySet ( ) ) {
2015-03-06 16:12:21 +01:00
if ( ! aclHL . equals ( ACLType . ADMINISTRATOR ) ) {
List < String > loginsHL = mapACL . get ( aclHL ) ;
System . out . println ( " to ACLType: " + aclHL + " , logins found: " + loginsHL ) ;
if ( loginsHL . contains ( username ) ) {
int cmp = comparator . compare ( settingACL , aclHL ) ;
System . out . println ( " Compare result between " + aclHL + " and " + settingACL + " : " + cmp ) ;
if ( cmp = = - 1 ) {
//CHANGE ACL IS NOT VALID
System . out . println ( " Reject ACL: " + settingACL + " to " + username ) ;
validLogins . remove ( username ) ;
//TODO FULL NAME
errors . add ( " Unable for " + username + " the grant of the privilege ' " + settingACL + " , it's lower than (already assigned) " + aclHL ) ;
break ;
} else if ( cmp = = 0 ) {
//SAME ACL
System . out . println ( " Skipping ACL: " + settingACL + " to " + username ) ;
//TODO FULL NAME
errors . add ( " Ignoring for " + username + " the grant of the privilege ' " + settingACL + " , it's already assigned " ) ;
validLogins . remove ( username ) ;
break ;
} else if ( cmp = = 1 ) {
//CHANGE ACL IS VALID
System . out . println ( " Valid ACL: " + settingACL + " to " + username ) ;
}
} else {
2015-03-05 18:47:07 +01:00
//CHANGE ACL IS VALID
2015-03-06 16:12:21 +01:00
System . out . println ( " [Login not found], Set ACL: " + settingACL + " to " + username ) ;
2015-03-05 18:47:07 +01:00
}
}
2015-03-05 19:00:56 +01:00
}
2015-03-05 18:47:07 +01:00
}
2015-03-06 16:12:21 +01:00
System . out . println ( " \ n " ) ;
for ( String username : validLogins ) {
System . out . println ( " Set ACL: " + settingACL + " to " + username ) ;
}
System . out . println ( " \ n " ) ;
for ( String error : errors ) {
System . out . println ( error ) ;
}
reportValidation . setAclType ( aclType ) ;
reportValidation . setErrors ( errors ) ;
reportValidation . setValidLogins ( validLogins ) ;
return reportValidation ;
2015-03-05 18:47:07 +01:00
} catch ( InternalErrorException e ) {
2015-03-06 16:12:21 +01:00
throw new Exception ( " Sorry, an error occurred when validating ACL assignment, try again later " ) ;
2015-03-05 18:47:07 +01:00
}
}
}