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 files COPYING and Copyright.html. *
009 * COPYING can be found at the root of the source code distribution tree.    *
010 * Or, see https://support.hdfgroup.org/products/licenses.html               *
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 hdf.view.Tools;
021import hdf.view.ViewProperties;
022import hdf.view.DataView.DataViewManager;
023
024/**
025 * A simple Factory class which returns concrete instances of the default
026 * ImageView.
027 *
028 * @author jhenderson
029 * @version 1.0 4/18/2018
030 */
031public class DefaultImageViewFactory extends ImageViewFactory {
032
033    private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(DefaultImageViewFactory.class);
034
035    @SuppressWarnings({ "rawtypes", "unchecked" })
036    @Override
037    public ImageView getImageView(DataViewManager viewer, HashMap dataPropertiesMap) throws ClassNotFoundException {
038        String dataViewName = null;
039        Object[] initargs = { viewer, dataPropertiesMap };
040        ImageView theView = null;
041
042        /*
043         * If the name of a specific ImageView class to use has been passed in via the
044         * data options map, retrieve its name now, otherwise use the default ImageView
045         * class.
046         */
047        dataViewName = (String) dataPropertiesMap.get(ViewProperties.DATA_VIEW_KEY.VIEW_NAME);
048        if (dataViewName == null || dataViewName.equals(ViewProperties.DEFAULT_MODULE_TEXT)) {
049            dataViewName = ViewProperties.DEFAULT_IMAGEVIEW_NAME;
050        }
051
052        Class<?> theClass = null;
053        try {
054            log.trace("getImageView(): Class.forName({})", dataViewName);
055
056            /* Attempt to load the class by the given name */
057            theClass = Class.forName(dataViewName);
058        }
059        catch (Exception ex) {
060            log.debug("getImageView(): unable to load default ImageView class by name({})", dataViewName);
061            theClass = null;
062        }
063
064        if (theClass == null) throw new ClassNotFoundException();
065
066        /* Add some data display properties if using the default ImageView */
067        if (dataViewName.startsWith(ViewProperties.DEFAULT_IMAGEVIEW_NAME)) {
068            BitSet bitmask = (BitSet) dataPropertiesMap.get(ViewProperties.DATA_VIEW_KEY.BITMASK);
069            dataPropertiesMap.put(ViewProperties.DATA_VIEW_KEY.CONVERTBYTE, Boolean.valueOf((bitmask != null)));
070        }
071
072        try {
073            theView = (ImageView) Tools.newInstance(theClass, initargs);
074
075            log.trace("getImageView(): returning ImageView instance {}", theView);
076        }
077        catch (Exception ex) {
078            log.debug("getImageView(): Error instantiating class:", ex);
079            theView = null;
080        }
081
082        return theView;
083    }
084
085}