package it.geosolutions.imageio.plugins.jhdf; import it.geosolutions.hdf.object.h4.H4SDS; import javax.imageio.metadata.IIOMetadata; import javax.imageio.metadata.IIOMetadataNode; public abstract class AbstractHDFImageMetadata extends IIOMetadata { /** The Dataset Name */ protected String name = ""; /** The Dataset Rank */ protected int rank = -1; /** The Dataset Dims Sizes. * As an Instance, a Dataset may have (x,y,z,t) respectively (3200,2000,10,5) */ protected int dims[] = null; /** * The Dataset Chunk Size. */ protected int chunkSize[] = null; public AbstractHDFImageMetadata(boolean standardMetadataFormatSupported, String nativeMetadataFormatName, String nativeMetadataFormatClassName, String[] extraMetadataFormatNames, String[] extraMetadataFormatClassNames) { super(standardMetadataFormatSupported, nativeMetadataFormatName, nativeMetadataFormatClassName, extraMetadataFormatNames, extraMetadataFormatClassNames); } /** * Returns a IIOMetadataNode which should be common to each * specific {@link BaseHDFImageMetada} extension since each HDF dataset * has a Rank, a Name, a set of dims length. * * @return the IIOMetadataNode common to each HDF metadata. */ protected IIOMetadataNode getCommonDatasetNode() { //The generated Node is common to each HDF metadata structure. /* * root * +-- datasetProperties (Name, Rank, Dims, ChunkSize) */ final IIOMetadataNode datasetNode = new IIOMetadataNode( "DatasetProperties"); datasetNode.setAttribute("Name", name); datasetNode.setAttribute("Rank", Integer.toString(rank)); String sDims=""; if (dims != null) { final int dimsLength = dims.length; final StringBuffer sb = new StringBuffer(); for (int i = 0; i < dimsLength; i++) { sb.append(Long.toString(dims[i])); if (i!=dimsLength-1) sb.append(","); } sDims = sb.toString().trim(); } datasetNode.setAttribute("Dims", sDims); String sChunkSize=""; if (chunkSize != null) { final int chunkSizeLength = chunkSize.length; final StringBuffer sb = new StringBuffer(); for (int i = 0; i < chunkSizeLength; i++) { sb.append(Long.toString(chunkSize[i])); if (i!=chunkSizeLength-1) sb.append(","); } sChunkSize = sb.toString().trim(); } datasetNode.setAttribute("ChunkSize", sChunkSize); //TODO: Should I add envelope? return datasetNode; } protected void initializeCommonDatasetProperties(SubDatasetInfo sdInfo) { // setting dims (array copy) final int dims[] = sdInfo.getDims(); if (dims!=null){ final int dimsLength=dims.length; this.dims=new int[dimsLength]; for (int i=0;i