Search in sources :

Example 11 with Table

use of io.jmix.ui.component.Table in project jmix by jmix-framework.

the class AbstractTableLoader method loadColumn.

protected Table.Column loadColumn(Table component, Element element, MetaClass metaClass) {
    Object id = loadColumnId(element, metaClass);
    Table.Column column = component.addColumn(id);
    String editable = element.attributeValue("editable");
    if (StringUtils.isNotEmpty(editable)) {
        column.setEditable(Boolean.parseBoolean(editable));
    }
    String collapsed = element.attributeValue("collapsed");
    if (StringUtils.isNotEmpty(collapsed)) {
        column.setCollapsed(Boolean.parseBoolean(collapsed));
    }
    String sortable = element.attributeValue("sortable");
    if (StringUtils.isNotEmpty(sortable)) {
        column.setSortable(Boolean.parseBoolean(sortable));
    }
    String sort = element.attributeValue("sort");
    if (StringUtils.isNotBlank(sort)) {
        loadColumnSort(column, sort);
    }
    loadCaption(column, element);
    loadDescription(column, element);
    if (column.getCaption() == null) {
        String columnCaption;
        if (column.getId() instanceof MetaPropertyPath) {
            MetaPropertyPath mpp = (MetaPropertyPath) column.getId();
            MetaProperty metaProperty = mpp.getMetaProperty();
            String propertyName = metaProperty.getName();
            MetaClass propertyMetaClass = getMetadataTools().getPropertyEnclosingMetaClass(mpp);
            columnCaption = getMessageTools().getPropertyCaption(propertyMetaClass, propertyName);
        } else {
            Class<?> declaringClass = metaClass.getJavaClass();
            String className = declaringClass.getName();
            int i = className.lastIndexOf('.');
            if (i > -1)
                className = className.substring(i + 1);
            columnCaption = getMessages().getMessage(declaringClass, className + "." + id);
        }
        column.setCaption(columnCaption);
    }
    column.setXmlDescriptor(element);
    String expandRatio = element.attributeValue("expandRatio");
    String width = loadThemeString(element.attributeValue("width"));
    if (StringUtils.isNotEmpty(expandRatio)) {
        column.setExpandRatio(Float.parseFloat(expandRatio));
        if (StringUtils.isNotEmpty(width)) {
            throw new GuiDevelopmentException("Properties 'width' and 'expandRatio' cannot be used simultaneously", context);
        }
    }
    if (StringUtils.isNotEmpty(width)) {
        if (StringUtils.endsWith(width, "px")) {
            width = StringUtils.substring(width, 0, width.length() - 2);
        }
        try {
            column.setWidth(Integer.parseInt(width));
        } catch (NumberFormatException e) {
            throw new GuiDevelopmentException("Property 'width' must contain only numeric value", context, "width", element.attributeValue("width"));
        }
    }
    String align = element.attributeValue("align");
    if (StringUtils.isNotEmpty(align)) {
        column.setAlignment(Table.ColumnAlignment.valueOf(align));
    }
    column.setFormatter(loadFormatter(element));
    loadAggregation(column, element);
    loadMaxTextLength(column, element);
    loadCaptionAsHtml(column, element);
    return column;
}
Also used : Table(io.jmix.ui.component.Table) MetaClass(io.jmix.core.metamodel.model.MetaClass) MetaPropertyPath(io.jmix.core.metamodel.model.MetaPropertyPath) GuiDevelopmentException(io.jmix.ui.GuiDevelopmentException) MetadataObject(io.jmix.core.metamodel.model.MetadataObject) MetaProperty(io.jmix.core.metamodel.model.MetaProperty)

Example 12 with Table

use of io.jmix.ui.component.Table in project jmix by jmix-framework.

the class AbstractTableLoader method loadTableData.

