From: bsinou Date: Fri, 31 Mar 2017 19:13:39 +0000 (+0200) Subject: Enhance non-IT projects support X-Git-Tag: argeo-suite-0.1.9~18 X-Git-Url: https://git.argeo.org/?p=gpl%2Fargeo-suite.git;a=commitdiff_plain;h=ce27112f9bc01fc37b1121496f3ad1eb7593d7eb Enhance non-IT projects support --- diff --git a/org.argeo.suite.workbench.rap/META-INF/spring/parts.xml b/org.argeo.suite.workbench.rap/META-INF/spring/parts.xml index 5019156..01f6a51 100644 --- a/org.argeo.suite.workbench.rap/META-INF/spring/parts.xml +++ b/org.argeo.suite.workbench.rap/META-INF/spring/parts.xml @@ -14,15 +14,15 @@ - + - + - - + + diff --git a/org.argeo.suite.workbench.rap/src/org/argeo/suite/workbench/DefaultSuiteWorkbenchService.java b/org.argeo.suite.workbench.rap/src/org/argeo/suite/workbench/DefaultSuiteWorkbenchService.java index 480af06..ea909bf 100644 --- a/org.argeo.suite.workbench.rap/src/org/argeo/suite/workbench/DefaultSuiteWorkbenchService.java +++ b/org.argeo.suite.workbench.rap/src/org/argeo/suite/workbench/DefaultSuiteWorkbenchService.java @@ -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; } diff --git a/org.argeo.suite.workbench.rap/src/org/argeo/suite/workbench/parts/AbstractSuiteDashboard.java b/org.argeo.suite.workbench.rap/src/org/argeo/suite/workbench/parts/AbstractSuiteDashboard.java index cdb802f..6ca460e 100644 --- a/org.argeo.suite.workbench.rap/src/org/argeo/suite/workbench/parts/AbstractSuiteDashboard.java +++ b/org.argeo.suite.workbench.rap/src/org/argeo/suite/workbench/parts/AbstractSuiteDashboard.java @@ -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 params = new HashMap(); - // 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) { diff --git a/org.argeo.suite.workbench.rap/src/org/argeo/suite/workbench/parts/DefaultDashboardEditor.java b/org.argeo.suite.workbench.rap/src/org/argeo/suite/workbench/parts/DefaultDashboardEditor.java index 99bc560..7751d6b 100644 --- a/org.argeo.suite.workbench.rap/src/org/argeo/suite/workbench/parts/DefaultDashboardEditor.java +++ b/org.argeo.suite.workbench.rap/src/org/argeo/suite/workbench/parts/DefaultDashboardEditor.java @@ -1,95 +1,152 @@ 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 = " Hello " + CurrentUser.getDisplayName() + " "; + 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 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 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; } }