Enhance Rap Workbench UI
authorbsinou <bsinou@argeo.org>
Mon, 30 Jan 2017 09:06:50 +0000 (10:06 +0100)
committerbsinou <bsinou@argeo.org>
Mon, 30 Jan 2017 09:06:50 +0000 (10:06 +0100)
17 files changed:
org.argeo.suite.web/pom.xml
org.argeo.suite.workbench.rap/META-INF/spring/osgi.xml [new file with mode: 0644]
org.argeo.suite.workbench.rap/META-INF/spring/parts.xml [new file with mode: 0644]
org.argeo.suite.workbench.rap/bnd.bnd
org.argeo.suite.workbench.rap/plugin.xml
org.argeo.suite.workbench.rap/pom.xml
org.argeo.suite.workbench.rap/src/org/argeo/suite/workbench/AsUiPlugin.java
org.argeo.suite.workbench.rap/src/org/argeo/suite/workbench/AsWorkbenchServiceImpl.java [new file with mode: 0644]
org.argeo.suite.workbench.rap/src/org/argeo/suite/workbench/DashboardPerspective.java
org.argeo.suite.workbench.rap/src/org/argeo/suite/workbench/commands/OpenDashboardEditor.java [new file with mode: 0644]
org.argeo.suite.workbench.rap/src/org/argeo/suite/workbench/parts/AbstractSuiteDashboard.java [new file with mode: 0644]
org.argeo.suite.workbench.rap/src/org/argeo/suite/workbench/parts/DefaultDashboardEditor.java [new file with mode: 0644]
org.argeo.suite.workbench.rap/src/org/argeo/suite/workbench/parts/TestView.java [new file with mode: 0644]
org.argeo.suite.workbench.rap/src/org/argeo/suite/workbench/rap/AsSecureEntryPoint.java
org.argeo.suite.workbench.rap/src/org/argeo/suite/workbench/rap/AsWindowAdvisor.java
org.argeo.suite.workbench.rap/theme/argeo-classic/icons/favicon-16px.png [new file with mode: 0644]
pom.xml

index 3d1b6104cf3fd69fb0dc07309e5f6622a6fb68ed..998fb83bfa1a64b05b057e30d774b048fe7d2e7f 100644 (file)
                        <artifactId>org.argeo.connect.people.web</artifactId>
                        <version>${version.argeo-connect}</version>
                </dependency>
                        <artifactId>org.argeo.connect.people.web</artifactId>
                        <version>${version.argeo-connect}</version>
                </dependency>
-               <dependency>
-                       <groupId>org.argeo.connect</groupId>
-                       <artifactId>org.argeo.connect.ui</artifactId>
-                       <version>${version.argeo-connect}</version>
-               </dependency>
                <dependency>
                        <groupId>org.argeo.commons</groupId>
                        <artifactId>org.argeo.cms.ui</artifactId>
                <dependency>
                        <groupId>org.argeo.commons</groupId>
                        <artifactId>org.argeo.cms.ui</artifactId>
