Search in sources :

Example 86 with Entity

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;
}
Also used : Entity(io.jmix.core.Entity) ContainerOptions(io.jmix.ui.component.data.options.ContainerOptions) MetaClass(io.jmix.core.metamodel.model.MetaClass) Metadata(com.haulmont.cuba.core.global.Metadata) Lookup(com.haulmont.cuba.core.entity.annotation.Lookup) GuiActionSupport(com.haulmont.cuba.gui.components.actions.GuiActionSupport) DataComponents(io.jmix.ui.model.DataComponents)

Example 87 with Entity

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();
}
Also used : Entity(io.jmix.core.Entity) DatasourceImpl(com.haulmont.cuba.gui.data.impl.DatasourceImpl) EmbeddedDatasourceImpl(com.haulmont.cuba.gui.data.impl.EmbeddedDatasourceImpl) DsContextImpl(com.haulmont.cuba.gui.data.impl.DsContextImpl)

Example 88 with Entity

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);
}
Also used : Entity(io.jmix.core.Entity) Logger(org.slf4j.Logger)

Example 89 with Entity

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);
}
Also used : Entity(io.jmix.core.Entity) EntityMap(io.jmix.reports.app.EntityMap) DataSet(io.jmix.reports.entity.DataSet)

Example 90 with Entity

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;
    }
}
Also used : Id(io.jmix.core.Id) java.util(java.util) ByteArrayOutputStream(java.io.ByteArrayOutputStream) MetaPropertyPath(io.jmix.core.metamodel.model.MetaPropertyPath) EntityDataGridItems(io.jmix.ui.component.data.meta.EntityDataGridItems) ByteArrayDataProvider(io.jmix.ui.download.ByteArrayDataProvider) BooleanUtils(org.apache.commons.lang3.BooleanUtils) ExportMode(io.jmix.uiexport.exporter.ExportMode) StringUtils(org.apache.commons.lang3.StringUtils) Function(java.util.function.Function) XLS(io.jmix.ui.download.DownloadFormat.XLS) EntityValues(io.jmix.core.entity.EntityValues) Scope(org.springframework.context.annotation.Scope) Notifications(io.jmix.ui.Notifications) org.apache.poi.ss.usermodel(org.apache.poi.ss.usermodel) XSSFWorkbook(org.apache.poi.xssf.usermodel.XSSFWorkbook) io.jmix.ui.component.data(io.jmix.ui.component.data) InstanceContainer(io.jmix.ui.model.InstanceContainer) XLSX(io.jmix.ui.download.DownloadFormat.XLSX) XSSFRichTextString(org.apache.poi.xssf.usermodel.XSSFRichTextString) BeanDefinition(org.springframework.beans.factory.config.BeanDefinition) Range(io.jmix.core.metamodel.model.Range) ParseException(java.text.ParseException) Nullable(javax.annotation.Nullable) AbstractTableExporter(io.jmix.uiexport.exporter.AbstractTableExporter) IOException(java.io.IOException) Datatype(io.jmix.core.metamodel.datatype.Datatype) Collectors(java.util.stream.Collectors) Table(io.jmix.ui.component.Table) ExportAction(io.jmix.uiexport.action.ExportAction) HSSFRichTextString(org.apache.poi.hssf.usermodel.HSSFRichTextString) Component(org.springframework.stereotype.Component) Entity(io.jmix.core.Entity) Downloader(io.jmix.ui.download.Downloader) Element(org.dom4j.Element) MetaProperty(io.jmix.core.metamodel.model.MetaProperty) HSSFWorkbook(org.apache.poi.hssf.usermodel.HSSFWorkbook) io.jmix.ui.component(io.jmix.ui.component) EntityDataGridItems(io.jmix.ui.component.data.meta.EntityDataGridItems) XSSFRichTextString(org.apache.poi.xssf.usermodel.XSSFRichTextString) HSSFRichTextString(org.apache.poi.hssf.usermodel.HSSFRichTextString) ByteArrayDataProvider(io.jmix.ui.download.ByteArrayDataProvider) ByteArrayOutputStream(java.io.ByteArrayOutputStream) IOException(java.io.IOException) XSSFRichTextString(org.apache.poi.xssf.usermodel.XSSFRichTextString) HSSFRichTextString(org.apache.poi.hssf.usermodel.HSSFRichTextString)

Aggregations

Entity (io.jmix.core.Entity)94 MetaClass (io.jmix.core.metamodel.model.MetaClass)20 MetaProperty (io.jmix.core.metamodel.model.MetaProperty)18 CommitContext (com.haulmont.cuba.core.global.CommitContext)10 CoreTest (com.haulmont.cuba.core.testsupport.CoreTest)10 CollectionDatasource (com.haulmont.cuba.gui.data.CollectionDatasource)10 Test (org.junit.jupiter.api.Test)10 Server (com.haulmont.cuba.core.model.common.Server)8 Datasource (com.haulmont.cuba.gui.data.Datasource)8 Collectors (java.util.stream.Collectors)8 Autowired (org.springframework.beans.factory.annotation.Autowired)8 FetchPlan (io.jmix.core.FetchPlan)7 Logger (org.slf4j.Logger)7 Metadata (io.jmix.core.Metadata)6 MetadataTools (io.jmix.core.MetadataTools)6 EntityValues (io.jmix.core.entity.EntityValues)6 java.util (java.util)6 ArrayList (java.util.ArrayList)6 Nullable (javax.annotation.Nullable)6 LoggerFactory (org.slf4j.LoggerFactory)6