Introduce a default assembly bundle to ease specific extension
[gpl/argeo-suite.git] / org.argeo.suite.core / src / org / argeo / suite / core / DefaultSuiteAppService.java
index cb349938245ac762e4492f6e7fd44f404aae532f..3718eae490f5d5b4855fe12321eabc9ea3ffd0ad 100644 (file)
@@ -1,29 +1,18 @@
 package org.argeo.suite.core;
 
+import java.util.List;
+
 import javax.jcr.Node;
 import javax.jcr.RepositoryException;
-import javax.jcr.nodetype.NodeType;
 
 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.suite.SuiteConstants;
 
 public class DefaultSuiteAppService implements AppService {
 
-       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 String getAppBaseName() {
@@ -32,71 +21,51 @@ public class DefaultSuiteAppService implements AppService {
 
        @Override
        public String getDefaultRelPath(Node entity) throws RepositoryException {
-               if (ConnectJcrUtils.isNodeType(entity, ResourcesTypes.RESOURCES_TAG_PARENT)
-                               || ConnectJcrUtils.isNodeType(entity, ResourcesTypes.RESOURCES_NODE_TEMPLATE)
-                               || ConnectJcrUtils.isNodeType(entity, ResourcesTypes.RESOURCES_ENCODED_TAG)
-                               || ConnectJcrUtils.isNodeType(entity, ResourcesTypes.RESOURCES_TAG))
-                       return resourcesService.getDefaultRelPath(entity);
-               else if (ConnectJcrUtils.isNodeType(entity, TrackerTypes.TRACKER_PROJECT))
-                       return trackerService.getDefaultRelPath(entity);
-               else if (ConnectJcrUtils.isNodeType(entity, ActivitiesTypes.ACTIVITIES_TASK)
-                               || ConnectJcrUtils.isNodeType(entity, ActivitiesTypes.ACTIVITIES_ACTIVITY))
-                       return activitiesService.getDefaultRelPath(entity);
-               else if (ConnectJcrUtils.isNodeType(entity, PeopleTypes.PEOPLE_PERSON)
-                               || ConnectJcrUtils.isNodeType(entity, PeopleTypes.PEOPLE_ORG))
-                       return peopleService.getDefaultRelPath(entity);
-               else if (ConnectJcrUtils.isNodeType(entity, NodeType.NT_FILE)
-                               || ConnectJcrUtils.isNodeType(entity, NodeType.NT_FOLDER))
-                       return documentsService.getDefaultRelPath(entity);
-               else
-                       return null;
+               for (AppService appService : knownAppServices) {
+                       if (appService.isKnownType(entity))
+                               return appService.getDefaultRelPath(entity);
+               }
+               return null;
        }
 
        @Override
-       public String getDefaultRelPath(String id) {
+       public String getDefaultRelPath(String nodetype, String id) {
+               for (AppService appService : knownAppServices) {
+                       if (appService.isKnownType(nodetype))
+                               return appService.getDefaultRelPath(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_ENCODED_TAG)
-                               || ConnectJcrUtils.isNodeType(entity, ResourcesTypes.RESOURCES_TAG))
-                       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);
+               }
+               return AppService.super.saveEntity(entity, publish);
        }
 
-       public void setActivitiesService(ActivitiesService activitiesService) {
-               this.activitiesService = activitiesService;
-       }
-
-       public void setPeopleService(PeopleService peopleService) {
-               this.peopleService = peopleService;
+       @Override
+       public boolean isKnownType(Node entity) {
+               for (AppService appService : knownAppServices) {
+                       if (appService.isKnownType(entity))
+                               return true;
+               }
+               return false;
        }
 
-       public void setDocumentsService(DocumentsService documentsService) {
-               this.documentsService = documentsService;
+       @Override
+       public boolean isKnownType(String nodeType) {
+               for (AppService appService : knownAppServices) {
+                       if (appService.isKnownType(nodeType))
+                               return true;
+               }
+               return false;
        }
 
-       public void setTrackerService(TrackerService trackerService) {
-               this.trackerService = trackerService;
+       public void setKnownAppServices(List<AppService> knownAppServices) {
+               this.knownAppServices = knownAppServices;
        }
 }