| CODENOTIFIER | HelpYou are not signed inSign in |
Project: Alfresco
Revision: 2847
Author: andyh
Date: 02 Sep 2008 07:54:30
Changes:Fix for https://issues.alfresco.com/jira/browse/SLNG-1114
Files:| ... | ...@@ -39,8 +39,8 @@ | |
| 39 | 39 | |
| 40 | 40 | /** |
| 41 | 41 | * Old permissions dao component impl |
| 42 | * | |
| 42 | 43 | * @author andyh |
| 43 | * | |
| 44 | 44 | */ |
| 45 | 45 | public class PermissionsDaoComponentImpl extends AbstractPermissionsDaoComponentImpl |
| 46 | 46 | { |
| ... | ...@@ -144,32 +144,51 @@ | |
| 144 | 144 | } |
| 145 | 145 | if (acl != null) |
| 146 | 146 | { |
| 147 | if (acl.getInheritsFrom() != null) | |
| 147 | switch (acl.getAclType()) | |
| 148 | 148 | { |
| 149 | @SuppressWarnings("unused") | |
| 150 | Long deleted = acl.getId(); | |
| 151 | Long inheritsFrom = acl.getInheritsFrom(); | |
| 152 | getACLDAO(nodeRef).setAccessControlList(nodeRef, aclDaoComponent.getDbAccessControlList(inheritsFrom)); | |
| 153 | List<AclChange> changes = new ArrayList<AclChange>(); | |
| 154 | changes.addAll(getACLDAO(nodeRef).setInheritanceForChildren(nodeRef, inheritsFrom)); | |
| 155 | getACLDAO(nodeRef).updateChangedAcls(nodeRef, changes); | |
| 156 | aclDaoComponent.deleteAccessControlList(acl.getId()); | |
| 157 | } | |
| 158 | else | |
| 159 | { | |
| 160 | // TODO: could just cear out existing | |
| 161 | @SuppressWarnings("unused") | |
| 162 | Long deleted = acl.getId(); | |
| 163 | SimpleAccessControlListProperties properties = new SimpleAccessControlListProperties(); | |
| 164 | properties.setAclType(ACLType.DEFINING); | |
| 165 | properties.setInherits(Boolean.FALSE); | |
| 166 | // Accept default versioning | |
| 167 | Long id = aclDaoComponent.createAccessControlList(properties); | |
| 168 | getACLDAO(nodeRef).setAccessControlList(nodeRef, aclDaoComponent.getDbAccessControlList(id)); | |
| 169 | List<AclChange> changes = new ArrayList<AclChange>(); | |
| 170 | changes.addAll(getACLDAO(nodeRef).setInheritanceForChildren(nodeRef, aclDaoComponent.getInheritedAccessControlList(id))); | |
| 171 | getACLDAO(nodeRef).updateChangedAcls(nodeRef, changes); | |
| 172 | aclDaoComponent.deleteAccessControlList(acl.getId()); | |
| 149 | case OLD: | |
| 150 | throw new IllegalStateException("Can not mix old and new style permissions"); | |
| 151 | case DEFINING: | |
| 152 | ||
| 153 | if (acl.getInheritsFrom() != null) | |
| 154 | { | |
| 155 | @SuppressWarnings("unused") | |
| 156 | Long deleted = acl.getId(); | |
| 157 | Long inheritsFrom = acl.getInheritsFrom(); | |
| 158 | getACLDAO(nodeRef).setAccessControlList(nodeRef, aclDaoComponent.getDbAccessControlList(inheritsFrom)); | |
| 159 | List<AclChange> changes = new ArrayList<AclChange>(); | |
| 160 | changes.addAll(getACLDAO(nodeRef).setInheritanceForChildren(nodeRef, inheritsFrom)); | |
| 161 | getACLDAO(nodeRef).updateChangedAcls(nodeRef, changes); | |
| 162 | aclDaoComponent.deleteAccessControlList(acl.getId()); | |
| 163 | } | |
| 164 | else | |
| 165 | { | |
| 166 | // TODO: could just cear out existing | |
| 167 | @SuppressWarnings("unused") | |
| 168 | Long deleted = acl.getId(); | |
| 169 | SimpleAccessControlListProperties properties = new SimpleAccessControlListProperties(); | |
| 170 | properties.setAclType(ACLType.DEFINING); | |
| 171 | properties.setInherits(Boolean.FALSE); | |
| 172 | // Accept default versioning | |
| 173 | Long id = aclDaoComponent.createAccessControlList(properties); | |
| 174 | getACLDAO(nodeRef).setAccessControlList(nodeRef, aclDaoComponent.getDbAccessControlList(id)); | |
| 175 | List<AclChange> changes = new ArrayList<AclChange>(); | |
| 176 | changes.addAll(getACLDAO(nodeRef).setInheritanceForChildren(nodeRef, aclDaoComponent.getInheritedAccessControlList(id))); | |
| 177 | getACLDAO(nodeRef).updateChangedAcls(nodeRef, changes); | |
| 178 | aclDaoComponent.deleteAccessControlList(acl.getId()); | |
| 179 | } | |
| 180 | break; | |
| 181 | case FIXED: | |
| 182 | throw new IllegalStateException("Delete not supported for fixed permissions"); | |
| 183 | case GLOBAL: | |
| 184 | throw new IllegalStateException("Delete not supported for global permissions"); | |
| 185 | case SHARED: | |
| 186 | // nothing to do | |
| 187 | return; | |
| 188 | case LAYERED: | |
| 189 | throw new IllegalStateException("Layering is not supported for DM permissions"); | |
| 190 | default: | |
| 191 | throw new IllegalStateException("Unknown type " + acl.getAclType()); | |
| 173 | 192 | } |
| 174 | 193 | } |
| 175 | 194 | } |
| ... | ...@@ -96,6 +96,50 @@ | |
| 96 | 96 | allowAndyReadChildren = new SimplePermissionEntry(rootNodeRef, getPermission(PermissionService.READ_CHILDREN), "andy", AccessStatus.ALLOWED); |
| 97 | 97 | } |
| 98 | 98 | |
| 99 | public void testDelete() | |
| 100 | { | |
| 101 | runAs("admin"); | |
| 102 | ||
| 103 | NodeRef n1 = nodeService.createNode(rootNodeRef, ContentModel.ASSOC_CHILDREN, QName.createQName("{namespace}one"), ContentModel.TYPE_FOLDER).getChildRef(); | |
| 104 | NodeRef n2 = nodeService.createNode(n1, ContentModel.ASSOC_CONTAINS, QName.createQName("{namespace}two"), ContentModel.TYPE_FOLDER).getChildRef(); | |
| 105 | ||
| 106 | assertEquals(0, permissionService.getAllSetPermissions(n1).size()); | |
| 107 | assertEquals(0, permissionService.getAllSetPermissions(n2).size()); | |
| 108 | ||
| 109 | permissionService.deletePermissions(n1); | |
| 110 | permissionService.deletePermissions(n2); | |
| 111 | ||
| 112 | permissionService.setPermission(new SimplePermissionEntry(n1, getPermission(PermissionService.READ), "andy", AccessStatus.ALLOWED)); | |
| 113 | ||
| 114 | assertEquals(1, permissionService.getAllSetPermissions(n1).size()); | |
| 115 | assertEquals(1, permissionService.getAllSetPermissions(n2).size()); | |
| 116 | ||
| 117 | permissionService.deletePermissions(n2); | |
| 118 | ||
| 119 | assertEquals(1, permissionService.getAllSetPermissions(n1).size()); | |
| 120 | assertEquals(1, permissionService.getAllSetPermissions(n2).size()); | |
| 121 | ||
| 122 | permissionService.setPermission(new SimplePermissionEntry(n2, getPermission(PermissionService.WRITE), "andy", AccessStatus.ALLOWED)); | |
| 123 | ||
| 124 | assertEquals(1, permissionService.getAllSetPermissions(n1).size()); | |
| 125 | assertEquals(2, permissionService.getAllSetPermissions(n2).size()); | |
| 126 | ||
| 127 | permissionService.deletePermissions(n2); | |
| 128 | ||
| 129 | assertEquals(1, permissionService.getAllSetPermissions(n1).size()); | |
| 130 | assertEquals(1, permissionService.getAllSetPermissions(n2).size()); | |
| 131 | ||
| 132 | permissionService.setPermission(new SimplePermissionEntry(n2, getPermission(PermissionService.WRITE), "andy", AccessStatus.ALLOWED)); | |
| 133 | ||
| 134 | assertEquals(1, permissionService.getAllSetPermissions(n1).size()); | |
| 135 | assertEquals(2, permissionService.getAllSetPermissions(n2).size()); | |
| 136 | ||
| 137 | permissionService.deletePermissions(n1); | |
| 138 | ||
| 139 | assertEquals(0, permissionService.getAllSetPermissions(n1).size()); | |
| 140 | assertEquals(1, permissionService.getAllSetPermissions(n2).size()); | |
| 141 | } | |
| 142 | ||
| 99 | 143 | public void test_AR_2055() |
| 100 | 144 | { |
| 101 | 145 | runAs("admin"); |
| ... | ...@@ -116,34 +116,52 @@ | |
| 116 | 116 | System.out.println("Deleting "+acl+" on "+nodeRef); |
| 117 | 117 | if (acl != null) |
| 118 | 118 | { |
| 119 | if (acl.getInheritsFrom() != null) | |
| 119 | switch (acl.getAclType()) | |
| 120 | 120 | { |
| 121 | @SuppressWarnings("unused") | |
| 122 | Long deleted = acl.getId(); | |
| 123 | Long inheritsFrom = acl.getInheritsFrom(); | |
| 124 | getACLDAO(nodeRef).setAccessControlList(nodeRef, aclDaoComponent.getDbAccessControlList(inheritsFrom)); | |
| 125 | List<AclChange> changes = new ArrayList<AclChange>(); | |
| 126 | changes.addAll(getACLDAO(nodeRef).setInheritanceForChildren(nodeRef, inheritsFrom)); | |
| 127 | getACLDAO(nodeRef).updateChangedAcls(nodeRef, changes); | |
| 128 | aclDaoComponent.deleteAccessControlList(acl.getId()); | |
| 129 | } | |
| 130 | else | |
| 131 | { | |
| 132 | // TODO: could just cear out existing | |
| 133 | @SuppressWarnings("unused") | |
| 134 | Long deleted = acl.getId(); | |
| 135 | SimpleAccessControlListProperties properties = new SimpleAccessControlListProperties(); | |
| 136 | properties = new SimpleAccessControlListProperties(); | |
| 137 | properties.setAclType(ACLType.DEFINING); | |
| 138 | properties.setInherits(Boolean.FALSE); | |
| 139 | properties.setVersioned(false); | |
| 121 | case OLD: | |
| 122 | throw new IllegalStateException("Can not mix old and new style permissions"); | |
| 123 | case DEFINING: | |
| 124 | if (acl.getInheritsFrom() != null) | |
| 125 | { | |
| 126 | @SuppressWarnings("unused") | |
| 127 | Long deleted = acl.getId(); | |
| 128 | Long inheritsFrom = acl.getInheritsFrom(); | |
| 129 | getACLDAO(nodeRef).setAccessControlList(nodeRef, aclDaoComponent.getDbAccessControlList(inheritsFrom)); | |
| 130 | List<AclChange> changes = new ArrayList<AclChange>(); | |
| 131 | changes.addAll(getACLDAO(nodeRef).setInheritanceForChildren(nodeRef, inheritsFrom)); | |
| 132 | getACLDAO(nodeRef).updateChangedAcls(nodeRef, changes); | |
| 133 | aclDaoComponent.deleteAccessControlList(acl.getId()); | |
| 134 | } | |
| 135 | else | |
| 136 | { | |
| 137 | // TODO: could just cear out existing | |
| 138 | @SuppressWarnings("unused") | |
| 139 | Long deleted = acl.getId(); | |
| 140 | SimpleAccessControlListProperties properties = new SimpleAccessControlListProperties(); | |
| 141 | properties = new SimpleAccessControlListProperties(); | |
| 142 | properties.setAclType(ACLType.DEFINING); | |
| 143 | properties.setInherits(Boolean.FALSE); | |
| 144 | properties.setVersioned(false); | |
| 140 | 145 | |
| 141 | Long id = aclDaoComponent.createAccessControlList(properties); | |
| 142 | getACLDAO(nodeRef).setAccessControlList(nodeRef, aclDaoComponent.getDbAccessControlList(id)); | |
| 143 | List<AclChange> changes = new ArrayList<AclChange>(); | |
| 144 | changes.addAll(getACLDAO(nodeRef).setInheritanceForChildren(nodeRef, aclDaoComponent.getInheritedAccessControlList(id))); | |
| 145 | getACLDAO(nodeRef).updateChangedAcls(nodeRef, changes); | |
| 146 | aclDaoComponent.deleteAccessControlList(acl.getId()); | |
| 146 | Long id = aclDaoComponent.createAccessControlList(properties); | |
| 147 | getACLDAO(nodeRef).setAccessControlList(nodeRef, aclDaoComponent.getDbAccessControlList(id)); | |
| 148 | List<AclChange> changes = new ArrayList<AclChange>(); | |
| 149 | changes.addAll(getACLDAO(nodeRef).setInheritanceForChildren(nodeRef, aclDaoComponent.getInheritedAccessControlList(id))); | |
| 150 | getACLDAO(nodeRef).updateChangedAcls(nodeRef, changes); | |
| 151 | aclDaoComponent.deleteAccessControlList(acl.getId()); | |
| 152 | } | |
| 153 | break; | |
| 154 | case FIXED: | |
| 155 | throw new IllegalStateException("Delete not supported for fixed permissions"); | |
| 156 | case GLOBAL: | |
| 157 | throw new IllegalStateException("Delete not supported for global permissions"); | |
| 158 | case SHARED: | |
| 159 | // nothing to do | |
| 160 | return; | |
| 161 | case LAYERED: | |
| 162 | throw new IllegalStateException("Layering is not supported for DM permissions"); | |
| 163 | default: | |
| 164 | throw new IllegalStateException("Unknown type " + acl.getAclType()); | |
| 147 | 165 | } |
| 148 | 166 | } |
| 149 | 167 |
| ... | ...@@ -375,8 +375,10 @@ | |
| 375 | 375 | { |
| 376 | 376 | case FIXED: |
| 377 | 377 | case GLOBAL: |
| 378 | case SHARED: | |
| 379 | 378 | throw new IllegalStateException("Can not delete from this acl in a node context " + acl.getAclType()); |
| 379 | case SHARED: | |
| 380 | // Nothing to do | |
| 381 | break; | |
| 380 | 382 | case DEFINING: |
| 381 | 383 | case LAYERED: |
| 382 | 384 | case OLD: |
| ... | ...@@ -119,9 +119,9 @@ | |
| 119 | 119 | private enum WriteMode |
| 120 | 120 | { |
| 121 | 121 | /** |
| 122 | * Remove inherited ACEs after that set | |
| 122 | * Remove inherited ACEs after that set | |
| 123 | 123 | */ |
| 124 | TRUNCATE_INHERITED, | |
| 124 | TRUNCATE_INHERITED, | |
| 125 | 125 | /** |
| 126 | 126 | * Add inherited ACEs |
| 127 | 127 | */ |
| ... | ...@@ -129,19 +129,19 @@ | |
| 129 | 129 | /** |
| 130 | 130 | * The source of inherited ACEs is changing |
| 131 | 131 | */ |
| 132 | CHANGE_INHERITED, | |
| 132 | CHANGE_INHERITED, | |
| 133 | 133 | /** |
| 134 | 134 | * Remove all inherited ACEs |
| 135 | 135 | */ |
| 136 | REMOVE_INHERITED, | |
| 136 | REMOVE_INHERITED, | |
| 137 | 137 | /** |
| 138 | 138 | * Insert inherited ACEs |
| 139 | 139 | */ |
| 140 | INSERT_INHERITED, | |
| 140 | INSERT_INHERITED, | |
| 141 | 141 | /** |
| 142 | * Copy ACLs and update ACEs and inheritance | |
| 142 | * Copy ACLs and update ACEs and inheritance | |
| 143 | 143 | */ |
| 144 | COPY_UPDATE_AND_INHERIT, | |
| 144 | COPY_UPDATE_AND_INHERIT, | |
| 145 | 145 | /** |
| 146 | 146 | * Simlpe copy |
| 147 | 147 | */ |
| ... | ...@@ -160,7 +160,8 @@ | |
| 160 | 160 | |
| 161 | 161 | /** |
| 162 | 162 | * Set the DAO for accessing QName entities |
| 163 | * @param qnameDAO | |
| 163 | * | |
| 164 | * @param qnameDAO | |
| 164 | 165 | */ |
| 165 | 166 | public void setQnameDAO(QNameDAO qnameDAO) |
| 166 | 167 | { |
| ... | ...@@ -169,6 +170,7 @@ | |
| 169 | 170 | |
| 170 | 171 | /** |
| 171 | 172 | * Set the ACL cache |
| 173 | * | |
| 172 | 174 | * @param aclCache |
| 173 | 175 | */ |
| 174 | 176 | public void setAclCache(SimpleCache<Long, AccessControlList> aclCache) |
| ... | ...@@ -903,23 +905,26 @@ | |
| 903 | 905 | @SuppressWarnings("unchecked") |
| 904 | 906 | public List<AclChange> deleteAccessControlList(final Long id) |
| 905 | 907 | { |
| 906 | HibernateCallback check = new HibernateCallback() | |
| 908 | if (logger.isDebugEnabled()) | |
| 907 | 909 | { |
| 908 | public Object doInHibernate(Session session) | |
| 910 | HibernateCallback check = new HibernateCallback() | |
| 911 | { | |
| 912 | public Object doInHibernate(Session session) | |
| 913 | { | |
| 914 | Criteria criteria = getSession().createCriteria(NodeImpl.class, "node"); | |
| 915 | criteria.createAlias("node.accessControlList", "acl"); | |
| 916 | criteria.add(Restrictions.eq("acl.id", id)); | |
| 917 | criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); | |
| 918 | return criteria.list(); | |
| 919 | } | |
| 920 | }; | |
| 921 | List<Node> nodes = (List<Node>) getHibernateTemplate().execute(check); | |
| 922 | for (Node node : nodes) | |
| 909 | 923 | { |
| 910 | Criteria criteria = getSession().createCriteria(NodeImpl.class, "node"); | |
| 911 | criteria.createAlias("node.accessControlList", "acl"); | |
| 912 | criteria.add(Restrictions.eq("acl.id", id)); | |
| 913 | criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); | |
| 914 | return criteria.list(); | |
| 924 | logger.debug("Found " + node.getId() + " " + node.getUuid() + " " + node.getAccessControlList()); | |
| 915 | 925 | } |
| 916 | }; | |
| 917 | List<Node> nodes = (List<Node>) getHibernateTemplate().execute(check); | |
| 918 | for(Node node : nodes) | |
| 919 | { | |
| 920 | logger.error("Found "+node.getId() +" "+node.getUuid() + " "+node.getAccessControlList() ); | |
| 921 | 926 | } |
| 922 | ||
| 927 | ||
| 923 | 928 | List<AclChange> acls = new ArrayList<AclChange>(); |
| 924 | 929 | |
| 925 | 930 | final DbAccessControlList acl = (DbAccessControlList) getHibernateTemplate().get(DbAccessControlListImpl.class, id); |
| ... | ...@@ -929,7 +934,7 @@ | |
| 929 | 934 | } |
| 930 | 935 | if (acl.getAclType() == ACLType.SHARED) |
| 931 | 936 | { |
| 932 | throw new UnsupportedOperationException("Delete is not supported for shared acls - they are deleted with teh defining acl"); | |
| 937 | throw new UnsupportedOperationException("Delete is not supported for shared acls - they are deleted with the defining acl"); | |
| 933 | 938 | } |
| 934 | 939 | |
| 935 | 940 | if ((acl.getAclType() == ACLType.DEFINING) || (acl.getAclType() == ACLType.LAYERED)) |
| ... | ...@@ -1074,6 +1079,7 @@ | |
| 1074 | 1079 | |
| 1075 | 1080 | /** |
| 1076 | 1081 | * Search for access control lists |
| 1082 | * | |
| 1077 | 1083 | * @param pattern |
| 1078 | 1084 | * @return the ids of the ACLs found |
| 1079 | 1085 | */ |
| ... | ...@@ -1130,12 +1136,12 @@ | |
| 1130 | 1136 | for (Object[] result : results) |
| 1131 | 1137 | // for (DbAccessControlListMember member : members) |
| 1132 | 1138 | { |
| 1133 | Boolean aceIsAllowed = (Boolean)result[0]; | |
| 1134 | Integer aceType = (Integer)result[1]; | |
| 1135 | String authority = (String)result[2]; | |
| 1136 | Long permissionId = (Long)result[3]; | |
| 1137 | Integer position = (Integer)result[4]; | |
| 1138 | ||
| 1139 | Boolean aceIsAllowed = (Boolean) result[0]; | |
| 1140 | Integer aceType = (Integer) result[1]; | |
| 1141 | String authority = (String) result[2]; | |
| 1142 | Long permissionId = (Long) result[3]; | |
| 1143 | Integer position = (Integer) result[4]; | |
| 1144 | ||
| 1139 | 1145 | SimpleAccessControlEntry sacEntry = new SimpleAccessControlEntry(); |
| 1140 | 1146 | sacEntry.setAccessStatus(aceIsAllowed ? AccessStatus.ALLOWED : AccessStatus.DENIED); |
| 1141 | 1147 | sacEntry.setAceType(ACEType.getACETypeFromId(aceType)); |
| ... | ...@@ -1146,9 +1152,9 @@ | |
| 1146 | 1152 | // context.setClassContext(entry.getContext().getClassContext()); |
| 1147 | 1153 | // context.setKVPContext(entry.getContext().getKvpContext()); |
| 1148 | 1154 | // context.setPropertyContext(entry.getContext().getPropertyContext()); |
| 1149 | // sacEntry.setContext(context); | |
| 1150 | // } | |
| 1151 | DbPermission perm = (DbPermission)getSession().get(DbPermissionImpl.class, permissionId); | |
| 1155 | // sacEntry.setContext(context); | |
| 1156 | // } | |
| 1157 | DbPermission perm = (DbPermission) getSession().get(DbPermissionImpl.class, permissionId); | |
| 1152 | 1158 | SimplePermissionReference permissionRefernce = SimplePermissionReference.getPermissionReference(perm.getTypeQName().getQName(), perm.getName()); |
| 1153 | 1159 | sacEntry.setPermission(permissionRefernce); |
| 1154 | 1160 | sacEntry.setPosition(position); |
| ... | ...@@ -1325,7 +1331,7 @@ | |
| 1325 | 1331 | |
| 1326 | 1332 | @SuppressWarnings("unchecked") |
| 1327 | 1333 | public List<AclChange> setAccessControlEntry(final Long id, final AccessControlEntry ace) |
| 1328 | { | |
| 1334 | { | |
| 1329 | 1335 | DbAccessControlList target = (DbAccessControlList) getHibernateTemplate().get(DbAccessControlListImpl.class, id); |
| 1330 | 1336 | if (target.getAclType() == ACLType.SHARED) |
| 1331 | 1337 | { |
| ... | ...@@ -1785,7 +1791,7 @@ | |
| 1785 | 1791 | |
| 1786 | 1792 | DbAccessControlListMember member = (DbAccessControlListMember) result.get("member"); |
| 1787 | 1793 | DbAccessControlEntry entry = (DbAccessControlEntry) result.get("ace"); |
| 1788 | ||
| 1794 | ||
| 1789 | 1795 | if (pattern.getAccessStatus() != null) |
| 1790 | 1796 | { |
| 1791 | 1797 | if (pattern.getAccessStatus() != (entry.isAllowed() ? AccessStatus.ALLOWED : AccessStatus.DENIED)) |
| ... | ...@@ -1993,6 +1999,7 @@ | |
| 1993 | 1999 | |
| 1994 | 2000 | /** |
| 1995 | 2001 | * Get the max acl id |
| 2002 | * | |
| 1996 | 2003 | * @return - max acl id |
| 1997 | 2004 | */ |
| 1998 | 2005 | public Long getMaxAclId() |
| ... | ...@@ -2040,6 +2047,7 @@ | |
| 2040 | 2047 | |
| 2041 | 2048 | /** |
| 2042 | 2049 | * Get the acl count canges so far for progress tracking |
| 2050 | * | |
| 2043 | 2051 | * @param above |
| 2044 | 2052 | * @return - the count |
| 2045 | 2053 | */ |
| ... | ...@@ -2070,6 +2078,7 @@ | |
| 2070 | 2078 | |
| 2071 | 2079 | /** |
| 2072 | 2080 | * How many nodes are noew in store (approximate) |
| 2081 | * | |
| 2073 | 2082 | * @return - the number fo new nodes - approximate |
| 2074 | 2083 | */ |
| 2075 | 2084 | public Long getNewInStore() |
| ... | ...@@ -2086,10 +2095,9 @@ | |
| 2086 | 2095 | return count; |
| 2087 | 2096 | } |
| 2088 | 2097 | |
| 2089 | ||
| 2090 | 2098 | /** |
| 2091 | * Find layered directories | |
| 2092 | * Used to imporove performance during patching and cascading the effect fo permission changes between layers | |
| 2099 | * Find layered directories Used to imporove performance during patching and cascading the effect fo permission | |
| 2100 | * changes between layers | |
| 2093 | 2101 | * |
| 2094 | 2102 | * @return - layered directories |
| 2095 | 2103 | */ |
| ... | ...@@ -2117,9 +2125,8 @@ | |
| 2117 | 2125 | } |
| 2118 | 2126 | |
| 2119 | 2127 | /** |
| 2120 | * Find layered files | |
| 2121 | * | |
| 2122 | * Used to imporove performance during patching and cascading the effect fo permission changes between layers | |
| 2128 | * Find layered files Used to imporove performance during patching and cascading the effect fo permission changes | |
| 2129 | * between layers | |
| 2123 | 2130 | * |
| 2124 | 2131 | * @return - layerd files |
| 2125 | 2132 | */ |
| ... | ...@@ -2163,8 +2170,8 @@ | |
| 2163 | 2170 | |
| 2164 | 2171 | /** |
| 2165 | 2172 | * Support to describe AVM indirections for permission performance improvements when permissions are set. |
| 2173 | * | |
| 2166 | 2174 | * @author andyh |
| 2167 | * | |
| 2168 | 2175 | */ |
| 2169 | 2176 | public static class Indirection |
| 2170 | 2177 | { |
| ... | ...@@ -2239,6 +2246,7 @@ | |
| 2239 | 2246 | |
| 2240 | 2247 | /** |
| 2241 | 2248 | * How many DM nodes are three with new ACls (to track patch progress) |
| 2249 | * | |
| 2242 | 2250 | * @param above |
| 2243 | 2251 | * @return - the count |
| 2244 | 2252 | */ |