public static String addEntities(String filterXml, Collection ids) { Document document; try { document = DocumentHelper.parseText(filterXml); } catch (DocumentException e) { throw new RuntimeException(e); } Element param = document.getRootElement().element("and").element("c").element("param"); String currentIds = param.getTextTrim(); Set<String> set = parseSet(currentIds); String listOfIds = createIdsString(set, ids); param.setText(listOfIds); return document.asXML(); } }
public static String removeEntities(String filterXml, Collection ids) { Document document; try { document = DocumentHelper.parseText(filterXml); } catch (DocumentException e) { throw new RuntimeException(e); } Element param = document.getRootElement().element("and").element("c").element("param"); String currentIds = param.getTextTrim(); Set<String> set = parseSet(currentIds); String listOfIds = removeIds(set, ids); param.setText(listOfIds); return document.asXML(); }
@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); } }
public static String createIdsString(Set entities) { return createIdsString(new HashSet<>(), entities); }
} else { String filterXml = filterEntity.getXml(); filterEntity.setXml(UserSetHelper.removeEntities(filterXml, selected)); filterEntity.getFolder().setFilterXml(filterEntity.getXml()); filterEntity.setFolder(saveFolder((filterEntity.getFolder())));
@Subscribe("createNew") protected void onCreateNewClick(Button.ClickEvent event) { QueryParser parser = QueryTransformerFactory.createParser(query); String entityAlias = parser.getEntityAlias(entityType); String filterXml = UserSetHelper.generateSetFilter(ids, entityClass, componentId, entityAlias); SearchFolder folder = metadata.create(SearchFolder.class); folder.setUser(sessionSource.getUserSession().getUser()); folder.setName(""); folder.setFilterXml(filterXml); folder.setFilterComponentId(componentPath); folder.setEntityType(entityType); folder.setIsSet(true); Runnable commitHandler = () -> { foldersPane.saveFolder(folder); foldersPane.refreshFolders(); }; FolderEditWindow window = AppFolderEditWindow.create(false, false, folder, null, commitHandler); AppUI.getCurrent().addWindow(window); window.addCloseListener(e -> close(COMMIT_ACTION_ID)); }
@Subscribe("insertBtn") protected void onInsertBtnClick(Button.ClickEvent event) { SearchFolder folder = folderSelect.getValue(); if (folder == null) { showNotification(getMessage("saveSetWindow.notSelected"), NotificationType.TRAY); return; } String filterXml = folder.getFilterXml(); folder.setFilterXml(UserSetHelper.addEntities(filterXml, ids)); foldersPane.saveFolder(folder); foldersPane.refreshFolders(); close(COMMIT_ACTION_ID, true); } }
public static String generateSetFilter(Set ids, String entityClass, String componentId, String entityAlias) { Document document = DocumentHelper.createDocument(); Element root = DocumentHelper.createElement("filter"); Element or = root.addElement("and"); Element condition = or.addElement("c"); condition.addAttribute("name", "set"); condition.addAttribute("inExpr", "true"); condition.addAttribute("hidden", "true"); condition.addAttribute("locCaption", "Set filter"); condition.addAttribute("entityAlias", entityAlias); condition.addAttribute("class", entityClass); condition.addAttribute("type", ConditionType.CUSTOM.name()); String listOfId = createIdsString(ids); String randomName = RandomStringUtils.randomAlphabetic(10); condition.addText(entityAlias + ".id in :component$" + componentId + "." + randomName); Element param = condition.addElement("param"); param.addAttribute("name", "component$" + componentId + "." + randomName); param.addAttribute("isFoldersFilterEntitiesSet", "true"); param.addText(listOfId); document.add(root); return Dom4j.writeDocument(document, true); }