Search in sources :

Example 6 with io.jmix.ui.component.table

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

the class AbstractTableExporter method getColumnValue.

protected Object getColumnValue(Table table, Table.Column column, Object instance) {
    Function<ColumnValueContext, Object> columnValueProvider = MapUtils.isNotEmpty(columnValueProviders) ? columnValueProviders.get(column.getStringId()) : null;
    if (columnValueProvider != null) {
        return columnValueProvider.apply(new ColumnValueContext(table, column, instance));
    }
    Table.Printable printable = table.getPrintable(column);
    if (printable != null) {
        return printable.getValue(instance);
    }
    Object cellValue = null;
    if (column.getId() instanceof MetaPropertyPath) {
        MetaPropertyPath propertyPath = (MetaPropertyPath) column.getId();
        Element xmlDescriptor = column.getXmlDescriptor();
        if (xmlDescriptor != null && StringUtils.isNotEmpty(xmlDescriptor.attributeValue("captionProperty"))) {
            String captionProperty = xmlDescriptor.attributeValue("captionProperty");
            cellValue = EntityValues.getValueEx(instance, captionProperty);
        } else {
            cellValue = EntityValues.getValueEx(instance, propertyPath.getPath());
        }
        if (column.getFormatter() != null)
            cellValue = column.getFormatter().apply(cellValue);
    } else if (column.getValueProvider() != null) {
        cellValue = column.getValueProvider().apply(instance);
    }
    return cellValue;
}
Also used : Table(io.jmix.ui.component.Table) Element(org.dom4j.Element) MetaPropertyPath(io.jmix.core.metamodel.model.MetaPropertyPath)

Example 7 with io.jmix.ui.component.table

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

the class ExcelExporter method createRow.

protected void createRow(Table<Object> table, List<Table.Column<Object>> columns, int startColumn, int rowNumber, Object itemId) {
    if (startColumn >= columns.size()) {
        return;
    }
    if (rowNumber > MAX_ROW_COUNT) {
        return;
    }
    Row row = sheet.createRow(rowNumber);
    if (table.getItems() != null) {
        Object instance = table.getItems().getItem(itemId);
        int level = 0;
        if (table instanceof TreeTable) {
            level = ((TreeTable<Object>) table).getLevel(itemId);
        }
        for (int c = startColumn; c < columns.size(); c++) {
            Cell cell = row.createCell(c);
            Table.Column<Object> column = columns.get(c);
            MetaPropertyPath propertyPath = null;
            if (column.getId() instanceof MetaPropertyPath) {
                propertyPath = (MetaPropertyPath) column.getId();
            }
            Object cellValue = getColumnValue(table, column, instance);
            formatValueCell(cell, cellValue, propertyPath, c, rowNumber, level, null);
        }
    }
}
Also used : Table(io.jmix.ui.component.Table) MetaPropertyPath(io.jmix.core.metamodel.model.MetaPropertyPath)

Example 8 with io.jmix.ui.component.table

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

the class ExcelExporter method createGroupRow.