diff --git a/org.argeo.suite.workbench.rap/META-INF/spring/osgi.xml b/org.argeo.suite.workbench.rap/META-INF/spring/osgi.xml
new file mode 100644 (file)
index 0000000..3f9c473
--- /dev/null
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<beans:beans xmlns="http://www.springframework.org/schema/osgi"\r
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans"\r
+       xsi:schemaLocation="http://www.springframework.org/schema/osgi  \r
+       http://www.springframework.org/schema/osgi/spring-osgi-1.1.xsd\r
+       http://www.springframework.org/schema/beans   \r
+       http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">\r
+\r
+       <!-- REFERENCES -->\r
+       <reference id="repository" interface="javax.jcr.Repository"\r
+               filter="(cn=home)" />\r
+       <reference id="peopleService" interface="org.argeo.connect.people.PeopleService" />\r
+       <reference id="peopleWorkbenchService"\r
+               interface="org.argeo.connect.people.workbench.rap.PeopleWorkbenchService" />\r
+</beans:beans>\r
diff --git a/org.argeo.suite.workbench.rap/META-INF/spring/parts.xml b/org.argeo.suite.workbench.rap/META-INF/spring/parts.xml
new file mode 100644 (file)
index 0000000..a5bfde6
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
+       xmlns:util="http://www.springframework.org/schema/util"
+       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd">
+
+       <!-- COMMANDS -->
+       <bean id="openDashboardEditor" class="org.argeo.suite.workbench.commands.OpenDashboardEditor"
+               scope="prototype">
+               <property name="repository" ref="repository" />
+       </bean>
+
+       <!-- VIEWS -->
+       <bean id="testView" class="org.argeo.suite.workbench.parts.TestView"
+               scope="prototype">
+               <property name="repository" ref="repository" />
+       </bean>
+
+       <!-- EDITORS -->
+       <bean id="defaultDashboardEditor" class="org.argeo.suite.workbench.parts.DefaultDashboardEditor"
+               scope="prototype">
+               <property name="repository" ref="repository" />
+               <property name="peopleService" ref="peopleService" />
+               <property name="peopleWorkbenchService" ref="peopleWorkbenchService" />
+       </bean>
+</beans>
index efc2cf5dbb267134e89eb3ea075a6dabde4fd322..9e3c867f31fd4b91809b7a3c2fc5bc933157776b 100644 (file)
@@ -12,6 +12,7 @@ javax.jcr.security,\
 org.argeo.cms,\
 org.argeo.cms.ui.workbench,\
 org.argeo.connect.people.workbench.rap.views,\
 org.argeo.cms,\
 org.argeo.cms.ui.workbench,\
 org.argeo.connect.people.workbench.rap.views,\
+org.argeo.connect.ui,\
 org.argeo.eclipse.spring,\
 org.argeo.node,\
 org.argeo.util,\
 org.argeo.eclipse.spring,\
 org.argeo.node,\
 org.argeo.util,\
index efa841ee29bb57a433c78b800b7fa37011c51a4c..5315b88ceb92ca4e21c2e187934f4eddf816dc7a 100644 (file)
          point="org.eclipse.ui.perspectives">
                <perspective
             class="org.argeo.suite.workbench.DashboardPerspective"
          point="org.eclipse.ui.perspectives">
                <perspective
             class="org.argeo.suite.workbench.DashboardPerspective"
-            id="org.argeo.suite.workbench.dashboardPerspective"
-            icon="theme/argeo-classic/icons/favicon.png"
+            id="org.argeo.suite.workbench.rap.dashboardPerspective"
+            icon="theme/argeo-classic/icons/favicon-16px.png"
             name="Dashboard">
                </perspective> 
        </extension>
        
             name="Dashboard">
                </perspective> 
        </extension>
        
-       
+       <!-- VIEWS -->
+        <extension
+               point="org.eclipse.ui.views">
+               <view
+                       id="org.argeo.connect.people.workbench.rap.quickSearchView"
+                       class="org.argeo.eclipse.spring.SpringExtensionFactory"
+                       icon="theme/argeo-classic/icons/favicon-16px.png"
+                       name="Test View"
+                       restorable="true">
+               </view>
+       </extension>
+               
        <!-- EDITORS --> 
        <extension
                point="org.eclipse.ui.editors">
        <!-- EDITORS --> 
        <extension
                point="org.eclipse.ui.editors">
+               <editor
+                       id="org.argeo.suite.workbench.rap.defaultDashboardEditor"
+                       class="org.argeo.eclipse.spring.SpringExtensionFactory"
+                       icon="theme/argeo-classic/icons/favicon-16px.png"
+                       name="My Dashboard">
+               </editor>
        </extension>
        
        <!-- COMMANDS -->       
        <extension
          point="org.eclipse.ui.commands">
        </extension>
        
        <!-- COMMANDS -->       
        <extension
          point="org.eclipse.ui.commands">
