Enhance non-IT projects support
authorbsinou <bsinou@argeo.org>
Fri, 31 Mar 2017 19:13:39 +0000 (21:13 +0200)
committerbsinou <bsinou@argeo.org>
Fri, 31 Mar 2017 19:13:39 +0000 (21:13 +0200)
org.argeo.suite.workbench.rap/META-INF/spring/parts.xml
org.argeo.suite.workbench.rap/src/org/argeo/suite/workbench/DefaultSuiteWorkbenchService.java
org.argeo.suite.workbench.rap/src/org/argeo/suite/workbench/parts/AbstractSuiteDashboard.java
org.argeo.suite.workbench.rap/src/org/argeo/suite/workbench/parts/DefaultDashboardEditor.java

index 5019156ed86fda86b6f6dde6e356e619880561af..01f6a5107d5767b2fd665c8655051ea925c5ec73 100644 (file)
        </bean>
 
        <!-- VIEWS -->
-       
+
        <!-- EDITORS -->
        <bean id="defaultDashboardEditor" class="org.argeo.suite.workbench.parts.DefaultDashboardEditor"
                scope="prototype">
                <property name="repository" ref="repository" />
-               <property name="resourcesService" ref="resourcesService" />
+               <!-- <property name="resourcesService" ref="resourcesService" /> -->
                <property name="activitiesService" ref="activitiesService" />
-               <property name="peopleService" ref="peopleService" />
-               <property name="documentsService" ref="documentsService" />
+               <property name="trackerService" ref="trackerService" />
+               <!-- <property name="documentsService" ref="documentsService" /> -->
                <property name="systemWorkbenchService" ref="systemWorkbenchService" />
        </bean>
 </beans>
index 480af06c0a5525c7a6a308bd337992f9488d203f..ea909bfffe8107829aa29ccd22319db5e5853a31 100644 (file)
@@ -21,6 +21,12 @@ public class DefaultSuiteWorkbenchService implements SystemWorkbenchService {
 
        @Override
        public String getDefaultEditorId() {
+               String result = null;
+               for (AppWorkbenchService appWbService : knownAppWbServices) {
+                       result = appWbService.getDefaultEditorId();
+                       if (EclipseUiUtils.notEmpty(result))
+                               return result;
+               }
                return defaultEditorId;
        }
 
index cdb802f24fe887b9cf833d0b54a1960ebe7681f8..6ca460eb55be19fbdb930c520cad702195de9317 100644 (file)
@@ -7,19 +7,18 @@ import javax.jcr.Node;
 import javax.jcr.Repository;
 import javax.jcr.Session;
 
-import org.argeo.activities.ActivitiesService;
 import org.argeo.cms.ui.workbench.util.CommandUtils;
 import org.argeo.cms.util.CmsUtils;
+import org.argeo.connect.SystemAppService;
 import org.argeo.connect.resources.ResourcesService;
 import org.argeo.connect.ui.ConnectUiStyles;
 import org.argeo.connect.util.ConnectJcrUtils;
 import org.argeo.connect.workbench.AppWorkbenchService;
 import org.argeo.connect.workbench.SystemWorkbenchService;
+import org.argeo.connect.workbench.commands.OpenEntityEditor;
 import org.argeo.connect.workbench.util.EntityEditorInput;
-import org.argeo.documents.DocumentsService;
 import org.argeo.eclipse.ui.EclipseUiUtils;
 import org.argeo.jcr.JcrUtils;
-import org.argeo.people.PeopleService;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.SelectionAdapter;
@@ -42,9 +41,7 @@ public abstract class AbstractSuiteDashboard extends EditorPart {
        // DEPENDENCY INJECTION
        private Repository repository;
        private ResourcesService resourcesService;
-       private ActivitiesService activitiesService;
-       private PeopleService peopleService;
-       private DocumentsService documentsService;
+       private SystemAppService systemAppService;
        private SystemWorkbenchService systemWorkbenchService;
 
        private Session session;
@@ -142,15 +139,14 @@ public abstract class AbstractSuiteDashboard extends EditorPart {
                        @Override
                        public void widgetSelected(final SelectionEvent event) {
                                Map<String, String> params = new HashMap<String, String>();
-                               // FIXME
-                               params.put("param.jcrId", ConnectJcrUtils.getIdentifier(entity));
+                               params.put(OpenEntityEditor.PARAM_JCR_ID, ConnectJcrUtils.getIdentifier(entity));
                                CommandUtils.callCommand(peopleUiService.getOpenEntityEditorCmdId(), params);
                        }
                });
                return link;
        }
 
