Author: tdraier
Date: Wed Aug  1 18:50:42 2007
New Revision: 18089

URL: https://svndev.jahia.net/websvn/listing.php?sc=3D1&rev=3D18089&repname=
=3Djahia
Log:
refactored linked copies acl , moved resolution algorithm to JahiaAcl, avoi=
d using jahia links when getting acl

Modified:
    branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/content/ContentObj=
ect.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=
ACLManagerService.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
    branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/services/acl/Jahia=
LinkedContentACL.java
    branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/services/importexp=
ort/ImportHandler.java

Modified: branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/content/Cont=
entObject.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/branches/JAHIA-5-0-SP=
-BRANCH/core/src/java/org/jahia/content/ContentObject.java&rev=3D18089&repn=
ame=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/content/ContentObj=
ect.java (original)
+++ branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/content/ContentObj=
ect.java Wed Aug  1 18:50:42 2007
@@ -25,6 +25,7 @@
 import org.jahia.exceptions.JahiaException;
 import org.jahia.hibernate.manager.*;
 import org.jahia.hibernate.cache.JahiaBatchingClusterCacheHibernateProvide=
r;
+import org.jahia.hibernate.model.JahiaAcl;
 import org.jahia.params.ProcessingContext;
 import org.jahia.registries.ServicesRegistry;
 import org.jahia.services.acl.JahiaBaseACL;
@@ -2037,6 +2038,10 @@
     }
 =

     public void updateAclForChildren(int aclid) {
+        updateAclForChildren(aclid, true);
+    }
+
+    public void updateAclForChildren(int aclid, boolean head) {
         int old =3D getAclID();
         setAclID(aclid);
         try {
@@ -2044,7 +2049,7 @@
             for (Iterator iterator =3D l.iterator(); iterator.hasNext();) {
                 ContentObject contentObject =3D (ContentObject) iterator.n=
ext();
                 if (contentObject.getAclID() =3D=3D old) {
-                    contentObject.updateAclForChildren(aclid);
+                    contentObject.updateAclForChildren(aclid, false);
                 } else {
                     contentObject.getACL().setParentID(aclid);
                 }
@@ -2056,6 +2061,20 @@
                     md.setAclID(aclid);
                 }
             }
+            Set picks =3D getPickerObjects();
+            for (Iterator iterator =3D picks.iterator(); iterator.hasNext(=
);) {
+                ContentObject picker =3D (ContentObject) iterator.next();
+                if (head && picker.isAclSameAsParent()) {
+                    JahiaBaseACL newacl =3D new JahiaBaseACL();
+                    newacl.create(picker.getAclID(),aclid);
+                    picker.updateAclForChildren(newacl.getID());
+                }
+                JahiaAcl pickerAcl =3D picker.getACL().getACL();
+                if (pickerAcl.getPickedAclId().intValue()  =3D=3D old) {
+                    pickerAcl.setPickedAclId(new Integer(aclid));
+                    ServicesRegistry.getInstance().getJahiaACLManagerServi=
ce().updateCache(pickerAcl);
+                }
+            }
         } catch (JahiaException e) {
             e.printStackTrace();  //To change body of catch statement use =
File | Settings | File Templates.
         }

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=3D18089&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 Aug  1 18:50:42 2007
@@ -97,7 +97,7 @@
      * @hibernate.collection-index column=3D"target_jahia_acl_entries" typ=
