Example usage for com.google.gwt.xml.client Node insertBefore

List of usage examples for com.google.gwt.xml.client Node insertBefore

Introduction

In this page you can find the example usage for com.google.gwt.xml.client Node insertBefore.

Prototype

Node insertBefore(Node newChild, Node refChild);

Source Link

Document

This method inserts before newChild.

Usage

From source file:org.gk.ui.client.com.tree.xml.gkTreeHandler.java

License:Open Source License

public gkTreeHandler(TreePanel tree, final Operation op) {
    new TreePanelDragSource(tree) {
        /**/*  w ww. j  a  va  2s . co m*/
         * ?drop???TreeNode?path
         */
        @Override
        protected void onDragDrop(DNDEvent event) {
            event.setOperation(op);
        }
    };
    target = new TreePanelDropTarget(tree) {
        @Override
        protected void onDragFail(DNDEvent event) {
            // treetraceMouseOver
            tree.setTrackMouseOver(true);
            super.onDragFail(event);
        }

        @Override
        protected void showFeedback(DNDEvent event) {
            final TreeNode overItem = tree.findNode(event.getTarget());
            if (overItem == null) {
                clearStyles(event);
            }

            // :?????
            if (overItem != null
                    && event.getDropTarget().getComponent() == event.getDragSource().getComponent()) {

                List<TreeModel> list = event.getData();
                ModelData overModel = overItem.getModel();
                for (int i = 0; i < list.size(); i++) {
                    ModelData sel = (ModelData) list.get(i).get("model");
                    if (overModel == sel) {
                        clearStyles(event);
                        return;
                    }

                    List<ModelData> children = tree.getStore().getChildren(sel, true);

                    if (children.contains(overItem.getModel())) {
                        clearStyles(event);
                        return;
                    }
                }
            }
            // ================================

            boolean append = feedback == Feedback.APPEND || feedback == Feedback.BOTH;
            boolean insert = feedback == Feedback.INSERT || feedback == Feedback.BOTH;

            if (overItem == null) {
                handleAppend(event, overItem);
            } else if (insert) {
                handleInsert(event, overItem);
            } else if ((!overItem.isLeaf() || isAllowDropOnLeaf()) && append) {
                handleAppend(event, overItem);
            } else {
                if (activeItem != null) {
                    tree.getView().onDropChange(activeItem, false);
                }
                status = -1;
                activeItem = null;
                appendItem = null;
                Insert.get().hide();
                event.getStatus().setStatus(false);
            }

            // 
            if (activeItem == null) {
                event.getStatus().setStatus(false);
            }
        }

        @Override
        protected void onDragEnter(DNDEvent event) {
            removeDuplicateNode(event);

            super.onDragEnter(event);
            super.clearStyles(event);// ? IE ????
        }

        private void removeDuplicateNode(DNDEvent event) {
            List<TreeStoreModel> modelList = (List<TreeStoreModel>) event.getData();

            // 1. Parent Node
            Set<String> parentNodeSet = new HashSet<String>();
            for (TreeStoreModel model : modelList) {
                Node node = model.getModel().get("node");
                if (!model.isLeaf()) {
                    parentNodeSet.add(node.toString());
                }
            }

            // 2.?? Leaf Node (Leaf's Parent in parentNodeSet)
            Iterator<TreeStoreModel> modelIt = modelList.iterator();
            while (modelIt.hasNext()) {
                TreeStoreModel model = modelIt.next();

                Node node = model.getModel().get("node");
                if (model.isLeaf()) {
                    if (node.getParentNode() != null
                            && parentNodeSet.contains(node.getParentNode().toString())) {
                        modelIt.remove();
                    }
                } else {
                    parentNodeSet.add(node.toString());
                }
            }

            // 3.?
            event.getStatus()
                    .update(Format.substitute(event.getDragSource().getStatusText(), modelList.size()));
        }

        /**
         * ?
         */
        @Override
        protected void onDragDrop(DNDEvent e) {
            TreePanel srcTree = (TreePanel) e.getDragSource().getComponent();
            if (activeItem == null) {
                super.onDragDrop(e);
                return;
            }
            List treeStoreModelList = (List) e.getData();

            // ?XML Node
            Node dropNode = activeItem.getModel().get("node");
            Node dropParentNode = dropNode.getParentNode();

            // state=1,activeItem????Node
            // state=0,?TreeNode
            // ?xml doc????.???????
            if (dropParentNode != null && dropParentNode.toString().equals(dropNode.toString())) {
                status = -1;
            }

            // Copy Mode
            // 1.????
            // 2.?appendChild??
            // 3.??
            if (Operation.COPY == e.getOperation()) {
                List newModels = genNewTreeStoreModelList(srcTree, treeStoreModelList);
                e.setData(newModels);
                treeStoreModelList = newModels;
            }

            List<Node> dragNodeList = getNodeList(treeStoreModelList);

            String tarNodeId = "";
            // 2011/06/28 ???
            TreeNode srcTreeNode = srcTree.findNode((Element) e.getDragEvent().getStartElement());
            switch (status) {
            case -1: // ?
                for (Node node : dragNodeList) {
                    dropNode.appendChild(node);
                }

                tarNodeId = TreeUtils.getNodeId(activeItem, srcTreeNode, status);
                break;
            case 1: // ?
                Node siblingNode = dropNode.getNextSibling();
                for (Node node : dragNodeList) {
                    dropParentNode.insertBefore(node, siblingNode);
                }
                // ?
                tarNodeId = TreeUtils.getNodeId(activeItem, srcTreeNode, 1);
                break;
            case 0: // ?
                for (Node node : dragNodeList) {
                    dropParentNode.insertBefore(node, dropNode);
                }
                // ?
                tarNodeId = TreeUtils.getNodeId(activeItem, srcTreeNode, 0);
                break;
            }

            // Move Mode
            // ??tree
            if (Operation.MOVE == e.getOperation()) {
                List<TreeModel> sel = e.getData();
                for (TreeModel tm : sel) {
                    srcTree.getStore().remove((ModelData) tm.get("model"));
                }
            }

            // 
            update(compositeInfo(srcTree, tree, TreeUtils.getNodeId(srcTreeNode), tarNodeId));
            super.onDragDrop(e);
        }
    };
    target.setAllowSelfAsSource(true);
    target.setFeedback(Feedback.BOTH);
}

