View Javadoc
1   package org.argeo.suite.e4.parts;
2   
3   import javax.annotation.PostConstruct;
4   import javax.annotation.PreDestroy;
5   import javax.inject.Inject;
6   import javax.jcr.Node;
7   import javax.jcr.Repository;
8   import javax.jcr.Session;
9   
10  import org.argeo.cms.ui.eclipse.forms.FormToolkit;
11  import org.argeo.cms.util.CmsUtils;
12  import org.argeo.connect.SystemAppService;
13  import org.argeo.connect.resources.ResourcesService;
14  import org.argeo.connect.ui.AppWorkbenchService;
15  import org.argeo.connect.ui.ConnectUiStyles;
16  import org.argeo.connect.ui.SystemWorkbenchService;
17  import org.argeo.connect.util.ConnectJcrUtils;
18  import org.argeo.eclipse.ui.EclipseUiUtils;
19  import org.argeo.jcr.JcrUtils;
20  import org.eclipse.e4.ui.di.Focus;
21  import org.eclipse.rap.rwt.RWT;
22  import org.eclipse.rap.rwt.client.service.BrowserNavigation;
23  import org.eclipse.swt.SWT;
24  import org.eclipse.swt.events.SelectionAdapter;
25  import org.eclipse.swt.events.SelectionEvent;
26  import org.eclipse.swt.layout.GridData;
27  import org.eclipse.swt.layout.GridLayout;
28  import org.eclipse.swt.widgets.Composite;
29  import org.eclipse.swt.widgets.Display;
30  import org.eclipse.swt.widgets.Label;
31  import org.eclipse.swt.widgets.Link;
32  
33  /** Generic dashboard for Argeo Suite applications */
34  public abstract class AbstractSuiteDashboard {
35  	// private final static Log log =
36  	// LogFactory.getLog(AbstractSuiteDashboard.class);
37  
38  	// DEPENDENCY INJECTION
39  	@Inject
40  	private Repository repository;
41  	@Inject
42  	private ResourcesService resourcesService;
43  	@Inject
44  	private SystemAppService systemAppService;
45  	@Inject
46  	private SystemWorkbenchService systemWorkbenchService;
47  
48  	private Session session;
49  
50  	// UI Objects
51  	private FormToolkit toolkit;
52  
53  	// RAP specific
54  	private BrowserNavigation browserNavigation;
55  
56  	public void init() {
57  		session = ConnectJcrUtils.login(repository);
58  		// updateTooltip(input);
59  	}
60  
61  	// private void updateTooltip(IEditorInput input) {
62  	// if (input instanceof EntityEditorInput) {
63  	// EntityEditorInput sei = (EntityEditorInput) input;
64  	// sei.setTooltipText("My Dashboard");
65  	// }
66  	// }
67  
68  	/**
69  	 * Implementing classes must call super in order to create the correct form
70  	 * toolkit
71  	 */
72  	@PostConstruct
73  	public void createPartControl(Composite parent) {
74  		toolkit = new FormToolkit(Display.getCurrent());
75  		init();
76  		browserNavigation = RWT.getClient().getService(BrowserNavigation.class);
77  	}
78  
79  	// UTILS
80  	protected Composite createGadgetCmp(Composite parent, int widthHint, int heightHint) {
81  		Composite gadgetCmp = toolkit.createComposite(parent, SWT.BORDER);
82  		GridData gd = new GridData(SWT.CENTER, SWT.CENTER, false, false);
83  		gd.widthHint = widthHint;
84  		gd.heightHint = heightHint;
85  		gadgetCmp.setLayoutData(gd);
86  		CmsUtils.style(gadgetCmp, ConnectUiStyles.GADGET_BOX);
87  		return gadgetCmp;
88  	}
89  
90  	protected Composite createGadgetTitleCmp(Composite parent, String title) {
91  		Composite titleCmp = toolkit.createComposite(parent, SWT.BACKGROUND | SWT.INHERIT_NONE);
92  		CmsUtils.style(titleCmp, ConnectUiStyles.GADGET_HEADER);
93  		titleCmp.setBackground(null);
94  		GridData gd = new GridData(SWT.FILL, SWT.TOP, true, false);
95  		titleCmp.setLayoutData(gd);
96  		titleCmp.setLayout(new GridLayout());
97  
98  		Label titleLbl = toolkit.createLabel(titleCmp, title + " ", SWT.BOLD);
99  		CmsUtils.style(titleLbl, ConnectUiStyles.GADGET_HEADER);
100 		titleLbl.setBackground(null);
101 		return titleCmp;
102 	}
103 
104 	protected Composite createGadgetBodyCmp(Composite parent) {
105 		Composite bodyCmp = toolkit.createComposite(parent, SWT.BACKGROUND | SWT.INHERIT_NONE);
106 		bodyCmp.setLayoutData(EclipseUiUtils.fillAll());
107 		bodyCmp.setLayout(new GridLayout());
108 		return bodyCmp;
109 	}
110 
111 	protected Link createOpenEntityEditorLink(final AppWorkbenchService peopleUiService, Composite parent,
112 			final String label, final Node entity) {
113 		Link link = new Link(parent, SWT.NONE);
114 		link.setText("<a>" + label + "</a>");
115 		link.setLayoutData(EclipseUiUtils.fillWidth());
116 		link.addSelectionListener(new SelectionAdapter() {
117 			private static final long serialVersionUID = 1L;
118 
119 			@Override
120 			public void widgetSelected(final SelectionEvent event) {
121 				// Map<String, String> params = new HashMap<String, String>();
122 				// params.put(ConnectEditor.PARAM_JCR_ID,
123 				// ConnectJcrUtils.getIdentifier(entity));
124 				// CommandUtils.callCommand(peopleUiService.getOpenEntityEditorCmdId(), params);
125 				peopleUiService.openEntityEditor(entity);
126 			}
127 		});
128 		return link;
129 	}
130 
131 	// Life cycle
132 	@PreDestroy
133 	public void dispose() {
134 		JcrUtils.logoutQuietly(session);
135 	}
136 
137 	@Focus
138 	public void setFocus() {
139 		browserNavigation.pushState("~", "Dashboard");
140 	}
141 
142 	// Expose to implementing classes
143 	protected Session getSession() {
144 		return session;
145 	}
146 
147 	public ResourcesService getResourcesService() {
148 		return resourcesService;
149 	}
150 
151 	protected SystemAppService getSystemAppService() {
152 		return systemAppService;
153 	}
154 
155 	protected SystemWorkbenchService getSystemWorkbenchService() {
156 		return systemWorkbenchService;
157 	}
158 
159 	protected FormToolkit getFormToolkit() {
160 		return toolkit;
161 	}
162 
163 	/* DEPENDENCY INJECTION */
164 	// public void setRepository(Repository repository) {
165 	// this.repository = repository;
166 	// }
167 	//
168 	// public void setResourcesService(ResourcesService resourcesService) {
169 	// this.resourcesService = resourcesService;
170 	// }
171 	//
172 	// public void setSystemAppService(SystemAppService systemAppService) {
173 	// this.systemAppService = systemAppService;
174 	// }
175 	//
176 	// public void setSystemWorkbenchService(SystemWorkbenchService
177 	// systemWorkbenchService) {
178 	// this.systemWorkbenchService = systemWorkbenchService;
179 	// }
180 }