Improve UX data parts
authorMathieu <mbaudier@argeo.org>
Sun, 13 Nov 2022 07:10:34 +0000 (08:10 +0100)
committerMathieu <mbaudier@argeo.org>
Sun, 13 Nov 2022 07:10:34 +0000 (08:10 +0100)
org.argeo.cms.ux/src/org/argeo/cms/ux/acr/ContentHierarchicalPart.java
org.argeo.cms.ux/src/org/argeo/cms/ux/widgets/AbstractColumnsPart.java [new file with mode: 0644]
org.argeo.cms.ux/src/org/argeo/cms/ux/widgets/AbstractHierarchicalPart.java
org.argeo.cms.ux/src/org/argeo/cms/ux/widgets/AbstractTabularPart.java
org.argeo.cms.ux/src/org/argeo/cms/ux/widgets/ColumnsPart.java
org.argeo.cms.ux/src/org/argeo/cms/ux/widgets/HierarchicalPart.java
org.argeo.cms.ux/src/org/argeo/cms/ux/widgets/TabularPart.java
org.argeo.cms/src/org/argeo/cms/acr/directory/RoleContent.java
swt/org.argeo.cms.swt/src/org/argeo/cms/swt/app/AcrContentTreeView.java
swt/org.argeo.cms.swt/src/org/argeo/cms/swt/widgets/SwtTableView.java
swt/org.argeo.cms.swt/src/org/argeo/cms/swt/widgets/SwtTreeView.java

index 43a4034159034cc8565e59aad94d54d42ab6b5d6..baaa25238ebb0f39a33871cbb67ab99270ddb8ea 100644 (file)
@@ -5,11 +5,10 @@ import java.util.Iterator;
 import java.util.List;
 
 import org.argeo.api.acr.Content;
-import org.argeo.api.acr.NamespaceUtils;
-import org.argeo.cms.ux.widgets.AbstractDataPart;
+import org.argeo.cms.ux.widgets.AbstractHierarchicalPart;
 import org.argeo.cms.ux.widgets.HierarchicalPart;
 
