Search in sources :

Example 1 with DsContextImplementation

use of com.haulmont.cuba.gui.data.impl.DsContextImplementation 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();
}
Also used : StringUtils(org.apache.commons.lang.StringUtils) java.util(java.util) ReferenceImportBehaviour(com.haulmont.cuba.core.app.importexport.ReferenceImportBehaviour) DsBuilder(com.haulmont.cuba.gui.data.DsBuilder) LoggerFactory(org.slf4j.LoggerFactory) ParamsMap(com.haulmont.bali.util.ParamsMap) CubaIcon(com.haulmont.cuba.gui.icons.CubaIcon) SimpleDateFormat(java.text.SimpleDateFormat) Icons(com.haulmont.cuba.gui.icons.Icons) MetaClass(com.haulmont.chile.core.model.MetaClass) com.haulmont.cuba.core.global(com.haulmont.cuba.core.global) Inject(javax.inject.Inject) JSON(com.haulmont.cuba.gui.export.ExportFormat.JSON) ComponentsFactory(com.haulmont.cuba.gui.xml.layout.ComponentsFactory) Files(com.google.common.io.Files) DsContextImplementation(com.haulmont.cuba.gui.data.impl.DsContextImplementation) ExportFormat(com.haulmont.cuba.gui.export.ExportFormat) com.haulmont.cuba.gui.components(com.haulmont.cuba.gui.components) com.haulmont.cuba.gui.components.actions(com.haulmont.cuba.gui.components.actions) OpenType(com.haulmont.cuba.gui.WindowManager.OpenType) Logger(org.slf4j.Logger) Range(com.haulmont.chile.core.model.Range) Formatter(com.haulmont.cuba.gui.components.Formatter) MetaProperty(com.haulmont.chile.core.model.MetaProperty) EntityImportExportService(com.haulmont.cuba.core.app.importexport.EntityImportExportService) ExportDisplay(com.haulmont.cuba.gui.export.ExportDisplay) IOException(java.io.IOException) FileInputStream(java.io.FileInputStream) File(java.io.File) StandardCharsets(java.nio.charset.StandardCharsets) EntityImportView(com.haulmont.cuba.core.app.importexport.EntityImportView) ZIP(com.haulmont.cuba.gui.export.ExportFormat.ZIP) IOUtils(org.apache.commons.io.IOUtils) EntityOp(com.haulmont.cuba.security.entity.EntityOp) ByteArrayDataProvider(com.haulmont.cuba.gui.export.ByteArrayDataProvider) AppConfig(com.haulmont.cuba.gui.AppConfig) FileUploadingAPI(com.haulmont.cuba.gui.upload.FileUploadingAPI) ClientConfig(com.haulmont.cuba.client.ClientConfig) CollectionDatasource(com.haulmont.cuba.gui.data.CollectionDatasource) Session(com.haulmont.chile.core.model.Session) Entity(com.haulmont.cuba.core.entity.Entity) InputStream(java.io.InputStream) DsContextImplementation(com.haulmont.cuba.gui.data.impl.DsContextImplementation) Formatter(com.haulmont.cuba.gui.components.Formatter) Range(com.haulmont.chile.core.model.Range) MetaProperty(com.haulmont.chile.core.model.MetaProperty) SimpleDateFormat(java.text.SimpleDateFormat)

Example 2 with DsContextImplementation

