    001/*****************************************************************************
    002 * Copyright by The HDF Group.                                               *
    003 * Copyright by the Board of Trustees of the University of Illinois.         *
    004 * All rights reserved.                                                      *
    005 *                                                                           *
    006 * This file is part of the HDF Java Products distribution.                  *
    007 * The full copyright notice, including terms governing use, modification,   *
    008 * and redistribution, is contained in the COPYING file, which can be found  *
    009 * at the root of the source code distribution tree,                         *
    010 * or in https://www.hdfgroup.org/licenses.                                  *
    011 * If you do not have access to either file, you may request a copy from     *
    012 * help@hdfgroup.org.                                                        *
    013 ****************************************************************************/
    014
    015package hdf.view.ImageView;
    016
    017import java.util.BitSet;
    018import java.util.HashMap;
    019
    020import org.slf4j.Logger;
    021import org.slf4j.LoggerFactory;
    022
    023import hdf.view.Tools;
    024import hdf.view.ViewProperties;
    025import hdf.view.DataView.DataViewManager;
    026
    027/**
    028 * A simple Factory class which returns concrete instances of the default
    029 * ImageView.
    030 *
    031 * @author jhenderson
    032 * @version 1.0 4/18/2018
    033 */
    034public class DefaultImageViewFactory extends ImageViewFactory {
    035
    036    private static final Logger log = LoggerFactory.getLogger(DefaultImageViewFactory.class);
    037
    038    @SuppressWarnings({ "rawtypes", "unchecked" })
    039    @Override
    040    public ImageView getImageView(DataViewManager viewer, HashMap dataPropertiesMap) throws ClassNotFoundException {
    041        String dataViewName = null;
    042        Object[] initargs = { viewer, dataPropertiesMap };
    043        ImageView theView = null;
    044
    045        /*
    046         * If the name of a specific ImageView class to use has been passed in via the
    047         * data options map, retrieve its name now, otherwise use the default ImageView
    048         * class.
    049         */
    050        dataViewName = (String) dataPropertiesMap.get(ViewProperties.DATA_VIEW_KEY.VIEW_NAME);
    051        if (dataViewName == null || dataViewName.equals(ViewProperties.DEFAULT_MODULE_TEXT)) {
    052            dataViewName = ViewProperties.DEFAULT_IMAGEVIEW_NAME;
    053        }
    054
    055        Class<?> theClass = null;
    056        try {
    057            log.trace("getImageView(): Class.forName({})", dataViewName);
    058
    059            /* Attempt to load the class by the given name */
    060            theClass = Class.forName(dataViewName);
    061        }
    062        catch (Exception ex) {
    063            log.debug("getImageView(): unable to load default ImageView class by name({})", dataViewName);
    064            theClass = null;
    065        }
    066
    067        if (theClass == null) throw new ClassNotFoundException();
    068
    069        /* Add some data display properties if using the default ImageView */
    070        if (dataViewName.startsWith(ViewProperties.DEFAULT_IMAGEVIEW_NAME)) {
    071            BitSet bitmask = (BitSet) dataPropertiesMap.get(ViewProperties.DATA_VIEW_KEY.BITMASK);
    072            dataPropertiesMap.put(ViewProperties.DATA_VIEW_KEY.CONVERTBYTE, Boolean.valueOf((bitmask != null)));
    073        }
    074
    075        try {
    076            theView = (ImageView) Tools.newInstance(theClass, initargs);
    077
    078            log.trace("getImageView(): returning ImageView instance {}", theView);
    079        }
    080        catch (Exception ex) {
    081            log.debug("getImageView(): Error instantiating class:", ex);
    082            theView = null;
    083        }
    084
    085        return theView;
    086    }
    087
    088}