newFilter.setUser(toUser); newFilter.setCode(filter.getCode()); newFilter.setName(filter.getName()); newFilter.setComponentId(filter.getComponentId()); newFilter.setXml(filter.getXml()); filtersMap.put(filter.getId(), newFilter); em.persist(newFilter);
protected void saveFilterEntity() { Boolean isDefault = filterEntity.getIsDefault(); Boolean applyDefault = filterEntity.getApplyDefault(); if (filterEntity.getFolder() == null) { CommitContext ctx = new CommitContext(Collections.singletonList(filterEntity)); Set<Entity> result = dataService.commit(ctx); FilterEntity savedFilterEntity = (FilterEntity) result.iterator().next(); filterEntities.remove(filterEntity); filterEntity = savedFilterEntity; filterEntities.add(filterEntity); filterEntity.setApplyDefault(applyDefault); filterEntity.setIsDefault(isDefault); } else { filterEntity.getFolder().setName(filterEntity.getName()); filterEntity.getFolder().setFilterXml(filterEntity.getXml()); AbstractSearchFolder folder = saveFolder(filterEntity.getFolder()); filterEntity.setFolder(folder); } saveInitialFilterState(); setFilterActionsEnabled(); updateFilterModifiedIndicator(); }
/** * Saves initial filter state. It is used for indicating of filter modifications */ protected void saveInitialFilterState() { initialFilterEntity = metadata.create(FilterEntity.class); initialFilterEntity.setName(filterEntity.getName()); initialFilterEntity.setCode(filterEntity.getCode()); initialFilterEntity.setUser(filterEntity.getUser()); initialFilterEntity.setXml(filterEntity.getXml()); }
protected boolean isFilterModified() { boolean filterPropertiesModified = !Objects.equals(initialFilterEntity.getName(), filterEntity.getName()) || !Objects.equals(initialFilterEntity.getCode(), filterEntity.getCode()) || !Objects.equals(initialFilterEntity.getUser(), filterEntity.getUser()); if (filterPropertiesModified) return true; String filterXml = filterEntity.getFolder() == null ? filterParser.getXml(conditions, Param.ValueProperty.DEFAULT_VALUE) : filterParser.getXml(conditions, Param.ValueProperty.VALUE); return !Objects.equals(filterXml, initialFilterEntity.getXml()); }
protected void initAdHocFilter() { adHocFilter = metadata.create(FilterEntity.class); String emptyXml = filterParser.getXml(new ConditionsTree(), Param.ValueProperty.VALUE); adHocFilter.setXml(emptyXml); adHocFilter.setComponentId(ComponentsHelper.getFilterComponentPath(filter)); adHocFilter.setUser(userSessionSource.getUserSession().getCurrentOrSubstitutedUser()); adHocFilter.setName(getMainMessage("filter.adHocFilter")); }
FilterEntity newFilterEntity = metadata.create(FilterEntity.class); metadata.getTools().copy(filterEntity, newFilterEntity); newFilterEntity.setCode(null); newFilterEntity.setId(UuidProvider.createUuid()); newFilterEntity.setGlobalDefault(false); if (newFilterEntity.getUser() == null && !uerCanEditGlobalFilter()) { newFilterEntity.setUser(userSessionSource.getUserSession().getCurrentOrSubstitutedUser()); String xml = filterEntity.getFolder() == null ? filterParser.getXml(conditions, Param.ValueProperty.DEFAULT_VALUE) : filterParser.getXml(conditions, Param.ValueProperty.VALUE); filterEntity = newFilterEntity; filterEntity.setName(filterName); filterEntity.setXml(xml); saveFilterEntity(); initFilterSelectComponents();
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());
@Override public void actionPerform(Component component) { if (filterEntity == null) { // todo add notification 'Filter not selected' return; } Frame frame = filter.getFrame(); String[] strings = ValuePathHelper.parse(ComponentsHelper.getFilterComponentPath(filter)); String windowAlias = strings[0]; StringBuilder lookupAlias = new StringBuilder(windowAlias); if (windowAlias.endsWith(Window.BROWSE_WINDOW_SUFFIX)) { int index = lookupAlias.lastIndexOf(Window.BROWSE_WINDOW_SUFFIX); lookupAlias.delete(index, lookupAlias.length()); lookupAlias.append(Window.LOOKUP_WINDOW_SUFFIX); } WindowManager wm = (WindowManager) ComponentsHelper.getScreenContext(frame).getScreens(); WindowInfo windowInfo = AppBeans.get(WindowConfig.class).getWindowInfo(lookupAlias.toString()); wm.openLookup(windowInfo, items -> { String filterXml = filterEntity.getXml(); filterEntity.setXml(UserSetHelper.addEntities(filterXml, items)); filterEntity.getFolder().setFilterXml(filterEntity.getXml()); filterEntity.setFolder(saveFolder(filterEntity.getFolder())); setFilterEntity(filterEntity); }, OpenType.THIS_TAB); } }
protected void collectQueryAndParametersFromFilter() { FilterParser filterParser = AppBeans.get(FilterParser.class); filterEntity.setXml(filterParser.getXml(filterEditor.getConditions(), Param.ValueProperty.DEFAULT_VALUE)); if (filterEntity.getXml() != null) { Element element = Dom4j.readDocument(filterEntity.getXml()).getRootElement(); QueryFilter queryFilter = new QueryFilter(element); conditionsTree = filterEditor.getConditionsTree(); filter = filterEditor.getFilter(); wizard.query = collectQuery(queryFilter); wizard.queryParameters = collectQueryParameters(queryFilter); } else { wizard.showNotification(wizard.getMessage("defaultQueryHasBeenSet"), Frame.NotificationType.HUMANIZED); wizard.query = filter.getDatasource().getQuery(); wizard.queryParameters = Collections.emptyList(); } wizard.setQueryButton.setCaption(wizard.getMessage("changeQuery")); }
public void commitAndClose() { if (!validateAll()) { return; } if (hasEmptyGroupConditions()) { showNotification(getMessage("filter.editor.groupConditionCannotBeEmpty"), NotificationType.WARNING); return; } if (activeConditionFrame != null) { activeConditionFrame.commit(); } filterEntity.setName(filterName.getValue()); if (availableForAllCb.getValue()) { filterEntity.setUser(null); } else { filterEntity.setUser(userSessionSource.getUserSession().getCurrentOrSubstitutedUser()); } filterEntity.setIsDefault(defaultCb.getValue()); filterEntity.setApplyDefault(applyDefaultCb.getValue()); boolean globalDefaultShouldBeChecked = !Boolean.TRUE.equals(filterEntity.getGlobalDefault()) && globalDefaultCb.getValue(); filterEntity.setGlobalDefault(globalDefaultCb.getValue()); if (globalDefaultShouldBeChecked) { checkGlobalDefaultAndCloseEditor(); } else { close(COMMIT_ACTION_ID, true); } }
@Override public void actionPerform(Component component) { if (PersistenceHelper.isNew(filterEntity) && filterEntity.getFolder() == null) { WindowInfo windowInfo = windowConfig.getWindowInfo("saveFilter"); Map<String, Object> params = new HashMap<>(); if (!getMainMessage("filter.adHocFilter").equals(filterEntity.getName())) { params.put("filterName", filterEntity.getName()); if (Window.COMMIT_ACTION_ID.equals(actionId)) { String filterName = window.getFilterName(); filterEntity.setName(filterName); filterEntity.setXml(filterParser.getXml(conditions, Param.ValueProperty.DEFAULT_VALUE)); saveFilterEntity(); initAdHocFilter(); String xml = filterEntity.getFolder() == null ? filterParser.getXml(conditions, Param.ValueProperty.DEFAULT_VALUE) : filterParser.getXml(conditions, Param.ValueProperty.VALUE); filterEntity.setXml(xml); saveFilterEntity(); initFilterSelectComponents();
folder = (metadata.create(SearchFolder.class)); if (filterEntity.getCode() == null) { String folderName = filterEntity != adHocFilter ? filterEntity.getName() : ""; folder.setName(folderName); folder.setTabName(folderName); } else { String name = messages.getMainMessage(filterEntity.getCode()); folder.setName(name); folder.setTabName(name); folder.setFilterComponentId(filterEntity.getComponentId()); folder.setFilterXml(newXml); if (!isAppFolder) { if (uerCanEditGlobalFilter()) ((SearchFolder) folder).setUser(filterEntity.getUser()); else ((SearchFolder) folder).setUser(userSessionSource.getUserSession().getCurrentOrSubstitutedUser()); commitHandler = () -> { AbstractSearchFolder savedFolder = saveFolder(folder); filterEntity.setFolder(savedFolder); }; } else { commitHandler = () -> { AbstractSearchFolder savedFolder = saveFolder(folder); filterEntity.setFolder(savedFolder); };
if (!StringUtils.isBlank(code)) { for (FilterEntity filter : filters) { if (code.equals(filter.getCode())) { return filter; if (defaultId.equals(filter.getId())) { filter.setIsDefault(true); filter.setApplyDefault(applyDefault); return filter; .filter(filterEntity -> Boolean.TRUE.equals(filterEntity.getGlobalDefault())) .findAny() .orElse(null);
public void setFilterEntity(FilterEntity filterEntity) { this.filterEntity = filterEntity; conditions = filterParser.getConditions(filter, filterEntity.getXml()); prevConditions = conditions; initialConditions = conditions.toConditionsList(); if (!suitableCondition(condition)) { String message = String.format(getMainMessage("filter.inappropriate.filter"), filterEntity.getName(), adapter.getMetaClass().getName()); if (BooleanUtils.isTrue(filterEntity.getIsSet()) || (filterEntity.getFolder() != null && BooleanUtils.isNotFalse(filterEntity.getApplyDefault()))) { apply(true);
if (!messages.getMainMessage("filter.adHocFilter").equals(filterEntity.getName())) { filterName.setValue(filterEntity.getName()); availableForAllCb.setValue(filterEntity.getUser() == null); defaultCb.setValue(filterEntity.getIsDefault()); applyDefaultCb.setValue(filterEntity.getApplyDefault()); globalDefaultCb.setValue(filterEntity.getGlobalDefault()); if (filterEntity.getUser() != null) { globalDefaultCb.setEnabled(false); if (filterEntity.getFolder() != null) { defaultCb.setVisible(false); defaultLabel.setVisible(false);
protected void setFilterActionsEnabled() { boolean isGlobal = filterEntity.getUser() == null; boolean userCanEditGlobalFilter = uerCanEditGlobalFilter(); boolean userCanEditFilters = userCanEditFilers(); boolean filterEditable = isEditable(); boolean userCanEditGlobalAppFolder = userSessionSource.getUserSession().isSpecificPermitted(GLOBAL_APP_FOLDERS_PERMISSION); boolean createdByCurrentUser = userSessionSource.getUserSession().getCurrentOrSubstitutedUser().equals(filterEntity.getUser()); boolean hasCode = !Strings.isNullOrEmpty(filterEntity.getCode()); boolean isFolder = filterEntity.getFolder() != null; boolean isSearchFolder = isFolder && (filterEntity.getFolder() instanceof SearchFolder); boolean isAppFolder = isFolder && (filterEntity.getFolder() instanceof AppFolder); boolean isSet = BooleanUtils.isTrue(filterEntity.getIsSet()); boolean isDefault = BooleanUtils.isTrue(filterEntity.getIsDefault()); boolean isAdHocFilter = filterEntity == adHocFilter;
protected void checkGlobalDefaultAndCloseEditor() { List<FilterEntity> otherDefaultFilters = dataManager.loadList(LoadContext.create(FilterEntity.class) .setQuery(LoadContext.createQuery("select f from sec$Filter f where f.globalDefault = true and " + "f.componentId = :componentId and " + "f.id <> :currentId ") .setParameter("componentId", filterEntity.getComponentId()) .setParameter("currentId", filterEntity.getId()))); if (!otherDefaultFilters.isEmpty()) { String otherFilterNamesStr = otherDefaultFilters.stream() .map(FilterEntity::getName) .collect(Collectors.joining(", ")); showOptionDialog(getMessage("filter.editor.anotherGlobalDefaultFilterFound.dialogTitle"), formatMessage("filter.editor.anotherGlobalDefaultFilterFound.dialogMessage", otherFilterNamesStr), MessageType.WARNING, new Action[]{ new DialogAction(DialogAction.Type.YES, Action.Status.PRIMARY).withHandler(e -> { otherDefaultFilters.forEach(otherDefaultFilter -> otherDefaultFilter.setGlobalDefault(false)); modifiedGlobalDefaultFilters = dataManager.commit(new CommitContext(otherDefaultFilters)); close(COMMIT_ACTION_ID, true); }), new DialogAction(DialogAction.Type.NO, Action.Status.NORMAL).withHandler(e -> { filterEntity.setGlobalDefault(false); close(COMMIT_ACTION_ID, true); }), }); } else { close(COMMIT_ACTION_ID, true); } }
if (Window.COMMIT_ACTION_ID.equals(actionId)) { conditions = window.getConditions(); filterEntity.setXml(filterParser.getXml(conditions, Param.ValueProperty.DEFAULT_VALUE)); if (filterEntity.getIsDefault()) { resetDefaultFilters();
public FilterEntity createFakeFilterEntity(String xml) { if (filterEntity != null) { return filterEntity; } Metadata metadata = AppBeans.get(Metadata.NAME); FilterEntity fakeFilterEntity = metadata.create(FilterEntity.class); fakeFilterEntity.setXml(xml); return fakeFilterEntity; } }
public String getText() { String name = filterEntity.getName(); if (StringUtils.isBlank(name)) { name = messages.getMainMessage(filterEntity.getCode()); } StringBuilder sb = new StringBuilder(name); List<Node<AbstractCondition>> visibleRootNodesWithValues = new ArrayList<>(); for (Node<AbstractCondition> rootNode : conditions.getRootNodes()) { AbstractCondition condition = rootNode.getData(); if (!condition.getHidden() && (condition.isGroup() || condition.getParam() != null && condition.getParam().getValue() != null)) visibleRootNodesWithValues.add(rootNode); } Iterator<Node<AbstractCondition>> iterator = visibleRootNodesWithValues.iterator(); if (iterator.hasNext()) sb.append(": "); while (iterator.hasNext()) { Node<AbstractCondition> rootNode = iterator.next(); recursivelyCreateConditionCaption(rootNode, sb); if (iterator.hasNext()) sb.append(", "); } return sb.toString(); }