use of com.haulmont.cuba.gui.components.Formatter in project cuba by cuba-platform.
the class EntityInspectorBrowse method createEntitiesTable.
protected void createEntitiesTable(MetaClass meta) {
if (entitiesTable != null)
tableBox.remove(entitiesTable);
if (filter != null) {
filterBox.remove(filter);
}
entitiesTable = componentsFactory.createComponent(Table.class);
entitiesTable.setFrame(frame);
if (companion != null) {
companion.setHorizontalScrollEnabled(entitiesTable, true);
}
ClientType clientType = AppConfig.getClientType();
if (clientType == ClientType.WEB) {
textSelection.setVisible(true);
textSelection.addValueChangeListener(e -> changeTableTextSelectionEnabled());
}
final SimpleDateFormat dateTimeFormat = new SimpleDateFormat(getMessage("dateTimeFormat"));
Formatter dateTimeFormatter = value -> {
if (value == null) {
return StringUtils.EMPTY;
}
return dateTimeFormat.format(value);
};
// collect properties in order to add non-system columns first
List<Table.Column> nonSystemPropertyColumns = new ArrayList<>(10);
List<Table.Column> systemPropertyColumns = new ArrayList<>(10);
for (MetaProperty metaProperty : meta.getProperties()) {
// don't show embedded, transient & multiple referred entities
if (isEmbedded(metaProperty) || metadata.getTools().isNotPersistent(metaProperty))
continue;
Range range = metaProperty.getRange();
if (range.getCardinality().isMany())
continue;
Table.Column column = new Table.Column(meta.getPropertyPath(metaProperty.getName()));
if (range.isDatatype() && range.asDatatype().getJavaClass().equals(Date.class)) {
column.setFormatter(dateTimeFormatter);
}
if (metaProperty.getJavaType().equals(String.class)) {
column.setMaxTextLength(MAX_TEXT_LENGTH);
}
if (!metadata.getTools().isSystem(metaProperty)) {
column.setCaption(getPropertyCaption(meta, metaProperty));
nonSystemPropertyColumns.add(column);
} else {
column.setCaption(metaProperty.getName());
systemPropertyColumns.add(column);
}
}
for (Table.Column column : nonSystemPropertyColumns) {
entitiesTable.addColumn(column);
}
for (Table.Column column : systemPropertyColumns) {
entitiesTable.addColumn(column);
}
if (entitiesDs != null) {
((DsContextImplementation) getDsContext()).unregister(entitiesDs);
}
entitiesDs = DsBuilder.create(getDsContext()).setId("entitiesDs").setMetaClass(meta).setView(createView(meta)).buildCollectionDatasource();
entitiesDs.setLoadDynamicAttributes(true);
entitiesDs.setSoftDeletion(!removedRecords.isChecked());
entitiesDs.setQuery(String.format("select e from %s e", meta.getName()));
entitiesTable.setDatasource(entitiesDs);
tableBox.add(entitiesTable);
entitiesTable.setSizeFull();
createButtonsPanel(entitiesTable);
RowsCount rowsCount = componentsFactory.createComponent(RowsCount.class);
rowsCount.setDatasource(entitiesDs);
entitiesTable.setRowsCount(rowsCount);
entitiesTable.setEnterPressAction(entitiesTable.getAction("edit"));
entitiesTable.setItemClickAction(entitiesTable.getAction("edit"));
entitiesTable.setMultiSelect(true);
createFilter();
}
use of com.haulmont.cuba.gui.components.Formatter in project cuba by cuba-platform.
the class EntityRestore method buildLayout.
protected void buildLayout() {
Object value = entities.getValue();
if (value != null) {
MetaClass metaClass = (MetaClass) value;
MetaProperty deleteTsMetaProperty = metaClass.getProperty("deleteTs");
if (deleteTsMetaProperty != null) {
if (entitiesTable != null) {
tablePanel.remove(entitiesTable);
}
if (filter != null) {
tablePanel.remove(filter);
}
ComponentsFactory componentsFactory = AppConfig.getFactory();
entitiesTable = componentsFactory.createComponent(Table.class);
entitiesTable.setFrame(frame);
restoreButton = componentsFactory.createComponent(Button.class);
restoreButton.setId("restore");
restoreButton.setCaption(getMessage("entityRestore.restore"));
ButtonsPanel buttonsPanel = componentsFactory.createComponent(ButtonsPanel.class);
buttonsPanel.add(restoreButton);
entitiesTable.setButtonsPanel(buttonsPanel);
RowsCount rowsCount = componentsFactory.createComponent(RowsCount.class);
entitiesTable.setRowsCount(rowsCount);
final SimpleDateFormat dateTimeFormat = new SimpleDateFormat(getMessage("dateTimeFormat"));
Formatter dateTimeFormatter = propertyValue -> {
if (propertyValue == null) {
return StringUtils.EMPTY;
}
return dateTimeFormat.format(propertyValue);
};
// collect properties in order to add non-system columns first
LinkedList<Table.Column> nonSystemPropertyColumns = new LinkedList<>();
LinkedList<Table.Column> systemPropertyColumns = new LinkedList<>();
List<MetaProperty> metaProperties = new ArrayList<>();
for (MetaProperty metaProperty : metaClass.getProperties()) {
// don't show embedded & multiple referred entities
Range range = metaProperty.getRange();
if (isEmbedded(metaProperty) || range.getCardinality().isMany() || metadataTools.isSystemLevel(metaProperty) || (range.isClass() && metadataTools.isSystemLevel(range.asClass()))) {
continue;
}
metaProperties.add(metaProperty);
Table.Column column = new Table.Column(metaClass.getPropertyPath(metaProperty.getName()));
if (!metadataTools.isSystem(metaProperty)) {
column.setCaption(getPropertyCaption(metaClass, metaProperty));
nonSystemPropertyColumns.add(column);
} else {
column.setCaption(metaProperty.getName());
systemPropertyColumns.add(column);
}
if (range.isDatatype() && range.asDatatype().getJavaClass().equals(Date.class)) {
column.setFormatter(dateTimeFormatter);
}
}
for (Table.Column column : nonSystemPropertyColumns) {
entitiesTable.addColumn(column);
}
for (Table.Column column : systemPropertyColumns) {
entitiesTable.addColumn(column);
}
DsContext dsContext = getDsContext();
if (entitiesDs != null) {
((DsContextImplementation) dsContext).unregister(entitiesDs);
}
entitiesDs = DsBuilder.create(dsContext).setId("entitiesDs").setMetaClass(metaClass).setView(buildView(metaClass, metaProperties)).buildGroupDatasource();
entitiesDs.setQuery("select e from " + metaClass.getName() + " e " + "where e.deleteTs is not null order by e.deleteTs");
entitiesDs.setSoftDeletion(false);
entitiesDs.refresh();
entitiesTable.setDatasource(entitiesDs);
String filterId = metaClass.getName().replace("$", "") + "GenericFilter";
filter = componentsFactory.createComponent(Filter.class);
filter.setId(filterId);
filter.setFrame(getFrame());
StringBuilder sb = new StringBuilder("");
for (MetaProperty property : metaClass.getProperties()) {
AnnotatedElement annotatedElement = property.getAnnotatedElement();
if (annotatedElement.getAnnotation(com.haulmont.chile.core.annotations.MetaProperty.class) != null) {
sb.append(property.getName()).append("|");
}
}
Element filterElement = Dom4j.readDocument(String.format("<filter id=\"%s\">\n" + " <properties include=\".*\" exclude=\"\"/>\n" + "</filter>", filterId)).getRootElement();
String excludedProperties = sb.toString();
if (StringUtils.isNotEmpty(excludedProperties)) {
Element properties = filterElement.element("properties");
properties.attribute("exclude").setValue(excludedProperties.substring(0, excludedProperties.lastIndexOf("|")));
}
filter.setXmlDescriptor(filterElement);
filter.setUseMaxResults(true);
filter.setDatasource(entitiesDs);
entitiesTable.setSizeFull();
entitiesTable.setMultiSelect(true);
Action restoreAction = new ItemTrackingAction("restore").withCaption(getMessage("entityRestore.restore")).withHandler(event -> showRestoreDialog());
entitiesTable.addAction(restoreAction);
restoreButton.setAction(restoreAction);
tablePanel.add(filter);
tablePanel.add(entitiesTable);
tablePanel.expand(entitiesTable, "100%", "100%");
entitiesTable.refresh();
((FilterImplementation) filter).loadFiltersAndApplyDefault();
}
}
}
use of com.haulmont.cuba.gui.components.Formatter in project cuba by cuba-platform.
the class WebAbstractTable method getFormattedValue.
protected String getFormattedValue(Column column, Object value) {
String cellText;
if (value == null) {
cellText = "";
} else {
if (value instanceof String) {
cellText = (String) value;
} else {
Formatter formatter = column.getFormatter();
if (formatter != null) {
// noinspection unchecked
cellText = formatter.format(value);
} else {
Datatype datatype = Datatypes.get(value.getClass());
if (datatype != null) {
UserSessionSource sessionSource = AppBeans.get(UserSessionSource.NAME);
cellText = datatype.format(value, sessionSource.getLocale());
} else {
cellText = value.toString();
}
}
}
}
return cellText;
}
use of com.haulmont.cuba.gui.components.Formatter in project cuba by cuba-platform.
the class WebAbstractTable method addColumn.
@Override
public void addColumn(Table.Column column) {
checkNotNullArgument(column, "Column must be non null");
Object columnId = column.getId();
component.addContainerProperty(columnId, column.getType(), null);
if (StringUtils.isNotBlank(column.getDescription())) {
component.setColumnDescription(columnId, column.getDescription());
}
if (StringUtils.isNotBlank(column.getValueDescription())) {
component.setAggregationDescription(columnId, column.getValueDescription());
} else if (column.getAggregation() != null && column.getAggregation().getType() != AggregationInfo.Type.CUSTOM) {
Messages messages = AppBeans.get(Messages.NAME);
String aggregationTypeLabel;
switch(column.getAggregation().getType()) {
case AVG:
aggregationTypeLabel = "aggreagtion.avg";
break;
case COUNT:
aggregationTypeLabel = "aggreagtion.count";
break;
case SUM:
aggregationTypeLabel = "aggreagtion.sum";
break;
case MIN:
aggregationTypeLabel = "aggreagtion.min";
break;
case MAX:
aggregationTypeLabel = "aggreagtion.max";
break;
default:
throw new IllegalArgumentException(String.format("AggregationType %s is not supported", column.getAggregation().getType().toString()));
}
component.setAggregationDescription(columnId, messages.getMainMessage(aggregationTypeLabel));
}
if (!column.isSortable()) {
component.setColumnSortable(columnId, column.isSortable());
}
columns.put(columnId, column);
columnsOrder.add(column);
if (column.getWidth() != null) {
component.setColumnWidth(columnId, column.getWidth());
}
if (column.getAlignment() != null) {
component.setColumnAlignment(columnId, WebComponentsHelper.convertColumnAlignment(column.getAlignment()));
}
final String caption = getColumnCaption(columnId, column);
setColumnHeader(columnId, caption);
column.setOwner(this);
if (column.getFormatter() == null && columnId instanceof MetaPropertyPath) {
MetaProperty metaProperty = ((MetaPropertyPath) columnId).getMetaProperty();
if (Collection.class.isAssignableFrom(metaProperty.getJavaType())) {
final Formatter collectionFormatter = new CollectionFormatter();
column.setFormatter(collectionFormatter);
}
}
if (columnId instanceof MetaPropertyPath) {
PersistenceManagerService persistenceManagerService = AppBeans.get(PersistenceManagerClient.NAME);
MetaPropertyPath propertyPath = (MetaPropertyPath) columnId;
MetaProperty metaProperty = propertyPath.getMetaProperty();
MetaClass propertyMetaClass = metadataTools.getPropertyEnclosingMetaClass(propertyPath);
String storeName = metadataTools.getStoreName(propertyMetaClass);
if (metadataTools.isLob(metaProperty) && !persistenceManagerService.supportsLobSortingAndFiltering(storeName)) {
component.setColumnSortable(columnId, false);
}
}
}
use of com.haulmont.cuba.gui.components.Formatter in project cuba by cuba-platform.
the class WebLabel method setDatasource.
@Override
public void setDatasource(Datasource datasource, String property) {
if ((datasource == null && property != null) || (datasource != null && property == null))
throw new IllegalArgumentException("Datasource and property should be either null or not null at the same time");
if (datasource == this.datasource && metaPropertyPath != null && metaPropertyPath.toString().equals(property))
return;
if (this.datasource != null)
unsubscribeDatasource();
if (datasource != null) {
// noinspection unchecked
this.datasource = datasource;
this.metaPropertyPath = resolveMetaPropertyPath(datasource.getMetaClass(), property);
this.metaProperty = metaPropertyPath.getMetaProperty();
switch(metaProperty.getType()) {
case ASSOCIATION:
component.setConverter(new StringToEntityConverter() {
@Override
public Formatter getFormatter() {
return WebLabel.this.formatter;
}
});
break;
case DATATYPE:
component.setConverter(new StringToDatatypeConverter(metaProperty.getRange().asDatatype()) {
@Override
public Formatter getFormatter() {
return WebLabel.this.formatter;
}
});
break;
case ENUM:
// noinspection unchecked
component.setConverter(new StringToEnumConverter((Class<Enum>) metaProperty.getJavaType()) {
@Override
public Formatter getFormatter() {
return WebLabel.this.formatter;
}
});
break;
default:
component.setConverter(new StringToDatatypeConverter(Datatypes.getNN(String.class)) {
@Override
public Formatter getFormatter() {
return WebLabel.this.formatter;
}
});
break;
}
itemWrapper = createDatasourceWrapper(datasource, Collections.singleton(this.metaPropertyPath));
component.setPropertyDataSource(itemWrapper.getItemProperty(this.metaPropertyPath));
}
}
Aggregations