View Javadoc
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   * Default implementation of the AppMaintenanceService for the Tracker app
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  }