use of com.haulmont.cuba.gui.data.impl.DsContextImplementation 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();
        }
    }
}
Also used : SoftDelete(com.haulmont.cuba.core.entity.SoftDelete) StringUtils(org.apache.commons.lang.StringUtils) java.util(java.util) Dom4j(com.haulmont.bali.util.Dom4j) DsBuilder(com.haulmont.cuba.gui.data.DsBuilder) EntityRestoreService(com.haulmont.cuba.core.app.EntityRestoreService) SimpleDateFormat(java.text.SimpleDateFormat) EnableRestore(com.haulmont.cuba.core.entity.annotation.EnableRestore) MetaClass(com.haulmont.chile.core.model.MetaClass) Inject(javax.inject.Inject) MetadataTools(com.haulmont.cuba.core.global.MetadataTools) ComponentsFactory(com.haulmont.cuba.gui.xml.layout.ComponentsFactory) DsContextImplementation(com.haulmont.cuba.gui.data.impl.DsContextImplementation) GroupDatasource(com.haulmont.cuba.gui.data.GroupDatasource) ViewRepository(com.haulmont.cuba.core.global.ViewRepository) com.haulmont.cuba.gui.components(com.haulmont.cuba.gui.components) ItemTrackingAction(com.haulmont.cuba.gui.components.actions.ItemTrackingAction) DsContext(com.haulmont.cuba.gui.data.DsContext) Range(com.haulmont.chile.core.model.Range) Formatter(com.haulmont.cuba.gui.components.Formatter) MetaProperty(com.haulmont.chile.core.model.MetaProperty) Status(com.haulmont.cuba.gui.components.Action.Status) Type(com.haulmont.cuba.gui.components.DialogAction.Type) View(com.haulmont.cuba.core.global.View) AppConfig(com.haulmont.cuba.gui.AppConfig) Element(org.dom4j.Element) Entity(com.haulmont.cuba.core.entity.Entity) MessageTools(com.haulmont.cuba.core.global.MessageTools) AnnotatedElement(java.lang.reflect.AnnotatedElement) ItemTrackingAction(com.haulmont.cuba.gui.components.actions.ItemTrackingAction) DsContext(com.haulmont.cuba.gui.data.DsContext) Formatter(com.haulmont.cuba.gui.components.Formatter) ItemTrackingAction(com.haulmont.cuba.gui.components.actions.ItemTrackingAction) Element(org.dom4j.Element) AnnotatedElement(java.lang.reflect.AnnotatedElement) AnnotatedElement(java.lang.reflect.AnnotatedElement) ComponentsFactory(com.haulmont.cuba.gui.xml.layout.ComponentsFactory) MetaProperty(com.haulmont.chile.core.model.MetaProperty) DsContextImplementation(com.haulmont.cuba.gui.data.impl.DsContextImplementation) Range(com.haulmont.chile.core.model.Range) MetaClass(com.haulmont.chile.core.model.MetaClass) SimpleDateFormat(java.text.SimpleDateFormat)

Example 3 with DsContextImplementation

use of com.haulmont.cuba.gui.data.impl.DsContextImplementation in project cuba by cuba-platform.

the class WindowManager method afterShowWindow.

protected void afterShowWindow(Window window) {
    if (!WindowParams.DISABLE_APPLY_SETTINGS.getBool(window.getContext())) {
        window.applySettings(getSettingsImpl(window.getId()));
    }
    if (!WindowParams.DISABLE_RESUME_SUSPENDED.getBool(window.getContext())) {
        ((DsContextImplementation) window.getDsContext()).resumeSuspended();
    }
    if (window instanceof AbstractWindow) {
        AbstractWindow abstractWindow = (AbstractWindow) window;
        if (abstractWindow.isAttributeAccessControlEnabled()) {
            AttributeAccessSupport attributeAccessSupport = AppBeans.get(AttributeAccessSupport.NAME);
            attributeAccessSupport.applyAttributeAccess(abstractWindow, false);
        }
        StopWatch readyStopWatch = new Slf4JStopWatch(window.getId() + "#" + LifeCycle.READY, LoggerFactory.getLogger(UIPerformanceLogger.class));
        abstractWindow.ready();
        readyStopWatch.stop();
    }
}
Also used : Slf4JStopWatch(org.perf4j.slf4j.Slf4JStopWatch) DsContextImplementation(com.haulmont.cuba.gui.data.impl.DsContextImplementation) UIPerformanceLogger(com.haulmont.cuba.gui.logging.UIPerformanceLogger) Slf4JStopWatch(org.perf4j.slf4j.Slf4JStopWatch) StopWatch(org.perf4j.StopWatch)

Example 4 with DsContextImplementation

use of com.haulmont.cuba.gui.data.impl.DsContextImplementation in project cuba by cuba-platform.

the class FilteringLookupAction method afterLookupWindowOpened.

@Override
protected void afterLookupWindowOpened(Window lookupWindow) {
    boolean found = ComponentsHelper.walkComponents(lookupWindow, screenComponent -> {
        if (!(screenComponent instanceof Filter)) {
            return false;
        } else {
            MetaClass actualMetaClass = ((Filter) screenComponent).getDatasource().getMetaClass();
            MetaClass propertyMetaClass = extendedEntities.getEffectiveMetaClass(pickerField.getMetaClass());
            if (Objects.equals(actualMetaClass, propertyMetaClass)) {
                applyFilter(((Filter) screenComponent));
                return true;
            }
            return false;
        }
    });
    if (!found) {
        target.getFrame().showNotification(messages.getMainMessage("dynamicAttributes.entity.filter.filterNotFound"), Frame.NotificationType.WARNING);
    }
    ((DsContextImplementation) lookupWindow.getDsContext()).resumeSuspended();
}
Also used : DsContextImplementation(com.haulmont.cuba.gui.data.impl.DsContextImplementation) MetaClass(com.haulmont.chile.core.model.MetaClass)

Example 5 with DsContextImplementation