From source file:org.openxdata.designer.client.view.DynamicListsView.java

/**
 * Moves an option one position upwards.
 * //  w w w  .  j  a v a2s.  c om
 * @param optionDef the option to move.
 */
public void moveOptionUp(OptionDef optionDef) {
    List<OptionDef> optns = optionList;
    int index = optns.indexOf(optionDef);

    optns.remove(optionDef);

    Node parentNode = null;
    if (optionDef.getControlNode() != null) {
        parentNode = optionDef.getControlNode().getParentNode();
        parentNode.removeChild(optionDef.getControlNode());
    }

    OptionDef currentOptionDef;
    List<OptionDef> list = new ArrayList<OptionDef>();

    //Remove all from index before selected all the way downwards
    while (optns.size() >= index) {
        currentOptionDef = (OptionDef) optns.get(index - 1);
        list.add(currentOptionDef);
        optns.remove(currentOptionDef);
    }

    optns.add(optionDef);
    for (int i = 0; i < list.size(); i++) {
        if (i == 0) {
            OptionDef optnDef = (OptionDef) list.get(i);
            if (parentNode != null && optnDef.getControlNode() != null && optionDef.getControlNode() != null)
                parentNode.insertBefore(optionDef.getControlNode(), optnDef.getControlNode());
        }
        optns.add(list.get(i));
    }
}

From source file:org.openxdata.designer.client.view.DynamicListsView.java

/**
 * Moves an option one position downwards.
 * // w  w w. jav  a  2s.  c  o  m
 * @param optionDef the option to move.
 */
public void moveOptionDown(OptionDef optionDef) {
    List<OptionDef> optns = optionList;
    int index = optns.indexOf(optionDef);

    optns.remove(optionDef);

    Node parentNode = null;
    if (optionDef.getControlNode() != null) {
        parentNode = optionDef.getControlNode().getParentNode();
        parentNode.removeChild(optionDef.getControlNode());
    }

    OptionDef currentItem;
    List<OptionDef> list = new ArrayList<OptionDef>();

    //Remove all otions below selected index
    while (optns.size() > 0 && optns.size() > index) {
        currentItem = (OptionDef) optns.get(index);
        list.add(currentItem);
        optns.remove(currentItem);
    }

    for (int i = 0; i < list.size(); i++) {
        if (i == 1) {
            optns.add(optionDef); //Add after the first item but before the current (second).

            OptionDef optnDef = getNextSavedOption(list, i);
            if (optnDef.getControlNode() != null && optionDef.getControlNode() != null)
                parentNode.insertBefore(optionDef.getControlNode(), optnDef.getControlNode());
            else if (parentNode != null)
                parentNode.appendChild(optionDef.getControlNode());
        }
        optns.add(list.get(i));
    }

    //If was second last and hence becoming last
    if (list.size() == 1) {
        optns.add(optionDef);

        if (optionDef.getControlNode() != null)
            parentNode.appendChild(optionDef.getControlNode());
    }
}

