X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.suite.core%2Fsrc%2Forg%2Fargeo%2Fsuite%2Fpeople%2FPeopleSuiteServiceImpl.java;fp=org.argeo.suite.core%2Fsrc%2Forg%2Fargeo%2Fsuite%2Fpeople%2FPeopleSuiteServiceImpl.java;h=27efb4d19eb50f87d5d64b97975dde96be70e15c;hb=f2bf1e12e3aad9c2507e86e1d33fef2fd3e67489;hp=0000000000000000000000000000000000000000;hpb=1fb1ccc2edbf7cfbdd37efc618c52b8eebe4e6be;p=gpl%2Fargeo-suite.git diff --git a/org.argeo.suite.core/src/org/argeo/suite/people/PeopleSuiteServiceImpl.java b/org.argeo.suite.core/src/org/argeo/suite/people/PeopleSuiteServiceImpl.java new file mode 100644 index 0000000..27efb4d --- /dev/null +++ b/org.argeo.suite.core/src/org/argeo/suite/people/PeopleSuiteServiceImpl.java @@ -0,0 +1,143 @@ +package org.argeo.suite.people; + +import javax.jcr.Repository; +import javax.jcr.RepositoryException; +import javax.jcr.Session; +import javax.jcr.nodetype.NodeType; +import javax.jcr.security.Privilege; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.argeo.connect.people.PeopleConstants; +import org.argeo.connect.people.PeopleNames; +import org.argeo.connect.people.PeopleService; +import org.argeo.connect.people.PeopleTypes; +import org.argeo.connect.people.ResourceService; +import org.argeo.connect.people.core.PeopleServiceImpl; +import org.argeo.jcr.JcrUtils; +import org.argeo.node.NodeConstants; +import org.argeo.suite.SuiteException; + +/** Default implementation of an Argeo Suite specific People Backend */ +public class PeopleSuiteServiceImpl extends PeopleServiceImpl implements PeopleService, PeopleConstants { + private final static Log log = LogFactory.getLog(PeopleSuiteServiceImpl.class); + + /* DEPENDENCY INJECTION */ + private Repository repository; + private String workspaceName; + // private UserAdminService userAdminService; + + public void init() { + super.init(); + Session adminSession = null; + try { + adminSession = repository.login(workspaceName); + initialiseModel(adminSession); + } catch (Exception e) { + throw new SuiteException("Cannot initialise model", e); + } finally { + JcrUtils.logoutQuietly(adminSession); + } + } + + // HELPERS + + // TODO Hard-coded creation of default public and shared file directories + // To be cleaned once first init and configuration mechanisms have been + // implemented + private final static String publicPath = "/public"; + private final static String sharedFilePath = "/sharedFiles"; + + @Override + protected void initialiseModel(Session adminSession) throws RepositoryException { + super.initialiseModel(adminSession); + + JcrUtils.mkdirs(adminSession, publicPath, NodeType.NT_UNSTRUCTURED); + JcrUtils.mkdirs(adminSession, sharedFilePath, NodeType.NT_FOLDER); + initModelResources(adminSession); + if (adminSession.hasPendingChanges()) { + adminSession.save(); + log.info("Repository has been initialized " + "with People's model"); + configureACL(adminSession); + } + } + + // First draft of configuration of the people specific rights + private void configureACL(Session session) throws RepositoryException { + String memberGroupDn = "cn=" + PeopleConstants.ROLE_MEMBER + ",ou=roles,ou=node"; + JcrUtils.addPrivilege(session, getBasePath(null), memberGroupDn, Privilege.JCR_ALL); + JcrUtils.addPrivilege(session, "/", NodeConstants.ROLE_ADMIN, Privilege.JCR_ALL); + JcrUtils.addPrivilege(session, publicPath, NodeConstants.ROLE_USER, Privilege.JCR_READ); + JcrUtils.addPrivilege(session, publicPath, "anonymous", Privilege.JCR_READ); + JcrUtils.addPrivilege(session, publicPath, NodeConstants.ROLE_ANONYMOUS, Privilege.JCR_READ); + JcrUtils.addPrivilege(session, sharedFilePath, NodeConstants.ROLE_USER, Privilege.JCR_ALL); + session.save(); + log.info("Access control configured"); + } + + /** + * Initialises People resource model and optionally imports legacy resources + */ + protected void initModelResources(Session adminSession) throws RepositoryException { + // initialisation + ResourceService resourceService = getResourceService(); + resourceService.initialiseResources(adminSession); + + // Resource resource = initResources.get("Countries"); + // if (resourceService.getTagLikeResourceParent(adminSession, + // PeopleConstants.RESOURCE_COUNTRY) == null + // && resource != null) { + // resourceService.createTagLikeResourceParent(adminSession, + // PeopleConstants.RESOURCE_COUNTRY, + // PeopleTypes.PEOPLE_TAG_ENCODED_INSTANCE, PeopleNames.PEOPLE_CODE, + // getBasePath(null), + // JcrUiUtils.getLocalJcrItemName(NodeType.NT_UNSTRUCTURED), new + // ArrayList()); + // String EN_SHORT_NAME = "English short name (upper-lower case)"; + // String ISO_CODE = "Alpha-2 code"; + // new EncodedTagCsvFileParser(resourceService, adminSession, + // PeopleConstants.RESOURCE_COUNTRY, ISO_CODE, + // EN_SHORT_NAME).parse(resource.getInputStream(), "UTF-8"); + // } + // + // resource = initResources.get("Languages"); + // if (resourceService.getTagLikeResourceParent(adminSession, + // PeopleConstants.RESOURCE_LANG) == null + // && resource != null) { + // resourceService.createTagLikeResourceParent(adminSession, + // PeopleConstants.RESOURCE_LANG, + // PeopleTypes.PEOPLE_TAG_ENCODED_INSTANCE, PeopleNames.PEOPLE_CODE, + // getBasePath(null), + // JcrUiUtils.getLocalJcrItemName(NodeType.NT_UNSTRUCTURED), new + // ArrayList()); + // String EN_SHORT_NAME = "Language name"; + // String ISO_CODE = "639-1"; + // new EncodedTagCsvFileParser(resourceService, adminSession, + // PeopleConstants.RESOURCE_LANG, ISO_CODE, + // EN_SHORT_NAME).parse(resource.getInputStream(), "UTF-8"); + // } + + // Create tag & mailing list parents + if (resourceService.getTagLikeResourceParent(adminSession, PeopleConstants.RESOURCE_TAG) == null) + resourceService.createTagLikeResourceParent(adminSession, PeopleConstants.RESOURCE_TAG, + PeopleTypes.PEOPLE_TAG_INSTANCE, null, getBasePath(null), PeopleTypes.PEOPLE_ENTITY, + PeopleNames.PEOPLE_TAGS); + if (resourceService.getTagLikeResourceParent(adminSession, PeopleTypes.PEOPLE_MAILING_LIST) == null) + resourceService.createTagLikeResourceParent(adminSession, null, PeopleTypes.PEOPLE_MAILING_LIST, null, + getBasePath(null), PeopleTypes.PEOPLE_ENTITY, PeopleNames.PEOPLE_MAILING_LISTS); + + if (adminSession.hasPendingChanges()) { + adminSession.save(); + log.info("Resources have been added to People's model"); + } + } + + /* DEPENDENCY INJECTION */ + public void setRepository(Repository repository) { + this.repository = repository; + } + + public void setWorkspaceName(String workspaceName) { + this.workspaceName = workspaceName; + } +}