protected int createGroupRow(GroupTable<Object> table, List<Table.Column<Object>> columns, int rowNumber, GroupInfo<?> groupInfo, int groupNumber) {
    GroupTableItems<Object> groupTableSource = (GroupTableItems<Object>) table.getItems();
    Row row = sheet.createRow(rowNumber);
    Map<Object, Object> aggregations = table.isAggregatable() ? table.getAggregationResults(groupInfo) : Collections.emptyMap();
    int i = 0;
    int initialGroupNumber = groupNumber;
    for (Table.Column<Object> column : columns) {
        if (i == initialGroupNumber) {
            Cell cell = row.createCell(i);
            Object val = groupInfo.getValue();
            if (val == null) {
                val = getMessage("excelExporter.empty");
            }
            Collection<?> children = groupTableSource.getGroupItemIds(groupInfo);
            if (children.isEmpty()) {
                return rowNumber;
            }
            Integer groupChildCount = null;
            if (table.isShowItemsCountForGroup()) {
                groupChildCount = children.size();
            }
            Object captionValue = val;
            Element xmlDescriptor = column.getXmlDescriptor();
            if (xmlDescriptor != null && StringUtils.isNotEmpty(xmlDescriptor.attributeValue("captionProperty"))) {
                String captionProperty = xmlDescriptor.attributeValue("captionProperty");
                Object itemId = children.iterator().next();
                Object item = groupTableSource.getItemNN(itemId);
                captionValue = EntityValues.getValue(item, captionProperty);
            }
            GroupTable.GroupCellValueFormatter<Object> groupCellValueFormatter = table.getGroupCellValueFormatter();
            if (groupCellValueFormatter != null) {
                // disable separate "(N)" printing
                groupChildCount = null;
                List<Object> groupItems = groupTableSource.getGroupItemIds(groupInfo).stream().map(groupTableSource::getItem).collect(Collectors.toList());
                GroupTable.GroupCellContext<Object> cellContext = new GroupTable.GroupCellContext<>(groupInfo, captionValue, metadataTools.format(captionValue), groupItems);
                captionValue = groupCellValueFormatter.format(cellContext);
            }
            MetaPropertyPath columnId = (MetaPropertyPath) column.getId();
            formatValueCell(cell, captionValue, columnId, groupNumber++, rowNumber, 0, groupChildCount);
        } else {
            AggregationInfo agr = column.getAggregation();
            if (agr != null) {
                Object key = agr.getPropertyPath() != null ? agr.getPropertyPath() : column.getId();
                Object aggregationResult = aggregations.get(key);
                if (aggregationResult != null) {
                    Cell cell = row.createCell(i);
                    formatValueCell(cell, aggregationResult, null, i, rowNumber, 0, null);
                }
            }
        }
        i++;
    }
    int oldRowNumber = rowNumber;
    List<GroupInfo> children = groupTableSource.getChildren(groupInfo);
    if (children.size() > 0) {
        for (GroupInfo child : children) {
            rowNumber = createGroupRow(table, columns, ++rowNumber, child, groupNumber);
        }
    } else {
        Collection<?> itemIds = groupTableSource.getGroupItemIds(groupInfo);
        for (Object itemId : itemIds) {
            createRow(table, columns, groupNumber, ++rowNumber, itemId);
        }
    }
    if (checkIsRowNumberExceed(rowNumber)) {
        sheet.groupRow(oldRowNumber + 1, MAX_ROW_COUNT);
    } else {
        sheet.groupRow(oldRowNumber + 1, rowNumber);
    }
    return rowNumber;
}
Also used : Table(io.jmix.ui.component.Table) Element(org.dom4j.Element) MetaPropertyPath(io.jmix.core.metamodel.model.MetaPropertyPath) XSSFRichTextString(org.apache.poi.xssf.usermodel.XSSFRichTextString) HSSFRichTextString(org.apache.poi.hssf.usermodel.HSSFRichTextString)

Example 9 with io.jmix.ui.component.table

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

the class FilterDelegateImpl method fillTableActions.

/**
 * Adds actions of 'Entities Set' functionality to Table component
 */