From source file:org.openxdata.sharedlib.client.model.PageDef.java

/**
 * Moves a question down by one position in a list of questions.
 * /*from   w w w  .  java 2s.  c o m*/
 * @param questions the list of questions.
 * @param questionDef the question to move.
 */
public static void moveQuestionDown(Vector<QuestionDef> questions, QuestionDef questionDef) {
    int index = questions.indexOf(questionDef);

    //Not relying on group node because some forms have no groups
    Element controlNode = questionDef.getControlNode();
    Element parentNode = controlNode != null ? (Element) controlNode.getParentNode() : null;
    if (questionDef.getDataType() == QuestionType.REPEAT && controlNode != null) {
        controlNode = (Element) controlNode.getParentNode();
        parentNode = (Element) parentNode.getParentNode();
    }

    questions.remove(questionDef);

    Node parentDataNode = questionDef.getDataNode() != null ? questionDef.getDataNode().getParentNode() : null;
    Node parentBindNode = questionDef.getBindNode() != null ? questionDef.getBindNode().getParentNode() : null;

    QuestionDef currentItem;
    List<QuestionDef> list = new ArrayList<QuestionDef>();

    while (questions.size() > 0 && questions.size() > index) {
        currentItem = (QuestionDef) questions.elementAt(index);
        list.add(currentItem);
        questions.remove(currentItem);
    }

    for (int i = 0; i < list.size(); i++) {
        if (i == 1) {
            questions.add(questionDef); //Add after the first item.

            if (controlNode != null) {
                if (controlNode != null && parentNode != null)
                    parentNode.removeChild(controlNode);

                QuestionDef qtnDef = getNextSavedQuestion(list, i);
                if (qtnDef.getControlNode() != null) {
                    Node sibNode = qtnDef.getControlNode();
                    if (qtnDef.getDataType() == QuestionType.REPEAT)
                        sibNode = sibNode.getParentNode();
                    parentNode.insertBefore(controlNode, sibNode);
                } else
                    parentNode.appendChild(controlNode);

                //move data node (We are not moving nested data nodes just to avoid complications
                if (!(questionDef.getBinding().indexOf('/') > -1 || qtnDef.getBinding().indexOf('/') > -1))
                    if (questionDef.getDataNode() != null
                            && questionDef.getDataNode().getParentNode() != null) {
                        parentDataNode.removeChild(questionDef.getDataNode());

                        if (qtnDef.getDataNode() != null) {
                            if (qtnDef.getDataType() == QuestionType.REPEAT
                                    && qtnDef.getBinding().contains("/"))
                                parentDataNode.insertBefore(questionDef.getDataNode(),
                                        qtnDef.getDataNode().getParentNode());
                            else
                                parentDataNode.insertBefore(questionDef.getDataNode(), qtnDef.getDataNode());
                        } else
                            parentDataNode.appendChild(questionDef.getDataNode());
                    }

                //move binding node
                if (parentBindNode != null) {
                    if (questionDef.getBindNode() != null && questionDef.getBindNode().getParentNode() != null)
                        parentBindNode.removeChild(questionDef.getBindNode());

                    if (qtnDef.getBindNode() != null)
                        parentBindNode.insertBefore(questionDef.getBindNode(), qtnDef.getBindNode());
                    else
                        parentBindNode.appendChild(questionDef.getBindNode());
                }
            }
        }
        questions.add(list.get(i));
    }

    if (list.size() == 1) {
        questions.add(questionDef);

        if (controlNode != null) {
            if (questionDef.getControlNode() != null && parentNode != null) {
                parentNode.removeChild(controlNode);
                parentNode.appendChild(controlNode);
            }

            if (!(questionDef.getBinding().indexOf('/') > -1)) {
                if (questionDef.getDataNode() != null && parentDataNode != null) {
                    parentDataNode.removeChild(questionDef.getDataNode());
                    parentDataNode.appendChild(questionDef.getDataNode());
                }
            }

            if (questionDef.getBindNode() != null && parentBindNode != null) {
                parentBindNode.removeChild(questionDef.getBindNode());
                parentBindNode.appendChild(questionDef.getBindNode());
            }
        }
    }
}