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.connect.people.PeopleConstants;
-import org.argeo.connect.people.PeopleTypes;
-import org.argeo.connect.people.workbench.rap.PeopleRapUtils;
-import org.argeo.connect.util.ConnectJcrUtils;
+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.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 {
+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 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();
+ }
+
+ taskListCmp = new Composite(bodyCmp, SWT.NO_FOCUS);
+ taskListCmp.setLayoutData(EclipseUiUtils.fillAll());
+
+ populateTaskListCmp();
+ }
- parent.setLayout(new GridLayout());
- // Main Layout
- Composite body = getFormToolkit().createComposite(parent);
- body.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, true, true));
-
- GridLayout bodyLayout = new GridLayout(2, true);
- bodyLayout.horizontalSpacing = 20;
- bodyLayout.verticalSpacing = 20;
- body.setLayout(bodyLayout);
+ private void populateTaskListCmp() {
+ CmsUtils.clear(taskListCmp);
+ taskListCmp.setLayout(EclipseUiUtils.noSpaceGridLayout());
+ // Composite innerCmp = new Composite(taskListCmp, SWT.NO_FOCUS);
+ // innerCmp.setLayoutData(EclipseUiUtils.fillAll());
- // Project List
- Composite projectsGadget = createGadgetCmp(body, wh, hh);
- populateProjectsGadget(projectsGadget);
+ TaskListLabelProvider labelProvider = new TaskListLabelProvider(trackerService);
+ tvlc = new TaskVirtualListComposite(taskListCmp, SWT.NO_FOCUS, labelProvider, 54);
+ tvlc.setLayoutData(EclipseUiUtils.fillAll());
+ forceRefresh(null);
+ }
- // Contacts
- Composite contactGadget = createGadgetCmp(body, wh, hh);
- populateContactsGadget(contactGadget);
+ @Override
+ public void forceRefresh(Object object) {
+ 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;
}
- /** Links to the various projects */
- private void populateProjectsGadget(Composite parent) {
- parent.setLayout(EclipseUiUtils.noSpaceGridLayout());
- createGadgetTitleCmp(parent, "Projects");
- Composite bodyCmp = createGadgetBodyCmp(parent);
-
- // // TODO enhance this
- // NodeIterator nit = AoUtils.listNodesOfType(getSession(),
- // AoTypes.OFFICE_ACCOUNT,
- // getAoService().getBasePath(AoTypes.OFFICE_ACCOUNT));
- // while (nit.hasNext()) {
- // Node account = nit.nextNode();
- // PeopleRapUtils.createOpenEntityEditorLink(getAoWbService(), bodyCmp,
- // ConnectJcrUtils.get(account, Property.JCR_TITLE), account);
- // }
- //
- // PeopleWorkbenchService aoWbSrv = getAoWbService();
- // // Opens a lits of all projects
- //
- // PeopleRapUtils.createOpenSearchEditorLink(aoWbSrv, bodyCmp, "All
- // projects", TrackerTypes.TRACKER_PROJECT,
- // AoConstants.ACCOUNTS_BASE_PATH);
+ @Override
+ public void setFocus() {
+ // refreshDocListGadget();
}
- /** Links to the various contact search pages */
- private void populateContactsGadget(Composite parent) {
- parent.setLayout(EclipseUiUtils.noSpaceGridLayout());
- createGadgetTitleCmp(parent, "Contacts");
- Composite bodyCmp = createGadgetBodyCmp(parent);
-
- PeopleRapUtils.createOpenSearchEditorLink(getAppWorkbenchService(), bodyCmp, "Persons",
- PeopleTypes.PEOPLE_PERSON, getPeopleService().getBasePath(PeopleTypes.PEOPLE_PERSON));
-
- PeopleRapUtils.createOpenSearchEditorLink(getAppWorkbenchService(), bodyCmp, "Organisations",
- PeopleTypes.PEOPLE_ORG, getPeopleService().getBasePath(PeopleTypes.PEOPLE_ORG));
-
- Node tagParent = getPeopleService().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));
-
- tagParent = getPeopleService().getResourceService().getTagLikeResourceParent(getSession(),
- PeopleConstants.RESOURCE_TAG);
-
- PeopleRapUtils.createOpenSearchEditorLink(getAppWorkbenchService(), bodyCmp, "Tags",
- PeopleTypes.PEOPLE_TAG_INSTANCE, ConnectJcrUtils.getPath(tagParent));
+ public void setActivitiesService(ActivitiesService activitiesService) {
+ this.activitiesService = activitiesService;
+ }
+ public void setTrackerService(TrackerService trackerService) {
+ this.trackerService = trackerService;
}
}