-       // LIFE CYCLE
+       // Life cycle
        @Override
        public void dispose() {
                JcrUtils.logoutQuietly(session);
@@ -187,30 +183,18 @@ public abstract class AbstractSuiteDashboard extends EditorPart {
                return session;
        }
 
-       public ResourcesService getResourceService() {
+       public ResourcesService getResourcesService() {
                return resourcesService;
        }
 
-       protected ActivitiesService getActivityService() {
-               return activitiesService;
-       }
-
-       protected PeopleService getPeopleService() {
-               return peopleService;
-       }
-
-       protected DocumentsService getDocumentsService() {
-               return documentsService;
+       protected SystemAppService getSystemAppService() {
+               return systemAppService;
        }
 
        protected SystemWorkbenchService getSystemWorkbenchService() {
                return systemWorkbenchService;
        }
 
-       protected Image getLogoImg() {
-               return logoImg;
-       }
-
        protected FormToolkit getFormToolkit() {
                return toolkit;
        }
@@ -224,16 +208,8 @@ public abstract class AbstractSuiteDashboard extends EditorPart {
                this.resourcesService = resourcesService;
        }
 
-       public void setActivitiesService(ActivitiesService activitiesService) {
-               this.activitiesService = activitiesService;
-       }
-
-       public void setDocumentsService(DocumentsService documentsService) {
-               this.documentsService = documentsService;
-       }
-
-       public void setPeopleService(PeopleService peopleService) {
-               this.peopleService = peopleService;
+       public void setSystemAppService(SystemAppService systemAppService) {
+               this.systemAppService = systemAppService;
        }
 
        public void setSystemWorkbenchService(SystemWorkbenchService systemWorkbenchService) {
index 99bc56028532d722ddd007e2bc99f403f92965a5..7751d6bca47bfb6784c80f75b641953b370fa68c 100644 (file)
 package org.argeo.suite.workbench.parts;
 
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.GregorianCalendar;
+import java.util.List;
+
 import javax.jcr.Node;
 import javax.jcr.NodeIterator;
+import javax.jcr.RepositoryException;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.argeo.activities.ActivitiesTypes;
-import org.argeo.connect.resources.ResourcesTypes;
-import org.argeo.connect.util.ConnectJcrUtils;
-import org.argeo.connect.workbench.ConnectWorkbenchUtils;
+import org.argeo.activities.ActivitiesNames;
+import org.argeo.activities.ActivitiesService;
+import org.argeo.cms.auth.CurrentUser;
+import org.argeo.cms.util.CmsUtils;
 import org.argeo.connect.workbench.Refreshable;
 import org.argeo.eclipse.ui.EclipseUiUtils;
-import org.argeo.people.PeopleTypes;
+import org.argeo.jcr.JcrUtils;
+import org.argeo.node.NodeUtils;
 import org.argeo.suite.workbench.AsUiPlugin;
+import org.argeo.tracker.TrackerNames;
+import org.argeo.tracker.TrackerService;
+import org.argeo.tracker.ui.TaskListLabelProvider;
+import org.argeo.tracker.ui.TaskVirtualListComposite;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
 
 /** Argeo Suite Default Dashboard */
 public class DefaultDashboardEditor extends AbstractSuiteDashboard implements Refreshable {
        final static Log log = LogFactory.getLog(DefaultDashboardEditor.class);
        public final static String ID = AsUiPlugin.PLUGIN_ID + ".defaultDashboardEditor";
 
-       // Default gadget dimensions
-       private int wh = 300;
-       private int hh = 350;
+       private ActivitiesService activitiesService;
+       private TrackerService trackerService;
 
-       private Composite lastUpdatedDocsGadget;
+       private Composite headerCmp;
+       private Composite taskListCmp;
+       private TaskVirtualListComposite tvlc;
 
        @Override
        public void createPartControl(Composite parent) {
                super.createPartControl(parent);
+               parent.setLayout(EclipseUiUtils.noSpaceGridLayout());
+               Composite bodyCmp = new Composite(parent, SWT.NO_FOCUS);
+               bodyCmp.setLayoutData(EclipseUiUtils.fillAll());
+               bodyCmp.setLayout(new GridLayout());
+
+               // Header
+               try {
+                       // Control overviewCmp =
+                       createUi(bodyCmp, NodeUtils.getUserHome(getSession()));
+               } catch (RepositoryException e) {
+                       e.printStackTrace();
+               }
 
-               parent.setLayout(new GridLayout());
-               // Main Layout
-               Composite body = getFormToolkit().createComposite(parent);
-               body.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, true, true));
+               taskListCmp = new Composite(bodyCmp, SWT.NO_FOCUS);
+               taskListCmp.setLayoutData(EclipseUiUtils.fillAll());
 
-               GridLayout bodyLayout = new GridLayout(2, true);
-               bodyLayout.horizontalSpacing = 20;
-               bodyLayout.verticalSpacing = 20;
-               body.setLayout(bodyLayout);
+               populateTaskListCmp();
+       }
 
-               // Contacts
-               Composite contactGadget = createGadgetCmp(body, wh, hh);
-               populateContactsGadget(contactGadget);
+       private void populateTaskListCmp() {
+               CmsUtils.clear(taskListCmp);
+               taskListCmp.setLayout(EclipseUiUtils.noSpaceGridLayout());
+               // Composite innerCmp = new Composite(taskListCmp, SWT.NO_FOCUS);
+               // innerCmp.setLayoutData(EclipseUiUtils.fillAll());
 
-               // Last updated doc List
-               lastUpdatedDocsGadget = createGadgetCmp(body, wh, hh);
+               TaskListLabelProvider labelProvider = new TaskListLabelProvider(trackerService);
+               tvlc = new TaskVirtualListComposite(taskListCmp, SWT.NO_FOCUS, labelProvider, 54);
+               tvlc.setLayoutData(EclipseUiUtils.fillAll());
+               forceRefresh(null);
        }
 
        @Override
        public void forceRefresh(Object object) {
-               refreshDocListGadget();
+               NodeIterator nit = activitiesService.getMyTasks(getSession(), true);
+               tvlc.getTableViewer().setInput(JcrUtils.nodeIteratorToList(nit).toArray());
+       }
+
+       private Control createUi(Composite parent, Node context) throws RepositoryException {
+               Composite bodyCmp = new Composite(parent, SWT.NO_FOCUS);
+               bodyCmp.setLayout(new GridLayout());
+
+               // Title
+               Label titleLbl = new Label(bodyCmp, SWT.WRAP | SWT.LEAD);
+               CmsUtils.markup(titleLbl);
+               String titleStr = "<big><b> Hello " + CurrentUser.getDisplayName() + " </b></big>";
+               titleLbl.setText(titleStr);
+               GridData gd = new GridData(SWT.CENTER, SWT.BOTTOM, false, false);
+               gd.verticalIndent = 5;
+               gd.horizontalIndent = 10;
+               titleLbl.setLayoutData(gd);
+
+               Calendar now = GregorianCalendar.getInstance();
+
+               NodeIterator nit = activitiesService.getMyTasks(getSession(), true);
+               if (nit.hasNext()) {
+                       List<Node> overdueTasks = new ArrayList<>();
+                       while (nit.hasNext()) {
+                               Node currNode = nit.nextNode();
+                               if (currNode.hasProperty(ActivitiesNames.ACTIVITIES_DUE_DATE)
+                                               && currNode.getProperty(ActivitiesNames.ACTIVITIES_DUE_DATE).getDate().before(now))
+                                       overdueTasks.add(currNode);
+                       }
+                       if (!overdueTasks.isEmpty()) {
+                               Label overdueLbl = new Label(bodyCmp, SWT.WRAP | SWT.LEAD);
+                               CmsUtils.markup(overdueLbl);
+                               long size = overdueTasks.size();
+                               String overdueStr = "You have " + size + " overdue task" + (size > 1 ? "s" : "") + ".";
+                               overdueLbl.setText(overdueStr);
+                       }
+               }
+
+               nit = trackerService.getMyMilestones(getSession(), true);
+               if (nit.hasNext()) {
+                       List<Node> overdueMilestones = new ArrayList<>();
+                       while (nit.hasNext()) {
+                               Node currNode = nit.nextNode();
+                               if (currNode.hasProperty(TrackerNames.TRACKER_TARGET_DATE)
+                                               && currNode.getProperty(TrackerNames.TRACKER_TARGET_DATE).getDate().before(now))
+                                       overdueMilestones.add(currNode);
+                       }
+                       if (!overdueMilestones.isEmpty()) {
+                               Label overdueLbl = new Label(bodyCmp, SWT.WRAP | SWT.LEAD);
+                               CmsUtils.markup(overdueLbl);
+                               long size = overdueMilestones.size();
+                               String overdueStr = "You have " + size + " overdue milestone" + (size > 1 ? "s" : "") + ".";
+                               overdueLbl.setText(overdueStr);
+                       }
+               }
+               return bodyCmp;
        }
 
        @Override
        public void setFocus() {
-               refreshDocListGadget();
+               // refreshDocListGadget();
        }
 
-       /** Links to the various last updated docs */
-       private void refreshDocListGadget() {
-               EclipseUiUtils.clear(lastUpdatedDocsGadget);
-               lastUpdatedDocsGadget.setLayout(EclipseUiUtils.noSpaceGridLayout());
-               createGadgetTitleCmp(lastUpdatedDocsGadget, "Last updated documents");
-               Composite bodyCmp = createGadgetBodyCmp(lastUpdatedDocsGadget);
-
-               NodeIterator nit = getDocumentsService().getLastUpdatedDocuments(getSession());
-               while (nit.hasNext()) {
-                       Node file = nit.nextNode();
-                       createOpenEntityEditorLink(getSystemWorkbenchService(), bodyCmp, ConnectJcrUtils.getName(file), file);
-               }
-               lastUpdatedDocsGadget.layout(true, true);
+       public void setActivitiesService(ActivitiesService activitiesService) {
+               this.activitiesService = activitiesService;
        }
 
-       /** Links to the various contact search pages */
-       private void populateContactsGadget(Composite parent) {
-               parent.setLayout(EclipseUiUtils.noSpaceGridLayout());
-               createGadgetTitleCmp(parent, "Contacts");
-               Composite bodyCmp = createGadgetBodyCmp(parent);
-               ConnectWorkbenchUtils.createOpenSearchEditorLink(getSystemWorkbenchService(), bodyCmp, "Persons",
-                               PeopleTypes.PEOPLE_PERSON);
-               ConnectWorkbenchUtils.createOpenSearchEditorLink(getSystemWorkbenchService(), bodyCmp, "Organisations",
-                               PeopleTypes.PEOPLE_ORG);
-               ConnectWorkbenchUtils.createOpenSearchEditorLink(getSystemWorkbenchService(), bodyCmp, "Mailing lists",
-                               PeopleTypes.PEOPLE_MAILING_LIST);
-               ConnectWorkbenchUtils.createOpenSearchEditorLink(getSystemWorkbenchService(), bodyCmp, "Tasks",
-                               ActivitiesTypes.ACTIVITIES_TASK);
-               ConnectWorkbenchUtils.createOpenSearchEditorLink(getSystemWorkbenchService(), bodyCmp, "Tags",
-                               ResourcesTypes.RESOURCES_TAG);
+       public void setTrackerService(TrackerService trackerService) {
+               this.trackerService = trackerService;
        }
 }