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