Author: bpapez
Date: Wed Jun  6 17:47:40 2007
New Revision: 17484

URL: https://svndev.jahia.net/websvn/listing.php?sc=3D1&rev=3D17484&repname=
=3Djahia
Log:
[JAHIA-1612] * get rid of magic numbers and use constants or methods instead

Modified:
    branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/engines/rights/Man=
ageRights.java
    branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/hibernate/model/Ja=
hiaAcl.java
    branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/services/acl/Jahia=
AbstractACL.java
    branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/services/acl/Jahia=
BaseACL.java

Modified: branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/engines/righ=
ts/ManageRights.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/branches/JAHIA-5-0-SP=
-BRANCH/core/src/java/org/jahia/engines/rights/ManageRights.java&rev=3D1748=
4&repname=3Djahia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/engines/rights/Man=
ageRights.java (original)
+++ branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/engines/rights/Man=
ageRights.java Wed Jun  6 17:47:40 2007
@@ -17,6 +17,7 @@
  */
 package org.jahia.engines.rights;
 =

+import org.apache.log4j.Logger;
 import org.jahia.bin.Jahia;
 import org.jahia.content.*;
 import org.jahia.data.containers.JahiaContainer;
@@ -40,16 +41,13 @@
 import org.jahia.services.esi.EsiInvalidationEventListener;
 import org.jahia.services.esi.EsiService;
 import org.jahia.services.fields.ContentField;
+import org.jahia.services.lock.LockKey;
+import org.jahia.services.lock.LockPrerequisites;
+import org.jahia.services.lock.LockPrerequisitesResult;
 import org.jahia.services.pages.ContentPage;
 import org.jahia.services.pages.JahiaPage;
 import org.jahia.services.pages.JahiaPageService;
-import org.jahia.services.usermanager.JahiaGroup;
-import org.jahia.services.usermanager.JahiaGroupManagerDBProvider;
-import org.jahia.services.usermanager.JahiaUser;
-import org.jahia.services.usermanager.JahiaUserManagerDBProvider;
-import org.jahia.services.lock.LockPrerequisitesResult;
-import org.jahia.services.lock.LockPrerequisites;
-import org.jahia.services.lock.LockKey;
+import org.jahia.services.usermanager.*;
 import org.jahia.utils.JahiaTools;
 =

 import javax.servlet.ServletException;
@@ -78,11 +76,27 @@
     // Contains groups which have read access to the current ACL
     public static final String READ_GROUPS =3D "readGroups";
 =

-    private static final org.apache.log4j.Logger logger =3D
-            org.apache.log4j.Logger.getLogger(ManageRights.class);
+    private static final Logger logger =3D Logger.getLogger(ManageRights.c=
lass);
 =

     private static ManageRights instance =3D null;
 =

+    public static final int V_ADDED_ACL =3D 0;
+
+    public static final int V_RESET_CHILD_PERMISSION =3D 1;
+
+    public static final int V_REM_ACL_ENTRY =3D 2;
+
+    public static final int V_RIGHT_CHANGE =3D 3;
+
+    public static final int V_DEFAULT_PERMISSION =3D 8;
+
+    private int vNbOfPerm =3D -1;
+
+    private int vDefualtInherit =3D -1;
+
+    private int vName =3D -1;
+    =

