/* * Copyright (C) 2005-2011 Alfresco Software Limited. * * This file is part of Alfresco * * Alfresco is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Alfresco is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with Alfresco. If not, see . */ package org.alfresco.repo.security.person; import java.util.List; import org.alfresco.repo.tenant.TenantService; import org.alfresco.service.ServiceRegistry; import org.alfresco.service.cmr.repository.ChildAssociationRef; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.StoreRef; import org.alfresco.util.PropertyCheck; import org.springframework.beans.factory.BeanNameAware; import org.springframework.beans.factory.InitializingBean; /** * Common support for creating home folders This is hooked into node creation events from Person type objects via the * homeFolderManager. Provider must all be wired up to the homeFolderManager. * * @deprecated * Depreciated since 4.0. {@link AbstractHomeFolderProvider2} should now be used. * * @author Andy Hind */ public abstract class AbstractHomeFolderProvider implements HomeFolderProvider, BeanNameAware, InitializingBean { /** * The provider name */ private String name; /** * The home folder manager */ private PortableHomeFolderManager homeFolderManager; /** * The store ref in which to conduct searches */ private StoreRef storeRef; /** * Service registry to get hold of public services (so that actions are audited) */ private ServiceRegistry serviceRegistry; /** * The path to a folder */ private String path; /** * The owner to set on creation of a home folder (if unset this will be the uid). */ private String ownerOnCreate; /** * PermissionsManager used on creating the home folder */ private PermissionsManager onCreatePermissionsManager; /** * PermissionsManager used on referencing the home folder */ private PermissionsManager onReferencePermissionsManager; /** * Adaptor for this instance to be a HomeFolderProvider2 */ private V2Adaptor v2Adaptor = new V2Adaptor(this); public AbstractHomeFolderProvider() { super(); } /** * Register with the homeFolderManagewr */ public void afterPropertiesSet() throws Exception { PropertyCheck.mandatory(this, "homeFolderManager", homeFolderManager); homeFolderManager.addProvider(v2Adaptor); } /** * Get the home folder manager. */ protected PortableHomeFolderManager getHomeFolderManager() { return homeFolderManager; } /** * Set the home folder manager. * @param homeFolderManager */ public void setHomeFolderManager(PortableHomeFolderManager homeFolderManager) { this.homeFolderManager = homeFolderManager; } /** * Get the provider name */ @Override public String getName() { return name; } /** * The provider name is taken from the bean name */ @Override public void setBeanName(String name) { this.name = name; } /** * Get the path */ protected String getPath() { return path; } /** * Set the path */ public void setPath(String path) { boolean reset = this.path != null; this.path = path; // If a reset need to clear caches if (reset) { homeFolderManager.clearCaches(v2Adaptor); } } /** * Get the store ref */ protected StoreRef getStoreRef() { return storeRef; } /** * Set the store ref */ public void setStoreRef(StoreRef storeRef) { this.storeRef = storeRef; } /** * Set the store from the string url. */ public void setStoreUrl(String storeUrl) { this.storeRef = new StoreRef(storeUrl); } /** * Get the service registry. */ protected ServiceRegistry getServiceRegistry() { return serviceRegistry; } /** * Set the service registry. */ public void setServiceRegistry(ServiceRegistry serviceRegistry) { this.serviceRegistry = serviceRegistry; } /** * Set the tenant service */ public void setTenantService(TenantService tenantService) { // keep class signature but no longer use value } /** * Set the permission manager */ public void setOnCreatePermissionsManager(PermissionsManager onCreatePermissionsManager) { this.onCreatePermissionsManager = onCreatePermissionsManager; } /** * Gets the PermissionsManager used on creating the home folder */ public PermissionsManager getOnCreatePermissionsManager() { return onCreatePermissionsManager; } public void setOnReferencePermissionsManager(PermissionsManager onReferencePermissionsManager) { this.onReferencePermissionsManager = onReferencePermissionsManager; } /** * Gets the PermissionsManager used on referencing the home folder */ public PermissionsManager getOnReferencePermissionsManager() { return onReferencePermissionsManager; } /** * Set the authority to use as the owner of all home folder nodes. */ public void setOwnerOnCreate(String ownerOnCreate) { this.ownerOnCreate = ownerOnCreate; } /** * Get the authority to use as the owner of all home folder nodes. */ public String getOwnerOnCreate() { return ownerOnCreate; } /** * Cache path to node resolution */ protected NodeRef getPathNodeRef() { return homeFolderManager.getRootPathNodeRef(v2Adaptor); } /** * Utility method to resolve paths to nodes. */ protected NodeRef resolvePath(String pathToResolve) { return homeFolderManager.resolvePath(v2Adaptor, pathToResolve); } /** * The implementation of the policy binding. Run as the system user for auditing. */ public void onCreateNode(ChildAssociationRef childAssocRef) { homeFolderManager.homeFolderCreateAndSetPermissions(v2Adaptor, childAssocRef.getChildRef()); } /** * Abstract implementation to find/create the appropriate home space. */ protected abstract HomeSpaceNodeRef getHomeFolder(NodeRef person); /** * Get adaptor for this instance to be a HomeFolderProvider2 */ protected V2Adaptor getV2Adaptor() { return v2Adaptor; } /** * Adaptor to the HomeFolderProvider2 interface. */ public class V2Adaptor implements HomeFolderProvider2 { AbstractHomeFolderProvider abstractHomeFolderProvider; public V2Adaptor(AbstractHomeFolderProvider abstractHomeFolderProvider) { this.abstractHomeFolderProvider = abstractHomeFolderProvider; abstractHomeFolderProvider.v2Adaptor = this; } @Override public String getName() { return abstractHomeFolderProvider.getName(); } @Override public String getStoreUrl() { return abstractHomeFolderProvider.getStoreRef().toString(); } @Override public String getRootPath() { return abstractHomeFolderProvider.getPath(); } @Override public List getHomeFolderPath(NodeRef person) { return (abstractHomeFolderProvider instanceof UIDBasedHomeFolderProvider) ? ((UIDBasedHomeFolderProvider)abstractHomeFolderProvider).getHomeFolderPath(person) : null; } @Override public NodeRef getTemplateNodeRef() { return (abstractHomeFolderProvider instanceof UIDBasedHomeFolderProvider) ? ((UIDBasedHomeFolderProvider)abstractHomeFolderProvider).getTemplateNodeRef() : null; } @Override public String getOwner() { return abstractHomeFolderProvider.getOwnerOnCreate(); } @Override public PermissionsManager getOnCreatePermissionsManager() { return abstractHomeFolderProvider.getOnReferencePermissionsManager(); } @Override public PermissionsManager getOnReferencePermissionsManager() { return abstractHomeFolderProvider.getOnReferencePermissionsManager(); } @Override public HomeSpaceNodeRef getHomeFolder(NodeRef person) { return abstractHomeFolderProvider.getHomeFolder(person); } // The old way to create the home folder, so must still call it in case // the method is overridden public void onCreateNode(ChildAssociationRef childAssocRef) { abstractHomeFolderProvider.onCreateNode(childAssocRef); } } }