public DatasourceTreeItems(HierarchicalDatasource<E, K> datasource) { if (!(datasource instanceof CollectionDatasource.Indexed)) { throw new IllegalArgumentException("Datasource must implement " + "com.haulmont.cuba.gui.data.CollectionDatasource.Indexed"); } this.datasource = datasource; this.datasource.addStateChangeListener(this::datasourceStateChanged); this.datasource.addItemPropertyChangeListener(this::datasourceItemPropertyChanged); this.datasource.addCollectionChangeListener(this::datasourceCollectionChanged); this.datasource.addItemChangeListener(this::datasourceItemChanged); CollectionDsHelper.autoRefreshInvalid(datasource, true); if (datasource.getState() == Datasource.State.VALID) { setState(BindingState.ACTIVE); } }
@Override public void init(Map<String, Object> params) { groupsDs.refresh(); groups.expandTree(); if (params.containsKey("exclude")) { boolean excludeChildren = (boolean) params.getOrDefault("excludeChildren", true); excludeItem((Group) params.get("exclude"), excludeChildren); } if (groupsDs.size() > 1 && selectedGroup != null) { groups.setSelected(selectedGroup); } else { Collection<UUID> rootItemIds = groupsDs.getRootItemIds(); if ((rootItemIds != null) && (!rootItemIds.isEmpty())) { UUID firstId = rootItemIds.iterator().next(); Group item = groupsDs.getItem(firstId); groups.setSelected(item); } } }
protected void refreshDs() { Collection<Stencil> items = new ArrayList<>(stencilsDs.getItems()); stencilsDs.clear(); Map<Stencil, List<Stencil>> groupMap = new LinkedHashMap<>(); items.stream().filter(stencil -> stencil instanceof GroupStencil) .forEach(groupStencil -> groupMap.put(groupStencil, new ArrayList<>())); items.stream().filter(stencil -> !(stencil instanceof GroupStencil)) .forEach(stencil -> groupMap.get(stencil.getParentGroup()).add(stencil)); groupMap.values().stream().forEach(stencilsList -> stencilsList.sort((o1, o2) -> o1.getOrderNo() - o2.getOrderNo())); for (Map.Entry<Stencil, List<Stencil>> entry : groupMap.entrySet()) { Stencil groupStencil = entry.getKey(); List<Stencil> stencilsInsideGroup = entry.getValue(); stencilsDs.addItem(groupStencil); stencilsInsideGroup.stream().forEach(stencilsDs::addItem); } }
@Override public Stream<E> getChildren(E item) { Collection<K> itemIds = item == null ? datasource.getRootItemIds() : datasource.getChildren(item.getId()); return itemIds.stream() .map(id -> datasource.getItem(id)); }
protected void excludeItem(Group group, boolean excludeChildren) { if (excludeChildren) { for (UUID childId : groupsDs.getChildren(group.getId())) { excludeItem(groupsDs.getItem(childId), true); } } groupsDs.excludeItem(group); } }
groupsDs.addItemChangeListener(e -> { if (userCreateAction != null) { userCreateAction.setEnabled(e.getItem() != null); groupsDs.refresh(); groupsTree.expandTree(); final Collection<UUID> itemIds = groupsDs.getRootItemIds(); if (!itemIds.isEmpty()) { groupsTree.setSelected(groupsDs.getItem(itemIds.iterator().next()));
@Override protected boolean isApplicable() { Stencil selectedItem = stencilsDs.getItem(); if (selectedItem != null && selectedItem instanceof ServiceTaskStencil) { for (Stencil stencil : stencilsDs.getItems()) { if (selectedItem.getParentGroup().equals(stencil.getParentGroup()) && stencil.getOrderNo() < selectedItem.getOrderNo()) { return true; } } } return false; }
@Override public void actionPerform(Component component) { BandDefinition parentDefinition = treeDs.getItem(); Report report = getItem(); // Use root band as parent if no items selected if (parentDefinition == null) { parentDefinition = report.getRootBandDefinition(); } if (parentDefinition.getChildrenBandDefinitions() == null) { parentDefinition.setChildrenBandDefinitions(new ArrayList<>()); } // orderBandDefinitions(parentDefinition); BandDefinition newBandDefinition = metadata.create(BandDefinition.class); newBandDefinition.setName("newBand" + (parentDefinition.getChildrenBandDefinitions().size() + 1)); newBandDefinition.setOrientation(Orientation.HORIZONTAL); newBandDefinition.setParentBandDefinition(parentDefinition); if (parentDefinition.getChildrenBandDefinitions() != null) { newBandDefinition.setPosition(parentDefinition.getChildrenBandDefinitions().size()); } else { newBandDefinition.setPosition(0); } newBandDefinition.setReport(report); parentDefinition.getChildrenBandDefinitions().add(newBandDefinition); treeDs.addItem(newBandDefinition); treeDs.refresh(); bandTree.expandTree(); bandTree.setSelected(newBandDefinition);//let's try and see if it increases usability bandTree.focus(); }
protected void refreshConditionsDs(Tree tree, ConditionsTree conditions) { tree.getDatasource().refresh(Collections.singletonMap("conditions", conditions)); }
public void createServiceTaskStencil() { if (!validateActiveStencilFrame()) return; GroupStencil group = null; Stencil currentlySelected = stencilsDs.getItem(); if (currentlySelected != null) { if (currentlySelected instanceof GroupStencil) { group = (GroupStencil) currentlySelected; } else { group = currentlySelected.getParentGroup(); } } if (group == null) { showNotification(getMessage("selectGroup"), NotificationType.WARNING); return; } ServiceTaskStencil stencilEntity = metadata.create(ServiceTaskStencil.class); stencilEntity.setOrderNo(0); GroupStencil finalGroup = group; stencilsDs.getItems().stream() .filter(stencil -> finalGroup.equals(stencil.getParentGroup())) .max((o1, o2) -> o1.getOrderNo() - o2.getOrderNo()) .ifPresent(stencilWithMaxOrderNo -> stencilEntity.setOrderNo(stencilWithMaxOrderNo.getOrderNo() + 1)); stencilEntity.setParentGroup(group); stencilsDs.addItem(stencilEntity); stencilsTable.setSelected(stencilEntity); activeStencilFrame.requestFocus(); stencilsTable.expand(group.getId()); }
treeDs.addItemChangeListener(e -> { bandEditor.setBandDefinition(e.getItem()); bandEditor.setEnabled(e.getItem() != null); e.getItem().setParentBandDefinition(previousParent); } else { treeDs.refresh(); previousParent.getChildrenBandDefinitions().remove(e.getItem()); parent.getChildrenBandDefinitions().add(e.getItem()); treeDs.modifyItem(e.getItem()); });
@Override public E getSelectedItem() { return datasource.getItem(); }
@Override public Stream<E> getChildren(E item) { Collection<K> itemIds = item == null ? getHierarchicalDatasource().getRootItemIds() : getHierarchicalDatasource().getChildren(item.getId()); return itemIds.stream() .map(id -> datasource.getItem(id)); }
protected void initData() { groupsDs.clear(); stencilsDs.clear(); String srcStencilSetJson = stencilSetService.getStencilSet(); List<Stencil> stencils = StencilSetJsonHelper.parseStencilSetJson(srcStencilSetJson); for (Stencil stencil : stencils) { stencilsDs.addItem(stencil); if (stencil instanceof GroupStencil) { groupsDs.addItem((GroupStencil) stencil); } } }
@Override public Stream<E> getItems() { return datasource.getItems().stream(); }
@SuppressWarnings("unchecked") @Override public Collection<?> getChildren(Object itemId) { return getTreeDatasource().getChildren((K) itemId); }
private void removeChildrenCascade(Collection selected) { for (Object o : selected) { BandDefinition definition = (BandDefinition) o; BandDefinition parentDefinition = definition.getParentBandDefinition(); if (parentDefinition != null) { definition.getParentBandDefinition().getChildrenBandDefinitions().remove(definition); } if (definition.getChildrenBandDefinitions() != null) { removeChildrenCascade(new ArrayList<>(definition.getChildrenBandDefinitions())); } if (definition.getDataSets() != null) { treeDs.setItem(definition); for (DataSet dataSet : new ArrayList<>(definition.getDataSets())) { if (PersistenceHelper.isNew(dataSet)) { dataSetsDs.removeItem(dataSet); } } } treeDs.removeItem(definition); } } });
stencilsDs.addItemChangeListener(e -> { if (!treeItemChangeListenerEnabled) return;