+         <command
+               id="org.argeo.suite.workbench.rap.openDashboardEditor"
+                       defaultHandler="org.argeo.eclipse.spring.SpringCommandHandler"
+                       name="createEntity">
+       </command>         
        </extension>
 
        <!-- MENU CONTRIBUTION --> 
        </extension>
 
        <!-- MENU CONTRIBUTION --> 
index b36f2a2bab4cc079db0b58110cb9d90f524a3029..df9f8cdf459b37ce1609a8d48dca0f6e1ea822d5 100644 (file)
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
                <groupId>org.argeo.suite</groupId>
        <modelVersion>4.0.0</modelVersion>
        <parent>
                <groupId>org.argeo.suite</groupId>
        <name>Argeo Suite Rap Workbench</name>
        <packaging>jar</packaging>
        <dependencies>
        <name>Argeo Suite Rap Workbench</name>
        <packaging>jar</packaging>
        <dependencies>
+               <dependency>
+                       <groupId>org.argeo.suite</groupId>
+                       <artifactId>org.argeo.suite.web</artifactId>
+                       <version>0.1.1-SNAPSHOT</version>
+               </dependency>
                <dependency>
                        <groupId>org.argeo.connect</groupId>
                        <artifactId>org.argeo.connect.people.workbench.rap</artifactId>
                <dependency>
                        <groupId>org.argeo.connect</groupId>
                        <artifactId>org.argeo.connect.people.workbench.rap</artifactId>