protected void loadTableData() {
    TableDataHolder holder = initTableDataHolder();
    if (!holder.isContainerLoaded() && holder.getMetaClass() == null) {
        throw new GuiDevelopmentException("Table doesn't have data binding", context, "Table ID", element.attributeValue("id"));
    }
    List<Table.Column> availableColumns;
    Element columnsElement = element.element("columns");
    if (columnsElement != null) {
        FetchPlan fetchPlan = holder.getFetchPlan();
        if (fetchPlan == null) {
            fetchPlan = getViewRepository().getFetchPlan(holder.getMetaClass(), FetchPlan.BASE);
        }
        availableColumns = loadColumns(resultComponent, columnsElement, holder.getMetaClass(), fetchPlan);
    } else {
        availableColumns = new ArrayList<>();
    }
    for (Table.Column column : availableColumns) {
        loadRequired(resultComponent, column);
    }
    setupDataContainer(holder);
    if (resultComponent.getItems() == null) {
        // noinspection unchecked
        resultComponent.setItems(createEmptyTableItems(holder.getMetaClass()));
    }
    for (Table.Column column : availableColumns) {
        if (column.getXmlDescriptor() != null) {
            String generatorMethod = column.getXmlDescriptor().attributeValue("generator");
            if (StringUtils.isNotEmpty(generatorMethod)) {
                // noinspection unchecked
                resultComponent.addGeneratedColumn(String.valueOf(column), applicationContext.getBean(DeclarativeColumnGenerator.class, resultComponent, generatorMethod));
            }
        }
    }
}
Also used : Table(io.jmix.ui.component.Table) DeclarativeColumnGenerator(io.jmix.ui.xml.DeclarativeColumnGenerator) Element(org.dom4j.Element) GuiDevelopmentException(io.jmix.ui.GuiDevelopmentException)

Example 13 with Table

use of io.jmix.ui.component.Table in project jmix by jmix-framework.

the class GroupTableLoader method loadColumns.

@Override
protected List<Table.Column> loadColumns(Table component, Element columnsElement, MetaClass metaClass, FetchPlan fetchPlan) {
    List<Table.Column> columns = super.loadColumns(component, columnsElement, metaClass, fetchPlan);
    Element groupElement = columnsElement.element("group");
    if (groupElement != null) {
        final List<Object> groupProperties = new ArrayList<>(columns.size());
        List<Element> columnElements = groupElement.elements("column");
        for (Element columnElement : columnElements) {
            String visible = columnElement.attributeValue("visible");
            if (StringUtils.isEmpty(visible) || Boolean.parseBoolean(visible)) {
                Object id = loadColumnId(columnElement, metaClass);
                Table.Column column = component.getColumn(id.toString());
                if (column == null) {
                    column = loadColumn(component, columnElement, metaClass);
                }
                if (column.isCollapsed()) {
                    String msg = String.format("Can't group by collapsed column: %s", column.getId());
                    throw new GuiDevelopmentException(msg, context);
                }
                if (column instanceof GroupTable.GroupColumn && ((GroupTable.GroupColumn<?>) column).isGroupAllowed()) {
                    groupProperties.add(column.getId());
                }
            }
        }
        getComponentContext().addPostInitTask((context1, window) -> {
            // enable grouping columns from descriptor if columnReorderingAllowed = false
            boolean reorderDisabled = !component.getColumnReorderingAllowed();
            component.setColumnReorderingAllowed(true);
            ((GroupTable) component).groupBy(groupProperties.toArray());
            if (reorderDisabled) {
                component.setColumnReorderingAllowed(false);
            }
        });
    }
    return columns;
}
Also used : GroupTable(io.jmix.ui.component.GroupTable) Table(io.jmix.ui.component.Table) Element(org.dom4j.Element) ArrayList(java.util.ArrayList) GroupTable(io.jmix.ui.component.GroupTable) GuiDevelopmentException(io.jmix.ui.GuiDevelopmentException)

Example 14 with Table

use of io.jmix.ui.component.Table in project jmix by jmix-framework.

the class TableEmbeddingStrategy method addAttributeColumn.

protected void addAttributeColumn(Table table, AttributeDefinition attribute) {
    MetaProperty metaProperty = attribute.getMetaProperty();
    MetaClass entityMetaClass = getEntityMetaClass(table);
    MetaPropertyPath propertyPath = new MetaPropertyPath(entityMetaClass, metaProperty);
    Table.Column column = table.addColumn(propertyPath);
    column.setDescription(getColumnDescription(attribute));
    column.setCaption(getColumnCaption(attribute));
    column.setFormatter(getColumnFormatter(attribute));
    column.setSortable(false);
    setMaxTextLength(column, attribute);
    setColumnAlignment(column, attribute);
    setColumnWidth(column, attribute);
}
Also used : Table(io.jmix.ui.component.Table) MetaClass(io.jmix.core.metamodel.model.MetaClass) MetaPropertyPath(io.jmix.core.metamodel.model.MetaPropertyPath) MetaProperty(io.jmix.core.metamodel.model.MetaProperty)

