Merged BRANCHES/DEV/DAVEW/LDAP to HEAD

14587: Added new node service method getNodesWithoutParentAssocsOfType to public-services-security-context.xml (or at least my best guess at it!)
   14586: Use US spelling of synchronization in filenames for consistency
   14585: Lower the default user registry sync frequency to daily instead of hourly. Now users and groups are pulled over incrementally on login of missing users.
   14583: Unit test for ChainingUserRegistrySynchronizer
   14571: Migration patch for existing authorities previously held in users store
      - Uses AuthorityService to recreate authorities in spaces store with new structure
   14555: Authority service changes for LDAP sync improvements
      - Moved sys:authorities container to spaces store
      - All authorities now stored directly under sys:authorities
      - Authorities can now be looked up directly by node service
      - Secondary child associations used to model group relationships
      - 'Root' groups for UI navigation determined dynamically by node service query
      - cm:member association used to relate both authority containers and persons to other authorities
      - New cm:inZone association relates persons and authority containers to synchronization 'zones' stored under sys:zones
      - Look up of authority zone and all authorities in a zone to enable multi-zone LDAP sync
   14524: Dev branch for finishing LDAP zones and upgrade impact

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@14588 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Dave Ward
2009-06-08 16:16:32 +00:00
parent 7507aa8b1a
commit d5e0432589
77 changed files with 3674 additions and 2419 deletions

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2005-2007 Alfresco Software Limited.
* Copyright (C) 2005-2009 Alfresco Software Limited.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -18,7 +18,7 @@
* As a special exception to the terms and conditions of version 2.0 of
* the GPL, you may redistribute this Program in connection with Free/Libre
* and Open Source Software ("FLOSS") applications as described in Alfresco's
* FLOSS exception. You should have recieved a copy of the text describing
* FLOSS exception. You should have received a copy of the text describing
* the FLOSS exception, and it is also available here:
* http://www.alfresco.com/legal/licensing"
*/
@@ -559,6 +559,22 @@ public interface NodeService
@Auditable(key = Auditable.Key.ARG_0 ,parameters = {"nodeRef"})
public ChildAssociationRef getPrimaryParent(NodeRef nodeRef) throws InvalidNodeRefException;
/**
* Gets the set of nodes of a certain type without parent associations of a certain type. In effect the 'orphans'
* with respect to a certain association type.
*
* @param storeRef
* the store reference
* @param nodeTypeQName
* the node type QName
* @param assocTypeQName
* the association type QName
* @return the set of nodes of the required type without parent associations of the required type
*/
@Auditable(key = Auditable.Key.ARG_0 ,parameters = {"storeRef", "nodeTypeQName", "assocTypeQName"})
public Collection<NodeRef> getNodesWithoutParentAssocsOfType(final StoreRef storeRef, final QName nodeTypeQName,
final QName assocTypeQName);
/**
*
* @param sourceRef a reference to a <b>real</b> node

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2005-2007 Alfresco Software Limited.
* Copyright (C) 2005-2009 Alfresco Software Limited.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -18,7 +18,7 @@
* As a special exception to the terms and conditions of version 2.0 of
* the GPL, you may redistribute this Program in connection with Free/Libre
* and Open Source Software ("FLOSS") applications as described in Alfresco's
* FLOSS exception. You should have recieved a copy of the text describing
* FLOSS exception. You should have received a copy of the text describing
* the FLOSS exception, and it is also available here:
* http://www.alfresco.com/legal/licensing"
*/
@@ -28,6 +28,8 @@ import java.util.Set;
import org.alfresco.service.Auditable;
import org.alfresco.service.PublicService;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.namespace.QName;
/**
* The service that encapsulates authorities granted to users.
@@ -46,6 +48,13 @@ import org.alfresco.service.PublicService;
@PublicService
public interface AuthorityService
{
/**
* The default zone that owns all authorities for which a zone is not explicitly specified in the authorityZone
* property
*/
public static final String DEFAULT_ZONE = "";
/**
* Check of the current user has admin authority.
*
@@ -105,7 +114,7 @@ public interface AuthorityService
* Find authorities by pattern matching (* and ?) against the full authority name.
* @param type - the authority type
* @param namePattern - the pattern which will be matched against the full authority name.
* @return the names of the authorites matching the pattern and type.
* @return the names of the authorities matching the pattern and type.
*/
@Auditable(parameters = {"type"})
public Set<String> findAuthorities(AuthorityType type, String namePattern);
@@ -123,14 +132,10 @@ public interface AuthorityService
public Set<String> getAllRootAuthorities(AuthorityType type);
/**
* Create an authority. If the parent is null thisw method creates a root
* authority.
* Create an authority.
*
* @param type -
* the type of the authority
* @param parentName -
* the full name of the parent authority. If this is null then a root
* authority is created.
* @param shortName -
* the short name of the authority to create
* this will also be set as the default display name for the authority
@@ -138,28 +143,25 @@ public interface AuthorityService
* @return the name of the authority (this will be the prefix, if any
* associated with the type appended with the short name)
*/
@Auditable(parameters = {"type", "parentName", "shortName"})
public String createAuthority(AuthorityType type, String parentName, String shortName);
@Auditable(parameters = {"type", "shortName"})
public String createAuthority(AuthorityType type, String shortName);
/**
* Create an authority. If the parent is null this method creates a root
* authority.
* Create an authority with a display name and zone.
*
* @param type -
* @param type
* the type of the authority
* @param parentName -
* the full name of the parent authority. If this is null then a root
* authority is created.
* @param shortName -
* @param shortName
* the short name of the authority to create
* @param authorityDisplayName
* the display name for the authority
*
* @return the full name of the authority (this will be the prefix, if any
* associated with the type appended with the short name)
* @param authorityDisplayName
* the display name for the authority
* @param authorityZone
* identifier for external user registry owning the authority or <code>null</code> if not applicable
* @return the full name of the authority (this will be the prefix, if any associated with the type appended with
* the short name)
*/
@Auditable(parameters = {"type", "parentName", "shortName", "authorityDisplayName"})
public String createAuthority(AuthorityType type, String parentName, String shortName, String authorityDisplayName);
@Auditable(parameters = {"type", "shortName", "authorityDisplayName", "authorityZone"})
public String createAuthority(AuthorityType type, String shortName, String authorityDisplayName, String authorityZone);
/**
* Set an authority to include another authority. For example, adding a
@@ -279,4 +281,36 @@ public interface AuthorityService
@Auditable(parameters = {"authorityName", "authorityDisplayName"})
public void setAuthorityDisplayName(String authorityName, String authorityDisplayName);
/**
* Gets or creates an authority zone node with the specified name
*
* @param zoneName
* the zone name
* @return reference to the zone node
*/
@Auditable(parameters = {"zoneName"})
public NodeRef getOrCreateZone(String zoneName);
/**
* Gets the name of the zone containing the specified authority.
*
* @param name
* the authority long name
* @return the the name of the zone containing the specified authority, {@link AuthorityService#DEFAULT_ZONE} if the
* authority exists but has no zone, or <code>null</code> if the authority does not exist.
*/
@Auditable(parameters = {"name"})
public String getAuthorityZone(String name);
/**
* Gets the names of all authorities in a zone, optionally filtered by type.
*
* @param zoneName
* the zone name
* @param type
* the authority type to filter by or <code>null</code> for all authority types
* @return the names of all authorities in a zone, optionally filtered by type
*/
@Auditable(parameters = {"zoneName", "type"})
public Set<String> getAllAuthoritiesInZone(String zoneName, AuthorityType type);
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2005-2007 Alfresco Software Limited.
* Copyright (C) 2005-2009 Alfresco Software Limited.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -18,7 +18,7 @@
* As a special exception to the terms and conditions of version 2.0 of
* the GPL, you may redistribute this Program in connection with Free/Libre
* and Open Source Software ("FLOSS") applications as described in Alfresco's
* FLOSS exception. You should have recieved a copy of the text describing
* FLOSS exception. You should have received a copy of the text describing
* the FLOSS exception, and it is also available here:
* http://www.alfresco.com/legal/licensing"
*/
@@ -139,6 +139,21 @@ public interface PersonService
@Auditable(parameters = {"properties"})
public NodeRef createPerson(Map<QName, Serializable> properties);
/**
* Create a new person with the given properties, recording them against the given zone name (usually identifying an
* external user registry from which the details were obtained). The userName is one of the properties. Users with
* duplicate userNames are not allowed.
*
* @param properties
* the properties
* @param zone
* an identifier for the external user registry owning the person information, or <code>null</code> if
* not applicable.
* @return the node ref
*/
@Auditable(parameters = {"properties", "zone"})
public NodeRef createPerson(Map<QName, Serializable> properties, String zone);
/**
* Delete the person identified by the given user name.
*