e=3D"string"
      */
     public Map getEntries() {
-        if (hasEntries !=3D null && hasEntries.intValue()=3D=3D0) {
+        if (hasEntries !=3D null && hasEntries.intValue()=3D=3D0 && picked=
AclId =3D=3D null) {
             this.groupEntries =3D new HashMap();
             this.userEntries =3D new HashMap();
             return new HashMap();
@@ -197,8 +197,11 @@
     }
 =

     private transient JahiaAcl parent;
+    private transient JahiaAcl pickedAcl;
+    private transient JahiaAcl rootPickedAcl;
 =

     private Integer parentId;
+    private Integer pickedAclId;
 =

     /**
      * @hibernate.property column=3D"parent_id_jahia_acl"
@@ -211,6 +214,17 @@
         this.parentId =3D parentId;
     }
 =

+    /**
+     * @hibernate.property column=3D"picked_id_jahia_acl"
+     */
+    public Integer getPickedAclId() {
+        return pickedAclId;
+    }
+
+    public void setPickedAclId(Integer pickedAclId) {
+        this.pickedAclId =3D pickedAclId;
+    }
+
     public JahiaAcl getParent() {
         if (parentId =3D=3D null) {
             return null;
@@ -237,11 +251,38 @@
         }
     }
 =

+    public JahiaAcl getPickedAcl() {
+        if (pickedAclId =3D=3D null) {
+            return null;
+        }
+        if (pickedAcl =3D=3D null) {
+            try {
+                pickedAcl =3D ((JahiaAclManager)SpringContextSingleton.get=
Instance().getContext().getBean(JahiaAclManager.class.getName())).findJahia=
AclById(""+getPickedAclId());
+            } catch (BeansException e) {
+                logger.error("Error we cannot find the ACL Manager",e);
+            } catch(ObjectRetrievalFailureException e) {
+                pickedAcl =3D null;
+                logger.warn("We cannot find the parent acl for this acl, c=
urrent acl id =3D "+id+" parentid =3D "+pickedAclId,e);
+            }
+        }
+        return pickedAcl;
+    }
+
+    public void setPickedAcl(JahiaAcl pickedAcl) {
+        this.pickedAcl =3D pickedAcl;
+        if (pickedAcl =3D=3D null) {
+            setPickedAclId(null);
+        } else {
+            setPickedAclId(pickedAcl.getId());
+        }
+    }
+
 // ------------------------ CANONICAL METHODS ------------------------
 =

     public Object clone() {
         final JahiaAcl acl =3D new JahiaAcl();
         acl.setParentId(parentId);
+        acl.setPickedAclId(pickedAclId);
         acl.setInheritance(inheritance);
         acl.setId(id);
         acl.setEntries(new HashMap(getEntries()));
@@ -681,54 +722,107 @@
         return vect;
     }
 =

-    private void buildPermissions(Map localTable, Map parentTable) {
+    private void buildPermissions(Map localTable, Map parentTable, boolean=
 readBreak) {
         // for each ACL user/group entry check if it doesn't already exist=
 in the
         // global user entries HashMap. If it does, add only permission th=
at
         // should be herited by the current user entry.
-        Iterator keys =3D parentTable.keySet().iterator();
-        String name;
-        while (keys.hasNext()) {
-            name =3D (String) keys.next();
-            if (name !=3D null) {
-                JahiaAclEntry entry =3D (JahiaAclEntry) parentTable.get(na=
me);
-                JahiaAclEntry localEntry =3D (JahiaAclEntry) localTable.ge=
t(name);
-
-                // if the user already exist, add some permission if neede=
d,
-                // otherwise add the user entry in the table.
-                if (localEntry !=3D null) {
-                    int tristate =3D entry.getEntryTri();
-                    int localTristate =3D localEntry.getEntryTri();
-
-                    // 1. get the bit mask of the permissions to be inheri=
ted
-                    int mask =3D ((~tristate) & localTristate);
-
-                    // if there is some bits to set, go for it, otherwise =
give up
-                    // and go to the next user.
-                    if (mask !=3D 0) {
-                        int localState =3D localEntry.getEntryState();
-
-                        // 2. get the permission to set
-                        int permissionMask =3D (entry.getEntryState() & ma=
sk);
-
-                        // 3. compute the new entry state
-                        localState =3D (localState | permissionMask);
-
-                        // 4. compute the new entry tristate
-                        localTristate =3D ((~mask) & localTristate);
-
-                        // finally update the state and tristate
-                        localEntry.setEntryState(localState);
-                        localEntry.setEntryTri(localTristate);
+        try {
+            Iterator keys =3D parentTable.keySet().iterator();
+            String name;
+            while (keys.hasNext()) {
+                name =3D (String) keys.next();
+                if (name !=3D null) {
+                    JahiaAclEntry entry =3D (JahiaAclEntry) parentTable.ge=
t(name);
+                    entry =3D (JahiaAclEntry) entry.clone();
+                    if (readBreak) {
+                        entry.setPermission(JahiaBaseACL.READ_RIGHTS, Jahi=
aAclEntry.ACL_NEUTRAL);
                     }
-                } else {
-                    try {
-                        localTable.put(name, entry.clone());
-                    } catch (CloneNotSupportedException e) {
-                        logger.warn("Try to clone unclonable object", e);
+                    JahiaAclEntry localEntry =3D (JahiaAclEntry) localTabl=
e.get(name);
+
+                    // if the user already exist, add some permission if n=
eeded,
+                    // otherwise add the user entry in the table.
+                    if (localEntry !=3D null) {
+                        int tristate =3D entry.getEntryTri();
+                        int localTristate =3D localEntry.getEntryTri();
+
+                        // 1. get the bit mask of the permissions to be in=
herited
+                        int mask =3D ((~tristate) & localTristate);
+
+                        // if there is some bits to set, go for it, otherw=
ise give up
+                        // and go to the next user.
+                        if (mask !=3D 0) {
+                            int localState =3D localEntry.getEntryState();
+
+                            // 2. get the permission to set
+                            int permissionMask =3D (entry.getEntryState() =
& mask);
+
+                            // 3. compute the new entry state
+                            localState =3D (localState | permissionMask);
+
+                            // 4. compute the new entry tristate
+                            localTristate =3D ((~mask) & localTristate);
+
+                            // finally update the state and tristate
+                            localEntry.setEntryState(localState);
+                            localEntry.setEntryTri(localTristate);
+                        }
+                    } else {
+                        localTable.put(name, entry);
+                    }
+                }
+            } // while
+        } catch (CloneNotSupportedException e) {
+            logger.warn("Try to clone unclonable object", e);
+        }
+    }
+
+    private void buildPickerPermissions(Map localTable, Map pickedTable) {
+        try {
+            Iterator keys =3D pickedTable.keySet().iterator();
+            String name;
+            while (keys.hasNext()) {
+                name =3D (String) keys.next();
+                if (name !=3D null) {
+                    JahiaAclEntry entry =3D (JahiaAclEntry) pickedTable.ge=
t(name);
+                    entry =3D (JahiaAclEntry) entry.clone();
+                    entry.setPermission(JahiaBaseACL.WRITE_RIGHTS, JahiaAc=
lEntry.ACL_NEUTRAL);
+                    entry.setPermission(JahiaBaseACL.ADMIN_RIGHTS, JahiaAc=
lEntry.ACL_NEUTRAL);
+                    JahiaAclEntry localEntry =3D (JahiaAclEntry) localTabl=
e.get(name);
+                    // if the user already exist, add some permission if n=
eeded,
+                    // otherwise add the user entry in the table.
+                    if (localEntry !=3D null) {
+                        int tristate =3D entry.getEntryTri();
+                        int localTristate =3D localEntry.getEntryTri();
+
+                        // 1. get the bit mask of the permissions to be in=
herited
+                        int mask =3D ((~tristate) & localTristate);
+
+                        // if there is some bits to set, go for it, otherw=
ise give up
+                        // and go to the next user.
+                        if (mask !=3D 0) {
+                            int localState =3D localEntry.getEntryState();
+
+                            // 2. get the permission to set
+                            int permissionMask =3D (entry.getEntryState() =
& mask);
+
+                            // 3. compute the new entry state
+                            localState =3D (localState | permissionMask);
+
+                            // 4. compute the new entry tristate
+                            localTristate =3D ((~mask) & localTristate);
+
+                            // finally update the state and tristate
+                            localEntry.setEntryState(localState);
+                            localEntry.setEntryTri(localTristate);
+                        }
+                    } else {
+                        localTable.put(name, entry);
                     }
                 }
             }
-        } // while
+        } catch (CloneNotSupportedException e) {
+            logger.warn("Try to clone unclonable object", e);
+        }
     }
 =

     /**
@@ -847,11 +941,20 @@
         checkCache();
 =

         Map[] recursedMaps =3D (Map[]) permissions.get("recursedTables"+ g=
etKey());
-        if (recursedMaps =3D=3D null) {
+//        if (recursedMaps =3D=3D null) {
             recursedMaps =3D new Map[] { new HashMap(userEntries), new Has=
hMap(groupEntries) };
 =

             JahiaAcl parent =3D null;
             ACLResourceInterface parentAclResource =3D null;
+            if (getPickedAcl() !=3D null) {
+                if (getParent().getPickedAcl() !=3D null) {
+                    buildPickerPermissions(recursedMaps[0], getPickedAcl()=
.getUserEntries());
+                    buildPickerPermissions(recursedMaps[1], getPickedAcl()=
.getGroupEntries());
+                } else {
+                    buildPickerPermissions(recursedMaps[0], getPickedAcl()=
.getRecursedUserEntries());
+                    buildPickerPermissions(recursedMaps[1], getPickedAcl()=
.getRecursedGroupEntries());                    =

+                }
+            }
             if (inheritance.intValue() =3D=3D 0) {
                 if (parentACLFinder =3D=3D null) {
                     parent =3D getParent();
@@ -862,15 +965,16 @@
                     }
                 }
             }
-
             if (parent !=3D null) {
                 Map[] parents =3D parent.getRecursedPermissions(parentACLF=
inder, parentAclResource);
-                buildPermissions(recursedMaps[0], parents[0]);
-                buildPermissions(recursedMaps[1], parents[1]);
+                boolean readBreak =3D getPickedAcl() !=3D null && getPicke=
dAcl().getInheritance().intValue() =3D=3D 1;
+
+                buildPermissions(recursedMaps[0], parents[0], readBreak);
+                buildPermissions(recursedMaps[1], parents[1], readBreak);
             }
 =

             permissions.put("recursedTables"+ getKey() , recursedMaps);
-        }
+//        }
 =

         if (Jahia.getSettings().isEsiCacheActivated() && recursedMaps[0].s=
ize()>0) {
             ServicesRegistry.getInstance().getEsiService().addAclUserNames=
ToCurrentJesiObject(recursedMaps[0]);

Modified: branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/services/acl=
/JahiaACLManagerService.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/branches/JAHIA-5-0-SP=
-BRANCH/core/src/java/org/jahia/services/acl/JahiaACLManagerService.java&re=
v=3D18089&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=
ACLManagerService.java (original)
+++ branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/services/acl/Jahia=
ACLManagerService.java Wed Aug  1 18:50:42 2007
@@ -173,6 +173,15 @@
         return acl;
     }
 =

+    public synchronized JahiaAcl createACL(JahiaAcl parent, JahiaAcl picke=
dAcl) {
+        JahiaAcl acl =3D new JahiaAcl();
+        acl.setParent(parent);
+        acl.setPickedAcl(pickedAcl);
+        acl.setInheritance(new Integer(ACLInfo.INHERITANCE));
+        manager.saveAcl(acl);
+        return acl;
+    }
+
     /**
      * Create a new named JahiaACL object
      * @param name the name to use. Warning, no test is done on wether this

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=3D18=
089&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 Aug  1 18:50:42 2007
@@ -178,6 +178,25 @@
         return (mACL !=3D null);
     }
 =

+    public boolean create(int parentID, int pickedID)
+            throws ACLNotFoundException,
+            JahiaDatabaseException {
+        // get the parent ACL reference if found
+        JahiaAcl parent =3D null;
+        if (parentID > 0) {
+            parent =3D getService().lookupACL (parentID);
+        }
+        JahiaAcl picked =3D null;
+        if (pickedID > 0) {
+            picked =3D getService().lookupACL (pickedID);
+        }
+
+        // Create the new ACL object.
+        mACL =3D getService().createACL (parent, picked);
+
+        return (mACL !=3D null);
+    }
+
     public boolean create (String name, int parentID)
             throws ACLNotFoundException,
             JahiaDatabaseException {

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=3D18089&=
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 Aug  1 18:50:42 2007
@@ -134,11 +134,6 @@
     }
 =

     public static JahiaBaseACL getACL(final int aclid, final ContentObject=
 object) throws JahiaException {
-        if (object =3D=3D null) return new JahiaBaseACL(aclid);
-        final ContentObject pickedObject =3D object.getPickedObject();
-        if (pickedObject !=3D null) {
-            return new JahiaLinkedContentACL(aclid, object);
-        }
         return new JahiaBaseACL(aclid);
     }
 }

Modified: branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/services/acl=
/JahiaLinkedContentACL.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/branches/JAHIA-5-0-SP=
-BRANCH/core/src/java/org/jahia/services/acl/JahiaLinkedContentACL.java&rev=
=3D18089&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=
LinkedContentACL.java (original)
+++ branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/services/acl/Jahia=
LinkedContentACL.java Wed Aug  1 18:50:42 2007
@@ -1,174 +1,154 @@
-/*
- * Copyright 2002-2006 Jahia Ltd
- *
- * Licensed under the JAHIA COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (J=
CDDL), =

- * Version 1.0 (the "License"), or (at your option) any later version; you=
 may =

- * not use this file except in compliance with the License. You should hav=
e =

- * received a copy of the License along with this program; if not, you may=
 obtain =

- * a copy of the License at =

- *
- *  http://www.jahia.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software =

- * distributed under the License is distributed on an "AS IS" BASIS, =

- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied=
. =

- * See the License for the specific language governing permissions and =

- * limitations under the License.
- */package org.jahia.services.acl;
-
-import org.jahia.exceptions.JahiaException;
-import org.jahia.content.ContentObject;
-import org.jahia.hibernate.model.JahiaAcl;
-import org.jahia.hibernate.model.JahiaAclEntry;
-
-import java.util.Map;
-import java.util.HashMap;
-import java.util.Iterator;
-
-/**
- * Created by IntelliJ IDEA.
- * Date: 15 d=C3=83=C2=A9c. 2005 - 17:17:59
- *
- * @author toto
- * @version $Id$
- */
-public class JahiaLinkedContentACL extends JahiaBaseACL {
-    private JahiaBaseACL pickedAcl;
-    private JahiaBaseACL rootPickedAcl;
-
-    public JahiaLinkedContentACL() throws JahiaException {
-    }
-
-    public JahiaLinkedContentACL(int aclID, ContentObject object) throws A=
CLNotFoundException, JahiaException {
-        super(aclID);
-        ContentObject pickedObject =3D object.getPickedObject();
-        if(pickedObject !=3D null) {
-            this.pickedAcl =3D pickedObject.getACL();
-            ContentObject root =3D object;
-            while (true) {
-                ContentObject parent =3D root.getParent(null, null, null);
-                if (parent =3D=3D null || parent.getPickedObject() =3D=3D =
null) {
-                    break;
-                }
-                root =3D parent;
-            }
-
-            ContentObject rootPickedObject =3D root.getPickedObject();
-            if(rootPickedObject !=3D null)
-            this.rootPickedAcl =3D rootPickedObject.getACL();
-        }
-    }
-
-
-    public JahiaAcl getACL() {
-        return new JahiaLinkedContentAcl(mACL, pickedAcl.getACL());
-    }
-
-    class JahiaLinkedContentAcl extends JahiaAcl {
-        private JahiaAcl pickerAcl;
-        private JahiaAcl pickedAcl;
-
-        public JahiaLinkedContentAcl(JahiaAcl pickerAcl, JahiaAcl pickedAc=
l) {
-            this.pickerAcl =3D pickerAcl;
-            this.pickedAcl =3D pickedAcl;
-
-            setParent(pickerAcl.getParent());
-            setInheritance(pickerAcl.getInheritance());
-            setId(pickerAcl.getId());
-
-            if (pickedAcl.getId().equals(rootPickedAcl.getACL().getId())) {
-                // root picker -> get all recursed acl from the picker obj=
ect (from root picked to home page)
-                if (pickedAcl.getInheritance().intValue() =3D=3D 0) {
-                    setUserEntries(merge(rootPickedAcl.getACL().getRecurse=
dUserEntries(), pickerAcl.getUserEntries()));
-                    setGroupEntries(merge(rootPickedAcl.getACL().getRecurs=
edGroupEntries(), pickerAcl.getGroupEntries()));
-                } else {
-                    setInheritance(new Integer(1));
-
-                    setUserEntries(mergeWithBrokenInheritance(rootPickedAc=
l.getACL().getRecursedUserEntries(), pickerAcl.getRecursedUserEntries()));
-                    setGroupEntries(mergeWithBrokenInheritance(rootPickedA=
cl.getACL().getRecursedGroupEntries(), pickerAcl.getRecursedGroupEntries())=
);
-                }
-            } else {
-                // sub picker
-
-                Map pickedUserEntries =3D pickedAcl.getUserEntries();
-                Map pickedGroupEntries =3D pickedAcl.getGroupEntries();
-
-                if (!pickedUserEntries.isEmpty() || !pickedGroupEntries.is=
Empty() || pickedAcl.getInheritance().intValue() =3D=3D 1) {
-                    // if acl has been redefined in picked, break inherita=
nce and recopy recursed admin/write from picker
-                    setInheritance(new Integer(1));
-
-                    setUserEntries(mergeWithBrokenInheritance(pickedAcl.ge=
tRecursedUserEntries(), pickerAcl.getRecursedUserEntries()));
-                    setGroupEntries(mergeWithBrokenInheritance(pickedAcl.g=
etRecursedGroupEntries(), pickerAcl.getRecursedGroupEntries()));
-                } else {
-                    // juste merge with local picker acl (can t be modifie=
d with gui currently)
-                    setUserEntries(merge(pickedUserEntries, pickerAcl.getU=
serEntries()));
-                    setGroupEntries(merge(pickedGroupEntries, pickerAcl.ge=
tGroupEntries()));
-                }
-            }
-
-        }
-
-        private Map merge(Map pickedEntries, Map pickerEntries) {
-            Map m =3D new HashMap(pickerEntries);
-            for (Iterator iterator =3D pickedEntries.keySet().iterator(); =
iterator.hasNext();) {
-                String n =3D (String) iterator.next();
-                if (!pickerEntries.containsKey(n)) {
-                    JahiaAclEntry pickedEntry =3D (JahiaAclEntry) pickedEn=
tries.get(n);
-                    try {
-                        JahiaAclEntry mergeEntry =3D (JahiaAclEntry) picke=
dEntry.clone();
-                        mergeEntry.setPermission(JahiaBaseACL.WRITE_RIGHTS=
, JahiaAclEntry.ACL_NEUTRAL);
-                        mergeEntry.setPermission(JahiaBaseACL.ADMIN_RIGHTS=
, JahiaAclEntry.ACL_NEUTRAL);
-                        m.put(n,mergeEntry);
-                    } catch (CloneNotSupportedException e1) {
-                    }
-                }
-            }
-            return m;
-        }
-
-        private Map mergeWithBrokenInheritance(Map pickedEntries, Map recu=
rsedPickerEntries) {
-            Map m =3D merge(pickedEntries, new HashMap());
-
-            for (Iterator iterator =3D recursedPickerEntries.keySet().iter=
ator(); iterator.hasNext();) {
-                String n =3D (String) iterator.next();
-                if (m.containsKey(n)) {
-                    JahiaAclEntry mergeEntry =3D (JahiaAclEntry) m.get(n);
-//                    if (mergeEntry.getPermission(JahiaBaseACL.READ_RIGHT=
S) =3D=3D JahiaAclEntry.ACL_YES) {
-                        JahiaAclEntry pickerEntry =3D (JahiaAclEntry) recu=
rsedPickerEntries.get(n);
-                        mergeEntry.setPermission(JahiaBaseACL.WRITE_RIGHTS=
, pickerEntry.getPermission(JahiaBaseACL.WRITE_RIGHTS));
-                        mergeEntry.setPermission(JahiaBaseACL.ADMIN_RIGHTS=
, pickerEntry.getPermission(JahiaBaseACL.ADMIN_RIGHTS));
+///*
+// * Copyright 2002-2006 Jahia Ltd
+// *
+// * Licensed under the JAHIA COMMON DEVELOPMENT AND DISTRIBUTION LICENSE =
(JCDDL),
+// * Version 1.0 (the "License"), or (at your option) any later version; y=
ou may
+// * not use this file except in compliance with the License. You should h=
ave
+// * received a copy of the License along with this program; if not, you m=
ay obtain
+// * a copy of the License at
+// *
+// *  http://www.jahia.org/license/
+// *
+// * Unless required by applicable law or agreed to in writing, software
+// * distributed under the License is distributed on an "AS IS" BASIS,
+// * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or impli=
ed.
+// * See the License for the specific language governing permissions and
+// * limitations under the License.
+// */package org.jahia.services.acl;
+//
+//import org.jahia.exceptions.JahiaException;
+//import org.jahia.content.ContentObject;
+//import org.jahia.hibernate.model.JahiaAcl;
+//import org.jahia.hibernate.model.JahiaAclEntry;
+//
+//import java.util.Map;
+//import java.util.HashMap;
+//import java.util.Iterator;
+//
+///**
+// * Created by IntelliJ IDEA.
+// * Date: 15 d=C3=83=C2=A9c. 2005 - 17:17:59
+// *
+// * @author toto
+// * @version $Id$
+// */
+//public class JahiaLinkedContentACL extends JahiaBaseACL {
+//    private JahiaBaseACL pickedAcl;
+//    private boolean isRoot;
+//
+//    public JahiaLinkedContentACL() throws JahiaException {
+//    }
+//
+//    public JahiaLinkedContentACL(int aclID, ContentObject object) throws=
 ACLNotFoundException, JahiaException {
+//        super(aclID);
+//        ContentObject pickedObject =3D object.getPickedObject();
+//        if(pickedObject !=3D null) {
+//            this.pickedAcl =3D pickedObject.getACL();
+//            ContentObject root =3D object;
+//            while (true) {
+//                ContentObject parent =3D root.getParent(null, null, null=
);
+//                if (parent =3D=3D null || parent.getPickedObject() =3D=
=3D null) {
+//                    break;
+//                }
+//                root =3D parent;
+//            }
+//
+//            ContentObject rootPickedObject =3D root.getPickedObject();
+//            if(rootPickedObject !=3D null) {
+//                isRoot =3D pickedAcl.getACL().getId().equals(rootPickedO=
bject.getACL().getACL().getId());
+//            }
+//        }
+//    }
+//
+//    public JahiaAcl getACL() {
+//        return new JahiaLinkedContentAcl(mACL, pickedAcl.getACL());
+//    }
+//
+//    class JahiaLinkedContentAcl extends JahiaAcl {
+//        private JahiaAcl pickerAcl;
+//        private JahiaAcl pickedAcl;
+//
+//        public JahiaLinkedContentAcl(JahiaAcl pickerAcl, JahiaAcl picked=
Acl) {
+//            this.pickerAcl =3D pickerAcl;
+//            this.pickedAcl =3D pickedAcl;
+//
+//            setParent(pickerAcl.getParent());
+//            setInheritance(pickerAcl.getInheritance());
+//            setId(pickerAcl.getId());
+//
+//            if (pickedAcl.getInheritance().intValue() =3D=3D 0 && isRoot=
) {
+//                // root picker -> get all recursed acl from the picker o=
bject (from root picked to home page)
+//                setUserEntries(merge(pickedAcl.getRecursedUserEntries(),=
 pickerAcl.getUserEntries()));
+//                setGroupEntries(merge(pickedAcl.getRecursedGroupEntries(=
), pickerAcl.getGroupEntries()));
+//            } else {
+//                setInheritance(new Integer(1));
+//
+//                setUserEntries(mergeWithBrokenInheritance(pickedAcl.getR=
ecursedUserEntries(), pickerAcl.getRecursedUserEntries()));
+//                setGroupEntries(mergeWithBrokenInheritance(pickedAcl.get=
RecursedGroupEntries(), pickerAcl.getRecursedGroupEntries()));
+//            }
+//        }
+//
+//        private Map merge(Map pickedEntries, Map pickerEntries) {
+//            Map m =3D new HashMap(pickerEntries);
+//            for (Iterator iterator =3D pickedEntries.keySet().iterator()=
; iterator.hasNext();) {
+//                String n =3D (String) iterator.next();
+//                if (!pickerEntries.containsKey(n)) {
+//                    JahiaAclEntry pickedEntry =3D (JahiaAclEntry) picked=
Entries.get(n);
+//                    try {
+//                        JahiaAclEntry mergeEntry =3D (JahiaAclEntry) pic=
kedEntry.clone();
+//                        mergeEntry.setPermission(JahiaBaseACL.WRITE_RIGH=
TS, JahiaAclEntry.ACL_NEUTRAL);
+//                        mergeEntry.setPermission(JahiaBaseACL.ADMIN_RIGH=
TS, JahiaAclEntry.ACL_NEUTRAL);
+//                        m.put(n,mergeEntry);
+//                    } catch (CloneNotSupportedException e1) {
 //                    }