+    =

 // -------------------------- STATIC METHODS --------------------------
 =

     /**
@@ -103,6 +117,33 @@
 =

 // -------------------------- OTHER METHODS --------------------------
 =

+    public int getNumberOfPermissions() {
+        if (vNbOfPerm =3D=3D -1) {
+            try {
+                vNbOfPerm =3D new JahiaBaseACL().size();
+            } catch (JahiaException ex) {
+                logger.error("Error getting number of permissions", ex);
+            }
+        }
+        return vNbOfPerm;
+    }
+
+    public int getVDefaultInherit() {
+        if (vDefualtInherit =3D=3D -1)
+            vDefualtInherit =3D V_DEFAULT_PERMISSION + getNumberOfPermissi=
ons();
+        return vDefualtInherit;
+    }
+
+    public int getVName() {
+        if (vName =3D=3D -1)
+            vName =3D getVDefaultInherit() + 1;
+        return vName;
+    }
+
+    public int getVKey(Integer userNameWidth) {
+        return getVName() + userNameWidth.intValue() + 1;
+    }
+    =

     /**
      * @param jParams   a ProcessingContext object
      * @param mode      the mode, according to JahiaEngine
@@ -124,10 +165,6 @@
         evh.setPreviousScreen("rightsMgmt");
         try {
             theACL =3D new JahiaBaseACL(aclID);
-        } catch (ACLNotFoundException ex) {
-            final ValidationError ve =3D new ValidationError(this, ex.getM=
essage());
-            evh.addError(ve);
-            return evh;
         } catch (JahiaException ex) {
             final ValidationError ve =3D new ValidationError(this, ex.getM=
essage());
             evh.addError(ve);
@@ -255,14 +292,29 @@
 =

             engineMap.put(REMOVED_ENTRIES+"_"+aclID, new HashSet());
 =

-
+            engineMap.put("hasNegativePermissions", Boolean.FALSE);
+            engineMap.put("actionNames", JahiaAbstractACL.getActionNames()=
);
+            engineMap.put("symbols", JahiaBaseACL.getSymbols());
+            Integer userNameWidth =3D new Integer(15);
+            engineMap.put("userNameWidth", userNameWidth);
+            putInt(engineMap, "nbOfPerm", getNumberOfPermissions());
+            putInt(engineMap, "vDefInherit", getVDefaultInherit());
+            putInt(engineMap, "vDefPerm", V_DEFAULT_PERMISSION);
+            putInt(engineMap, "vAddAcl", V_ADDED_ACL);
+            putInt(engineMap, "vRemoveAcl", V_REM_ACL_ENTRY);
+            putInt(engineMap, "vChangeAcl", V_RIGHT_CHANGE);
+            putInt(engineMap, "vKey", getVKey(userNameWidth));            =

+
+            ServicesRegistry sReg =3D ServicesRegistry.getInstance();
+            JahiaUserManagerService uMgr =3D sReg.getJahiaUserManagerServi=
ce();
+            JahiaGroupManagerService gMgr =3D sReg.getJahiaGroupManagerSer=
vice();            =

+            =

             // Lookup for user ACL entries and inherited ACL
             final List userList =3D acl.getUsernameList(parentACLFinder, a=
clResource, null);
             final Iterator userListIter =3D userList.iterator();
             while (userListIter.hasNext()) {
                 final String userKey =3D (String) userListIter.next();
-                final JahiaUser user =3D ServicesRegistry.getInstance().
-                        getJahiaUserManagerService().lookupUser(userKey);
+                final JahiaUser user =3D uMgr.lookupUser(userKey);
                 if (user !=3D null) {
                     final Integer[] value =3D {new Integer(getPermissions(=
user,acl, parentACLFinder,aclResource))};
                     if (logger.isDebugEnabled()) logger.debug("Loaded valu=
e: "+value[0]+ " for user "+
@@ -280,8 +332,7 @@
             final Iterator groupListIter =3D groupList.iterator();
             while (groupListIter.hasNext()) {
                 final String groupKey =3D (String) groupListIter.next();
-                final JahiaGroup group =3D ServicesRegistry.getInstance().
-                        getJahiaGroupManagerService().lookupGroup(groupKey=
);
+                final JahiaGroup group =3D gMgr.lookupGroup(groupKey);
                 if (group !=3D null) {
                     final Integer[] value =3D {new Integer(getPermissions(=
group, acl, parentACLFinder, aclResource))};
                     if (logger.isDebugEnabled()) logger.debug("Loaded valu=
e: " + value[0] + " for group " +
@@ -325,8 +376,8 @@
             engineMap.put("managerights_engine.fieldForm",
                     ServicesRegistry.getInstance().getJahiaFetcherService(=
).fetchServlet((ParamBean) jParams, READONLY_JSP));
         } else {
-            engineMap.put("managerights_engine.fieldForm",
-                    ServicesRegistry.getInstance().getJahiaFetcherService(=
).fetchServlet((ParamBean) jParams, JSP_FILE));
+        engineMap.put("managerights_engine.fieldForm",
+                      ServicesRegistry.getInstance().getJahiaFetcherServic=
e().fetchServlet((ParamBean)jParams, JSP_FILE));
         }
 =

         return true;
@@ -346,15 +397,15 @@
                 if (logger.isDebugEnabled()) logger.debug("Returning Entry=
State: " + permissions);
                 return permissions;
             } else { // Look up permissions; pur inheritance
-                int permissions =3D 8;
+                int permissions =3D JahiaBaseACL.RIGHTS_INHERITANCE_FLAG;
                 if (p instanceof JahiaUser) {
-                    permissions +=3D acl.getPermission(aclFinder,aclResour=
ceInterface, (JahiaUser) p, JahiaBaseACL.READ_RIGHTS) ? 1 : 0;
-                    permissions +=3D acl.getPermission(aclFinder,aclResour=
ceInterface, (JahiaUser) p, JahiaBaseACL.WRITE_RIGHTS) ? 2 : 0;
-                    permissions +=3D acl.getPermission(aclFinder,aclResour=
ceInterface, (JahiaUser) p, JahiaBaseACL.ADMIN_RIGHTS) ? 4 : 0;
+                    JahiaUser user =3D (JahiaUser) p;
+                    for (int i =3D 0; i < JahiaBaseACL.RIGHTS_MAX_OFFSET; =
i++)
+                        permissions |=3D acl.getPermission(aclFinder, aclR=
esourceInterface, user, i) ? 1 << i : 0;
                 } else {
-                    permissions +=3D acl.getPermission(aclFinder,aclResour=
ceInterface, (JahiaGroup) p, JahiaBaseACL.READ_RIGHTS) ? 1 : 0;
-                    permissions +=3D acl.getPermission(aclFinder,aclResour=
ceInterface, (JahiaGroup) p, JahiaBaseACL.WRITE_RIGHTS) ? 2 : 0;
-                    permissions +=3D acl.getPermission(aclFinder,aclResour=
ceInterface, (JahiaGroup) p, JahiaBaseACL.ADMIN_RIGHTS) ? 4 : 0;
+                    JahiaGroup group =3D (JahiaGroup) p;
+                    for (int i =3D 0; i < JahiaBaseACL.RIGHTS_MAX_OFFSET; =
i++)
+                        permissions |=3D acl.getPermission(aclFinder, aclR=
esourceInterface, group, i) ? 1 << i : 0;
                 }
                 if (logger.isDebugEnabled()) logger.debug("Returning inher=
ited permissions: " + permissions);
                 aclEntry =3D (p instanceof JahiaUser) ? acl.getUserEntry((=
JahiaUser) p) : acl.getGroupEntry((JahiaGroup) p);
@@ -420,8 +471,15 @@
             }
         }
 =

+        // format: [00000000r--*users gusers:1]
+        // [0..7] - flags
+        // [8..8+nbOfPerm] - permissions
+        // [8+nbOpPerm] - inheritance
+        // [inheritance+1..inheritance+1+namelength] - name
+        // [name+nameLength+2..*] - key
+        // [key-1] - type        =

         final String[] submitedACLEntries =3D jParams.
-                getParameterValues("aclEntries");
+                getParameterValues(ACL_ENTRIES);
         final Integer userNameWidth =3D (Integer) jParams.getSessionState(=
).
                 getAttribute("userNameWidth");
 =

@@ -435,57 +493,61 @@
         }
 =

         for (int i =3D 0; i < submitedACLEntries.length; i++) {
-            if ("00000000".equals(submitedACLEntries[i].substring(0, 8))) {
-                if (logger.isDebugEnabled()) logger.debug("No change to Ac=
lEntry: "+submitedACLEntries[i]);
+            String aclEntry =3D submitedACLEntries[i];            =

+            if ("00000000".equals(aclEntry.substring(0, 8))) {
+                if (logger.isDebugEnabled()) logger.debug("No change to Ac=
lEntry: "+aclEntry);
 =

                 continue; // Don't do anything if no changes to the ACL en=
try.
             }
             // What kind of object has to be saved : user or group ?
-            final Object usr_grp;
+            final Principal usr_grp;
             final String usr_grpName;
             final boolean isUser; // Only used for clearer log messages
 =

             // Very nice way to kill weird non breaking space when non-utf8
             if (!Jahia.getSettings().isUtf8Encoding()) {
-                submitedACLEntries[i] =3D JahiaTools.replacePattern(submit=
edACLEntries[i], "\u00C2\u00A0", " ");
+                aclEntry =3D JahiaTools.replacePattern(aclEntry, "\u00C2\u=
00A0", " ");
             }
 =

-            if (logger.isDebugEnabled()) logger.debug("Submited ACL entry =
: " + submitedACLEntries[i]);
-            if (submitedACLEntries[i].charAt(12 + userNameWidth.intValue()=
) =3D=3D 'u') {
+            if (logger.isDebugEnabled()) logger.debug("Submited ACL entry =
: " + aclEntry);
+            int typeOffs =3D getVKey(userNameWidth) - 1;
+            switch (aclEntry.charAt(typeOffs)) {            =

+            case 'u':
                 usr_grp =3D ServicesRegistry.getInstance().getJahiaUserMan=
agerService().
-                        lookupUser(
-                        submitedACLEntries[i].substring(
-                        13 + userNameWidth.intValue()));
+                        lookupUser(aclEntry.substring(getVKey(userNameWidt=
h)));
                 if (usr_grp =3D=3D null) continue;
                 usr_grpName =3D ((JahiaUser) usr_grp).getName();
                 isUser =3D true;
-            } else {
+                break;
+            case 'g':
                 usr_grp =3D ServicesRegistry.getInstance().getJahiaGroupMa=
nagerService().
-                        lookupGroup(
-                        submitedACLEntries[i].substring(
-                        13 + userNameWidth.intValue()));
+                        lookupGroup(aclEntry.substring(getVKey(userNameWid=
th)));
                 if (usr_grp =3D=3D null) continue;
                 usr_grpName =3D ((JahiaGroup) usr_grp).getName();
                 isUser =3D false;
+                break;
+            default:
+                logger.error("Unknown principal type");
+                return false;
             }
             // Decode the select box value parameters
-            final String permissions =3D submitedACLEntries[i].substring(8=
, 11).toUpperCase();
+            final String permissions =3D aclEntry.substring(V_DEFAULT_PERM=
ISSION, getVDefaultInherit()).toUpperCase();
 =

-            if (submitedACLEntries[i].charAt(0) =3D=3D '1') {
+            if (aclEntry.charAt(V_ADDED_ACL) =3D=3D '1') {
                 if (isUser) {
                     if (logger.isDebugEnabled()) logger.debug("Added ACL e=
ntry for user : " + usr_grpName);
                 } else {
                     if (logger.isDebugEnabled()) logger.debug("Added ACL e=
ntry for group : " + usr_grpName);
                 }
                 setACLEntry(usr_grp, permissions, aclEntries, readGroups);
-            } else if (submitedACLEntries[i].charAt(11) =3D=3D '%') {
+            } else if (aclEntry.charAt(getVDefaultInherit()) =3D=3D '%') {
                 if (isUser) {
                     if (logger.isDebugEnabled()) logger.debug("Cut inherit=
ance for user : " + usr_grpName);
                 } else {
                     if (logger.isDebugEnabled()) logger.debug("Cut inherit=
ance for group : " + usr_grpName);
                 }
                 setACLEntry(usr_grp, permissions, aclEntries, readGroups);
-            } else if (submitedACLEntries[i].charAt(2) =3D=3D '1') {
+            } else if (aclEntry.charAt(V_REM_ACL_ENTRY) =3D=3D '1') {
                 if (isUser) {
                     if (logger.isDebugEnabled()) logger.debug("Remove ACL =
entry for user : " + usr_grpName);
                     JahiaBaseACL parentACL =3D null;
@@ -521,7 +583,7 @@
 =

                 aclEntries.remove(usr_grp);
                 removedEntries.add(usr_grp);
-            } else if (submitedACLEntries[i].charAt(3) =3D=3D '1') {
+            } else if (aclEntry.charAt(V_RIGHT_CHANGE) =3D=3D '1') {
                 if (isUser) {
                     if (logger.isDebugEnabled()) logger.debug("Permissions=
 have changed to " +
                             permissions + " for user : " + usr_grpName);
@@ -532,7 +594,7 @@
                 setACLEntry(usr_grp, permissions, aclEntries, readGroups);
             }
 =

-//            if (submitedACLEntries[i].charAt(1) =3D=3D '1') {
+//            if (aclEntry.charAt(V_RESET_CHILD_PERMISSION) =3D=3D '1') {
 //                logger.debug("Reset child permissions for user : " + use=
r.getUsername());
 //                todo Reset child permissions
 //            }
@@ -540,29 +602,40 @@
         return true;
     }
 =

+    private boolean emptyPermissions(String permissions) {
+        for (int j =3D 0, len =3D permissions.length(); j < len; j++)
+            if (permissions.charAt(j) !=3D JahiaAbstractACL.SYMBOL_EMPTY)
+                return false;
+        return true;
+    }
+
+    private void putInt(Map map, Object key, int value) {
+        map.put(key, new Integer(value));
+    }    =

+    =

     /**
      * Save or update the ACL modifications to the DB.
      *
-     * @param usr_grp the object to save
      */