index 60663a6ea0fe65e051ba84b827580eb5a891dcef..7cb1885931c1c7ab2db3ac8375e5cc39523e3856 100644 (file)
@@ -11,7 +11,7 @@ import org.osgi.framework.BundleContext;
 /** The activator class controls the plug-in life cycle */
 public class AsUiPlugin extends AbstractUIPlugin {
 
 /** The activator class controls the plug-in life cycle */
 public class AsUiPlugin extends AbstractUIPlugin {
 
-       public static final String PLUGIN_ID = "org.argeo.suite.workbench";
+       public static final String PLUGIN_ID = "org.argeo.suite.workbench.rap";
 
        // The shared instance
        private static AsUiPlugin plugin;
 
        // The shared instance
        private static AsUiPlugin plugin;
diff --git a/org.argeo.suite.workbench.rap/src/org/argeo/suite/workbench/AsWorkbenchServiceImpl.java b/org.argeo.suite.workbench.rap/src/org/argeo/suite/workbench/AsWorkbenchServiceImpl.java
new file mode 100644 (file)
index 0000000..b998287
--- /dev/null
@@ -0,0 +1,40 @@
+package org.argeo.suite.workbench;
+
+import org.argeo.connect.people.workbench.rap.PeopleWorkbenchService;
+import org.argeo.connect.people.workbench.rap.PeopleWorkbenchServiceImpl;
+import org.argeo.suite.workbench.parts.DefaultDashboardEditor;
+
+/** Centralize workbench services from the various base apps */
+public class AsWorkbenchServiceImpl extends PeopleWorkbenchServiceImpl implements PeopleWorkbenchService {
+
+       @Override
+       public String getDefaultEditorId() {
+               return DefaultDashboardEditor.ID;
+       }
+}
+
+// extends PeopleWorkbenchServiceImpl {
+//
+// public String getDefaultEditorId() {
+// return DefaultDashboardEditor.ID;
+// }
+//
+// //
+// // @Override
+// // public Image getIconForType(Node entity) {
+// // try {
+// // if (entity.isNodeType(AoTypes.OFFICE_ACCOUNT))
+// // return AoImages.ICON_ACCOUNT;
+// // else if (entity.isNodeType(TrackerTypes.TRACKER_ISSUE))
+// // return AoImages.ICON_ISSUE;
+// // else if (entity.isNodeType(TrackerTypes.TRACKER_PROJECT))
+// // return AoImages.ICON_PROJECT;
+// // else if (entity.isNodeType(AoTypes.OFFICE_PROSPECT))
+// // return AoImages.ICON_PROSPECT;
+// // else
+// // return super.getIconForType(entity);
+// // } catch (RepositoryException re) {
+// // throw new PeopleException("Unable to get image for node", re);
+// // }
+// // }
+// }
index a05594c3de4240423c7a5aabbf4392d4286c7e64..edf357a98166be26a9998eb83de85ca74d8b0d71 100644 (file)
@@ -1,12 +1,13 @@
 package org.argeo.suite.workbench;
 
 package org.argeo.suite.workbench;
 
+import org.argeo.cms.ui.workbench.jcr.NodeFsBrowserView;
 import org.argeo.connect.people.workbench.rap.views.MyTasksView;
 import org.argeo.connect.people.workbench.rap.views.MyTasksView;
-import org.argeo.connect.people.workbench.rap.views.PeopleDefaultView;
+import org.argeo.connect.people.workbench.rap.views.QuickSearchView;
 import org.eclipse.ui.IFolderLayout;
 import org.eclipse.ui.IPageLayout;
 import org.eclipse.ui.IPerspectiveFactory;
 
 import org.eclipse.ui.IFolderLayout;
 import org.eclipse.ui.IPageLayout;
 import org.eclipse.ui.IPerspectiveFactory;
 
-/** Default office perspective */
+/** Default Argeo Suite Dashboard perspective */
 public class DashboardPerspective implements IPerspectiveFactory {
 
        public void createInitialLayout(IPageLayout layout) {
 public class DashboardPerspective implements IPerspectiveFactory {
 
        public void createInitialLayout(IPageLayout layout) {
@@ -14,10 +15,11 @@ public class DashboardPerspective implements IPerspectiveFactory {
                layout.setEditorAreaVisible(true);
                layout.setFixed(false);
 
                layout.setEditorAreaVisible(true);
                layout.setFixed(false);
 
-               IFolderLayout left = layout.createFolder("left", IPageLayout.LEFT, 0.25f, editorArea);
+               IFolderLayout left = layout.createFolder("left", IPageLayout.LEFT, 0.33f, editorArea);
+               // Only show contacts if current user is a coworker
+               // if (CurrentUser.isInRole(Role.coworker.dn()))
                left.addView(MyTasksView.ID);
                left.addView(MyTasksView.ID);
-               // Only show contacts to coworkers
-               // if (CurrentUser.isInRole(AoRole.coworker.dn()))
-               left.addView(PeopleDefaultView.ID);
+               left.addView(QuickSearchView.ID);
+               left.addView(NodeFsBrowserView.ID);
        }
 }
        }
 }
diff --git a/org.argeo.suite.workbench.rap/src/org/argeo/suite/workbench/commands/OpenDashboardEditor.java b/org.argeo.suite.workbench.rap/src/org/argeo/suite/workbench/commands/OpenDashboardEditor.java
new file mode 100644 (file)
index 0000000..6f335cc
--- /dev/null
@@ -0,0 +1,52 @@
+package org.argeo.suite.workbench.commands;
+
+import javax.jcr.Node;
+import javax.jcr.Repository;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+
+import org.argeo.connect.people.workbench.rap.editors.util.EntityEditorInput;
+import org.argeo.jcr.JcrUtils;
+import org.argeo.node.NodeUtils;
+import org.argeo.suite.SuiteException;
+import org.argeo.suite.workbench.AsUiPlugin;
+import org.argeo.suite.workbench.parts.DefaultDashboardEditor;
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+/** Workaround to enable opening of a default editor */
+public class OpenDashboardEditor extends AbstractHandler {
+       public final static String ID = AsUiPlugin.PLUGIN_ID + ".openDashboardEditor";
+
+       private Repository repository;
+
+       public Object execute(ExecutionEvent event) throws ExecutionException {
+               Session session = null;
+               try {
+                       // TODO check roles
+                       session = repository.login();
+                       IWorkbenchPage iwPage = HandlerUtil.getActiveWorkbenchWindow(event).getActivePage();
+                       Node homeNode = NodeUtils.getUserHome(session);
+                       EntityEditorInput eei = new EntityEditorInput(homeNode.getIdentifier());
+                       IEditorPart iep = iwPage.findEditor(eei);
+                       if (iep == null) {
+                               iwPage.openEditor(eei, DefaultDashboardEditor.ID);
+                       } else
+                               iwPage.activate(iep);
+               } catch (RepositoryException | PartInitException re) {
+                       throw new SuiteException("Unable to open dashboard", re);
+               } finally {
+                       JcrUtils.logoutQuietly(session);
+               }
+               return null;
+       }
+
+       public void setRepository(Repository repository) {
+               this.repository = repository;
+       }
+}
diff --git a/org.argeo.suite.workbench.rap/src/org/argeo/suite/workbench/parts/AbstractSuiteDashboard.java b/org.argeo.suite.workbench.rap/src/org/argeo/suite/workbench/parts/AbstractSuiteDashboard.java
new file mode 100644 (file)
index 0000000..6cf2bd3
--- /dev/null
@@ -0,0 +1,184 @@
+package org.argeo.suite.workbench.parts;
+
+import javax.jcr.Repository;
+import javax.jcr.Session;
+
+import org.argeo.cms.util.CmsUtils;
+import org.argeo.connect.people.PeopleService;
+import org.argeo.connect.people.workbench.rap.PeopleStyles;
+import org.argeo.connect.people.workbench.rap.PeopleWorkbenchService;
+import org.argeo.connect.people.workbench.rap.editors.util.EntityEditorInput;
+import org.argeo.connect.util.ConnectJcrUtils;
+import org.argeo.eclipse.ui.EclipseUiUtils;
+import org.argeo.jcr.JcrUtils;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorSite;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+import org.eclipse.ui.part.EditorPart;
+
+/** Generic dashboard for Argeo Suite applications */
+public abstract class AbstractSuiteDashboard extends EditorPart {
+
+       // DEPENDENCY INJECTION
+       private Repository repository;
+       private PeopleService peopleService;
+       private PeopleWorkbenchService peopleWorkbenchService;
+
+       private Session session;
+
+       // UI Objects
+       private Image logoImg;
+       private FormToolkit toolkit;
+
+       @Override
+       public void init(IEditorSite site, IEditorInput input) throws PartInitException {
+               setSite(site);
+               setInput(input);
+
+               session = ConnectJcrUtils.login(repository);
+               // initialiseImg();
+               updateTooltip(input);
+       }
+
+       private void updateTooltip(IEditorInput input) {
+               if (input instanceof EntityEditorInput) {
+                       EntityEditorInput sei = (EntityEditorInput) input;
+                       sei.setTooltipText("My Dashboard");
+               }
+       }
+
+       // private void initialiseImg() {
+       // InputStream is = null;
+       // try {
+       // String imgPath = peopleService.getInstanceConfPath() + "/"
+       // + AoNames.AO_DEFAULT_LOGO;
+       // if (session.nodeExists(imgPath)) {
+       // Node imageNode = session.getNode(imgPath).getNode(
+       // Node.JCR_CONTENT);
+       // is = imageNode.getProperty(Property.JCR_DATA).getBinary()
+       // .getStream();
+       // logoImg = new Image(this.getSite().getShell().getDisplay(), is);
+       // }
+       // } catch (RepositoryException re) {
+       // throw new AoException(
+       // "Unable to initialise specific logo for demo app", re);
+       // } finally {
+       // IOUtils.closeQuietly(is);
+       // }
+       // }
+
+       /**
+        * Implementing classes must call super in order to create the correct form
+        * toolkit
+        */
+       @Override
+       public void createPartControl(Composite parent) {
+               toolkit = new FormToolkit(getSite().getShell().getDisplay());
+       }
+
+       // 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, PeopleStyles.PEOPLE_CLASS_GADGET);
+               return gadgetCmp;
+       }
+
+       protected Composite createGadgetTitleCmp(Composite parent, String title) {
+               Composite titleCmp = toolkit.createComposite(parent, SWT.BACKGROUND | SWT.INHERIT_NONE);
+               CmsUtils.style(titleCmp, PeopleStyles.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, PeopleStyles.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;
+       }
+
+       // LIFE CYCLE
+       @Override
+       public void dispose() {
+               JcrUtils.logoutQuietly(session);
+               if (logoImg != null)
+                       logoImg.dispose();
+               super.dispose();
+       }
+
+       @Override
+       public void doSave(IProgressMonitor monitor) {
+       }
+
+       @Override
+       public void doSaveAs() {
+       }
+
+       @Override
+       public boolean isDirty() {
+               return false;
+       }
+
+       @Override
+       public boolean isSaveAsAllowed() {
+               return false;
+       }
+
+       @Override
+       public void setFocus() {
+               // Do nothing
+       }
+
+       // Expose to implementing classes
+       protected PeopleService getPeopleService() {
+               return peopleService;
+       }
+
+       protected PeopleWorkbenchService getPeopleWorkbenchService() {
+               return peopleWorkbenchService;
+       }
+
+       protected Session getSession() {
+               return session;
+       }
+
+       protected Image getLogoImg() {
+               return logoImg;
+       }
+
+       protected FormToolkit getFormToolkit() {
+               return toolkit;
+       }
+
+       /* DEPENDENCY INJECTION */
+       public void setRepository(Repository repository) {
+               this.repository = repository;
+       }
+
+       public void setPeopleWorkbenchService(PeopleWorkbenchService peopleWorkbenchService) {
+               this.peopleWorkbenchService = peopleWorkbenchService;
+       }
+
+       public void setPeopleService(PeopleService peopleService) {
+               this.peopleService = peopleService;
+       }
+}
diff --git a/org.argeo.suite.workbench.rap/src/org/argeo/suite/workbench/parts/DefaultDashboardEditor.java b/org.argeo.suite.workbench.rap/src/org/argeo/suite/workbench/parts/DefaultDashboardEditor.java
new file mode 100644 (file)
index 0000000..052d2c6
--- /dev/null
@@ -0,0 +1,82 @@
+package org.argeo.suite.workbench.parts;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.argeo.connect.people.PeopleTypes;
+import org.argeo.connect.people.workbench.rap.PeopleRapUtils;
+import org.argeo.eclipse.ui.EclipseUiUtils;
+import org.argeo.suite.workbench.AsUiPlugin;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+
+/** Argeo Suite Default Dashboard */
+public class DefaultDashboardEditor extends AbstractSuiteDashboard {
+       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;
+
+       @Override
+       public void createPartControl(Composite parent) {
+               super.createPartControl(parent);
+
+               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);
+
+               // Project List
+               Composite projectsGadget = createGadgetCmp(body, wh, hh);
+               populateProjectsGadget(projectsGadget);
+
+               // Contacts
+               Composite contactGadget = createGadgetCmp(body, wh, hh);
+               populateContactsGadget(contactGadget);
+
+       }
+
+       /** 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);
+       }
+
+       /** 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(getPeopleWorkbenchService(), bodyCmp, "Persons",
+                               PeopleTypes.PEOPLE_PERSON, getPeopleService().getBasePath(PeopleTypes.PEOPLE_PERSON));
+
+               PeopleRapUtils.createOpenSearchEditorLink(getPeopleWorkbenchService(), bodyCmp, "Organisations",
+                               PeopleTypes.PEOPLE_ORG, getPeopleService().getBasePath(PeopleTypes.PEOPLE_ORG));
+       }
+}
diff --git a/org.argeo.suite.workbench.rap/src/org/argeo/suite/workbench/parts/TestView.java b/org.argeo.suite.workbench.rap/src/org/argeo/suite/workbench/parts/TestView.java
new file mode 100644 (file)
index 0000000..e45cd69
--- /dev/null
@@ -0,0 +1,49 @@
+package org.argeo.suite.workbench.parts;
+
+import javax.jcr.Repository;
+import javax.jcr.Session;
+
+import org.argeo.connect.util.ConnectJcrUtils;
+import org.argeo.eclipse.ui.EclipseUiUtils;
+import org.argeo.jcr.JcrUtils;
+import org.argeo.suite.workbench.AsUiPlugin;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.ui.part.ViewPart;
+
+/** Basic view to test plugin */
+public class TestView extends ViewPart {
+       public static final String ID = AsUiPlugin.PLUGIN_ID + ".testView";
+
+       /* DEPENDENCY INJECTION */
+       private Repository repository;
+       private Session session;
+
+       @Override
+       public void createPartControl(Composite parent) {
+               // Finalise initialisation
+               session = ConnectJcrUtils.login(repository);
+
+               GridLayout layout = EclipseUiUtils.noSpaceGridLayout();
+               layout.verticalSpacing = 5;
+               parent.setLayout(layout);
+
+               new Label(parent, SWT.NONE).setText("Test view shown.");
+       }
+
+       @Override
+       public void setFocus() {
+       }
+
+       @Override
+       public void dispose() {
+               JcrUtils.logoutQuietly(session);
+               super.dispose();
+       }
+
+       public void setRepository(Repository repository) {
+               this.repository = repository;
+       }
+}
index 7c1a93a397bae96b434dd25ddb2561bdc7bd291d..eaf2b19d418434ac73d7958f3e79e55c808139db 100644 (file)
@@ -1,19 +1,11 @@
 package org.argeo.suite.workbench.rap;
 
 package org.argeo.suite.workbench.rap;
 
-import static org.eclipse.swt.SWT.CENTER;
-import static org.eclipse.swt.SWT.LEFT;
-import static org.eclipse.swt.SWT.NO_FOCUS;
-import static org.eclipse.swt.SWT.TOP;
-
 import org.argeo.cms.ui.workbench.rap.RapWorkbenchAdvisor;
 import org.argeo.cms.ui.workbench.rap.RapWorkbenchLogin;
 import org.argeo.cms.util.CmsUtils;
 import org.argeo.cms.widgets.auth.CmsLogin;
 import org.argeo.eclipse.ui.EclipseUiUtils;
 import org.eclipse.swt.SWT;
 import org.argeo.cms.ui.workbench.rap.RapWorkbenchAdvisor;
 import org.argeo.cms.ui.workbench.rap.RapWorkbenchLogin;
 import org.argeo.cms.util.CmsUtils;
 import org.argeo.cms.widgets.auth.CmsLogin;
 import org.argeo.eclipse.ui.EclipseUiUtils;
 import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.FormAttachment;
-import org.eclipse.swt.layout.FormData;
-import org.eclipse.swt.layout.FormLayout;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Composite;
@@ -46,8 +38,7 @@ public class AsSecureEntryPoint extends RapWorkbenchLogin {
                CmsUtils.markup(headerLbl);
                String headerStr = "<a href=\"http://argeo.org\" "
                                + "title=\"Smart Data Productivity Suite, by Argeo\" target=\"_blank\"> "
                CmsUtils.markup(headerLbl);
                String headerStr = "<a href=\"http://argeo.org\" "
                                + "title=\"Smart Data Productivity Suite, by Argeo\" target=\"_blank\"> "
-                               + "<img src=\"/ui/suite/img/logo.jpg\" width=\"200\" height=\"140\"></img> "
-                               + "</a>";
+                               + "<img src=\"/ui/suite/img/logo.jpg\" width=\"200\" height=\"140\"></img> " + "</a>";
                headerLbl.setText(headerStr);
                GridData gd = new GridData(SWT.LEFT, SWT.CENTER, true, false);
                headerLbl.setLayoutData(gd);
                headerLbl.setText(headerStr);
                GridData gd = new GridData(SWT.LEFT, SWT.CENTER, true, false);
                headerLbl.setLayoutData(gd);
@@ -58,7 +49,7 @@ public class AsSecureEntryPoint extends RapWorkbenchLogin {
                String titleStr = "<big> Please sign in to your personal dashboard</big>";
                titleLbl.setText(titleStr);
                gd = new GridData(SWT.CENTER, SWT.BOTTOM, false, false);
                String titleStr = "<big> Please sign in to your personal dashboard</big>";
                titleLbl.setText(titleStr);
                gd = new GridData(SWT.CENTER, SWT.BOTTOM, false, false);
-               gd.verticalIndent = 40;
+               gd.verticalIndent = 80;
                titleLbl.setLayoutData(gd);
 
                // Login composite
                titleLbl.setLayoutData(gd);
 
                // Login composite
index 19a98d3015656ca17c6fdc9a72a69afb19df8bd7..7c808b7dd31d74f9d0ff958f16045db1343a5d21 100644 (file)
@@ -1,6 +1,8 @@
 package org.argeo.suite.workbench.rap;
 
 import org.argeo.cms.ui.workbench.rap.RapWindowAdvisor;
 package org.argeo.suite.workbench.rap;
 
 import org.argeo.cms.ui.workbench.rap.RapWindowAdvisor;
+import org.argeo.cms.ui.workbench.util.CommandUtils;
+import org.argeo.eclipse.ui.EclipseUiUtils;
 import org.eclipse.ui.application.ActionBarAdvisor;
 import org.eclipse.ui.application.IActionBarConfigurer;
 import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
 import org.eclipse.ui.application.ActionBarAdvisor;
 import org.eclipse.ui.application.IActionBarConfigurer;
 import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
@@ -10,15 +12,13 @@ public class AsWindowAdvisor extends RapWindowAdvisor {
 
        private String username;
 
 
        private String username;
 
-       public AsWindowAdvisor(IWorkbenchWindowConfigurer configurer,
-                       String username) {
+       public AsWindowAdvisor(IWorkbenchWindowConfigurer configurer, String username) {
                super(configurer, username);
                this.username = username;
        }
 
        @Override
                super(configurer, username);
                this.username = username;
        }
 
        @Override
-       public ActionBarAdvisor createActionBarAdvisor(
-                       IActionBarConfigurer configurer) {
+       public ActionBarAdvisor createActionBarAdvisor(IActionBarConfigurer configurer) {
                return new AsActionBarAdvisor(configurer, username);
        }
 
                return new AsActionBarAdvisor(configurer, username);
        }
 
@@ -32,5 +32,9 @@ public class AsWindowAdvisor extends RapWindowAdvisor {
        @Override
        public void postWindowOpen() {
                super.postWindowOpen();
        @Override
        public void postWindowOpen() {
                super.postWindowOpen();
+               // TODO use a constant rather than a String
+               String openDfltEdCmdId = System.getProperty("org.argeo.ui.openHomeCommandId");
+               if (EclipseUiUtils.notEmpty(openDfltEdCmdId))
+                       CommandUtils.callCommand(openDfltEdCmdId);
        }
 }
        }
 }
diff --git a/org.argeo.suite.workbench.rap/theme/argeo-classic/icons/favicon-16px.png b/org.argeo.suite.workbench.rap/theme/argeo-classic/icons/favicon-16px.png
new file mode 100644 (file)
index 0000000..037f929
Binary files /dev/null and b/org.argeo.suite.workbench.rap/theme/argeo-classic/icons/favicon-16px.png differ
diff --git a/pom.xml b/pom.xml
index 30058822d0133393f7ff873db4b0b5ca7ba7bcdc..f743512c4b6d00e80d6e3b0637ec80fc877114ef 100644 (file)
--- a/pom.xml
+++ b/pom.xml
@@ -36,7 +36,7 @@
                        <url>http://www.gnu.org/licenses/gpl-3.0.txt</url>
                        <distribution>repo</distribution>
                        <comments><![CDATA[
                        <url>http://www.gnu.org/licenses/gpl-3.0.txt</url>
                        <distribution>repo</distribution>
                        <comments><![CDATA[
-Argeo Suite - Rugged software for a rough world
+Smart Data Productivity Suite - Lean, robust and secured distributed Java applications
 Copyright (C) 2017 Argeo GmbH
 
 This program is free software: you can redistribute it and/or modify
 Copyright (C) 2017 Argeo GmbH
 
 This program is free software: you can redistribute it and/or modify