Example 15 with Table

use of io.jmix.ui.component.Table in project jmix by jmix-framework.

the class InspectorTableBuilder method build.

public Table build() {
    Table table = uiComponents.create(Table.NAME);
    // collect properties in order to add non-system columns first
    List<MetaProperty> nonSystemProperties = new ArrayList<>(10);
    List<MetaProperty> systemProperties = new ArrayList<>(10);
    for (MetaProperty metaProperty : metaClass.getProperties()) {
        // don't show embedded, transient & multiple referred entities
        if (isEmbedded(metaProperty) || !metadataTools.isJpa(metaProperty)) {
            continue;
        }
        if (isMany(metaProperty)) {
            continue;
        }
        if (metadataTools.isAnnotationPresent(metaClass.getJavaClass(), metaProperty.getName(), Convert.class)) {
            continue;
        }
        if (!metadataTools.isSystem(metaProperty)) {
            nonSystemProperties.add(metaProperty);
        } else if (withSystem) {
            systemProperties.add(metaProperty);
        }
    }
    for (MetaProperty metaProperty : nonSystemProperties) {
        addMetaPropertyToTable(table, metaProperty);
    }
    for (MetaProperty metaProperty : systemProperties) {
        addMetaPropertyToTable(table, metaProperty);
    }
    table.setSizeFull();
    if (buttonsPanelInitializer != null) {
        table.setButtonsPanel(uiComponents.create(ButtonsPanel.class));
        buttonsPanelInitializer.accept(table);
    }
    SimplePagination simplePagination = uiComponents.create(SimplePagination.NAME);
    table.setPagination(simplePagination);
    table.setItems(new ContainerTableItems(collectionContainer));
    if (table.getAction(EditAction.ID) != null) {
        table.setEnterPressAction(table.getAction(EditAction.ID));
        table.setItemClickAction(table.getAction(EditAction.ID));
    }
    table.setMultiSelect(withMultiselect);
    table.addStyleName("table-boolean-text");
    return table;
}
Also used : ContainerTableItems(io.jmix.ui.component.data.table.ContainerTableItems) Table(io.jmix.ui.component.Table) ArrayList(java.util.ArrayList) MetaProperty(io.jmix.core.metamodel.model.MetaProperty) ButtonsPanel(io.jmix.ui.component.ButtonsPanel) SimplePagination(io.jmix.ui.component.SimplePagination)

Aggregations

Table (io.jmix.ui.component.Table)16 MetaPropertyPath (io.jmix.core.metamodel.model.MetaPropertyPath)13 MetaProperty (io.jmix.core.metamodel.model.MetaProperty)5 Element (org.dom4j.Element)5 MetaClass (io.jmix.core.metamodel.model.MetaClass)4 JmixEnhancedTable (io.jmix.ui.widget.JmixEnhancedTable)4 Entity (io.jmix.core.Entity)3 GuiDevelopmentException (io.jmix.ui.GuiDevelopmentException)3 io.jmix.ui.component (io.jmix.ui.component)3 TableSettings (io.jmix.ui.settings.component.TableSettings)3 Messages (io.jmix.core.Messages)2 Metadata (io.jmix.core.Metadata)2 Action (io.jmix.ui.action.Action)2 BaseAction (io.jmix.ui.action.BaseAction)2 ScreenContext (io.jmix.ui.screen.ScreenContext)2 Strings (com.google.common.base.Strings)1 ItemTrackingAction (com.haulmont.cuba.gui.components.actions.ItemTrackingAction)1 LegacyFrame (com.haulmont.cuba.gui.screen.compatibility.LegacyFrame)1 KeyCode (com.vaadin.event.ShortcutAction.KeyCode)1 Resource (com.vaadin.server.Resource)1