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<>();
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();
- }
- }
-
}
--- /dev/null
+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();
+ }
+}
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> {
}
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();
- }
}
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();
+
}
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;
- }
-
}
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);
}
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 {
@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);
}
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;
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);
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)
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;
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);