View Javadoc
1   package org.argeo.tracker.ui;
2   
3   import javax.jcr.Node;
4   import javax.jcr.Property;
5   
6   import org.argeo.cms.util.CmsUtils;
7   import org.argeo.connect.ConnectConstants;
8   import org.argeo.connect.ConnectNames;
9   import org.argeo.connect.ui.AppWorkbenchService;
10  import org.argeo.connect.util.ConnectJcrUtils;
11  import org.argeo.eclipse.ui.EclipseUiUtils;
12  import org.argeo.tracker.TrackerNames;
13  import org.argeo.tracker.core.TrackerUtils;
14  import org.eclipse.swt.SWT;
15  import org.eclipse.swt.events.SelectionAdapter;
16  import org.eclipse.swt.events.SelectionEvent;
17  import org.eclipse.swt.layout.GridData;
18  import org.eclipse.swt.layout.GridLayout;
19  import org.eclipse.swt.widgets.Composite;
20  import org.eclipse.swt.widgets.Label;
21  import org.eclipse.swt.widgets.Link;
22  
23  /** Canonical task list composite */
24  public class MilestoneListComposite extends Composite {
25  	private static final long serialVersionUID = 7277540413496825697L;
26  
27  	private final AppWorkbenchService workbenchService;
28  	private final Node project;
29  
30  	public MilestoneListComposite(Composite parent, int style, AppWorkbenchService appWorkbenchService, Node project) {
31  		super(parent, style);
32  		this.workbenchService = appWorkbenchService;
33  		this.project = project;
34  		GridLayout layout = EclipseUiUtils.noSpaceGridLayout();
35  		layout.verticalSpacing = 5;
36  		this.setLayout(layout);
37  	}
38  
39  	public void setInput(Node[] milestones) {
40  		CmsUtils.clear(this);
41  
42  		for (Node currMS : milestones)
43  			appendMilestoneCmp(this, currMS);
44  
45  		this.layout(true, true);
46  	}
47  
48  	private void appendMilestoneCmp(Composite parent, Node milestone) {
49  		String currTitle = ConnectJcrUtils.get(milestone, Property.JCR_TITLE);
50  		String currId = ConnectJcrUtils.get(milestone, ConnectNames.CONNECT_UID);
51  		int totalNb = (int) TrackerUtils.getIssues(project, null, TrackerNames.TRACKER_MILESTONE_UID, currId).getSize();
52  		int openNb = (int) TrackerUtils.getIssues(project, null, TrackerNames.TRACKER_MILESTONE_UID, currId, true)
53  				.getSize();
54  		int closeNb = totalNb - openNb;
55  
56  		if (totalNb <= 0)
57  			return;
58  
59  		Composite boxCmp = new Composite(parent, SWT.NO_FOCUS | SWT.BORDER); //
60  		boxCmp.setLayoutData(EclipseUiUtils.fillWidth());
61  
62  		GridLayout layout = new GridLayout();
63  		layout.numColumns = 2;
64  		boxCmp.setLayout(layout);
65  
66  		Link titleLk = new Link(boxCmp, SWT.WRAP);
67  		titleLk.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
68  		titleLk.setFont(EclipseUiUtils.getBoldFont(boxCmp));
69  		titleLk.setText("<a>" + currTitle + "</a>");
70  		titleLk.addSelectionListener(new SelectionAdapter() {
71  			private static final long serialVersionUID = 5342086098924045174L;
72  
73  			@Override
74  			public void widgetSelected(SelectionEvent e) {
75  				// String jcrId = ConnectJcrUtils.getIdentifier(milestone);
76  				// CommandUtils.callCommand(workbenchService.getOpenEntityEditorCmdId(),
77  				// ConnectEditor.PARAM_JCR_ID,
78  				// jcrId);
79  				workbenchService.openEntityEditor(milestone);
80  			}
81  		});
82  
83  		Composite chartCmp = new Composite(boxCmp, SWT.NO_FOCUS);
84  		GridData twd = new GridData();
85  		// twd.rowspan = 3;
86  		twd.heightHint = 40;
87  		// twd.valign = TableWrapData.CENTER;
88  		chartCmp.setLayoutData(twd);
89  		chartCmp.setLayout(EclipseUiUtils.noSpaceGridLayout());
90  
91  		CategoryOverviewChart coc = new CategoryOverviewChart(chartCmp, SWT.NO_FOCUS);
92  		coc.setInput(currTitle, closeNb, totalNb);
93  		coc.setLayoutData(new GridData(310, 40));
94  		coc.layout(true, true);
95  
96  		Label datesLbl = new Label(boxCmp, SWT.WRAP);
97  
98  		String ddVal = ConnectJcrUtils.getDateFormattedAsString(milestone, TrackerNames.TRACKER_TARGET_DATE,
99  				ConnectConstants.DEFAULT_DATE_FORMAT);
100 		if (EclipseUiUtils.isEmpty(ddVal)) {
101 			datesLbl.setText("No due date defined");
102 			datesLbl.setFont(EclipseUiUtils.getItalicFont(boxCmp));
103 		} else
104 			datesLbl.setText("Due date: " + ddVal);
105 
106 		Label descLbl = new Label(boxCmp, SWT.WRAP);
107 		String desc = ConnectJcrUtils.get(milestone, Property.JCR_DESCRIPTION);
108 		if (EclipseUiUtils.isEmpty(desc))
109 			descLbl.setText("-");
110 		else
111 			descLbl.setText(desc);
112 	}
113 }