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;
}
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);
}
}
}
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;
}
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);
}
}
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);
}
Aggregations