-                } else {
-                    JahiaAclEntry pickerEntry =3D (JahiaAclEntry) recursed=
PickerEntries.get(n);
-                    try {
-                        JahiaAclEntry mergeEntry =3D (JahiaAclEntry) picke=
rEntry.clone();
-                        mergeEntry.setPermission(JahiaBaseACL.READ_RIGHTS,=
 JahiaAclEntry.ACL_NEUTRAL);
-                        mergeEntry.setPermission(JahiaBaseACL.WRITE_RIGHTS=
, pickerEntry.getPermission(JahiaBaseACL.WRITE_RIGHTS));
-                        mergeEntry.setPermission(JahiaBaseACL.ADMIN_RIGHTS=
, pickerEntry.getPermission(JahiaBaseACL.ADMIN_RIGHTS));
-                    } catch (CloneNotSupportedException e) {
-                    }
-                }
-            }
-
-            return m;
-        }
-
-        public JahiaAcl getParent() {
-            if (pickedAcl.getId().equals(rootPickedAcl.getACL().getId())) {
-                return pickerAcl.getParent();
-            } else {
-                return new JahiaLinkedContentAcl(pickerAcl.getParent(), pi=
ckedAcl.getParent());
-            }
-        }
-
-        protected String getKey() {
-            return getId().toString() + "/" + pickedAcl.getId().toString();
-        }
-
-    }
-
-
-}
-/**
- *$Log $
- */
\ No newline at end of file
+//                }
+//            }
+//            return m;
+//        }
+//
+//        private Map mergeWithBrokenInheritance(Map pickedEntries, Map re=
cursedPickerEntries) {
+//            Map m =3D merge(pickedEntries, new HashMap());
+//
+//            for (Iterator iterator =3D recursedPickerEntries.keySet().it=
erator(); iterator.hasNext();) {
+//                String n =3D (String) iterator.next();
+//                if (m.containsKey(n)) {
+//                    JahiaAclEntry mergeEntry =3D (JahiaAclEntry) m.get(n=
);
+////                    if (mergeEntry.getPermission(JahiaBaseACL.READ_RIG=
HTS) =3D=3D JahiaAclEntry.ACL_YES) {
+//                        JahiaAclEntry pickerEntry =3D (JahiaAclEntry) re=
cursedPickerEntries.get(n);
+//                        mergeEntry.setPermission(JahiaBaseACL.WRITE_RIGH=
TS, pickerEntry.getPermission(JahiaBaseACL.WRITE_RIGHTS));
+//                        mergeEntry.setPermission(JahiaBaseACL.ADMIN_RIGH=
TS, pickerEntry.getPermission(JahiaBaseACL.ADMIN_RIGHTS));
+////                    }
+//                } else {
+//                    JahiaAclEntry pickerEntry =3D (JahiaAclEntry) recurs=
edPickerEntries.get(n);
+//                    try {
+//                        JahiaAclEntry mergeEntry =3D (JahiaAclEntry) pic=
kerEntry.clone();
+//                        mergeEntry.setPermission(JahiaBaseACL.READ_RIGHT=
S, JahiaAclEntry.ACL_NEUTRAL);
+//                        mergeEntry.setPermission(JahiaBaseACL.WRITE_RIGH=
TS, pickerEntry.getPermission(JahiaBaseACL.WRITE_RIGHTS));
+//                        mergeEntry.setPermission(JahiaBaseACL.ADMIN_RIGH=
TS, pickerEntry.getPermission(JahiaBaseACL.ADMIN_RIGHTS));
+//                    } catch (CloneNotSupportedException e) {
+//                    }
+//                }
+//            }
+//
+//            return m;
+//        }
+//
+//        public JahiaAcl getParent() {
+//            if (isRoot) {
+//                return pickerAcl.getParent();
+//            } else {
+//                return new JahiaLinkedContentAcl(pickerAcl, pickedAcl.ge=
tParent());
+//            }
+//        }
+//
+//        protected String getKey() {
+//            return getId().toString() + "/" + pickedAcl.getId().toString=
();
+//        }
+//
+//    }
+//
+//
+//}
+///**
+// *$Log $
+// */
\ No newline at end of file