protected void fillTableActions() {
    Table table;
    if ((applyTo != null) && (Table.class.isAssignableFrom(applyTo.getClass()))) {
        table = (Table) applyTo;
    } else {
        return;
    }
    ButtonsPanel buttons = table.getButtonsPanel();
    if (buttons == null) {
        // in lookup windows, there is no button panel
        return;
    }
    io.jmix.ui.component.Button addToSetBtn = (Button) buttons.getComponent("addToSetBtn");
    io.jmix.ui.component.Button addToCurSetBtn = (Button) buttons.getComponent("addToCurSetBtn");
    io.jmix.ui.component.Button removeFromCurSetBtn = (Button) buttons.getComponent("removeFromCurSetBtn");
    Action addToSet = table.getAction("filter.addToSet");
    Action addToCurrSet = table.getAction("filter.addToCurSet");
    Action removeFromCurrSet = table.getAction("filter.removeFromCurSet");
    if (addToSet != null)
        table.removeAction(addToSet);
    if (addToSetBtn != null)
        addToSetBtn.setVisible(false);
    if (addToCurrSet != null) {
        table.removeAction(addToCurrSet);
    }
    if (addToCurSetBtn != null) {
        addToCurSetBtn.setVisible(false);
    }
    if (removeFromCurrSet != null) {
        table.removeAction(removeFromCurrSet);
    }
    if (removeFromCurSetBtn != null) {
        removeFromCurSetBtn.setVisible(false);
    }
    if ((filterEntity != null) && (BooleanUtils.isTrue(filterEntity.getIsSet()))) {
        addToSet = table.getAction("addToSet");
        if (addToSet != null) {
            addToSet.setVisible(false);
        }
        addToCurrSet = new AddToCurrSetAction();
        if (addToCurSetBtn == null) {
            addToCurSetBtn = uiComponents.create(Button.class);
            addToCurSetBtn.setId("addToCurSetBtn");
            addToCurSetBtn.setCaption(getMainMessage("filter.addToCurSet"));
            buttons.add(addToCurSetBtn);
        } else {
            addToCurSetBtn.setVisible(true);
        }
        if (StringUtils.isEmpty(addToCurSetBtn.getIcon())) {
            addToCurSetBtn.setIconFromSet(JmixIcon.BARS);
        }
        addToCurSetBtn.setAction(addToCurrSet);
        table.addAction(addToCurrSet);
        removeFromCurrSet = new RemoveFromSetAction(table);
        if (removeFromCurSetBtn == null) {
            removeFromCurSetBtn = uiComponents.create(Button.class);
            removeFromCurSetBtn.setId("removeFromCurSetBtn");
            removeFromCurSetBtn.setCaption(getMainMessage("filter.removeFromCurSet"));
            buttons.add(removeFromCurSetBtn);
        } else {
            removeFromCurSetBtn.setVisible(true);
        }
        if (StringUtils.isEmpty(removeFromCurSetBtn.getIcon())) {
            removeFromCurSetBtn.setIconFromSet(JmixIcon.MINUS_CIRCLE);
        }
        removeFromCurSetBtn.setAction(removeFromCurrSet);
        table.addAction(removeFromCurrSet);
    } else if (filter.getFrame().getFrameOwner() instanceof LegacyFrame) {
        addToSet = new AddToSetAction(table);
        if (addToSetBtn == null) {
            addToSetBtn = uiComponents.create(Button.class);
            addToSetBtn.setId("addToSetBtn");
            addToSetBtn.setCaption(getMainMessage("filter.addToSet"));
            buttons.add(addToSetBtn);
        } else {
            addToSetBtn.setVisible(true);
        }
        if (StringUtils.isEmpty(addToSetBtn.getIcon())) {
            addToSetBtn.setIconFromSet(JmixIcon.PLUS_CIRCLE);
        }
        addToSetBtn.setAction(addToSet);
        table.addAction(addToSet);
    }
}
Also used : io.jmix.ui.component(io.jmix.ui.component) Action(io.jmix.ui.action.Action) BaseAction(io.jmix.ui.action.BaseAction) AbstractAction(io.jmix.ui.action.AbstractAction) StandardCloseAction(io.jmix.ui.screen.StandardCloseAction) DialogAction(io.jmix.ui.action.DialogAction) ItemTrackingAction(com.haulmont.cuba.gui.components.actions.ItemTrackingAction) Table(io.jmix.ui.component.Table) PopupButton(io.jmix.ui.component.PopupButton) LegacyFrame(com.haulmont.cuba.gui.screen.compatibility.LegacyFrame) ButtonsPanel(io.jmix.ui.component.ButtonsPanel)

Example 10 with io.jmix.ui.component.table

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

the class JsonExporter method exportTable.

@Override
public void exportTable(Downloader downloader, Table<Object> table, ExportMode exportMode) {
    Collection<Object> items = getItems(table, exportMode);
    Gson gson = createGsonForSerialization();
    JsonArray jsonElements = new JsonArray();
    for (Object entity : items) {
        JsonObject jsonObject = new JsonObject();
        for (Table.Column<Object> column : table.getColumns()) {
            if (column.getId() instanceof MetaPropertyPath) {
                MetaPropertyPath propertyPath = (MetaPropertyPath) column.getId();
                Object columnValue = getColumnValue(table, column, entity);
                if (columnValue != null) {
                    jsonObject.add(propertyPath.getMetaProperty().getName(), new JsonPrimitive(formatValue(columnValue, (MetaPropertyPath) column.getId())));
                } else {
                    jsonObject.add(propertyPath.getMetaProperty().getName(), JsonNull.INSTANCE);
                }
            }
        }
        jsonElements.add(jsonObject);
    }
    downloader.download(new ByteArrayDataProvider(gson.toJson(jsonElements).getBytes(), uiProperties.getSaveExportedByteArrayDataThresholdBytes(), coreProperties.getTempDir()), getFileName(table) + ".json", DownloadFormat.JSON);
}
Also used : ByteArrayDataProvider(io.jmix.ui.download.ByteArrayDataProvider) Table(io.jmix.ui.component.Table) MetaPropertyPath(io.jmix.core.metamodel.model.MetaPropertyPath)

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