use of io.jmix.core.Entity in project jmix by jmix-framework.
the class BulkEditorFieldFactory method createEntityField.
protected Field createEntityField(Datasource datasource, MetaProperty property) {
Lookup lookup = property.getAnnotatedElement().getAnnotation(Lookup.class);
if (lookup != null && lookup.type() == LookupType.DROPDOWN) {
DataComponents dataComponents = AppBeans.get(DataComponents.class);
Metadata metadata = AppBeans.get(Metadata.class);
MetaClass metaClass = metadata.getClassNN(property.getJavaType());
CollectionContainer<Entity> container = dataComponents.createCollectionContainer(metaClass.getJavaClass());
CollectionLoader<Entity> loader = dataComponents.createCollectionLoader();
loader.setQuery("select e from " + metaClass.getName() + " e");
loader.setFetchPlan(FetchPlan.INSTANCE_NAME);
loader.setContainer(container);
loader.load();
LookupPickerField<Entity> lookupPickerField = componentsFactory.create(LookupPickerField.NAME);
lookupPickerField.setDatasource(datasource, property.getName());
lookupPickerField.setOptions(new ContainerOptions(container));
GuiActionSupport guiActionSupport = AppBeans.get(GuiActionSupport.NAME);
guiActionSupport.createActionsByMetaAnnotations(lookupPickerField);
return lookupPickerField;
}
PickerField<Entity> pickerField = componentsFactory.create(PickerField.NAME);
pickerField.setDatasource(datasource, property.getName());
GuiActionSupport guiActionSupport = AppBeans.get(GuiActionSupport.NAME);
guiActionSupport.createActionById(pickerField, PickerField.ActionType.LOOKUP.getId());
if (lookup == null || !guiActionSupport.createActionsByMetaAnnotations(pickerField)) {
guiActionSupport.createActionById(pickerField, PickerField.ActionType.CLEAR.getId());
}
return pickerField;
}
use of io.jmix.core.Entity in project jmix by jmix-framework.
the class BulkEditorWindow method init.
@Override
public void init(Map<String, Object> params) {
super.init(params);
checkNotNullArgument(metaClass);
checkNotNullArgument(selected);
if (StringUtils.isNotBlank(exclude)) {
excludeRegex = Pattern.compile(exclude);
}
for (ManagedField managedField : getManagedFields(metaClass)) {
managedFields.put(managedField.getFqn(), managedField);
}
View view = createView(metaClass);
items = loadItems(view);
dsContext = new DsContextImpl(dataSupplier);
dsContext.setFrameContext(getDsContext().getFrameContext());
setDsContext(dsContext);
datasource = new DatasourceImpl<>();
datasource.setup(dsContext, dataSupplier, metaClass.getName() + "Ds", metaClass, view);
((DatasourceImpl) datasource).valid();
dsContext.register(datasource);
createNestedEmbeddedDatasources(datasource, metaClass, "");
Entity instance = (Entity) metadata.create(metaClass);
// TODO: gg, dynamic attributes
/*if (loadDynamicAttributes && (instance instanceof BaseGenericIdEntity)) {
((BaseGenericIdEntity) instance).setDynamicAttributes(new HashMap<>());
}*/
createEmbeddedFields(metaClass, instance, "");
datasource.setItem(instance);
datasource.setAllowCommit(false);
createDataComponents();
}
use of io.jmix.core.Entity in project jmix by jmix-framework.
the class BulkEditorWindow method commitBulkChanges.
protected void commitBulkChanges() {
List<String> fields = new ArrayList<>();
for (Map.Entry<String, Field> fieldEntry : dataFields.entrySet()) {
Field field = fieldEntry.getValue();
if (isFieldChanged(field)) {
fields.add(managedFields.get(fieldEntry.getKey()).getFqn());
}
}
for (Map.Entry<String, Field> fieldEntry : dataFields.entrySet()) {
Field field = fieldEntry.getValue();
if (!field.isEnabled()) {
for (Entity item : items) {
ensureEmbeddedPropertyCreated(item, fieldEntry.getKey());
EntityValues.setValueEx(item, fieldEntry.getKey(), null);
}
} else if (isFieldChanged(field)) {
for (Entity item : items) {
ensureEmbeddedPropertyCreated(item, fieldEntry.getKey());
EntityValues.setValueEx(item, fieldEntry.getKey(), field.getValue());
}
}
}
Set<Entity> committed = dataSupplier.commit(new CommitContext(items));
Logger logger = LoggerFactory.getLogger(BulkEditorWindow.class);
logger.info("Applied bulk editing for {} entries of {}. Changed properties: {}", committed.size(), metaClass, StringUtils.join(fields, ", "));
showNotification(messages.formatMessage("io.jmix.ui.app.bulk", "bulk.successMessage", committed.size()), NotificationType.HUMANIZED);
close(COMMIT_ACTION_ID);
}
use of io.jmix.core.Entity in project jmix by jmix-framework.
the class SingleEntityDataLoader method loadData.
@Override
public List<Map<String, Object>> loadData(ReportQuery dataSet, BandData parentBand, Map<String, Object> params) {
Map<String, Object> additionalParams = dataSet.getAdditionalParams();
String paramName = (String) additionalParams.get(DataSet.ENTITY_PARAM_NAME);
if (StringUtils.isBlank(paramName)) {
paramName = DEFAULT_ENTITY_PARAM_NAME;
}
Object entity = params.get(paramName);
if (entity == null) {
throw new IllegalStateException(String.format("Input parameters do not contain '%s' parameter", paramName));
}
dataSet = ProxyWrapper.unwrap(dataSet);
entity = reloadEntityByDataSetFetchPlan(dataSet, entity);
params.put(paramName, entity);
EntityMap result;
if (dataSet instanceof DataSet) {
result = new EntityMap((Entity) entity, getFetchPlan((Entity) entity, (DataSet) dataSet), beanFactory);
} else {
result = new EntityMap((Entity) entity, beanFactory);
}
return Collections.singletonList(result);
}
use of io.jmix.core.Entity in project jmix by jmix-framework.
the class ExcelExporter method exportDataGrid.
@Override
public void exportDataGrid(Downloader downloader, DataGrid<Object> dataGrid, ExportMode exportMode) {
if (downloader == null) {
throw new IllegalArgumentException("Downloader is null");
}
createWorkbookWithSheet();
createFonts();
createFormats();
List<DataGrid.Column<Object>> columns = dataGrid.getColumns();
int r = 0;
Row row = sheet.createRow(r);
createAutoColumnSizers(columns.size());
float maxHeight = sheet.getDefaultRowHeightInPoints();
CellStyle headerCellStyle = wb.createCellStyle();
headerCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
for (DataGrid.Column column : columns) {
String caption = column.getCaption();
int countOfReturnSymbols = StringUtils.countMatches(caption, "\n");
if (countOfReturnSymbols > 0) {
maxHeight = Math.max(maxHeight, (countOfReturnSymbols + 1) * sheet.getDefaultRowHeightInPoints());
headerCellStyle.setWrapText(true);
}
}
row.setHeightInPoints(maxHeight);
for (int c = 0; c < columns.size(); c++) {
DataGrid.Column column = columns.get(c);
String caption = column.getCaption();
Cell cell = row.createCell(c);
RichTextString richTextString = createStringCellValue(caption);
richTextString.applyFont(boldFont);
cell.setCellValue(richTextString);
ExcelAutoColumnSizer sizer = new ExcelAutoColumnSizer();
sizer.notifyCellValue(caption, boldFont);
sizers[c] = sizer;
cell.setCellStyle(headerCellStyle);
}
EntityDataGridItems<Object> dataGridSource = (EntityDataGridItems) dataGrid.getItems();
if (dataGridSource == null) {
throw new IllegalStateException("DataGrid is not bound to data");
}
if (exportMode == ExportMode.SELECTED && dataGrid.getSelected().size() > 0) {
Set<Object> selected = dataGrid.getSelected();
List<Object> ordered = dataGridSource.getItems().filter(selected::contains).collect(Collectors.toList());
for (Object item : ordered) {
if (checkIsRowNumberExceed(r)) {
break;
}
createDataGridRow(dataGrid, columns, 0, ++r, Id.of(item).getValue());
}
} else {
if (dataGrid instanceof TreeDataGrid) {
TreeDataGrid treeDataGrid = (TreeDataGrid) dataGrid;
TreeDataGridItems<Object> treeDataGridItems = (TreeDataGridItems) dataGridSource;
List<Object> items = treeDataGridItems.getChildren(null).collect(Collectors.toList());
for (Object item : items) {
if (checkIsRowNumberExceed(r)) {
break;
}
r = createDataGridHierarchicalRow(treeDataGrid, treeDataGridItems, columns, 0, r, item);
}
} else {
for (Object itemId : dataGridSource.getItems().map(entity -> Id.of(entity).getValue()).collect(Collectors.toList())) {
if (checkIsRowNumberExceed(r)) {
break;
}
createDataGridRow(dataGrid, columns, 0, ++r, itemId);
}
}
}
for (int c = 0; c < columns.size(); c++) {
sheet.setColumnWidth(c, sizers[c].getWidth() * COL_WIDTH_MAGIC);
}
ByteArrayOutputStream out = new ByteArrayOutputStream();
try {
wb.write(out);
} catch (IOException e) {
throw new RuntimeException("Unable to write document", e);
}
ByteArrayDataProvider dataProvider = new ByteArrayDataProvider(out.toByteArray(), uiProperties.getSaveExportedByteArrayDataThresholdBytes(), coreProperties.getTempDir());
switch(exportFormat) {
case XLSX:
downloader.download(dataProvider, getFileName(dataGrid) + "." + XLSX.getFileExt(), XLSX);
break;
case XLS:
downloader.download(dataProvider, getFileName(dataGrid) + "." + XLS.getFileExt(), XLS);
break;
}
}
Aggregations