Package reportgen.gui.genepanel.corepanel.entitypanel

Source Code of reportgen.gui.genepanel.corepanel.entitypanel.ReportEntityModel

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package reportgen.gui.genepanel.corepanel.entitypanel;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import javax.swing.event.TreeModelEvent;
import javax.swing.event.TreeModelListener;
import javax.swing.tree.TreeModel;
import javax.swing.tree.TreePath;
import reportgen.prototype.entity.QEntity;

/**
*
* @author axe
*/
public class ReportEntityModel implements TreeModel {

    private QEntity rootEntity;
    private List<TreeModelListener> tml = new ArrayList<TreeModelListener>();
    private HashMap<QEntity, List<QEntity>> map
            = new HashMap<QEntity, List<QEntity>>();

    public ReportEntityModel(QEntity root) {
        this.rootEntity = root;
    }
   
    @Override
    public Object getRoot() {
        return rootEntity;
    }

    private List<QEntity> children(Object parent) {
        if(parent == null) {
            return new ArrayList<QEntity>();
        }
        QEntity par = (QEntity) parent;
        List<QEntity> children = map.get(par);
        if(children == null) {
            children = new ArrayList<QEntity>();
            QEntity[] selEnts = par.getSelectedEntities();
            if(selEnts != null) {
                for(QEntity en: selEnts) {
                    children.add(en);
                }
            }
            map.put(par, children);
        }
        return children;
    }
   
    @Override
    public Object getChild(Object parent, int index) {
        return children(parent).get(index);
    }
   
    @Override
    public int getChildCount(Object parent) {
        return children(parent).size();
    }

    @Override
    public boolean isLeaf(Object node) {
        return false;
    }

    @Override
    public void valueForPathChanged(TreePath path, Object newValue) {
        TreeModelEvent event = new TreeModelEvent(this, path);
        for(TreeModelListener l: tml) {
            l.treeNodesChanged(event);
        }
    }

    public void nodeInserted(TreePath path) {
        Object child = path.getLastPathComponent();
        TreePath parentPath = path.getParentPath();
        Object parent = null;
        if(parentPath != null) {
            parent = parentPath.getLastPathComponent();
        }

        map.put((QEntity)parent, null);
        List<QEntity> childList = children(parent);
        int ids[] = new int[] { childList.size()-1 };
        Object chs[] = new Object[] { child };
       
        TreeModelEvent event = new TreeModelEvent(this,
                (parentPath != null ? parentPath : new TreePath(null)), ids, chs);
        for(TreeModelListener l: tml) {
            l.treeNodesInserted(event);
        }
    }

    public void nodeRemoved(TreePath parentPath, int ids[], Object chs[]) {
        TreeModelEvent event = new TreeModelEvent(this, parentPath, ids, chs);
        for(TreeModelListener l: tml) {
            l.treeNodesRemoved(event);
        }
    }

    @Override
    public void addTreeModelListener(TreeModelListener l) {
        tml.add(l);
    }

    @Override
    public void removeTreeModelListener(TreeModelListener l) {
        tml.remove(l);
    }

    @Override
    public int getIndexOfChild(Object parent, Object child) {
        return children(parent).indexOf(child);
    }
}
TOP

Related Classes of reportgen.gui.genepanel.corepanel.entitypanel.ReportEntityModel

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.