package org.argeo.suite.people;
+import java.net.URI;
+import java.util.Map;
+
import javax.jcr.Repository;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
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.connect.resources.ResourcesService;
import org.argeo.jcr.JcrUtils;
import org.argeo.node.NodeConstants;
+import org.argeo.suite.ArgeoSuiteRole;
import org.argeo.suite.SuiteException;
-/** Default implementation of an Argeo Suite specific People Backend */
+/**
+ * Default implementation of an Argeo Suite specific People Backend
+ *
+ * TODO refactor and clean init process and service dependencies
+ */
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;
+ private ResourcesService resourceService;
+ private Map<String, URI> initResources = null;
+ private Map<String, URI> legacyResources = null;
public void init() {
super.init();
try {
adminSession = repository.login(workspaceName);
initialiseModel(adminSession);
+ initModelResources(adminSession);
} catch (Exception e) {
throw new SuiteException("Cannot initialise model", e);
} finally {
}
}
- // HELPERS
-
- // TODO Hard-coded creation of default public and shared file directories
- // To be cleaned once first init and configuration mechanisms have been
- // implemented
+ // TODO Hard-coded model initialisation
+ // To be cleaned once first init and config mechanisms have been implemented
private final static String publicPath = "/public";
- private final static String sharedFilePath = "/sharedFiles";
+ // FIXME Users must have read access on the jcr:system/jcr:versionStorage
+ // node under JackRabbit to be able to manage versions
+ private final static String jackRabbitVersionSystemPath = "/jcr:system";
@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);
+ log.info("Repository has been initialised with Argeo Suite model");
}
}
// 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);
+
+ // Initialise people
+ JcrUtils.addPrivilege(session, getBasePath(null), ArgeoSuiteRole.coworker.dn(), Privilege.JCR_ALL);
+ JcrUtils.addPrivilege(session, jackRabbitVersionSystemPath, ArgeoSuiteRole.coworker.dn(), Privilege.JCR_READ);
+
+ // Default configuration of the workspace
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);
-
+ protected void initModelResources(Session adminSession) {
+ // try {
+ // // initialisation
+ // resourceService.initialiseResources(adminSession);
+ //
// Resource resource = initResources.get("Countries");
// if (resourceService.getTagLikeResourceParent(adminSession,
// PeopleConstants.RESOURCE_COUNTRY) == null
// PeopleConstants.RESOURCE_COUNTRY,
// PeopleTypes.PEOPLE_TAG_ENCODED_INSTANCE, PeopleNames.PEOPLE_CODE,
// getBasePath(null),
- // JcrUiUtils.getLocalJcrItemName(NodeType.NT_UNSTRUCTURED), new
+ // ConnectJcrUtils.getLocalJcrItemName(NodeType.NT_UNSTRUCTURED), new
// ArrayList<String>());
// String EN_SHORT_NAME = "English short name (upper-lower case)";
// String ISO_CODE = "Alpha-2 code";
// PeopleConstants.RESOURCE_LANG,
// PeopleTypes.PEOPLE_TAG_ENCODED_INSTANCE, PeopleNames.PEOPLE_CODE,
// getBasePath(null),
- // JcrUiUtils.getLocalJcrItemName(NodeType.NT_UNSTRUCTURED), new
+ // ConnectJcrUtils.getLocalJcrItemName(NodeType.NT_UNSTRUCTURED), new
// ArrayList<String>());
// String EN_SHORT_NAME = "Language name";
// String ISO_CODE = "639-1";
// 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);
+ //
+ // // Initialise catalogues
+ // importCatalogue(adminSession, initResources.get("SimpleTasks"),
+ // PeopleTypes.PEOPLE_TASK);
+ //
+ // if (adminSession.hasPendingChanges()) {
+ // adminSession.save();
+ // log.info("Resources have been added to Argeo Suite model");
+ // }
+ // } catch (IOException | RepositoryException e) {
+ // throw new SuiteException("Cannot initialise resources ", e);
+ // }
+ }
- // 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);
+ /** Give access to the repository to extending classes */
+ protected Repository getRepository() {
+ return repository;
+ }
- if (adminSession.hasPendingChanges()) {
- adminSession.save();
- log.info("Resources have been added to People's model");
- }
+ protected String getWorkspaceName() {
+ return workspaceName;
}
/* DEPENDENCY INJECTION */
public void setWorkspaceName(String workspaceName) {
this.workspaceName = workspaceName;
}
+
+ public void setInitResources(Map<String, URI> initResources) {
+ this.initResources = initResources;
+ }
}