Improve Eclipse 4 edition lifecycle
[gpl/argeo-suite.git] / org.argeo.suite.e4 / src / org / argeo / suite / e4 / parts / AbstractSuiteDashboard.java
diff --git a/org.argeo.suite.e4/src/org/argeo/suite/e4/parts/AbstractSuiteDashboard.java b/org.argeo.suite.e4/src/org/argeo/suite/e4/parts/AbstractSuiteDashboard.java
new file mode 100644 (file)
index 0000000..9691901
--- /dev/null
@@ -0,0 +1,161 @@
+package org.argeo.suite.e4.parts;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
+import javax.jcr.Node;
+import javax.jcr.Repository;
+import javax.jcr.Session;
+
+import org.argeo.cms.ui.eclipse.forms.FormToolkit;
+import org.argeo.cms.util.CmsUtils;
+import org.argeo.connect.SystemAppService;
+import org.argeo.connect.resources.ResourcesService;
+import org.argeo.connect.ui.AppWorkbenchService;
+import org.argeo.connect.ui.ConnectUiStyles;
+import org.argeo.connect.ui.SystemWorkbenchService;
+import org.argeo.connect.util.ConnectJcrUtils;
+import org.argeo.eclipse.ui.EclipseUiUtils;
+import org.argeo.jcr.JcrUtils;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Link;
+
+/** Generic dashboard for Argeo Suite applications */
+public abstract class AbstractSuiteDashboard {
+
+       // DEPENDENCY INJECTION
+       private Repository repository;
+       private ResourcesService resourcesService;
+       private SystemAppService systemAppService;
+       private SystemWorkbenchService systemWorkbenchService;
+
+       private Session session;
+
+       // UI Objects
+       private FormToolkit toolkit;
+
+       public void init()  {
+               session = ConnectJcrUtils.login(repository);
+//             updateTooltip(input);
+       }
+
+//     private void updateTooltip(IEditorInput input) {
+//             if (input instanceof EntityEditorInput) {
+//                     EntityEditorInput sei = (EntityEditorInput) input;
+//                     sei.setTooltipText("My Dashboard");
+//             }
+//     }
+
+       /**
+        * Implementing classes must call super in order to create the correct form
+        * toolkit
+        */
+       @PostConstruct
+       public void createPartControl(Composite parent) {
+               toolkit = new FormToolkit(Display.getCurrent());
+               init();
+       }
+
+       // UTILS
+       protected Composite createGadgetCmp(Composite parent, int widthHint, int heightHint) {
+               Composite gadgetCmp = toolkit.createComposite(parent, SWT.BORDER);
+               GridData gd = new GridData(SWT.CENTER, SWT.CENTER, false, false);
+               gd.widthHint = widthHint;
+               gd.heightHint = heightHint;
+               gadgetCmp.setLayoutData(gd);
+               CmsUtils.style(gadgetCmp, ConnectUiStyles.GADGET_BOX);
+               return gadgetCmp;
+       }
+
+       protected Composite createGadgetTitleCmp(Composite parent, String title) {
+               Composite titleCmp = toolkit.createComposite(parent, SWT.BACKGROUND | SWT.INHERIT_NONE);
+               CmsUtils.style(titleCmp, ConnectUiStyles.GADGET_HEADER);
+               titleCmp.setBackground(null);
+               GridData gd = new GridData(SWT.FILL, SWT.TOP, true, false);
+               titleCmp.setLayoutData(gd);
+               titleCmp.setLayout(new GridLayout());
+
+               Label titleLbl = toolkit.createLabel(titleCmp, title + " ", SWT.BOLD);
+               CmsUtils.style(titleLbl, ConnectUiStyles.GADGET_HEADER);
+               titleLbl.setBackground(null);
+               return titleCmp;
+       }
+
+       protected Composite createGadgetBodyCmp(Composite parent) {
+               Composite bodyCmp = toolkit.createComposite(parent, SWT.BACKGROUND | SWT.INHERIT_NONE);
+               bodyCmp.setLayoutData(EclipseUiUtils.fillAll());
+               bodyCmp.setLayout(new GridLayout());
+               return bodyCmp;
+       }
+
+       protected Link createOpenEntityEditorLink(final AppWorkbenchService peopleUiService, Composite parent,
+                       final String label, final Node entity) {
+               Link link = new Link(parent, SWT.NONE);
+               link.setText("<a>" + label + "</a>");
+               link.setLayoutData(EclipseUiUtils.fillWidth());
+               link.addSelectionListener(new SelectionAdapter() {
+                       private static final long serialVersionUID = 1L;
+
+                       @Override
+                       public void widgetSelected(final SelectionEvent event) {
+                               // Map<String, String> params = new HashMap<String, String>();
+                               // params.put(ConnectEditor.PARAM_JCR_ID,
+                               // ConnectJcrUtils.getIdentifier(entity));
+                               // CommandUtils.callCommand(peopleUiService.getOpenEntityEditorCmdId(), params);
+                               peopleUiService.openEntityEditor(entity);
+                       }
+               });
+               return link;
+       }
+
+       // Life cycle
+       @PreDestroy
+       public void dispose() {
+               JcrUtils.logoutQuietly(session);
+       }
+
+
+       // Expose to implementing classes
+       protected Session getSession() {
+               return session;
+       }
+
+       public ResourcesService getResourcesService() {
+               return resourcesService;
+       }
+
+       protected SystemAppService getSystemAppService() {
+               return systemAppService;
+       }
+
+       protected SystemWorkbenchService getSystemWorkbenchService() {
+               return systemWorkbenchService;
+       }
+
+       protected FormToolkit getFormToolkit() {
+               return toolkit;
+       }
+
+       /* DEPENDENCY INJECTION */
+       public void setRepository(Repository repository) {
+               this.repository = repository;
+       }
+
+       public void setResourcesService(ResourcesService resourcesService) {
+               this.resourcesService = resourcesService;
+       }
+
+       public void setSystemAppService(SystemAppService systemAppService) {
+               this.systemAppService = systemAppService;
+       }
+
+       public void setSystemWorkbenchService(SystemWorkbenchService systemWorkbenchService) {
+               this.systemWorkbenchService = systemWorkbenchService;
+       }
+}