<property name="userAdminService" ref="userAdminService" />
</bean>
- <bean id="userAdminService" class="org.argeo.connect.people.core.UserAdminServiceImpl"
+ <bean id="userAdminService" class="org.argeo.connect.UserAdminServiceImpl"
scope="singleton" lazy-init="false">
<property name="userTransaction" ref="userTransaction" />
<property name="userAdmin" ref="userAdmin" />
cms.datamodel; filter:="(name=documents)"
Import-Package:\
javax.jcr.nodetype,\
+org.argeo.connect.resources,\
org.argeo.node,\
org.argeo.util,\
javax.jcr.security,\
--- /dev/null
+package org.argeo.suite;
+
+import java.net.URI;
+import java.util.List;
+import java.util.Map;
+
+import javax.jcr.Repository;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+import javax.jcr.nodetype.NodeType;
+import javax.jcr.security.Privilege;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.argeo.connect.AppMaintenanceService;
+import org.argeo.connect.resources.ResourceService;
+import org.argeo.jcr.JcrUtils;
+import org.argeo.node.NodeConstants;
+
+/** Make the DJay-ing to provide a full running Suite platform */
+public class SuiteMaintenanceService implements AppMaintenanceService {
+ private final static Log log = LogFactory.getLog(SuiteMaintenanceService.class);
+
+ /* DEPENDENCY INJECTION */
+ private Repository repository;
+ private String workspaceName;
+ private ResourceService resourceService;
+ private List<AppMaintenanceService> maintenanceServices;
+ private Map<String, URI> initResources = null;
+ private Map<String, URI> legacyResources = null;
+
+ public void init() {
+ Session adminSession = null;
+ try {
+ adminSession = repository.login(workspaceName);
+ if (prepareJcrTree(adminSession)) {
+ configurePrivileges(adminSession);
+ importResources(adminSession, null);
+ }
+ } catch (Exception e) {
+ throw new SuiteException("Cannot initialise model", e);
+ } finally {
+ JcrUtils.logoutQuietly(adminSession);
+ }
+ }
+
+ // TODO Hard-coded model initialisation
+ // To be cleaned once first init and config mechanisms have been implemented
+ private final static String publicPath = "/public";
+ // 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
+ public boolean prepareJcrTree(Session session) {
+ boolean hasCHanged = false;
+ try {
+ JcrUtils.mkdirs(session, publicPath, NodeType.NT_UNSTRUCTURED);
+ if (session.hasPendingChanges()) {
+ session.save();
+ hasCHanged = true;
+ }
+ } catch (RepositoryException e) {
+ throw new SuiteException("Cannot build model", e);
+ }
+ for (AppMaintenanceService service : maintenanceServices)
+ hasCHanged |= service.prepareJcrTree(session);
+ log.info("Repository has been initialised with Argeo Suite model");
+ return hasCHanged;
+ }
+
+ @Override
+ public void configurePrivileges(Session session) {
+ // TODO check if first init.
+ try {
+ 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);
+ session.save();
+ } catch (RepositoryException e) {
+ throw new SuiteException("Cannot build model", e);
+ }
+ for (AppMaintenanceService service : maintenanceServices)
+ service.configurePrivileges(session);
+ log.info("Access control configured");
+ }
+
+ @Override
+ public void importResources(Session session, Map<String, URI> initialResources) {
+ for (AppMaintenanceService service : maintenanceServices)
+ service.prepareJcrTree(session);
+ }
+
+ @Override
+ public void importData(Session session, URI uri, Map<String, URI> resources) {
+ for (AppMaintenanceService service : maintenanceServices)
+ service.prepareJcrTree(session);
+
+ }
+
+ @Override
+ public void doBackup(Session session, URI uri, Object resource) {
+ for (AppMaintenanceService service : maintenanceServices)
+ service.prepareJcrTree(session);
+ }
+
+ /* DEPENDENCY INJECTION */
+ public void setMaintenanceServices(List<AppMaintenanceService> maintenanceServices) {
+ this.maintenanceServices = maintenanceServices;
+ }
+}
package org.argeo.suite.people;
-import java.io.IOException;
-import java.util.ArrayList;
+import java.net.URI;
import java.util.Map;
import javax.jcr.Repository;
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.people.core.imports.EncodedTagCsvFileParser;
-import org.argeo.connect.util.ConnectJcrUtils;
+import org.argeo.connect.resources.ResourceService;
import org.argeo.jcr.JcrUtils;
import org.argeo.node.NodeConstants;
import org.argeo.suite.ArgeoSuiteRole;
import org.argeo.suite.SuiteException;
-import org.springframework.core.io.Resource;
/**
* Default implementation of an Argeo Suite specific People Backend
/* DEPENDENCY INJECTION */
private Repository repository;
private String workspaceName;
- private Map<String, Resource> initResources = null;
+ private ResourceService resourceService;
+ private Map<String, URI> initResources = null;
+ private Map<String, URI> legacyResources = null;
public void init() {
super.init();
* Initialises People resource model and optionally imports legacy resources
*/
protected void initModelResources(Session adminSession) {
- try {
- // initialisation
- ResourceService resourceService = getResourceService();
- resourceService.initialiseResources(adminSession);
-
- Resource resource = initResources.get("Countries");
- if (resourceService.getTagLikeResourceParent(adminSession, PeopleConstants.RESOURCE_COUNTRY) == null
- && resource != null) {
- resourceService.createTagLikeResourceParent(adminSession, PeopleConstants.RESOURCE_COUNTRY,
- PeopleTypes.PEOPLE_TAG_ENCODED_INSTANCE, PeopleNames.PEOPLE_CODE, getBasePath(null),
- ConnectJcrUtils.getLocalJcrItemName(NodeType.NT_UNSTRUCTURED), new ArrayList<String>());
- String EN_SHORT_NAME = "English short name (upper-lower case)";
- String ISO_CODE = "Alpha-2 code";
- new EncodedTagCsvFileParser(resourceService, adminSession, PeopleConstants.RESOURCE_COUNTRY, ISO_CODE,
- EN_SHORT_NAME).parse(resource.getInputStream(), "UTF-8");
- }
-
- resource = initResources.get("Languages");
- if (resourceService.getTagLikeResourceParent(adminSession, PeopleConstants.RESOURCE_LANG) == null
- && resource != null) {
- resourceService.createTagLikeResourceParent(adminSession, PeopleConstants.RESOURCE_LANG,
- PeopleTypes.PEOPLE_TAG_ENCODED_INSTANCE, PeopleNames.PEOPLE_CODE, getBasePath(null),
- ConnectJcrUtils.getLocalJcrItemName(NodeType.NT_UNSTRUCTURED), new ArrayList<String>());
- String EN_SHORT_NAME = "Language name";
- String ISO_CODE = "639-1";
- new EncodedTagCsvFileParser(resourceService, adminSession, 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);
- }
+ // try {
+ // // initialisation
+ // resourceService.initialiseResources(adminSession);
+ //
+ // Resource resource = initResources.get("Countries");
+ // if (resourceService.getTagLikeResourceParent(adminSession,
+ // PeopleConstants.RESOURCE_COUNTRY) == null
+ // && resource != null) {
+ // resourceService.createTagLikeResourceParent(adminSession,
+ // PeopleConstants.RESOURCE_COUNTRY,
+ // PeopleTypes.PEOPLE_TAG_ENCODED_INSTANCE, PeopleNames.PEOPLE_CODE,
+ // getBasePath(null),
+ // ConnectJcrUtils.getLocalJcrItemName(NodeType.NT_UNSTRUCTURED), new
+ // ArrayList<String>());
+ // String EN_SHORT_NAME = "English short name (upper-lower case)";
+ // String ISO_CODE = "Alpha-2 code";
+ // new EncodedTagCsvFileParser(resourceService, adminSession,
+ // PeopleConstants.RESOURCE_COUNTRY, ISO_CODE,
+ // EN_SHORT_NAME).parse(resource.getInputStream(), "UTF-8");
+ // }
+ //
+ // resource = initResources.get("Languages");
+ // if (resourceService.getTagLikeResourceParent(adminSession,
+ // PeopleConstants.RESOURCE_LANG) == null
+ // && resource != null) {
+ // resourceService.createTagLikeResourceParent(adminSession,
+ // PeopleConstants.RESOURCE_LANG,
+ // PeopleTypes.PEOPLE_TAG_ENCODED_INSTANCE, PeopleNames.PEOPLE_CODE,
+ // getBasePath(null),
+ // ConnectJcrUtils.getLocalJcrItemName(NodeType.NT_UNSTRUCTURED), new
+ // ArrayList<String>());
+ // String EN_SHORT_NAME = "Language name";
+ // String ISO_CODE = "639-1";
+ // new EncodedTagCsvFileParser(resourceService, adminSession,
+ // 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);
+ // }
}
/** Give access to the repository to extending classes */
this.workspaceName = workspaceName;
}
- public void setInitResources(Map<String, Resource> initResources) {
+ public void setInitResources(Map<String, URI> initResources) {
this.initResources = initResources;
}
}
<bean id="people.mainPage" class="org.argeo.connect.people.web.pages.PeopleDynamicPages">
<property name="dynamicPages" ref="people.dynamicPages" />
<property name="peopleService" ref="peopleService" />
+ <property name="resourceService" ref="resourceService" />
<property name="iconPathes" ref="peopleEntityIcons" />
</bean>
<bean p:image="theme/argeo-classic/img/byArgeo.png" p:target="/people#"
p:custom="cms_header-logo" parent="menuLink" />
<bean p:label="All" p:target="people!/search/all" parent="menuLink" />
- <bean p:label="Persons" p:target="people!/search/persons" parent="menuLink" />
- <bean p:label="Organisations" p:target="people!/search/orgs" parent="menuLink" />
+ <bean p:label="Persons" p:target="people!/search/persons"
+ parent="menuLink" />
+ <bean p:label="Organisations" p:target="people!/search/orgs"
+ parent="menuLink" />
<bean p:label="Browse" p:target="browse#" parent="menuLink" />
</list>
</property>
</key>
<bean class="org.argeo.connect.people.web.pages.TagLikeInstancePage">
<property name="peopleService" ref="peopleService" />
+ <property name="resourceService" ref="resourceService" />
+
<property name="iconPathes" ref="peopleEntityIcons" />
<property name="propertyName" value="people:tags" />
</bean>
</entry>
<entry>
<key>
- <util:constant static-field="org.argeo.connect.people.PeopleTypes.PEOPLE_MAILING_LIST" />
+ <util:constant
+ static-field="org.argeo.connect.people.PeopleTypes.PEOPLE_MAILING_LIST" />
</key>
<bean class="org.argeo.connect.people.web.pages.TagLikeInstancePage">
<property name="peopleService" ref="peopleService" />
+ <property name="resourceService" ref="resourceService" />
<property name="iconPathes" ref="peopleEntityIcons" />
<property name="propertyName" value="people:mailingLists" />
</bean>
<!-- Various headers -->
<bean id="personHeaderPart" class="org.argeo.connect.people.web.parts.PersonHeaderPart">
<property name="peopleService" ref="peopleService" />
+ <property name="resourceService" ref="resourceService" />
<property name="tagsPart" ref="tagsPart" />
<property name="mailingListsPart" ref="mailingListsPart" />
</bean>
<bean id="orgHeaderPart" class="org.argeo.connect.people.web.parts.OrgHeaderPart">
<property name="peopleService" ref="peopleService" />
+ <property name="resourceService" ref="resourceService" />
<property name="tagsPart" ref="tagsPart" />
<property name="mailingListsPart" ref="mailingListsPart" />
</bean>
import org.argeo.connect.people.PeopleException;
import org.argeo.connect.people.PeopleService;
import org.argeo.connect.people.web.parts.PeopleSearchCmp;
+import org.argeo.connect.resources.ResourceService;
import org.argeo.eclipse.ui.EclipseUiUtils;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
/** Default dashboard layout for Argeo Suite */
public class DefaultDashboard implements CmsUiProvider {
+ private ResourceService resourceService;
private PeopleService peopleService;
private Map<String, String> peopleIconPaths;
// Local UI Providers
// private CmsUiProvider orgPage;
- public DefaultDashboard(PeopleService peopleService, Map<String, String> peopleIconPaths) {
+ public DefaultDashboard(ResourceService resourceService, PeopleService peopleService, Map<String, String> peopleIconPaths) {
+ this.resourceService = resourceService;
this.peopleService = peopleService;
this.peopleIconPaths = peopleIconPaths;
titleLbl.setText("My Tasks");
titleLbl.setFont(EclipseUiUtils.getBoldFont(titleCmp));
- PeopleSearchCmp searchComp = new PeopleSearchCmp(parent, SWT.NO_FOCUS, peopleService, peopleIconPaths);
+ PeopleSearchCmp searchComp = new PeopleSearchCmp(parent, SWT.NO_FOCUS, resourceService, peopleService, peopleIconPaths);
searchComp.populate(context, true);
searchComp.setLayoutData(EclipseUiUtils.fillAll());
import org.argeo.connect.people.PeopleService;
import org.argeo.connect.people.PeopleTypes;
import org.argeo.connect.people.web.pages.PeopleDefaultPage;
+import org.argeo.connect.resources.ResourceService;
import org.argeo.eclipse.ui.EclipseUiUtils;
import org.argeo.suite.web.fs.MyFilesBrowserPage;
import org.eclipse.swt.SWT;
private CmsUiProvider fsBrowserPage;
/* DEPENDENCY INJECTION */
+ private ResourceService resourceService;
private PeopleService peopleService;
private FileSystemProvider nodeFileSystemProvider;
private Map<String, String> peopleIconPaths;
@Override
public void init(Session adminSession) throws RepositoryException {
- dashboardPage = new DefaultDashboard(peopleService, peopleIconPaths);
- peoplePage = new PeopleDefaultPage(peopleService, peopleIconPaths);
+ dashboardPage = new DefaultDashboard(resourceService, peopleService, peopleIconPaths);
+ peoplePage = new PeopleDefaultPage(resourceService, peopleService, peopleIconPaths);
fsBrowserPage = new MyFilesBrowserPage(nodeFileSystemProvider);
}
}
/* DEPENDENCY INJECTION */
+ public void setResourceService(ResourceService resourceService) {
+ this.resourceService = resourceService;
+ }
+
public void setPeopleService(PeopleService peopleService) {
this.peopleService = peopleService;
}
org.argeo.cms,\
org.argeo.cms.ui.workbench,\
org.argeo.connect,\
+org.argeo.connect.resources,\
+org.argeo.connect.activities,\
org.argeo.connect.ui,\
org.argeo.connect.people.workbench.rap.views,\
org.argeo.connect.documents.workbench.parts,\
import org.argeo.cms.ui.workbench.util.CommandUtils;
import org.argeo.cms.util.CmsUtils;
import org.argeo.connect.documents.DocumentsService;
+import org.argeo.connect.resources.ResourceService;
+import org.argeo.connect.activities.ActivityService;
+import org.argeo.connect.activities.ActivitiesTypes;
import org.argeo.connect.people.PeopleService;
import org.argeo.connect.people.workbench.rap.PeopleStyles;
import org.argeo.connect.people.workbench.rap.editors.util.EntityEditorInput;
// DEPENDENCY INJECTION
private Repository repository;
+ private ResourceService resourceService;
+ private ActivityService activityService;
private PeopleService peopleService;
private DocumentsService documentsService;
private AppWorkbenchService appWorkbenchService;
}
// Expose to implementing classes
+ protected Session getSession() {
+ return session;
+ }
+
+ public ResourceService getResourceService() {
+ return resourceService;
+ }
+
+ protected ActivityService getActivityService() {
+ return activityService;
+ }
+
protected PeopleService getPeopleService() {
return peopleService;
}
- protected AppWorkbenchService getAppWorkbenchService() {
- return appWorkbenchService;
+ protected DocumentsService getDocumentsService() {
+ return documentsService;
}
- protected Session getSession() {
- return session;
+
+ protected AppWorkbenchService getAppWorkbenchService() {
+ return appWorkbenchService;
}
protected Image getLogoImg() {
return logoImg;
}
- protected DocumentsService getDocumentsService() {
- return documentsService;
- }
-
protected FormToolkit getFormToolkit() {
return toolkit;
}
this.repository = repository;
}
- public void setAppWorkbenchService(AppWorkbenchService appWorkbenchService) {
- this.appWorkbenchService = appWorkbenchService;
+ public void setResourceService(ResourceService resourceService) {
+ this.resourceService = resourceService;
+ }
+
+ public void setActivityService(ActivityService activityService) {
+ this.activityService = activityService;
}
public void setDocumentsService(DocumentsService documentsService) {
public void setPeopleService(PeopleService peopleService) {
this.peopleService = peopleService;
}
+
+
+ public void setAppWorkbenchService(AppWorkbenchService appWorkbenchService) {
+ this.appWorkbenchService = appWorkbenchService;
+ }
+
}
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.argeo.connect.people.PeopleConstants;
+import org.argeo.connect.ConnectConstants;
+import org.argeo.connect.activities.ActivitiesTypes;
import org.argeo.connect.people.PeopleTypes;
import org.argeo.connect.people.workbench.rap.PeopleRapUtils;
+import org.argeo.connect.resources.ResourcesTypes;
import org.argeo.connect.ui.workbench.Refreshable;
import org.argeo.connect.util.ConnectJcrUtils;
import org.argeo.eclipse.ui.EclipseUiUtils;
PeopleRapUtils.createOpenSearchEditorLink(getAppWorkbenchService(), bodyCmp, "Organisations",
PeopleTypes.PEOPLE_ORG, getPeopleService().getBasePath(PeopleTypes.PEOPLE_ORG));
- Node tagParent = getPeopleService().getResourceService().getTagLikeResourceParent(getSession(),
- PeopleTypes.PEOPLE_MAILING_LIST);
+ Node tagParent = getResourceService().getTagLikeResourceParent(getSession(), PeopleTypes.PEOPLE_MAILING_LIST);
PeopleRapUtils.createOpenSearchEditorLink(getAppWorkbenchService(), bodyCmp, "Mailing lists",
PeopleTypes.PEOPLE_MAILING_LIST, ConnectJcrUtils.getPath(tagParent));
- PeopleRapUtils.createOpenSearchEditorLink(getAppWorkbenchService(), bodyCmp, "Tasks", PeopleTypes.PEOPLE_TASK,
- getPeopleService().getBasePath(null));
+ PeopleRapUtils.createOpenSearchEditorLink(getAppWorkbenchService(), bodyCmp, "Tasks",
+ ActivitiesTypes.ACTIVITIES_TASK, getPeopleService().getBasePath(null));
- tagParent = getPeopleService().getResourceService().getTagLikeResourceParent(getSession(),
- PeopleConstants.RESOURCE_TAG);
+ tagParent = getResourceService().getTagLikeResourceParent(getSession(), ConnectConstants.RESOURCE_TAG);
PeopleRapUtils.createOpenSearchEditorLink(getAppWorkbenchService(), bodyCmp, "Tags",
- PeopleTypes.PEOPLE_TAG_INSTANCE, ConnectJcrUtils.getPath(tagParent));
+ ResourcesTypes.PEOPLE_TAG_INSTANCE, ConnectJcrUtils.getPath(tagParent));
}
}