use of org.openforis.collect.designer.component.SchemaTreeModel.SchemaTreeNode in project collect by openforis.
the class SchemaVM method openSelectParentNodePopupForReparent.
private void openSelectParentNodePopupForReparent(final NodeDefinition selectedItem) {
UIOptions uiOptions = survey.getUIOptions();
final Set<UITab> assignableTabs = new HashSet<UITab>(uiOptions.getAssignableTabs(editedNodeParentEntity, selectedItem));
final EntityDefinition selectedItemParentDefn = selectedItem.getParentEntityDefinition();
UITab inheritedTab = uiOptions.getAssignedTab(selectedItemParentDefn);
assignableTabs.add(inheritedTab);
Predicate<SurveyObject> includedNodePredicate = new Predicate<SurveyObject>() {
public boolean evaluate(SurveyObject item) {
if (item instanceof UITab) {
return true;
} else if (item instanceof NodeDefinition) {
if (item instanceof EntityDefinition) {
EntityDefinition entityItemDef = (EntityDefinition) item;
if (entityItemDef.isVirtual()) {
return false;
} else if (selectedItem instanceof EntityDefinition && entityItemDef.isDescendantOf((EntityDefinition) selectedItem)) {
return false;
} else {
return true;
}
} else {
return false;
}
} else {
return false;
}
}
};
Predicate<SurveyObject> disabledPredicate = new Predicate<SurveyObject>() {
@Override
public boolean evaluate(SurveyObject item) {
if (item instanceof UITab) {
return survey.isPublished() && !assignableTabs.contains(item);
} else if (item instanceof NodeDefinition) {
NodeDefinition itemNodeDef = (NodeDefinition) item;
if (itemNodeDef.equals(selectedItemParentDefn)) {
return false;
} else if (selectedItem instanceof EntityDefinition && itemNodeDef.isDescendantOf((EntityDefinition) selectedItem)) {
// is descendant of the selected item
return true;
} else if (!survey.isPublished() && itemNodeDef instanceof EntityDefinition && !itemNodeDef.equals(selectedItem)) {
// published
return false;
} else {
return true;
}
} else {
// do not allow selecting non-node definitions
return true;
}
}
};
String nodeName = editedNode instanceof NodeDefinition ? ((NodeDefinition) editedNode).getName() : "";
UITab assignedTab = survey.getUIOptions().getAssignedTab((NodeDefinition) editedNode);
String assignedTabLabel = assignedTab.getLabel(currentLanguageCode);
String title = Labels.getLabel("survey.schema.move_node_popup_title", new String[] { getNodeTypeHeaderLabel(), nodeName, assignedTabLabel });
// calculate parent item (tab or entity)
SchemaTreeNode treeNode = treeModel.getTreeNode(selectedItem);
TreeNode<SchemaNodeData> parentTreeNode = treeNode.getParent();
SurveyObject parentItem = parentTreeNode.getData().getSurveyObject();
final Window popup = SchemaTreePopUpVM.openPopup(title, selectedRootEntity, null, includedNodePredicate, false, true, disabledPredicate, null, parentItem, false);
popup.addEventListener(SchemaTreePopUpVM.NODE_SELECTED_EVENT_NAME, new EventListener<NodeSelectedEvent>() {
public void onEvent(NodeSelectedEvent event) throws Exception {
SurveyObject selectedParent = event.getSelectedItem();
changeEditedNodeParent(selectedParent, false);
refreshNodeForm();
closePopUp(popup);
}
});
}
use of org.openforis.collect.designer.component.SchemaTreeModel.SchemaTreeNode in project collect by openforis.
the class SurveyObjectTreeModelCreator method createNode.
public AbstractNode<SchemaNodeData> createNode(SchemaNodeData data, boolean defineEmptyChildrenForLeaves) {
SchemaTreeNode node = null;
SurveyObject surveyObject = data.getSurveyObject();
if (includeNodePredicate == null || includeNodePredicate.evaluate(surveyObject)) {
List<AbstractNode<SchemaNodeData>> childNodes = createChildNodes(surveyObject);
// create result
if (childNodes == null) {
node = new SchemaTreeNode(data);
} else if (childNodes.isEmpty()) {
if (includeEmptyNodes) {
if (defineEmptyChildrenForLeaves) {
node = new SchemaTreeNode(data, Collections.<AbstractNode<SchemaNodeData>>emptyList());
} else {
node = new SchemaTreeNode(data);
}
} else {
node = null;
}
} else {
node = new SchemaTreeNode(data, (List<AbstractNode<SchemaNodeData>>) childNodes);
}
}
if (node != null && disabledNodePredicate != null) {
if (disabledNodePredicate.evaluate(surveyObject)) {
node.setDisabled(true);
}
}
return node;
}
use of org.openforis.collect.designer.component.SchemaTreeModel.SchemaTreeNode in project collect by openforis.
the class UITreeModelCreator method createRootNode.
private SchemaTreeNode createRootNode(EntityDefinition rootEntity) {
SchemaNodeData data = new SchemaNodeData(rootEntity, rootEntity.getName(), false, false);
SchemaTreeNode treeNode = (SchemaTreeNode) createNode(data, false);
return treeNode;
}
use of org.openforis.collect.designer.component.SchemaTreeModel.SchemaTreeNode in project collect by openforis.
the class UITreeModelCreator method createFirstLevelNodes.
@Override
protected List<AbstractNode<SchemaNodeData>> createFirstLevelNodes(EntityDefinition rootEntity) {
List<AbstractNode<SchemaNodeData>> firstLevelTreeNodes = new ArrayList<AbstractNode<SchemaNodeData>>();
if (includeRootEntity) {
SchemaTreeNode node = createRootNode(rootEntity);
if (node != null) {
firstLevelTreeNodes.add(node);
}
} else {
CollectSurvey survey = (CollectSurvey) rootEntity.getSurvey();
UIOptions uiOptions = survey.getUIOptions();
UITabSet tabSet = uiOptions.getAssignedRootTabSet(rootEntity);
for (UITab tab : tabSet.getTabs()) {
SchemaTreeNode node = createNode(tab);
if (node != null) {
firstLevelTreeNodes.add(node);
}
}
}
return firstLevelTreeNodes;
}
use of org.openforis.collect.designer.component.SchemaTreeModel.SchemaTreeNode in project collect by openforis.
the class UITreeModelCreator method createNodes.
protected List<SchemaTreeNode> createNodes(UITab parentTab, List<? extends NodeDefinition> nodes) {
List<SchemaTreeNode> result = null;
if (nodes != null) {
result = new ArrayList<SchemaTreeNode>();
for (NodeDefinition nodeDefn : nodes) {
if (includeNodePredicate == null || includeNodePredicate.evaluate(nodeDefn)) {
CollectSurvey survey = (CollectSurvey) nodeDefn.getSurvey();
UIOptions uiOptions = survey.getUIOptions();
UITab assignedTab = uiOptions.getAssignedTab(nodeDefn);
if (assignedTab == parentTab && (version == null || version.isApplicable(nodeDefn))) {
SchemaNodeData data = new SchemaNodeData(nodeDefn, nodeDefn.getName(), false, false);
SchemaTreeNode treeNode = (SchemaTreeNode) createNode(data, false);
if (treeNode != null) {
result.add(treeNode);
}
}
}
}
}
return result;
}
Aggregations