use of com.haulmont.cuba.gui.data.impl.DsContextImplementation in project cuba by cuba-platform.

the class FoldersBean method openFolder.

@Override
public void openFolder(AbstractSearchFolder folder) {
    if (StringUtils.isBlank(folder.getFilterComponentId())) {
        log.warn("Unable to open folder: componentId is blank");
        return;
    }
    String[] strings = ValuePathHelper.parse(folder.getFilterComponentId());
    String screenId = strings[0];
    WindowConfig windowConfig = AppBeans.get(WindowConfig.NAME);
    WindowInfo windowInfo = windowConfig.getWindowInfo(screenId);
    Map<String, Object> params = new HashMap<>();
    WindowParams.DISABLE_AUTO_REFRESH.set(params, true);
    WindowParams.DISABLE_RESUME_SUSPENDED.set(params, true);
    if (!StringUtils.isBlank(folder.getTabName())) {
        WindowParams.DESCRIPTION.set(params, messages.getMainMessage(folder.getTabName()));
    } else {
        WindowParams.DESCRIPTION.set(params, messages.getMainMessage(folder.getName()));
    }
    WindowParams.FOLDER_ID.set(params, folder.getId());
    com.haulmont.cuba.gui.components.Window window = App.getInstance().getWindowManager().openWindow(windowInfo, OpenType.NEW_TAB, params);
    Filter filterComponent = null;
    if (strings.length > 1) {
        String filterComponentId = StringUtils.join(Arrays.copyOfRange(strings, 1, strings.length), '.');
        filterComponent = (Filter) window.getComponentNN(filterComponentId);
        FilterEntity filterEntity = metadata.create(FilterEntity.class);
        filterEntity.setFolder(folder);
        filterEntity.setComponentId(folder.getFilterComponentId());
        filterEntity.setName(folder.getLocName());
        filterEntity.setXml(folder.getFilterXml());
        filterEntity.setApplyDefault(BooleanUtils.isNotFalse(folder.getApplyDefault()));
        if (folder instanceof SearchFolder) {
            filterEntity.setIsSet(((SearchFolder) folder).getIsSet());
        }
        filterComponent.setFilterEntity(filterEntity);
        filterComponent.switchFilterMode(FilterDelegate.FilterMode.GENERIC_MODE);
    }
    if (filterComponent != null && folder instanceof SearchFolder) {
        final SearchFolder searchFolder = (SearchFolder) folder;
        if (searchFolder.getPresentation() != null) {
            ((com.haulmont.cuba.gui.components.Component.HasPresentations) filterComponent.getApplyTo()).applyPresentation(searchFolder.getPresentation().getId());
        }
    }
    ((DsContextImplementation) window.getDsContext()).resumeSuspended();
}
Also used : DsContextImplementation(com.haulmont.cuba.gui.data.impl.DsContextImplementation) HashMap(java.util.HashMap) FilterEntity(com.haulmont.cuba.security.entity.FilterEntity) AbstractSearchFolder(com.haulmont.cuba.core.entity.AbstractSearchFolder) SearchFolder(com.haulmont.cuba.security.entity.SearchFolder) WindowInfo(com.haulmont.cuba.gui.config.WindowInfo) WindowConfig(com.haulmont.cuba.gui.config.WindowConfig) Filter(com.haulmont.cuba.gui.components.Filter)

Aggregations

DsContextImplementation (com.haulmont.cuba.gui.data.impl.DsContextImplementation)7 MetaClass (com.haulmont.chile.core.model.MetaClass)4 MetaProperty (com.haulmont.chile.core.model.MetaProperty)2 Range (com.haulmont.chile.core.model.Range)2 Entity (com.haulmont.cuba.core.entity.Entity)2 AppConfig (com.haulmont.cuba.gui.AppConfig)2 com.haulmont.cuba.gui.components (com.haulmont.cuba.gui.components)2 Filter (com.haulmont.cuba.gui.components.Filter)2 Formatter (com.haulmont.cuba.gui.components.Formatter)2 Window (com.haulmont.cuba.gui.components.Window)2 DsBuilder (com.haulmont.cuba.gui.data.DsBuilder)2 ComponentsFactory (com.haulmont.cuba.gui.xml.layout.ComponentsFactory)2 SimpleDateFormat (java.text.SimpleDateFormat)2 java.util (java.util)2 Inject (javax.inject.Inject)2 StringUtils (org.apache.commons.lang.StringUtils)2 Files (com.google.common.io.Files)1 Dom4j (com.haulmont.bali.util.Dom4j)1 ParamsMap (com.haulmont.bali.util.ParamsMap)1 Session (com.haulmont.chile.core.model.Session)1