Author: tdraier
Date: Thu Aug 2 16:51:04 2007
New Revision: 18119
URL: https://svndev.jahia.net/websvn/listing.php?sc=3D1&rev=3D18119&repname=
=3Djahia
Log:
refactored linked copies acl , moved resolution algorithm to JahiaAcl, avoi=
d using jahia links when getting acl
(port 18089)
Modified:
trunk/core/src/java/org/jahia/content/ContentObject.java
trunk/core/src/java/org/jahia/hibernate/model/JahiaAcl.java
trunk/core/src/java/org/jahia/services/acl/JahiaACLManagerService.java
trunk/core/src/java/org/jahia/services/acl/JahiaAbstractACL.java
trunk/core/src/java/org/jahia/services/acl/JahiaBaseACL.java
trunk/core/src/java/org/jahia/services/acl/JahiaLinkedContentACL.java
trunk/core/src/java/org/jahia/services/importexport/ImportHandler.java
Modified: trunk/core/src/java/org/jahia/content/ContentObject.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/trunk/core/src/java/o=
rg/jahia/content/ContentObject.java&rev=3D18119&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
--- trunk/core/src/java/org/jahia/content/ContentObject.java (original)
+++ trunk/core/src/java/org/jahia/content/ContentObject.java Thu Aug 2 16:=
51:04 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;
@@ -2036,6 +2037,10 @@
}
=
public void updateAclForChildren(int aclid) {
+ updateAclForChildren(aclid, true);
+ }
+
+ public void updateAclForChildren(int aclid, boolean head) {
int old =3D getAclID();
setAclID(aclid);
try {
@@ -2043,7 +2048,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);
}
@@ -2055,6 +2060,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: trunk/core/src/java/org/jahia/hibernate/model/JahiaAcl.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/trunk/core/src/java/o=
rg/jahia/hibernate/model/JahiaAcl.java&rev=3D18119&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
--- trunk/core/src/java/org/jahia/hibernate/model/JahiaAcl.java (original)
+++ trunk/core/src/java/org/jahia/hibernate/model/JahiaAcl.java Thu Aug 2 =
16:51:04 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);
+ }
}
=
/**
@@ -844,11 +938,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();
@@ -859,15 +962,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: trunk/core/src/java/org/jahia/services/acl/JahiaACLManagerService=
.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/trunk/core/src/java/o=
rg/jahia/services/acl/JahiaACLManagerService.java&rev=3D18119&repname=3Djah=
ia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- trunk/core/src/java/org/jahia/services/acl/JahiaACLManagerService.java =
(original)
+++ trunk/core/src/java/org/jahia/services/acl/JahiaACLManagerService.java =
Thu Aug 2 16:51:04 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: trunk/core/src/java/org/jahia/services/acl/JahiaAbstractACL.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/trunk/core/src/java/o=
rg/jahia/services/acl/JahiaAbstractACL.java&rev=3D18119&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
--- trunk/core/src/java/org/jahia/services/acl/JahiaAbstractACL.java (origi=
nal)
+++ trunk/core/src/java/org/jahia/services/acl/JahiaAbstractACL.java Thu Au=
g 2 16:51:04 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: trunk/core/src/java/org/jahia/services/acl/JahiaBaseACL.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/trunk/core/src/java/o=
rg/jahia/services/acl/JahiaBaseACL.java&rev=3D18119&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
--- trunk/core/src/java/org/jahia/services/acl/JahiaBaseACL.java (original)
+++ trunk/core/src/java/org/jahia/services/acl/JahiaBaseACL.java Thu Aug 2=
16:51:04 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: trunk/core/src/java/org/jahia/services/acl/JahiaLinkedContentACL.=
java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/trunk/core/src/java/o=
rg/jahia/services/acl/JahiaLinkedContentACL.java&rev=3D18119&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
--- trunk/core/src/java/org/jahia/services/acl/JahiaLinkedContentACL.java (=
original)
+++ trunk/core/src/java/org/jahia/services/acl/JahiaLinkedContentACL.java T=
hu Aug 2 16:51:04 2007
@@ -1,174 +1,174 @@
-/*
- * 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 1) {
- setUserEntries(merge(pickedAcl.getRecursedUserEntries(=
), pickerAcl.getUserEntries()));
- setGroupEntries(merge(pickedAcl.getRecursedGroupEntrie=
s(), pickerAcl.getGroupEntries()));
- } else {
- setInheritance(new Integer(1));
-
- setUserEntries(mergeWithBrokenInheritance(pickedAcl.ge=
tRecursedUserEntries(), pickerAcl.getRecursedUserEntries()));
- setGroupEntries(mergeWithBrokenInheritance(pickedAcl.g=
etRecursedGroupEntries(), pickerAcl.getRecursedGroupEntries()));
- }
- } else {
- // sub picker
-
- Map pickedUserEntries =3D pickedAcl.getUserEntries();
- Map pickedGroupEntries =3D pickedAcl.getGroupEntries();
-
- if (pickedUserEntries.isEmpty() && pickedGroupEntries.isEm=
pty() && pickedAcl.getInheritance().intValue() =3D=3D 0) {
- // 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()));
- } else {
- // 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()));
- }
- }
-
- }
-
- 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 JahiaBaseACL rootPickedAcl;
+//
+// 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)
+// 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 picked=
Acl) {
+// 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 o=
bject (from root picked to home page)
+// if (pickedAcl.getInheritance().intValue() !=3D 1) {
+// setUserEntries(merge(pickedAcl.getRecursedUserEntrie=
s(), pickerAcl.getUserEntries()));
+// setGroupEntries(merge(pickedAcl.getRecursedGroupEntr=
ies(), pickerAcl.getGroupEntries()));
+// } else {
+// setInheritance(new Integer(1));
+//
+// setUserEntries(mergeWithBrokenInheritance(pickedAcl.=
getRecursedUserEntries(), pickerAcl.getRecursedUserEntries()));
+// setGroupEntries(mergeWithBrokenInheritance(pickedAcl=
.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 0) {
+// // juste merge with local picker acl (can t be modif=
ied with gui currently)
+// setUserEntries(merge(pickedUserEntries, pickerAcl.ge=
tUserEntries()));
+// setGroupEntries(merge(pickedGroupEntries, pickerAcl.=
getGroupEntries()));
+// } else {
+// // if acl has been redefined in picked, break inheri=
tance and recopy recursed admin/write from picker
+// setInheritance(new Integer(1));
+//
+// setUserEntries(mergeWithBrokenInheritance(pickedAcl.=
getRecursedUserEntries(), pickerAcl.getRecursedUserEntries()));
+// setGroupEntries(mergeWithBrokenInheritance(pickedAcl=
.getRecursedGroupEntries(), 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 (pickedAcl.getId().equals(rootPickedAcl.getACL().getId())=
) {
+// return pickerAcl.getParent();
+// } else {
+// return new JahiaLinkedContentAcl(pickerAcl.getParent(), =
pickedAcl.getParent());
+// }
+// }
+//
+// protected String getKey() {
+// return getId().toString() + "/" + pickedAcl.getId().toString=
();
+// }
+//
+// }
+//
+//
+//}
+///**
+// *$Log $
+// */
\ No newline at end of file
Modified: trunk/core/src/java/org/jahia/services/importexport/ImportHandler=
.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/trunk/core/src/java/o=
rg/jahia/services/importexport/ImportHandler.java&rev=3D18119&repname=3Djah=
ia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- trunk/core/src/java/org/jahia/services/importexport/ImportHandler.java =
(original)
+++ trunk/core/src/java/org/jahia/services/importexport/ImportHandler.java =
Thu Aug 2 16:51:04 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;
@@ -529,6 +527,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