Package org.brixcms.web.picker.node

Source Code of org.brixcms.web.picker.node.NodePicker

/**
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.brixcms.web.picker.node;

import com.inmethod.grid.treegrid.TreeGrid;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.brixcms.jcr.wrapper.BrixNode;
import org.brixcms.web.generic.BrixGenericPanel;
import org.brixcms.web.picker.common.NodePickerTreeGridPanel;
import org.brixcms.web.picker.common.TreeAwareNode;
import org.brixcms.web.tree.JcrTreeNode;
import org.brixcms.web.tree.NodeFilter;

public class NodePicker extends BrixGenericPanel<BrixNode> {
    private final JcrTreeNode rootNode;
    private final NodePickerTreeGridPanel grid;

    public NodePicker(String id, IModel<BrixNode> model, JcrTreeNode rootNode, NodeFilter visibilityFilter, NodeFilter enabledFilter) {
        super(id, model);

        this.rootNode = rootNode;

        add(grid = new NodePickerTreeGridPanel("grid", visibilityFilter, enabledFilter) {
            @Override
            protected JcrTreeNode getRootNode() {
                return NodePicker.this.rootNode;
            }

            @Override
            protected void configureGrid(TreeGrid grid) {
                super.configureGrid(grid);
                grid.setAllowSelectMultiple(false);
                updateSelection();
                NodePicker.this.configureGrid(grid);
            }

            @Override
            protected void onNodeSelected(BrixNode node) {
                NodePicker.this.setModelObject(node);
            }

            @Override
            protected void onNodeDeselected(BrixNode node) {
                NodePicker.this.setModelObject(null);
            }
        });
    }

    private void updateSelection() {
        BrixNode current = getModelObject();
        if (current == null) {
            grid.getGrid().resetSelectedItems();
        } else {
            JcrTreeNode node = TreeAwareNode.Util.getTreeNode(getModelObject(), grid.getVisibilityFilter());
            if (node == null) {
                grid.getGrid().resetSelectedItems();
            } else {
                grid.getGrid().selectItem(new Model<JcrTreeNode>(node), true);
            }
        }
    }

    protected void configureGrid(TreeGrid grid) {

    }

    @Override
    protected void onBeforeRender() {
        // First time updateSelection has been rendered from within
        // NodePickerTreePanel#configureGrid

        // In all subsequent renders it's called from here. It must be called
        // before super.onBeforeRender so that the expanded tree items get
        // chance to render
        if (hasBeenRendered()) {
            updateSelection();
        }

        super.onBeforeRender();
    }

    @Override
    protected void onDetach() {
        this.rootNode.detach();
        super.onDetach();
    }
}
TOP

Related Classes of org.brixcms.web.picker.node.NodePicker

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.