Package com.nexirius.framework.dataviewer

Source Code of com.nexirius.framework.dataviewer.DataModelTreeViewer

//{HEADER
/**
* This class is part of jnex 'Nexirius Application Framework for Java'
* Copyright (C) Nexirius GmbH, CH-4450 Sissach, Switzerland (www.nexirius.ch)
*
* <p>This library is free software; you can redistribute it and/or<br>
* modify it under the terms of the GNU Lesser General Public<br>
* License as published by the Free Software Foundation; either<br>
* version 2.1 of the License, or (at your option) any later version.</p>
*
* <p>This library is distributed in the hope that it will be useful,<br>
* but WITHOUT ANY WARRANTY; without even the implied warranty of<br>
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU<br>
* Lesser General Public License for more details.</p>
*
* <p>You should have received a copy of the GNU Lesser General Public<br>
* License along with this library; if not, write to the Free Software<br>
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</p>
* </blockquote>
*
* <p>
* Nexirius GmbH, hereby disclaims all copyright interest in<br>
* the library jnex' 'Nexirius Application Framework for Java' written<br>
* by Marcel Baumann.</p>
*/
//}HEADER
package com.nexirius.framework.dataviewer;

import com.nexirius.framework.datamodel.DataModel;
import com.nexirius.framework.datamodel.DataModelEvent;
import com.nexirius.framework.datamodel.DataModelVector;
import com.nexirius.util.EventMulticaster;

import javax.swing.*;
import java.lang.ref.SoftReference;

public class DataModelTreeViewer extends DataViewer {
    DataModelTreeComponent rootTreeComponent;
    private int xGap = 30;
    private int yGap = 3;
    private TransferHandler transferHandler;
    protected Icon foldedIcon;
    protected Icon expandedIcon;
    protected Icon noChildrenIcon;
    Object listenerList = null;

    public DataModelTreeViewer(DataModel model) {
        super(model);
    }

    public DataModelVector getSelectedDataModels() {
        DataModelVector v = new DataModelVector();

        if (rootTreeComponent != null) {
            rootTreeComponent.getSelectedDataModels(v);
        }

        return v;
    }

    public DataModelVector getFoldedDataModels(boolean isFolded) {
        DataModelVector v = new DataModelVector();

        if (rootTreeComponent != null) {
            rootTreeComponent.getFoldedDataModels(v, isFolded);
        }

        return v;
    }

    public void create() {
        rootTreeComponent = createDataModelTreeViewer(getDataModel());

        update();
        setJComponent(rootTreeComponent);
    }

    public DataModelTreeComponent createDataModelTreeViewer(DataModel model) {
        DataModelTreeComponent ret;
        DataModelTreeComponentCreator treeComponentViewerCreator = getFactory().getViewerCreatorMap().getTreeComponentViewerCreator(model.getClass());

        if (treeComponentViewerCreator == null) {
            ret = new DataModelTreeComponent(this, model);
        } else {
            ret = treeComponentViewerCreator.createDataModelTreeComponent(this, model);
        }

        ret.init();

        return ret;
    }

    public void setTransferHandler(TransferHandler transferHandler) {
        this.transferHandler = transferHandler;
    }

    public void update(DataModel source) {
        rootTreeComponent.updateComponent(source);
    }

    public void update() {
        rootTreeComponent.updateComponent(null);
    }

    public String getViewerName() {
        return "DataModelTreeViewer";
    }

    public void dataModelChangeValue(DataModelEvent event) {
        update(event.getDataModel());
    }

    public void dataModelChangeStructure(DataModelEvent event) {
        update();
    }

    public int getXGap() {
        return xGap;
    }

    public void setXGap(int xGap) {
        this.xGap = xGap;
    }

    public int getYGap() {
        return yGap;
    }

    public void setYGap(int yGap) {
        this.yGap = yGap;
    }

    public TransferHandler getTransferHandler() {
        return transferHandler;
    }

    public DataModelTreeComponent getTreeComponentFor(DataModel child, boolean forceCreate) {
        if (rootTreeComponent == null) {
            create();
        }

        if (child == rootTreeComponent.getChildModel()) {
            return rootTreeComponent;
        }

        DataModelTreeComponent tc = rootTreeComponent;
        DataModel dm = child;
        DataModelVector path = new DataModelVector();

        while (dm != null) {
            if (dm == rootTreeComponent.getChildModel()) {
                break;
            }

            path.insert(dm);

            dm = dm.getParentDataModel();
        }

        if (dm == null) {
            return null;
        }

        for (dm = path.firstItem(); dm != null; dm = path.nextItem()) {
            DataModelTreeComponent childTreeComponent = tc.getTreeComponentFor(dm);

            if (childTreeComponent != null) {
                if (dm == child) {

                    return childTreeComponent;
                } else {
                    tc = childTreeComponent;
                }
            } else {
                continue;
            }
        }

        return null;
    }

    public Icon getFoldedIcon() {
        if (foldedIcon == null) {
            foldedIcon = getFactory().getClientResource().getIcon("folded");
        }

        return foldedIcon;
    }

    public Icon getExpandedIcon() {
        if (expandedIcon == null) {
            expandedIcon = getFactory().getClientResource().getIcon("expanded");
        }

        return expandedIcon;
    }

    public Icon getNoChildrenIcon() {
        if (noChildrenIcon == null) {
            noChildrenIcon = getFactory().getClientResource().getIcon("noChildren");
        }

        return noChildrenIcon;
    }

    public DataModelTreeComponent getRootTreeComponent() {
        return rootTreeComponent;
    }

    public void addDataModelTreeViewerListener(DataModelTreeViewerListener listener) {
        listenerList = EventMulticaster.addEventListener(listenerList, listener);
    }

    public void addSoftDataModelTreeViewerListener(DataModelTreeViewerListener listener) {
        listenerList = EventMulticaster.addEventListener(listenerList, new SoftReference(listener));
    }

    public void removeDataModelTreeViewerListener(DataModelTreeViewerListener listener) {
        listenerList = EventMulticaster.removeEventListener(listenerList, listener);
    }

    public void callDataModelTreeViewerListenerSelection(DataModelTreeComponent treeComponent) {
        Object listeners[] = EventMulticaster.getArray(listenerList);
        boolean needGarbageCollect = false;

        for (int i = 0; listeners != null && i < listeners.length; ++i) {
            DataModelTreeViewerListener listener = (DataModelTreeViewerListener) listeners[i];

            if (listener == null) {
                needGarbageCollect = true;
            } else {
                listener.treeSelectionChanged(this, treeComponent);
            }
        }

        if (needGarbageCollect) {
            listenerList = EventMulticaster.garbageCollect(listenerList);
        }
    }

    public void callDataModelTreeViewerListenerFolding(DataModelTreeComponent treeComponent, boolean recursive) {
        Object listeners[] = EventMulticaster.getArray(listenerList);
        boolean needGarbageCollect = false;

        for (int i = 0; listeners != null && i < listeners.length; ++i) {
            DataModelTreeViewerListener listener = (DataModelTreeViewerListener) listeners[i];

            if (listener == null) {
                needGarbageCollect = true;
            } else {
                listener.treeFoldingChanged(this, treeComponent, recursive);
            }
        }

        if (needGarbageCollect) {
            listenerList = EventMulticaster.garbageCollect(listenerList);
        }
    }
}
TOP

Related Classes of com.nexirius.framework.dataviewer.DataModelTreeViewer

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.