/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package org.das2.qds.util; import java.lang.reflect.Array; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Map.Entry; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.MutableTreeNode; import javax.swing.tree.TreeNode; import org.das2.datum.Units; import org.das2.datum.UnitsUtil; import org.das2.util.DasMath; import org.das2.qds.DataSetUtil; import org.das2.qds.QDataSet; import org.das2.qds.SemanticOps; /** * provides a TreeModel representation of the dataset's properties. * @author jbf */ public class PropertiesTreeModel extends DefaultTreeModel { QDataSet ds; String dsLabel; MutableTreeNode mroot= (MutableTreeNode)root; public PropertiesTreeModel( QDataSet ds ,int valuesSizeLimit) { this( null, ds ,valuesSizeLimit); } /** * TreeModel representing the dataset. This is really for human consumption and may change. * @param prefix String to prefix the root label. * @param ds the dataset source of the metadata. * @param valuesSizeLimit the number of values in a dataset to represent, e.g. 20, and ellipses (...) will represent the values not shown. */ public PropertiesTreeModel( String prefix, QDataSet ds ,int valuesSizeLimit) { super( new DefaultMutableTreeNode( ( prefix==null ? "" : prefix ) + DataSetUtil.toString(ds) ) ); this.ds = ds; Map properties= DataSetUtil.getProperties(ds); for ( Entry e: properties.entrySet() ) { String key= e.getKey(); Object value= e.getValue(); if ( key.equals(QDataSet.QUBE) && ( ds.rank()<2 || ds.property(QDataSet.BUNDLE_1)!=null ) ) { continue; } MutableTreeNode nextChild; if ( key.startsWith("BUNDLE_") && ( value instanceof QDataSet ) ) { QDataSet bdsd= (QDataSet)value; StringBuilder svalue= new StringBuilder(); svalue.append(key).append("="); if ( bdsd.length()>0 ) svalue.append( bdsd.property( QDataSet.NAME, 0 ) ); for ( int i=1; i5 ) { list.add("..."); } DefaultMutableTreeNode nextChild= new DefaultMutableTreeNode(""+val.getKey()+"="+list); mrt.insert( nextChild, mrt.getChildCount() ); } else if ( value!=null && Map.class.isAssignableFrom( value.getClass() ) ) { MutableTreeNode nextChild= (MutableTreeNode) new MapTreeModel( val.getKey(), (Map)value ).getRoot(); mrt.insert( nextChild, mrt.getChildCount() ); } else { mrt.insert( new DefaultMutableTreeNode(""+val.getKey()+"="+val.getValue() ),mrt.getChildCount() ); } } } } }