0
votes

I have implemented a CellTree, I'm using GWT version 2.5.1-rc1 and it worked fine, the server response is asynchronous. But I need to implement a search in this CellTree and when find the node and open this. Any idea how I implement that in CellTree?

My View code:

VerticalPanel vPanel = new VerticalPanel();

CustomTreeModel model = new CustomTreeModel();

CellTree.Resources res = GWT.create(CellTree.BasicResources.class);

CellTree tree = new CellTree(model, null, res);

vPanel.add(tree);

My CustomTreeModel code:

public class CustomTreeModel implements TreeViewModel {

    private MyCell dataTreeCell;
    private SingleSelectionModel<TreeNode> selectionModel;

    public CustomTreeModel() {
        dataTreeCell = new MyCell();
        selectionModel = new SingleSelectionModel<TreeNode>();

    }


    /**
     * Get the {@link NodeInfo} that provides the children of the specified
     * value.
     */
    @Override
    public <T> TreeViewModel.NodeInfo<?> getNodeInfo(T value) {
        ListDataProvider<TreeNode> dataProvider = new ListDataProvider<TreeNode>();
        requestData(dataProvider, (TreeNode) value);

        return new DefaultNodeInfo<TreeNode>(dataProvider, dataTreeCell,
            selectionModel, null);//dataTreeCell
    }

    @Override
    public boolean isLeaf(Object value) {
        return (value instanceof ...);
    }

    private void requestData(final ListDataProvider<TreeNode> dataProvider,
        final TreeNode node) {

        try {
            RequestBuilder rb = new RequestBuilder(RequestBuilder.GET, url);

            rb.setCallback(new RequestCallback() {
                @Override
                public void onError(Request request, Throwable exception) {
                    Window.alert("Error occurred" + exception.getMessage());
                }

                @Override
                public void onResponseReceived(Request request, Response response) {
                    if (200 == response.getStatusCode()) {

                        dataProvider.getList().addAll(response.branchesList());

                        dataProvider.refresh();

                    } else {
                        Window.alert("Error occurred" + response.getStatusCode());
                    }
                }
            });

            rb.send();
        } catch (RequestException e) {
            Window.alert("Error occurred" + e.getMessage());
        }
    }
}

Any help is welcome!

1

1 Answers

0
votes

You can try to use operating on tree nodes like:

TreeNode node = cellTree.getRootTreeNode();
  int max = node.getChildCount();
for (int i = 0; i < max; i++) {
  if (!node.isChildOpen(i)) {
    node.setChildOpen(i, open, false);
  }

And it's a magic. Your node on tree will be expanded :)