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