1 package org.argeo.activities.core;
2
3 import java.util.EnumSet;
4 import java.util.List;
5
6 import javax.jcr.RepositoryException;
7 import javax.jcr.Session;
8 import javax.jcr.security.Privilege;
9
10 import org.argeo.activities.ActivitiesNames;
11 import org.argeo.activities.ActivitiesRole;
12 import org.argeo.connect.ConnectException;
13 import org.argeo.connect.core.AbstractMaintenanceService;
14 import org.argeo.jcr.JcrUtils;
15
16
17
18
19 public class ActivitiesMaintenanceService extends AbstractMaintenanceService {
20
21 @Override
22 public List<String> getRequiredRoles() {
23 return enumToDns(EnumSet.allOf(ActivitiesRole.class));
24 }
25
26 @Override
27 protected void addOfficeGroups() {
28 addManagersToGroup(ActivitiesRole.editor.dn());
29 addCoworkersToGroup(ActivitiesRole.reader.dn());
30 }
31
32 @Override
33 public boolean prepareJcrTree(Session session) {
34 try {
35 boolean hasChanged = false;
36 JcrUtils.mkdirs(session, getDefaultBasePath());
37 if (session.hasPendingChanges()) {
38 session.save();
39 hasChanged = true;
40 }
41 return hasChanged;
42 } catch (RepositoryException e) {
43 JcrUtils.discardQuietly(session);
44 throw new ConnectException("Cannot create base nodes for Activities app", e);
45 }
46 }
47
48 @Override
49 public void configurePrivileges(Session session) {
50 try {
51 JcrUtils.addPrivilege(session, getDefaultBasePath(), ActivitiesRole.editor.dn(), Privilege.JCR_ALL);
52 JcrUtils.addPrivilege(session, getDefaultBasePath(), ActivitiesRole.reader.dn(), Privilege.JCR_READ);
53 session.save();
54 } catch (RepositoryException e) {
55 JcrUtils.discardQuietly(session);
56 throw new ConnectException("Cannot configure JCR privileges for Resources app", e);
57 }
58 }
59
60 public String getDefaultBasePath() {
61 return "/" + ActivitiesNames.ACTIVITIES_APP_BASE_NAME;
62 }
63 }