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