-    private void setACLEntry(final Object usr_grp, final String perm, Map =
aclEntries, Set readGroups) {
+    private void setACLEntry(final Principal p, final String perm, Map acl=
Entries, Set readGroups) {
         final JahiaAclEntry permissions =3D new JahiaAclEntry();
-        permissions.setPermission(JahiaBaseACL.READ_RIGHTS, perm.charAt(0)=
 =3D=3D 'R' ?
-            JahiaAclEntry.ACL_YES : JahiaAclEntry.ACL_NO);
-        permissions.setPermission(JahiaBaseACL.WRITE_RIGHTS, perm.charAt(1=
) =3D=3D 'W' ?
-            JahiaAclEntry.ACL_YES : JahiaAclEntry.ACL_NO);
-        permissions.setPermission(JahiaBaseACL.ADMIN_RIGHTS, perm.charAt(2=
) =3D=3D 'A' ?
-            JahiaAclEntry.ACL_YES : JahiaAclEntry.ACL_NO);
-
+        char[] actions =3D JahiaBaseACL.getUppercaseSymbols();
+        int size =3D perm.length() < JahiaBaseACL.RIGHTS_MAX_OFFSET ? perm
+                .length() : JahiaBaseACL.RIGHTS_MAX_OFFSET;
+        for (int i =3D 0; i < size; i++)
+            permissions.setPermission(i,
+                perm.charAt(i) =3D=3D actions[i] ? JahiaACLEntry.ACL_YES
+                        : JahiaACLEntry.ACL_NO);
+        =

         final String name;
         final Integer[] value =3D {new Integer(permissions.getEntryState()=
),
                 new Integer(permissions.getEntryTri())};
-        if (usr_grp instanceof JahiaUser) {
-            final JahiaUser user =3D (JahiaUser) usr_grp;
+        if (p instanceof JahiaUser) {
+            final JahiaUser user =3D (JahiaUser) p;
             name =3D user.getName();
             aclEntries.put(user, value);
         } else {
-            final JahiaGroup group =3D (JahiaGroup) usr_grp;
+            final JahiaGroup group =3D (JahiaGroup) p;
             name =3D group.getName();
             aclEntries.put(group, value);
         }

Modified: branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/hibernate/mo=
del/JahiaAcl.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/branches/JAHIA-5-0-SP=
-BRANCH/core/src/java/org/jahia/hibernate/model/JahiaAcl.java&rev=3D17484&r=
epname=3Djahia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/hibernate/model/Ja=
hiaAcl.java (original)
+++ branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/hibernate/model/Ja=
hiaAcl.java Wed Jun  6 17:47:40 2007
@@ -243,10 +243,10 @@
 =

     public boolean clearEntries(int userTypeEntry) {
         if (userTypeEntry =3D=3D ACLInfo.USER_TYPE_ENTRY) {
-            entries.keySet().removeAll(userEntries.keySet());
+            entries.keySet().removeAll(getUserEntries().keySet());
             userEntries.clear();
         } else if (userTypeEntry =3D=3D ACLInfo.GROUP_TYPE_ENTRY) {
-            entries.keySet().removeAll(groupEntries.keySet());
+            entries.keySet().removeAll(getGroupEntries().keySet());
             groupEntries.clear();
         }
         return true;
@@ -577,7 +577,7 @@
     }
 =

     public boolean removeGroupEntry(JahiaGroup group) {
-       getGroupEntries().remove(group.getName());
+        getGroupEntries().remove(group.getName());
         entries.remove(group.getName());
         return true;
     }
@@ -592,7 +592,7 @@
         if ((group =3D=3D null) || (entry =3D=3D null)) {
             return false;
         }
-        JahiaAclEntry current =3D (JahiaAclEntry) groupEntries.get(group.g=
etName());
+        JahiaAclEntry current =3D (JahiaAclEntry) getGroupEntries().get(gr=
oup.getName());
         if (current !=3D null) {
             current.setEntryState(entry.getEntryState());
             current.setEntryTri(entry.getEntryTri());
@@ -602,14 +602,14 @@
             current =3D new JahiaAclEntry(
                     new JahiaAclEntryPK(this, new Integer(ACLInfo.GROUP_TY=
PE_ENTRY), group.getName()),
                     entry.getEntryState(), entry.getEntryTri());
-            groupEntries.put(group.getName(), current);
-            entries.put(group.getName(), current);
+            getGroupEntries().put(group.getName(), current);
+            getEntries().put(group.getName(), current);
         }
         return true;
     }
 =

     public boolean setUserEntry(JahiaUser user, JahiaAclEntry entry) {
-        JahiaAclEntry current =3D (JahiaAclEntry) userEntries.get(user.get=
Name());
+        JahiaAclEntry current =3D (JahiaAclEntry) getUserEntries().get(use=
r.getName());
         if (current !=3D null) {
             current.setEntryState(entry.getEntryState());
             current.setEntryTri(entry.getEntryTri());
@@ -618,8 +618,8 @@
                     new JahiaAclEntryPK(this, new Integer(ACLInfo.USER_TYP=
E_ENTRY),
                     user.getName()),
                     entry.getEntryState(), entry.getEntryTri());
-            userEntries.put(user.getName(), current);
-            entries.put(user.getName(), current);
+            getUserEntries().put(user.getName(), current);
+            getEntries().put(user.getName(), current);
         }
         return true;
     }

Modified: branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/services/acl=
/JahiaAbstractACL.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/branches/JAHIA-5-0-SP=
-BRANCH/core/src/java/org/jahia/services/acl/JahiaAbstractACL.java&rev=3D17=
484&repname=3Djahia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/services/acl/Jahia=
AbstractACL.java (original)
+++ branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/services/acl/Jahia=
AbstractACL.java Wed Jun  6 17:47:40 2007
@@ -29,6 +29,8 @@
 =

 import java.io.IOException;
 import java.io.Serializable;
+import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 import java.util.Vector;
 =

@@ -46,6 +48,12 @@
  * @version 1.2
  */
 public abstract class JahiaAbstractACL implements Cloneable, Serializable {
+    /** =

+     *  A pseudo-symbol, which indicates that this action is
+     *  not assigned in action list.
+     */
+    public static char SYMBOL_EMPTY =3D '-';
+    =

     /** Reference to the ACL object */
     protected JahiaAcl mACL;
     protected JahiaAclName mACLName =3D null;
@@ -53,9 +61,39 @@
     /** Reference on the ACL Manager Service */
     private JahiaACLManagerService mACLService;
 =

+    protected static volatile char[] sharedActions =3D null;
+    protected static volatile char[] uppercaseSharedActions =3D null;    =

+
+    protected static volatile List sharedActionsNames =3D null;
+    =

+    protected Boolean inheritance =3D null;        =

+    =

     /** Error message constant */
     private final String INIT_ERROR_MSG =3D "ACL Object not initialized";
 =

+    public static List getActionNames() {
+        if (sharedActionsNames =3D=3D null)
+            getSharedActions(); // init list
+        return sharedActionsNames;
+    }
+    =

+    protected static final char[] getSharedActions() {
+        if (sharedActions =3D=3D null) {
+            sharedActionsNames =3D Collections.unmodifiableList(Arrays.asL=
ist(new String[]{"Read", "Write", "Admin"}));
+            sharedActions =3D new char[]{'r', 'w', 'A'};            =

+            uppercaseSharedActions =3D new char[]{'R', 'W', 'A'};         =
   =

+        }
+
+        return sharedActions;
+    }
+    =

+    protected static final char[] getUppercaseSharedActions() {
+        if (uppercaseSharedActions =3D=3D null)
+            getSharedActions(); // init list        =

+        return uppercaseSharedActions;        =

+    }
+    =

+    =

     //--------------------------------------------------------------------=
-----
     // Each of the derived classes should have thier own bit signification,
     // therefore each derived classe has to define the meaning of each bit.
@@ -274,8 +312,10 @@
             throws JahiaACLException {
         testProxy ();
         synchronized (mACL) {
-            boolean result =3D mACL.setInheritance(new Integer(inheritance=
));
-            getService().updateCache(mACL);
+            JahiaAcl newACL =3D (JahiaAcl) mACL.clone();            =

+            boolean result =3D newACL.setInheritance(new Integer(inheritan=
ce));
+            getService().updateCache(newACL);
+            mACL =3D newACL;
             return result;
         }
     }
@@ -330,8 +370,10 @@
             throws JahiaACLException {
         testProxy ();
         synchronized (mACL) {
-            boolean result =3D mACL.setUserEntry (user, entry);
-            getService().updateCache(mACL);
+            JahiaAcl newACL =3D (JahiaAcl) mACL.clone();            =

+            boolean result =3D newACL.setUserEntry(user, entry);
+            getService().updateCache(newACL);
+            mACL =3D newACL;
             return result;
         }
     }
@@ -351,8 +393,10 @@
             throws JahiaACLException {
         testProxy ();
         synchronized (mACL) {
-            boolean result =3D mACL.removeUserEntry (user);
-            getService().updateCache(mACL);
+            JahiaAcl newACL =3D (JahiaAcl) mACL.clone();            =

+            boolean result =3D newACL.removeUserEntry(user);
+            getService().updateCache(newACL);
+            mACL =3D newACL;
             return result;
         }
     }
@@ -371,8 +415,10 @@
             throws JahiaACLException {
         testProxy ();
         synchronized (mACL) {
-            boolean result =3D mACL.clearEntries (ACLInfo.USER_TYPE_ENTRY);
-            getService().updateCache(mACL);
+            JahiaAcl newACL =3D (JahiaAcl) mACL.clone();            =

+            boolean result =3D newACL.clearEntries(JahiaAcl.USER_TYPE_ENTR=
Y);
+            getService().updateCache(newACL);
+            mACL =3D newACL;
             return result;
         }
     }
@@ -476,8 +522,10 @@
             throws JahiaACLException {
         testProxy ();
         synchronized (mACL) {
-            boolean result =3D mACL.setGroupEntry (group, entry);
-            getService().updateCache(mACL);
+            JahiaAcl newACL =3D (JahiaAcl) mACL.clone();            =

+            boolean result =3D newACL.setGroupEntry(group, entry);
+            getService().updateCache(newACL);
+            mACL =3D newACL;
             return result;
         }
     }
@@ -497,8 +545,10 @@
             throws JahiaACLException {
         testProxy ();
         synchronized (mACL) {
-            boolean result =3D mACL.removeGroupEntry (group);
-            getService().updateCache(mACL);
+            JahiaAcl newACL =3D (JahiaAcl) mACL.clone();            =

+            boolean result =3D newACL.removeGroupEntry(group);
+            getService().updateCache(newACL);
+            mACL =3D newACL;
             return result;
         }
     }
@@ -517,8 +567,10 @@
             throws JahiaACLException {
         testProxy ();
         synchronized (mACL) {
-            boolean result =3D mACL.clearEntries (JahiaAcl.GROUP_TYPE_ENTR=
Y);
-            getService().updateCache(mACL);
+            JahiaAcl newACL =3D (JahiaAcl) mACL.clone(); =

+            boolean result =3D newACL.clearEntries(JahiaAcl.GROUP_TYPE_ENT=
RY);
+            getService().updateCache(newACL);
+            mACL =3D newACL;
             return result;
         }
     }
@@ -938,8 +990,12 @@
             JahiaDatabaseException {
         JahiaAcl parentACL =3D null;
         if(parentID>0) parentACL =3D getService().lookupACL (parentID);
-        mACL.setParent(parentACL);
-        getService().updateCache(mACL);
+        synchronized (mACL) {
+            JahiaAcl newACL =3D (JahiaAcl) mACL.clone();
+            newACL.setParent(parentACL);
+            getService().updateCache(newACL);
+            mACL =3D newACL;
+        }
     }
 =

     //--------------------------------------------------------------------=
-----

Modified: branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/services/acl=
/JahiaBaseACL.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/branches/JAHIA-5-0-SP=
-BRANCH/core/src/java/org/jahia/services/acl/JahiaBaseACL.java&rev=3D17484&=
repname=3Djahia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/services/acl/Jahia=
BaseACL.java (original)
+++ branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/services/acl/Jahia=
BaseACL.java Wed Jun  6 17:47:40 2007
@@ -17,6 +17,7 @@
  */
 package org.jahia.services.acl;
 =

+import org.apache.log4j.Logger;
 import org.jahia.exceptions.JahiaException;
 import org.jahia.hibernate.model.JahiaAcl;
 import org.jahia.content.ContentObject;
@@ -44,7 +45,14 @@
     public static final int WRITE_RIGHTS =3D 1;
     public static final int ADMIN_RIGHTS =3D 2;
 =

+    public static final int RIGHTS_MAX_OFFSET =3D 3;
+    =

+    public static final int ALL_RIGHTS =3D 0x7; // 1 + 2 + 4
 =

+    public static final int RIGHTS_INHERITANCE_FLAG =3D 1 << RIGHTS_MAX_OF=
FSET; // 1<<3;
+    =

+    private static final Logger logger =3D Logger.getLogger(JahiaAbstractA=
CL.class);    =

+    =

     //--------------------------------------------------------------------=
-----
     /**
      * Default Constructor
@@ -75,18 +83,32 @@
      * @return A vector of string {"Read", "Write", "Admin"}
      */
     public Vector getBitdesc () {
-        final Vector bits =3D new Vector ();
-
-        bits.add ("Read");
-        bits.add ("Write");
-        bits.add ("Admin");
+        final Vector bits =3D new Vector (getActionNames());
 =

         return bits;
     }
 =

-    //--------------------------------------------------------------------=
-----
-    public final int size () {
-        return 3;
+    public static char[] getSymbols() {
+        int size =3D getActionNames().size();
+        if (size > getSharedActions().length)
+            size =3D getSharedActions().length;
+        char[] symbols =3D new char[size];
+        System.arraycopy(getSharedActions(), 0, symbols, 0, size);
+        return symbols;
+    }
+    =

+    public static char[] getUppercaseSymbols() {
+        int size =3D getActionNames().size();
+        if (size > getSharedActions().length)
+            size =3D getSharedActions().length;
+        char[] symbols =3D new char[size];
+        System.arraycopy(getUppercaseSharedActions(), 0, symbols, 0, size);
+        return symbols;
+    }    =

+
+    // -------------------------------------------------------------------=
------
+    public final int size() {
+        return getActionNames().size();
     }
 =

     public JahiaBaseACL getParent() {

_______________________________________________
cvs_list mailing list
[email protected]
http://lists.jahia.org/cgi-bin/mailman/listinfo/cvs_list

Reply via email to