- /** 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));
+ private Composite createHeaderPart(Composite parent, Node context) throws RepositoryException {
+ Composite bodyCmp = new Composite(parent, SWT.NO_FOCUS);
+ bodyCmp.setLayout(EclipseUiUtils.noSpaceGridLayout(new GridLayout(2, true)));
+
+ Composite leftCmp = new Composite(bodyCmp, SWT.NO_FOCUS);
+ leftCmp.setLayout(new GridLayout());
+ leftCmp.setLayoutData(EclipseUiUtils.fillWidth());
+ Composite rightCmp = new Composite(bodyCmp, SWT.NO_FOCUS);
+ rightCmp.setLayout(new GridLayout());
+ rightCmp.setLayoutData(EclipseUiUtils.fillWidth());
+
+ // Title
+ Label titleLbl = new Label(leftCmp, SWT.WRAP | SWT.LEAD);
+ CmsUtils.markup(titleLbl);
+ String titleStr = "<big><b> Hello " + CurrentUser.getDisplayName() + " </b></big>";
+ titleLbl.setText(titleStr);
+ GridData gd = new GridData(SWT.TOP, 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()) {
+ Composite overdueCmp = new Composite(leftCmp, SWT.NO_FOCUS);
+ long size = overdueTasks.size();
+ String overdueStr = "You have " + size + " overdue task" + (size > 1 ? "s" : "") + ": ";
+ populateMuliValueClickableList(overdueCmp, overdueTasks.toArray(new Node[0]), new TaskLp(), overdueStr);
+ }
+ }
+
+ nit = trackerService.getMyMilestones(getSession(), true);
+ List<Node> openMilestones = new ArrayList<>();
+
+ if (nit.hasNext()) {
+ List<Node> overdueMilestones = new ArrayList<>();
+ while (nit.hasNext()) {
+ Node currNode = nit.nextNode();
+ openMilestones.add(currNode);
+ if (currNode.hasProperty(TrackerNames.TRACKER_TARGET_DATE)
+ && currNode.getProperty(TrackerNames.TRACKER_TARGET_DATE).getDate().before(now))
+ overdueMilestones.add(currNode);
+ }
+ if (!overdueMilestones.isEmpty()) {
+ Composite overdueCmp = new Composite(leftCmp, SWT.NO_FOCUS);
+ long size = overdueMilestones.size();
+ String overdueStr = "You have " + size + " overdue milestone" + (size > 1 ? "s" : "") + ": ";
+ populateMuliValueClickableList(overdueCmp, overdueMilestones.toArray(new Node[0]), new MilestoneLp(),
+ overdueStr);
+ }
+ }
+
+ // My projects
+ List<Node> openProjects = JcrUtils.nodeIteratorToList(trackerService.getMyProjects(getSession(), true));
+ if (!openProjects.isEmpty()) {
+ Group myProjectsGp = new Group(rightCmp, SWT.NO_FOCUS);
+ myProjectsGp.setText("My open projects");
+ myProjectsGp.setLayoutData(EclipseUiUtils.fillWidth());
+ populateMuliValueClickableList(myProjectsGp, openProjects.toArray(new Node[0]), new ProjectLp(), null);
+ }
+
+ // My Milestones
+ if (!openMilestones.isEmpty()) {
+ Group myMilestoneGp = new Group(rightCmp, SWT.NO_FOCUS);
+ myMilestoneGp.setText("My open milestones");
+ myMilestoneGp.setLayoutData(EclipseUiUtils.fillWidth());
+ populateMuliValueClickableList(myMilestoneGp, openMilestones.toArray(new Node[0]), new MilestoneLp(), null);
+ }
+ return bodyCmp;
+ }
+
+ private class ProjectLp extends ColumnLabelProvider {
+ private static final long serialVersionUID = 7231233932794865555L;
+
+ @Override
+ public String getText(Object element) {
+ Node project = (Node) element;
+
+ String percent;
+ NodeIterator nit = TrackerUtils.getIssues(project, null, null, null, true);
+ long openNb = nit.getSize();
+
+ nit = TrackerUtils.getIssues(project, null, null, null, false);
+ long allNb = nit.getSize();
+
+ if (allNb < 1)
+ percent = "empty";
+ else {
+ double result = (allNb - openNb) / allNb * 100;
+ percent = String.format("%.1f", result) + "% done";
+ }
+ StringBuilder builder = new StringBuilder();
+ builder.append("<a>").append(ConnectJcrUtils.get(project, Property.JCR_TITLE)).append("</a>");
+ builder.append(" (").append(percent).append(")");
+
+ return builder.toString();
+ }
+ }