From: Mathieu Baudier Date: Thu, 14 Oct 2021 09:11:15 +0000 (+0200) Subject: Introduce Admin UI and event recorder. X-Git-Tag: v2.3.2~23 X-Git-Url: https://git.argeo.org/?p=gpl%2Fargeo-suite.git;a=commitdiff_plain;h=f10ff4072b25721d82e083d2b200fdb8c4506b6e Introduce Admin UI and event recorder. --- diff --git a/core/org.argeo.suite.ui/OSGI-INF/adminLeadPane.xml b/core/org.argeo.suite.ui/OSGI-INF/adminLeadPane.xml new file mode 100644 index 0000000..0d060fb --- /dev/null +++ b/core/org.argeo.suite.ui/OSGI-INF/adminLeadPane.xml @@ -0,0 +1,11 @@ + + + + + + + + argeo.suite.ui.termsLayer + + + diff --git a/core/org.argeo.suite.ui/OSGI-INF/eventRecorder.xml b/core/org.argeo.suite.ui/OSGI-INF/eventRecorder.xml new file mode 100644 index 0000000..49badfd --- /dev/null +++ b/core/org.argeo.suite.ui/OSGI-INF/eventRecorder.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/core/org.argeo.suite.ui/OSGI-INF/termsEntryArea.xml b/core/org.argeo.suite.ui/OSGI-INF/termsEntryArea.xml new file mode 100644 index 0000000..cfcae11 --- /dev/null +++ b/core/org.argeo.suite.ui/OSGI-INF/termsEntryArea.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/core/org.argeo.suite.ui/OSGI-INF/termsLayer.xml b/core/org.argeo.suite.ui/OSGI-INF/termsLayer.xml new file mode 100644 index 0000000..f320dd9 --- /dev/null +++ b/core/org.argeo.suite.ui/OSGI-INF/termsLayer.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/core/org.argeo.suite.ui/bnd.bnd b/core/org.argeo.suite.ui/bnd.bnd index abd4ae2..7785626 100644 --- a/core/org.argeo.suite.ui/bnd.bnd +++ b/core/org.argeo.suite.ui/bnd.bnd @@ -1,10 +1,14 @@ Service-Component:\ OSGI-INF/cmsApp.xml,\ +OSGI-INF/eventRecorder.xml,\ OSGI-INF/header.xml,\ OSGI-INF/footer.xml,\ OSGI-INF/leadPane.xml,\ OSGI-INF/loginScreen.xml,\ OSGI-INF/recentItems.xml,\ +OSGI-INF/adminLeadPane.xml,\ +OSGI-INF/termsEntryArea.xml,\ +OSGI-INF/termsLayer.xml,\ OSGI-INF/dashboard.xml,\ OSGI-INF/dashboardLayer.xml diff --git a/core/org.argeo.suite.ui/config/adminLeadPane.properties b/core/org.argeo.suite.ui/config/adminLeadPane.properties new file mode 100644 index 0000000..90b9b04 --- /dev/null +++ b/core/org.argeo.suite.ui/config/adminLeadPane.properties @@ -0,0 +1 @@ +service.pid=argeo.suite.ui.adminLeadPane diff --git a/core/org.argeo.suite.ui/config/eventRecorder.properties b/core/org.argeo.suite.ui/config/eventRecorder.properties new file mode 100644 index 0000000..6503863 --- /dev/null +++ b/core/org.argeo.suite.ui/config/eventRecorder.properties @@ -0,0 +1,3 @@ +service.pid=argeo.suite.ui.eventRecorder + +event.topics=argeo/suite/* \ No newline at end of file diff --git a/core/org.argeo.suite.ui/config/termsEntryArea.properties b/core/org.argeo.suite.ui/config/termsEntryArea.properties new file mode 100644 index 0000000..cd31517 --- /dev/null +++ b/core/org.argeo.suite.ui/config/termsEntryArea.properties @@ -0,0 +1 @@ +service.pid=argeo.suite.ui.termsEntryArea diff --git a/core/org.argeo.suite.ui/config/termsLayer.properties b/core/org.argeo.suite.ui/config/termsLayer.properties new file mode 100644 index 0000000..2c0532e --- /dev/null +++ b/core/org.argeo.suite.ui/config/termsLayer.properties @@ -0,0 +1,5 @@ +service.pid=argeo.suite.ui.termsLayer +title=Terms +icon=dashboard + +entity.type=entity:terms,entity:term \ No newline at end of file diff --git a/core/org.argeo.suite.ui/src/org/argeo/suite/ui/EventRecorder.java b/core/org.argeo.suite.ui/src/org/argeo/suite/ui/EventRecorder.java new file mode 100644 index 0000000..4c928a9 --- /dev/null +++ b/core/org.argeo.suite.ui/src/org/argeo/suite/ui/EventRecorder.java @@ -0,0 +1,27 @@ +package org.argeo.suite.ui; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.osgi.service.event.Event; +import org.osgi.service.event.EventHandler; + +/** Record UI events. */ +public class EventRecorder implements EventHandler { + private final static Log log = LogFactory.getLog(EventRecorder.class); + + public void init() { + + } + + public void destroy() { + + } + + @Override + public void handleEvent(Event event) { + if (log.isTraceEnabled()) + log.trace(event); + + } + +} diff --git a/core/org.argeo.suite.ui/src/org/argeo/suite/ui/SuiteApp.java b/core/org.argeo.suite.ui/src/org/argeo/suite/ui/SuiteApp.java index 9a6208b..e499463 100644 --- a/core/org.argeo.suite.ui/src/org/argeo/suite/ui/SuiteApp.java +++ b/core/org.argeo.suite.ui/src/org/argeo/suite/ui/SuiteApp.java @@ -8,6 +8,7 @@ import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.Objects; import java.util.Set; import java.util.TreeMap; import java.util.TreeSet; @@ -65,11 +66,13 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { private String headerPid; private String footerPid; private String leadPanePid; + private String adminLeadPanePid; private String loginScreenPid; private String defaultLayerPid = "argeo.suite.ui.dashboardLayer"; private String defaultUiName = "app"; + private String adminUiName = "admin"; private String defaultThemeId = "org.argeo.suite.theme.default"; private Map> uiProvidersByPid = Collections.synchronizedMap(new HashMap<>()); @@ -107,6 +110,7 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { headerPid = pidPrefix + "header"; footerPid = pidPrefix + "footer"; leadPanePid = pidPrefix + "leadPane"; + adminLeadPanePid = pidPrefix + "adminLeadPane"; loginScreenPid = pidPrefix + "loginScreen"; } @@ -123,6 +127,7 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { public Set getUiNames() { HashSet uiNames = new HashSet<>(); uiNames.add(defaultUiName); + uiNames.add(adminUiName); return uiNames; } @@ -156,10 +161,19 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { try { Node context = null; SuiteUi ui = (SuiteUi) parent; + + String uiName = Objects.toString(ui.getParent().getData(UI_NAME_PROPERTY), null); + if (uiName == null) + throw new IllegalStateException("UI name should not be null"); CmsView cmsView = CmsView.getCmsView(parent); CmsUiProvider headerUiProvider = findUiProvider(headerPid); CmsUiProvider footerUiProvider = findUiProvider(footerPid); - CmsUiProvider leadPaneUiProvider = findUiProvider(leadPanePid); + CmsUiProvider leadPaneUiProvider; + if (adminUiName.equals(uiName)) { + leadPaneUiProvider = findUiProvider(adminLeadPanePid); + } else { + leadPaneUiProvider = findUiProvider(leadPanePid); + } Localized appTitle = null; if (headerUiProvider instanceof DefaultHeader) { diff --git a/core/org.argeo.suite.ui/src/org/argeo/suite/ui/SuiteUi.java b/core/org.argeo.suite.ui/src/org/argeo/suite/ui/SuiteUi.java index 187888e..469e36f 100644 --- a/core/org.argeo.suite.ui/src/org/argeo/suite/ui/SuiteUi.java +++ b/core/org.argeo.suite.ui/src/org/argeo/suite/ui/SuiteUi.java @@ -29,6 +29,7 @@ class SuiteUi extends Composite { private Composite footer; private Composite belowHeader; private Composite leadPane; + private Composite sidePane; private Composite dynamicArea; private Session sysSession; @@ -64,14 +65,20 @@ class SuiteUi extends Composite { CmsUiUtils.clear(belowHeader); int style = getStyle(); if (initApp) { - belowHeader.setLayout(CmsUiUtils.noSpaceGridLayout(2)); + belowHeader.setLayout(CmsUiUtils.noSpaceGridLayout(3)); if (SWT.RIGHT_TO_LEFT == (style & SWT.RIGHT_TO_LEFT)) {// arabic, hebrew, etc. + sidePane = new Composite(belowHeader, SWT.NONE); + sidePane.setLayout(CmsUiUtils.noSpaceGridLayout()); + sidePane.setLayoutData(CmsUiUtils.fillHeight()); dynamicArea = new Composite(belowHeader, SWT.NONE); leadPane = new Composite(belowHeader, SWT.NONE); } else { leadPane = new Composite(belowHeader, SWT.NONE); dynamicArea = new Composite(belowHeader, SWT.NONE); + sidePane = new Composite(belowHeader, SWT.NONE); + sidePane.setLayout(CmsUiUtils.noSpaceGridLayout()); + sidePane.setLayoutData(CmsUiUtils.fillHeight()); } leadPane.setLayoutData(CmsUiUtils.fillHeight()); leadPane.setLayout(CmsUiUtils.noSpaceGridLayout()); @@ -149,7 +156,6 @@ class SuiteUi extends Composite { } throw new IllegalArgumentException("Layer is not registered."); } - void addLayer(String id, SuiteLayer layer) { layers.put(id, layer); @@ -196,6 +202,10 @@ class SuiteUi extends Composite { return leadPane; } + Composite getSidePane() { + return sidePane; + } + Composite getBelowHeader() { return belowHeader; } diff --git a/core/org.argeo.suite.ui/src/org/argeo/suite/ui/TermsEntryArea.java b/core/org.argeo.suite.ui/src/org/argeo/suite/ui/TermsEntryArea.java new file mode 100644 index 0000000..0f7e927 --- /dev/null +++ b/core/org.argeo.suite.ui/src/org/argeo/suite/ui/TermsEntryArea.java @@ -0,0 +1,24 @@ +package org.argeo.suite.ui; + +import javax.jcr.Node; +import javax.jcr.RepositoryException; + +import org.argeo.cms.ui.CmsUiProvider; +import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Label; + +/** Entry area for managing th etypologies. */ +public class TermsEntryArea implements CmsUiProvider { + + @Override + public Control createUi(Composite parent, Node context) throws RepositoryException { + parent.setLayout(new GridLayout()); + Label lbl = new Label(parent, SWT.NONE); + lbl.setText("Typologies"); + return lbl; + } + +}