/** * @param selection a splittable which this function assumes is a list of {@link SelectionItem}s */ public void setSelection(Splittable selection) { selectionItemsEditor.setSuppressEvent(true); AppTemplateAutoBeanFactory factory = GWT.create(AppTemplateAutoBeanFactory.class); SelectionItemList siList = AutoBeanCodex.decode( factory, SelectionItemList.class, "{\"selectionItems\": " + selection.getPayload() + "}") .as(); List<SelectionItem> items = siList.getSelectionItems(); tree.setSelection(items); selectionItemsEditor.setSuppressEvent(false); }
@Override public void setValue(Argument value) { if ((value == null) || !value.getType().equals(ArgumentType.TreeSelection)) { return; } List<SelectionItem> toBeRemoved = AutoBeanUtils.getAutoBean(value).getTag(SelectionItem.TO_BE_REMOVED); if (toBeRemoved != null) { selectionItemsEditor.setSuppressEvent(true); for (SelectionItem si : toBeRemoved) { tree.getStore().remove(si); } selectionItemsEditor.setSuppressEvent(false); } AutoBeanUtils.getAutoBean(value).setTag(SelectionItem.TO_BE_REMOVED, null); this.model = value; boolean restoreSelectionsFromDefaultValue = (value.getDefaultValue() != null) && (value.getDefaultValue().isIndexed()) && (value.getDefaultValue().size() > 0); tree.setRestoreCheckedSelectionFromTree(!restoreSelectionsFromDefaultValue); selectionItemsEditor.setValue(value.getSelectionItems()); if (restoreSelectionsFromDefaultValue) { /* * JDS If we're not in editing mode, and there is a list of items in the defaultValue field. * This should only happen when an app is being re-launched from the Analysis window, and * there were values selected for the Tree. */ Splittable defValCopy = value.getDefaultValue().deepCopy(); setSelection(defValCopy); /* * JDS Clear default value so future selections can be made (since they are made through * value.getSelectionItems() and not value.defaultValue() */ value.setDefaultValue(null); } }
@Override public void flush() { selectionItemsEditor.flush(); }