Package com.bbn.openmap.layer.asrp

Source Code of com.bbn.openmap.layer.asrp.ASRPLayer

// **********************************************************************
//
// <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/layer/asrp/ASRPLayer.java,v $
// $RCSfile: ASRPLayer.java,v $
// $Revision: 1.1.2.8 $
// $Date: 2005/08/25 16:05:44 $
// $Author: dietrick $
//
// **********************************************************************

package com.bbn.openmap.layer.asrp;

import com.bbn.openmap.I18n;
import com.bbn.openmap.dataAccess.asrp.ASRPConstants;
import com.bbn.openmap.dataAccess.asrp.ASRPDirectory;
import com.bbn.openmap.dataAccess.asrp.ASRPDirectoryHandler;
import com.bbn.openmap.dataAccess.asrp.TransmittalHeaderFile;
import com.bbn.openmap.layer.OMGraphicHandlerLayer;
import com.bbn.openmap.omGraphics.DrawingAttributes;
import com.bbn.openmap.omGraphics.OMGraphicList;
import com.bbn.openmap.proj.EqualArc;
import com.bbn.openmap.proj.Projection;
import com.bbn.openmap.util.DataBounds;
import com.bbn.openmap.util.DataBoundsProvider;
import com.bbn.openmap.util.Debug;
import com.bbn.openmap.util.PropUtils;

import java.awt.GridLayout;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeEvent;
import java.io.IOException;
import java.util.Properties;

import javax.swing.JCheckBox;
import javax.swing.JPanel;

