Package com.bbn.openmap.tools.drawing

Source Code of com.bbn.openmap.tools.drawing.AbstractToolLoader

// **********************************************************************
//
// <copyright>
//
//  BBN Technologies
//  10 Moulton Street
//  Cambridge, MA 02138
//  (617) 873-8000
//
//  Copyright (C) BBNT Solutions LLC. All rights reserved.
//
// </copyright>
// **********************************************************************
//
// $Source: /cvs/distapps/openmap/src/openmap/com/bbn/openmap/tools/drawing/AbstractToolLoader.java,v $
// $RCSfile: AbstractToolLoader.java,v $
// $Revision: 1.3.2.1 $
// $Date: 2004/10/14 18:27:41 $
// $Author: dietrick $
//
// **********************************************************************

package com.bbn.openmap.tools.drawing;

import com.bbn.openmap.Environment;
import com.bbn.openmap.I18n;
import com.bbn.openmap.omGraphics.EditableOMGraphic;
import com.bbn.openmap.omGraphics.GraphicAttributes;
import com.bbn.openmap.omGraphics.OMGraphic;
import com.bbn.openmap.util.Debug;
import java.util.HashMap;
import javax.swing.ImageIcon;

/**
* The AbstractToolLoader groups together some of the code that was
* being duplicated in the different EditToolLoaders. It uses a
* EditClassWrapper to describe how to edit/create/represent graphics,
* and keeps track of multiple EditClassWrappers in case the
* EditToolLoader can handle multiple graphic types.
*/
public abstract class AbstractToolLoader implements EditToolLoader {

    protected HashMap graphicInfo;
    protected I18n i18n = Environment.getI18n();

    /**
     * Each subclass should initialize the graphicInfo HashMap by
     * calling addEditClassWrapper(EditClassWrapper).
     */
    public abstract void init();

    public void addEditClassWrapper(EditClassWrapper ecw) {
        if (graphicInfo == null) {
            graphicInfo = new HashMap();
        }

        if (ecw != null) {
            graphicInfo.put(ecw.getClassName().intern(), ecw);
        }
    }

    public void removeEditClassWrapper(EditClassWrapper ecw) {
        if (graphicInfo != null && ecw != null) {
            graphicInfo.remove(ecw.getClassName().intern());
        }
    }

    /**
     * Get the classnames that the loader is able to create
     * EditableOMGraphics for.
     */
    public String[] getEditableClasses() {
        String[] strings = null;
        if (graphicInfo != null) {
            Object[] keys = graphicInfo.keySet().toArray();
            strings = new String[keys.length];
            for (int i = 0; i < keys.length; i++) {
                strings[i] = (String) keys[i];
            }
        }
        return strings;
    }

    /**
     * Give the classname of a graphic to create, returning an
     * EditableOMGraphic for that graphic.
     */
    public EditableOMGraphic getEditableGraphic(String classname) {
        EditableOMGraphic eomg = null;

        if (graphicInfo != null) {
            EditClassWrapper ecw = (EditClassWrapper) graphicInfo.get(classname.intern());
            if (ecw != null) {
                String ecn = ecw.getEditableClassName();
                try {
                    Object obj = Class.forName(ecn).newInstance();
                    if (obj instanceof EditableOMGraphic) {
                        eomg = (EditableOMGraphic) obj;
                    }
                } catch (ClassNotFoundException cnfe) {
                    Debug.error("AbstractToolLoader can't get editable graphic for "
                            + classname
                            + "\n    ClassNotFoundException caught.");
                } catch (InstantiationException ie) {
                    Debug.error("AbstractToolLoader can't get editable graphic for "
                            + classname
                            + "\n    InstantiationException caught.");
                } catch (IllegalAccessException iae) {
                    Debug.error("AbstractToolLoader can't get editable graphic for "
                            + classname
                            + "\n    IllegalAccessException caught.");
                }
            }
        }

        return eomg;
    }

    /**
     * Give the classname of a graphic to create, returning an
     * EditableOMGraphic for that graphic. The GraphicAttributes
     * object lets you set some of the initial parameters of the
     * point, like point type and rendertype.
     */
    public EditableOMGraphic getEditableGraphic(String classname,
                                                GraphicAttributes ga) {
        EditableOMGraphic eomg = getEditableGraphic(classname);
        if (eomg != null && ga != null) {
            // This is a little redundant - the graphic is created
            // with the call to getEditableGraphic(classname), but is
            // then destroyed and created again with the
            // GraphicAttributes settings. I'm not sure how to get
            // around this at this point in a generic fashion. Before
            // the AbstractToolLoader was created, each EditToolLoader
            // called the EditableOMGraphic constructor with the
            // GraphicAttributes as an argument. Hard to do when you
            // only have a editableClassName.
            eomg.createGraphic(ga);
        }
        return null;
    }

    /**
     * Give an OMGraphic to the EditToolLoader, which will create an
     * EditableOMGraphic for it.
     */
    public abstract EditableOMGraphic getEditableGraphic(OMGraphic graphic);

    /**
     * Get an Icon for a classname.
     */
    public ImageIcon getIcon(String classname) {
        if (graphicInfo != null) {
            EditClassWrapper ecw = (EditClassWrapper) graphicInfo.get(classname.intern());
            if (ecw != null) {
                return ecw.getIcon();
            }
        }
        return null;
    }

    /**
     * Get the pretty name, suitable for a GUI, for a classname.
     */
    public String getPrettyName(String classname) {
        if (graphicInfo != null) {
            EditClassWrapper ecw = (EditClassWrapper) graphicInfo.get(classname.intern());
            if (ecw != null) {
                return ecw.getPrettyName();
            }
        }
        return null;
    }
}
TOP

Related Classes of com.bbn.openmap.tools.drawing.AbstractToolLoader

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.