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