-public class ContentHierarchicalPart extends AbstractDataPart<Content, Content> implements HierarchicalPart<Content> {
+public class ContentHierarchicalPart extends AbstractHierarchicalPart<Content> implements HierarchicalPart<Content> {
        @Override
        public List<Content> getChildren(Content content) {
                List<Content> res = new ArrayList<>();
@@ -27,14 +26,4 @@ public class ContentHierarchicalPart extends AbstractDataPart<Content, Content>
        protected boolean isLeaf(Content content) {
                return false;
        }
-
-       @Override
-       public String getText(Content model) {
-               try {
-                       return NamespaceUtils.toPrefixedName(model.getName());
-               } catch (IllegalStateException e) {
-                       return model.getName().toString();
-               }
-       }
-
 }
diff --git a/org.argeo.cms.ux/src/org/argeo/cms/ux/widgets/AbstractColumnsPart.java b/org.argeo.cms.ux/src/org/argeo/cms/ux/widgets/AbstractColumnsPart.java
new file mode 100644 (file)
index 0000000..143b9cc
--- /dev/null
@@ -0,0 +1,26 @@
+package org.argeo.cms.ux.widgets;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public abstract class AbstractColumnsPart<INPUT, TYPE> extends AbstractDataPart<INPUT, TYPE> implements ColumnsPart<INPUT, TYPE> {
+
+       private List<Column<TYPE>> columns = new ArrayList<>();
+
+       @Override
+       public Column<TYPE> getColumn(int index) {
+               if (index >= columns.size())
+                       throw new IllegalArgumentException("There a only " + columns.size());
+               return columns.get(index);
+       }
+
+       @Override
+       public void addColumn(Column<TYPE> column) {
+               columns.add(column);
+       }
+
+       @Override
+       public int getColumnCount() {
+               return columns.size();
+       }
+}
index dd1854d3922be89816b61cb6ef9e952825281e05..ccdcf4ea568977dc3227c93c9ec83267fddfbd48 100644 (file)
@@ -1,5 +1,5 @@
 package org.argeo.cms.ux.widgets;
 
-public abstract class AbstractHierarchicalPart<T> extends AbstractDataPart<T, T> implements HierarchicalPart<T> {
+public abstract class AbstractHierarchicalPart<T> extends AbstractColumnsPart<T, T> implements HierarchicalPart<T> {
 
 }
index 400f9c8853da679032182ada53fd0ec55ff1ba84..835bc7ec72f8f18707844bf97eedc0f04b724410 100644 (file)
@@ -1,26 +1,6 @@
 package org.argeo.cms.ux.widgets;
 
-import java.util.ArrayList;
-import java.util.List;
+public abstract class AbstractTabularPart<INPUT, TYPE> extends AbstractColumnsPart<INPUT, TYPE>
+               implements TabularPart<INPUT, TYPE> {
 
-public abstract class AbstractTabularPart<INPUT, T> extends AbstractDataPart<INPUT, T> implements TabularPart<INPUT, T> {
-
-       private List<Column<T>> columns = new ArrayList<>();
-
-       @Override
-       public Column<T> getColumn(int index) {
-               if (index >= columns.size())
-                       throw new IllegalArgumentException("There a only " + columns.size());
-               return columns.get(index);
-       }
-
-       @Override
-       public void addColumn(Column<T> column) {
-               columns.add(column);
-       }
-
-       @Override
-       public int getColumnCount() {
-               return columns.size();
-       }
 }
index a60401c1fc0d0ceb8923a3d5797d3a8c86f21981..2aaeb49de46200a66fb757b8969b02f41345a0b6 100644 (file)
@@ -1,5 +1,12 @@
 package org.argeo.cms.ux.widgets;
 
+/** A presentation of data in columns. */
 public interface ColumnsPart<INPUT, TYPE> extends DataPart<INPUT, TYPE> {
 
+       Column<TYPE> getColumn(int index);
+
+       void addColumn(Column<TYPE> column);
+
+       int getColumnCount();
+
 }
index 1f42c6aa5fb384840e846e557226c4762dd13ec7..8f0e798453673b9a1497a7390af41a43a845b33d 100644 (file)
@@ -2,16 +2,7 @@ package org.argeo.cms.ux.widgets;
 
 import java.util.List;
 
-import org.argeo.api.cms.ux.CmsIcon;
-
 /** A hierarchical representation of data. */
 public interface HierarchicalPart<T> extends ColumnsPart<T, T> {
        List<T> getChildren(T parent);
-
-       String getText(T model);
-
-       default CmsIcon getIcon(T model) {
-               return null;
-       }
-
 }
index 2ed077c42778226d01c82521cca5a68946c21554..01b4d6b6b664d60b72f37c18056953e67691d2f0 100644 (file)
@@ -1,14 +1,8 @@
 package org.argeo.cms.ux.widgets;
 
 /** A tabular presentation of data. */
-public interface TabularPart<INPUT, T> extends ColumnsPart<INPUT, T> {
+public interface TabularPart<INPUT, TYPE> extends ColumnsPart<INPUT, TYPE> {
        int getItemCount();
 
-       T getData(int row);
-
-       Column<T> getColumn(int index);
-
-       void addColumn(Column<T> column);
-
-       int getColumnCount();
+       TYPE getData(int row);
 }
index 356e272c90adeae7db1d120f238be7f83d239f06..64feb1d6735955310ee458a00c50a53adbe842c8 100644 (file)
@@ -8,9 +8,7 @@ import org.argeo.api.acr.Content;
 import org.argeo.api.acr.ContentName;
 import org.argeo.api.acr.spi.ProvidedSession;
 import org.argeo.api.cms.directory.UserDirectory;
-import org.osgi.service.useradmin.Group;
 import org.osgi.service.useradmin.Role;
-import org.osgi.service.useradmin.User;
 
 class RoleContent extends AbstractDirectoryContent {
 
@@ -43,11 +41,7 @@ class RoleContent extends AbstractDirectoryContent {
        @SuppressWarnings("unchecked")
        @Override
        public <A> A adapt(Class<A> clss) {
-               if (clss.equals(Group.class))
-                       return (A) role;
-               else if (clss.equals(User.class))
-                       return (A) role;
-               else if (clss.equals(Role.class))
+               if (Role.class.isAssignableFrom(clss))
                        return (A) role;
                return super.adapt(clss);
        }
index e66549216db6bd0ac95ba3cf2cb9a11d08ef30bc..a3d533e2fb879b3d43bf222fd42736c1a94d0205 100644 (file)
@@ -10,8 +10,8 @@ import javax.xml.namespace.QName;
 import org.argeo.api.acr.Content;
 import org.argeo.api.acr.NamespaceUtils;
 import org.argeo.cms.swt.CmsSwtUtils;
-import org.argeo.cms.swt.widgets.SwtTreeView;
 import org.argeo.cms.swt.widgets.SwtTableView;
+import org.argeo.cms.swt.widgets.SwtTreeView;
 import org.argeo.cms.ux.acr.ContentHierarchicalPart;
 import org.argeo.cms.ux.widgets.Column;
 import org.argeo.cms.ux.widgets.DefaultTabularPart;
@@ -37,6 +37,13 @@ public class AcrContentTreeView extends Composite {
                split.setLayoutData(CmsSwtUtils.fillAll());
 
                ContentHierarchicalPart contentPart = new ContentHierarchicalPart();
+               contentPart.addColumn((model) -> {
+                       try {
+                               return NamespaceUtils.toPrefixedName(model.getName());
+                       } catch (IllegalStateException e) {
+                               return model.getName().toString();
+                       }
+               });
                contentPart.setInput(rootContent);
 
                new SwtTreeView<>(split, getStyle(), contentPart);
index a58a5a47856aebe5350b47f9879227b3f1255103..3291980f650d15b3eaea58d36fa4550abd122774 100644 (file)
@@ -60,9 +60,9 @@ public class SwtTableView<INPUT, T> extends AbstractSwtView<INPUT, T> {
 
        protected void refreshItem(TableItem item) {
                int row = getTable().indexOf(item);
+               T data = tabularPart.getData(row);
                for (int i = 0; i < tabularPart.getColumnCount(); i++) {
                        Column<T> column = tabularPart.getColumn(i);
-                       T data = tabularPart.getData(row);
                        item.setData(data);
                        String text = data != null ? column.getText(data) : "";
                        if (text != null)
index 8fd1368b0853150e874fa4e47813ce30837f4b63..778ed41387459453c5625eb899e27b5f7e80f9b6 100644 (file)
@@ -6,6 +6,7 @@ import org.argeo.api.cms.CmsLog;
 import org.argeo.api.cms.ux.CmsIcon;
 import org.argeo.cms.swt.CmsSwtTheme;
 import org.argeo.cms.swt.CmsSwtUtils;
+import org.argeo.cms.ux.widgets.Column;
 import org.argeo.cms.ux.widgets.HierarchicalPart;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.graphics.Image;
@@ -76,15 +77,18 @@ public class SwtTreeView<T> extends AbstractSwtView<T, T> {
        protected TreeItem addTreeItem(TreeItem parent, T data) {
                TreeItem item = parent == null ? new TreeItem(tree, SWT.NONE) : new TreeItem(parent, SWT.NONE);
                item.setData(data);
-               String txt = hierarchicalPart.getText(data);
-               if (txt != null)
-                       item.setText(hierarchicalPart.getText(data));
-               CmsIcon icon = hierarchicalPart.getIcon(data);
-               if (icon != null) {
-                       Image image = theme.getSmallIcon(icon);
-                       item.setImage(image);
+               for (int i = 0; i < hierarchicalPart.getColumnCount(); i++) {
+                       Column<T> column = hierarchicalPart.getColumn(i);
+                       String txt = column.getText(data);
+                       if (txt != null)
+                               item.setText(txt);
+                       CmsIcon icon = column.getIcon(data);
+                       if (icon != null) {
+                               Image image = theme.getSmallIcon(icon);
+                               item.setImage(image);
+                       }
                }
-               // TODO optimize
+               // TODO optimise
                List<T> grandChildren = hierarchicalPart.getChildren(data);
                if (grandChildren.size() != 0)
                        new TreeItem(item, SWT.NONE);