    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.MetaDataView;
    016
    017import org.slf4j.Logger;
    018import org.slf4j.LoggerFactory;
    019
    020import org.eclipse.swt.widgets.Composite;
    021
    022import hdf.object.Dataset;
    023import hdf.object.Datatype;
    024import hdf.object.Group;
    025import hdf.object.HObject;
    026import hdf.object.h5.H5Link;
    027import hdf.view.Tools;
    028import hdf.view.ViewProperties;
    029import hdf.view.DataView.DataViewManager;
    030
    031/**
    032 * A simple Factory class which returns concrete instances of the default
    033 * MetaDataView, based on whether the data object is a Group, Dataset, Datatype
    034 * or other form of object.
    035 *
    036 * @author jhenderson
    037 * @version 1.0 4/18/2018
    038 */
    039public class DefaultMetaDataViewFactory extends MetaDataViewFactory {
    040
    041    private static final Logger log = LoggerFactory.getLogger(DefaultMetaDataViewFactory.class);
    042
    043    @Override
    044    public MetaDataView getMetaDataView(Composite parentObj, DataViewManager viewer, HObject theObj) throws ClassNotFoundException {
    045        String dataViewName = null;
    046        Object[] initargs = { parentObj, viewer, theObj };
    047        MetaDataView theView = null;
    048
    049        if (theObj instanceof Group)
    050            dataViewName = ViewProperties.DEFAULT_GROUP_METADATAVIEW_NAME;
    051        else if (theObj instanceof Dataset)
    052            dataViewName = ViewProperties.DEFAULT_DATASET_METADATAVIEW_NAME;
    053        else if (theObj instanceof Datatype)
    054            dataViewName = ViewProperties.DEFAULT_DATATYPE_METADATAVIEW_NAME;
    055        else if (theObj instanceof H5Link)
    056            dataViewName = ViewProperties.DEFAULT_LINK_METADATAVIEW_NAME;
    057        else
    058            dataViewName = null;
    059
    060        Class<?> theClass = null;
    061        try {
    062            log.trace("getMetaDataView(): Class.forName({})", dataViewName);
    063
    064            /* Attempt to load the class by the given name */
    065            theClass = Class.forName(dataViewName);
    066        }
    067        catch (Exception ex) {
    068            log.debug("getMetaDataView(): unable to load default MetaDataView class by name({})", dataViewName);
    069            theClass = null;
    070        }
    071
    072        if (theClass == null) throw new ClassNotFoundException();
    073
    074        try {
    075            theView = (MetaDataView) Tools.newInstance(theClass, initargs);
    076
    077            log.trace("getMetaDataView(): returning MetaDataView instance {}", theView);
    078        }
    079        catch (Exception ex) {
    080            log.debug("getMetaDataView(): Error instantiating class:", ex);
    081            theView = null;
    082        }
    083
    084        return theView;
    085    }
    086
    087}