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