
uk.ac.starlink.ecsv.EcsvStarTable Maven / Gradle / Ivy
package uk.ac.starlink.ecsv;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Logger;
import uk.ac.starlink.table.AbstractStarTable;
import uk.ac.starlink.table.ColumnInfo;
import uk.ac.starlink.table.DefaultValueInfo;
import uk.ac.starlink.table.DescribedValue;
import uk.ac.starlink.table.Tables;
import uk.ac.starlink.table.ValueInfo;
/**
* Partial StarTable implementation for ECSV tables.
* This abstract class provides table and column metadata;
* concrete subclasses have to implment the data access methods.
*
* @author Mark Taylor
* @since 29 Apr 2020
*/
public abstract class EcsvStarTable extends AbstractStarTable {
private final ColumnInfo[] colInfos_;
/** Metadata for ECSV format item. */
public static final ValueInfo CFORMAT_INFO =
new DefaultValueInfo( "C_FORMAT", String.class,
"Printf-style format string" );
private static final Logger logger_ =
Logger.getLogger( "uk.ac.starlink.ecsv" );
/**
* Constructor.
*
* @param meta ECSV metadata object
*/
protected EcsvStarTable( EcsvMeta meta ) {
EcsvColumn>[] ecols = meta.getColumns();
int ncol = ecols.length;
colInfos_ = new ColumnInfo[ ncol ];
for ( int ic = 0; ic < ncol; ic++ ) {
colInfos_[ ic ] = toColumnInfo( ecols[ ic ] );
}
Map,?> tableMeta = meta.getTableMeta();
if ( tableMeta != null ) {
for ( Map.Entry,?> entry : tableMeta.entrySet() ) {
if ( EcsvTableWriter.TABLENAME_METAKEY.equals( entry.getKey() )
&& entry.getValue() instanceof String ) {
setName( (String) entry.getValue() );
}
else {
DescribedValue dval = toDescribedValue( entry );
if ( dval != null ) {
setParameter( dval );
}
}
}
}
}
public int getColumnCount() {
return colInfos_.length;
}
public ColumnInfo getColumnInfo( int icol ) {
return colInfos_[ icol ];
}
public long getRowCount() {
return -1;
}
/**
* Adapts an EcsvColumn to a ColumnInfo.
*
* @param ecol ECSV column metadata
* @return STIL column metadata
*/
private static ColumnInfo toColumnInfo( EcsvColumn> ecol ) {
EcsvDecoder> decoder = ecol.getDecoder();
Class> clazz = decoder.getContentClass();
ColumnInfo cinfo =
new ColumnInfo( ecol.getName(), clazz, ecol.getDescription() );
int[] shape = decoder.getShape();
if ( shape != null ) {
cinfo.setShape( shape );
}
String unit = ecol.getUnit();
if ( unit != null && unit.trim().length() > 0 ) {
cinfo.setUnitString( unit );
}
String format = ecol.getFormat();
if ( format != null && format.trim().length() > 0 ) {
cinfo.setAuxDatum( new DescribedValue( CFORMAT_INFO, format ) );
}
if ( "uint8".equals( ecol.getDatatype() ) &&
Short.class.equals( clazz ) ) {
cinfo.setAuxDatum( new DescribedValue( Tables.UBYTE_FLAG_INFO,
Boolean.TRUE ) );
}
Map,?> meta = ecol.getMeta();
if ( meta != null ) {
meta = new LinkedHashMap
© 2015 - 2025 Weber Informatics LLC | Privacy Policy