/**
* The ASRPLayer displays ASRP data, which is an international,
* seamless imagery format, kind of like CADRG. This data must be
* displayed on either LLYX or CADRG projections, although the layer
* will display coverage rectangles over areas with imagery for
* projections that are not the right type, or if the user should zoom
* in or out to view the images. The properties for this layer are:
* <P>
*
* <pre>
*  
*  
*    # Paths to TRANSH01.THF files that organize sets of ASRP image directories.
*    asrpLayer.thf=thf1;thf2
*    # Alternatively, paths to ASRP directories can be used if the thf property is undefined.
*    asrpLayer.asrpDirs=dir1;dir2
*    # Flag to show coverages when images can't be displayed.
*    asrpLayer.showCoverage
*    # Lastly, the suite of DrawingAttributes properties can be provided to set
*    # the parameters for the coverage rectangles. See DrawingAttributes for more options.
*    asrpLayer.lineColor=FFFF0000
*    asrpLayer.fillColor=FFFF0000
*  
*   
*  
* </pre>
*/
public class ASRPLayer extends OMGraphicHandlerLayer implements
        DataBoundsProvider, ASRPConstants {

    protected ASRPDirectoryHandler asrpHandler;
    protected String[] thfPaths = null;
    protected String[] asrpDirs = null;

    protected boolean showCoverage = true;

    protected DrawingAttributes coverageDrawingAttributes;

    /**
     * Property describing a flag that can be set to show where image
     * files are when they cannot be displayed or aren't showing up.
     */
    public final static String ShowCoverageProperty = "showCoverage";
    /**
     * The ASRPDirectory can be used to view the images from ASRP
     * directories containing GEN, GER, SOU, QAL and IMG files. This
     * property is only checked if the THFProperty is not set
     * (asrpDir). Should contain a list of semi-colon separated paths
     * to ASRP directories containing the files specifed above.
     */
    public final static String ASRPDirectoryProperty = "asrpDirs";
    /**
     * A semi-colon separated set of paths to TRANSH01.THF files
     * containing information about ASRP images stored in directories
     * next to the TRANSH01.THF file.
     */
    public final static String THFProperty = "thf";

    public ASRPLayer() {
        setName("ASRP");
        setProjectionChangePolicy(new com.bbn.openmap.layer.policy.ListResetPCPolicy(this));
        coverageDrawingAttributes = DrawingAttributes.getDefaultClone();
    }

    public synchronized OMGraphicList prepare() {

        OMGraphicList ret = null;
        Projection proj = getProjection();

        if (proj == null) {
            return ret;
        }

        try {

            if (asrpHandler == null) {
                asrpHandler = initialize();
            }

            if (!(proj instanceof EqualArc)) {
                fireRequestInfoLine("ASRP data requires an Equal Arc projection (CADRG/LLXY)");
            } else {
                ret = asrpHandler.getImagesForProjection((EqualArc) proj);
            }

            if (ret == null && showCoverage) {
                ret = asrpHandler.getCoverageBounds(proj,
                        coverageDrawingAttributes);
            }

        } catch (IOException ioe) {
            Debug.error("ASRPLayer(" + getName()
                    + ") caught exception fetching images:\n"
                    + ioe.getMessage());
        }

        return ret;
    }

    protected ASRPDirectoryHandler initialize() {
        ASRPDirectoryHandler asrpDirHandler = new ASRPDirectoryHandler();
        int i;
        if (thfPaths != null) {
            for (i = 0; i < thfPaths.length; i++) {
                try {
                    asrpDirHandler.add(new TransmittalHeaderFile(thfPaths[i]));
                } catch (IOException ioe) {
                    Debug.error("ASRPLayer (" + getName()
                            + ") caught exception trying to read "
                            + ASRPConstants.TRANS + ": " + ioe.getMessage());
                }
            }
        } else if (asrpDirs != null) {
            for (i = 0; i < asrpDirs.length; i++) {
                asrpDirHandler.add(new ASRPDirectory(asrpDirs[i]));
            }
        }

        return asrpDirHandler;
    }

    public ASRPDirectoryHandler getASRPHandler() {
        return asrpHandler;
    }

    public void setASRPHandler(ASRPDirectoryHandler asrpHandlerIn) {
        asrpHandler = asrpHandlerIn;
    }

    /**
     * Set the paths used by the layer. Clears out the ASRP List
     * currently set. The contents of the provided paths will be
     * checked to see if they are paths to TRANSH01.THF files, and
     * will be set to the ASRP directory files if they aren't. Call
     * doPrepare() on this layer if you want the changes to take
     * effect immediately.
     */
    public void setPaths(String[] pathsIn) {
        if (pathsIn != null) {
            if (pathsIn[0].indexOf(ASRPConstants.TRANS) != -1) {
                thfPaths = pathsIn;
            } else {
                asrpDirs = pathsIn;
            }

            asrpHandler = null;// next projection change, we reload.
        }
    }

    /**
     * Returns THF paths if they are set, otherwise returns ASRP
     * directory paths.
     */
    public String[] getPaths() {
        if (thfPaths != null) {
            return thfPaths;
        } else {
            return asrpDirs;
        }
    }

    public void setProperties(String prefix, Properties props) {
        super.setProperties(prefix, props);

        coverageDrawingAttributes.setProperties(prefix, props);

        prefix = PropUtils.getScopedPropertyPrefix(prefix);
        thfPaths = PropUtils.initPathsFromProperties(props, prefix
                + THFProperty, thfPaths);
        if (thfPaths == null) {
            asrpDirs = PropUtils.initPathsFromProperties(props, prefix
                    + ASRPDirectoryProperty, asrpDirs);
        }

        showCoverage = PropUtils.booleanFromProperties(props, prefix
                + ShowCoverageProperty, showCoverage);

    }

    public Properties getProperties(Properties props) {
        props = super.getProperties(props);

        String prefix = PropUtils.getScopedPropertyPrefix(this);

        // find out paths...
        if (thfPaths != null) {
            String[] p = thfPaths;
            StringBuffer pathString = new StringBuffer();
            if (p != null) {
                for (int i = 0; i < p.length; i++) {
                    if (p[i] != null) {
                        pathString.append(p[i]);
                        if (i < p.length - 1) {
                            pathString.append(";"); // separate paths
                            // with ;
                        }
                    }
                }
            }
            props.put(prefix + THFProperty, pathString.toString());
        } else {
            props.put(prefix + THFProperty, "");
        }

        if (asrpDirs != null) {
            String[] p = asrpDirs;
            StringBuffer pathString = new StringBuffer();
            if (p != null) {
                for (int i = 0; i < p.length; i++) {
                    if (p[i] != null) {
                        pathString.append(p[i]);
                        if (i < p.length - 1) {
                            pathString.append(";"); // separate paths
                            // with ;
                        }
                    }
                }
            }
            props.put(prefix + ASRPDirectoryProperty, pathString.toString());
        } else {
            props.put(prefix + ASRPDirectoryProperty, "");
        }

        props.put(prefix + ShowCoverageProperty,
                new Boolean(showCoverage).toString());

        coverageDrawingAttributes.setPropertyPrefix(prefix);
        coverageDrawingAttributes.getProperties(props);

        return props;
    }

    public Properties getPropertyInfo(Properties props) {
        props = super.getPropertyInfo(props);
        String interString;

        interString = i18n.get(ASRPLayer.class,
                THFProperty,
                I18n.TOOLTIP,
                "Paths to TRANSH01.THF files, takes precedence over ASRP property.  Separated by ;");
        props.put(THFProperty, interString);
        interString = i18n.get(ASRPLayer.class,
                THFProperty,
                "TRANSH01.THF files");
        props.put(THFProperty + LabelEditorProperty, interString);
        props.put(THFProperty + ScopedEditorProperty,
                "com.bbn.openmap.util.propertyEditor.MultiDirFilePropertyEditor");

        interString = i18n.get(ASRPLayer.class,
                ASRPDirectoryProperty,
                I18n.TOOLTIP,
                "Paths to ASRP Directories (if no TRANSH01.THF files)");
        props.put(ASRPDirectoryProperty, interString);
        interString = i18n.get(ASRPLayer.class,
                ASRPDirectoryProperty,
                "ASRP directories");
        props.put(ASRPDirectoryProperty + LabelEditorProperty, interString);
        props.put(ASRPDirectoryProperty + ScopedEditorProperty,
                "com.bbn.openmap.util.propertyEditor.MultiDirectoryPropertyEditor");

        interString = i18n.get(ASRPLayer.class,
                ShowCoverageProperty,
                I18n.TOOLTIP,
                "Show coverage areas when images can't be displayed.");
        props.put(ShowCoverageProperty, interString);
        interString = i18n.get(ASRPLayer.class,
                ShowCoverageProperty,
                "Show Coverage Areas");
        props.put(ShowCoverageProperty + LabelEditorProperty, interString);
        props.put(ShowCoverageProperty + ScopedEditorProperty,
                "com.bbn.openmap.util.propertyEditor.YesNoPropertyEditor");

        coverageDrawingAttributes.getPropertyInfo(props);

        interString = i18n.get(ASRPLayer.class,
                DrawingAttributes.linePaintProperty,
                I18n.TOOLTIP,
                "Edge color for coverage area markings.");
        props.put(DrawingAttributes.linePaintProperty, interString);
       
        interString = i18n.get(ASRPLayer.class,
                DrawingAttributes.lineWidthProperty,
                I18n.TOOLTIP,
                "Line Width for coverage area markings.");
        props.put(DrawingAttributes.lineWidthProperty, interString);
       
        interString = i18n.get(ASRPLayer.class,
                DrawingAttributes.fillPaintProperty,
                I18n.TOOLTIP,
                "Fill color for coverage area markings.");
        props.put(DrawingAttributes.fillPaintProperty, interString);
       
        props.put(initPropertiesProperty, THFProperty + " "
                + ASRPDirectoryProperty + " " + ShowCoverageProperty + " "
                + DrawingAttributes.linePaintProperty + " "
                + DrawingAttributes.lineWidthProperty + " "
                + DrawingAttributes.fillPaintProperty);

        return props;
    }

    /**
     * DataBoundsInformer interface.
     */
    public DataBounds getDataBounds() {
        DataBounds box = null;

        if (asrpHandler != null) {
            box = asrpHandler.getDataBounds();
        }

        return box;
    }

    public void setShowCoverage(boolean showCoverageIn) {
        showCoverage = showCoverageIn;
    }

    public boolean getShowCoverage() {
        return showCoverage;
    }

    protected JPanel guiPanel = null;

    public Component getGUI() {
        if (guiPanel == null) {
            JPanel gp = new JPanel();
            gp.setLayout(new GridLayout(0, 1));
            String interString = i18n.get(ASRPLayer.class,
                    "showCoverageCheck",
                    "Show Coverage");
            JCheckBox coverageCheck = new JCheckBox(interString, getShowCoverage());
            interString = i18n.get(ASRPLayer.class,
                    "showCoverageCheck",
                    I18n.TOOLTIP,
                    "Show coverage areas when images can't be displayed.");
            coverageCheck.setToolTipText(interString);
            coverageCheck.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent ae) {
                    JCheckBox jcb = (JCheckBox) ae.getSource();
                    setShowCoverage(jcb.isSelected());
                    doPrepare();
                }
            });

            coverageDrawingAttributes.getPropertyChangeSupport()
                    .addPropertyChangeListener(new PropertyChangeListener() {
                        public void propertyChange(PropertyChangeEvent pce) {
                            doPrepare();
                        }
                    });

            interString = i18n.get(ASRPLayer.class,
                    "coveragePanelTitle",
                    "Coverage Controls");
            JPanel covPanel = com.bbn.openmap.util.PaletteHelper.createVerticalPanel(interString);

            covPanel.add(coverageCheck);
            covPanel.add(coverageDrawingAttributes.getGUI());
            gp.add(covPanel);
            guiPanel = gp;
        }

        return guiPanel;
    }

}
TOP

Related Classes of com.bbn.openmap.layer.asrp.ASRPLayer

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.