package org.argeo.suite.core;
+import java.util.List;
+
import javax.jcr.Node;
import javax.jcr.RepositoryException;
-import javax.jcr.nodetype.NodeType;
+import javax.jcr.Session;
import org.argeo.connect.AppService;
-import org.argeo.connect.activities.ActivitiesService;
-import org.argeo.connect.activities.ActivitiesTypes;
-import org.argeo.connect.documents.DocumentsService;
-import org.argeo.connect.people.PeopleService;
-import org.argeo.connect.people.PeopleTypes;
-import org.argeo.connect.resources.ResourcesService;
-import org.argeo.connect.resources.ResourcesTypes;
-import org.argeo.connect.tracker.TrackerService;
-import org.argeo.connect.tracker.TrackerTypes;
-import org.argeo.connect.util.ConnectJcrUtils;
+import org.argeo.connect.SystemAppService;
+import org.argeo.suite.SuiteConstants;
+import org.argeo.suite.SuiteException;
-public class DefaultSuiteAppService implements AppService {
+public class DefaultSuiteAppService implements SystemAppService {
- private ResourcesService resourcesService;
- private ActivitiesService activitiesService;
- private PeopleService peopleService;
- private DocumentsService documentsService;
- private TrackerService trackerService;
+ // Injected known AppWorkbenchServices: order is important, first found
+ // result will be returned by the various methods.
+ private List<AppService> knownAppServices;
+
+ @Override
+ public Node publishEntity(Node parent, String nodeType, Node srcNode, boolean removeSrcNode)
+ throws RepositoryException {
+ for (AppService appService : knownAppServices) {
+ if (appService.isKnownType(nodeType))
+ return appService.publishEntity(parent, nodeType, srcNode, removeSrcNode);
+ }
+ return null;
+ }
@Override
public String getAppBaseName() {
+ return SuiteConstants.SUITE_APP_BASE_NAME;
+ }
+
+ @Override
+ public String getBaseRelPath(String nodeType) {
+ for (AppService appService : knownAppServices) {
+ if (appService.isKnownType(nodeType))
+ return appService.getBaseRelPath(nodeType);
+ }
return null;
+ // return getAppBaseName();
}
@Override
public String getDefaultRelPath(Node entity) throws RepositoryException {
+ for (AppService appService : knownAppServices) {
+ if (appService.isKnownType(entity))
+ return appService.getDefaultRelPath(entity);
+ }
return null;
}
@Override
- public String getDefaultRelPath(String id) {
+ public String getDefaultRelPath(Session session, String nodetype, String id) {
+ for (AppService appService : knownAppServices) {
+ if (appService.isKnownType(nodetype))
+ return appService.getDefaultRelPath(session, nodetype, id);
+ }
return null;
}
/** Insures the correct service is called on save */
@Override
public Node saveEntity(Node entity, boolean publish) {
- if (ConnectJcrUtils.isNodeType(entity, ResourcesTypes.RESOURCES_TAG_PARENT)
- || ConnectJcrUtils.isNodeType(entity, ResourcesTypes.RESOURCES_NODE_TEMPLATE)
- || ConnectJcrUtils.isNodeType(entity, ResourcesTypes.RESOURCES_TAG_ENCODED_INSTANCE)
- || ConnectJcrUtils.isNodeType(entity, ResourcesTypes.RESOURCES_TAG_INSTANCE))
- return resourcesService.saveEntity(entity, publish);
- else if (ConnectJcrUtils.isNodeType(entity, TrackerTypes.TRACKER_PROJECT))
- return trackerService.saveEntity(entity, publish);
- else if (ConnectJcrUtils.isNodeType(entity, ActivitiesTypes.ACTIVITIES_TASK)
- || ConnectJcrUtils.isNodeType(entity, ActivitiesTypes.ACTIVITIES_ACTIVITY))
- return activitiesService.saveEntity(entity, publish);
- else if (ConnectJcrUtils.isNodeType(entity, PeopleTypes.PEOPLE_PERSON)
- || ConnectJcrUtils.isNodeType(entity, PeopleTypes.PEOPLE_ORG))
- return peopleService.saveEntity(entity, publish);
- else if (ConnectJcrUtils.isNodeType(entity, NodeType.NT_FILE)
- || ConnectJcrUtils.isNodeType(entity, NodeType.NT_FOLDER))
- return documentsService.saveEntity(entity, publish);
- else
- return AppService.super.saveEntity(entity, publish);
- }
-
- public void setResourcesService(ResourcesService resourcesService) {
- this.resourcesService = resourcesService;
+ for (AppService appService : knownAppServices) {
+ if (appService.isKnownType(entity))
+ return appService.saveEntity(entity, publish);
+ }
+ throw new SuiteException("Unknown NodeType for " + entity + ". Cannot save");
+ // return AppService.super.saveEntity(entity, publish);
}
- public void setActivitiesService(ActivitiesService activitiesService) {
- this.activitiesService = activitiesService;
+ @Override
+ public boolean isKnownType(Node entity) {
+ for (AppService appService : knownAppServices) {
+ if (appService.isKnownType(entity))
+ return true;
+ }
+ return false;
}
- public void setPeopleService(PeopleService peopleService) {
- this.peopleService = peopleService;
+ @Override
+ public boolean isKnownType(String nodeType) {
+ for (AppService appService : knownAppServices) {
+ if (appService.isKnownType(nodeType))
+ return true;
+ }
+ return false;
}
- public void setDocumentsService(DocumentsService documentsService) {
- this.documentsService = documentsService;
+ public void setKnownAppServices(List<AppService> knownAppServices) {
+ this.knownAppServices = knownAppServices;
}
- public void setTrackerService(TrackerService trackerService) {
- this.trackerService = trackerService;
- }
}