Modified: branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/services/imp=
ortexport/ImportHandler.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/branches/JAHIA-5-0-SP=
-BRANCH/core/src/java/org/jahia/services/importexport/ImportHandler.java&re=
v=3D18089&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/importexp=
ort/ImportHandler.java (original)
+++ branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/services/importexp=
ort/ImportHandler.java Wed Aug  1 18:50:42 2007
@@ -31,7 +31,6 @@
 import org.jahia.data.fields.*;
 import org.jahia.data.files.JahiaFileField;
 import org.jahia.exceptions.JahiaException;
-import org.jahia.exceptions.JahiaInitializationException;
 import org.jahia.hibernate.cache.JahiaBatchingClusterCacheHibernateProvide=
r;
 import org.jahia.hibernate.manager.JahiaObjectDelegate;
 import org.jahia.hibernate.manager.JahiaObjectManager;
@@ -46,7 +45,6 @@
 import org.jahia.services.acl.JahiaACLException;
 import org.jahia.services.acl.JahiaBaseACL;
 import org.jahia.services.cache.HtmlCache;
-import org.jahia.services.cache.ContainerHTMLCache;
 import org.jahia.services.categories.Category;
 import org.jahia.services.categories.CategoryService;
 import org.jahia.services.containers.ContentContainer;
@@ -530,6 +528,13 @@
                 try {
                     ContentObject source =3D ContentObject.getContentObjec=
tInstance(ContentObjectKey.getInstance(linkkey));
                     source.addPickerObject(jParams, currentObject, atts.ge=
tValue(ImportExportBaseService.JAHIA_URI,"linktype"));
+
+                    ContentObject rootPicker =3D objects.size() =3D=3D 1 ?=
 currentObject : ((ContentObject) objects.get(1)).getPickedObject();
+                    if (!source.isAclSameAsParent() || rootPicker =3D=3D c=
urrentObject) {
+                        JahiaBaseACL jAcl =3D new JahiaBaseACL ();
+                        jAcl.create (currentObject.getAclID(), source.getA=
clID());
+                        currentObject.setAclID(jAcl.getID());
+                    }
                     String l =3D language;
                     if (currentObject.isShared()) {
                         l =3D ContentField.SHARED_LANGUAGE;

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

Reply via email to