public boolean isValidFile(ucar.unidata.io.RandomAccessFile raf) throws IOException { return H5header.isValidFile(raf); }
public String getDetailInfo() { ByteArrayOutputStream ff = new ByteArrayOutputStream(100 * 1000); try { NetcdfFile ncfile = new FakeNetcdfFile(); H5header detailParser = new H5header(raf, ncfile, this); detailParser.read(new PrintStream(ff)); } catch (IOException e) { e.printStackTrace(); } Formatter f = new Formatter(); f.format("%s",super.getDetailInfo()); f.format("%s",ff.toString()); return f.toString(); }
MessageAttribute matt = iter.next(); if (matt.name.equals(HDF5_CLASS)) { Attribute att = makeAttribute(matt); if (att == null) throw new IllegalStateException(); String val = att.getStringValue(); facade.dimList = addDimension(g, h5group, facade.name, facade.dobj.mds.dimLength[0], facade.dobj.mds.maxLength[0] == -1); facade.hasNetcdfDimensions = true; if (!h5iosp.includeOriginalAttributes) iter.remove();
HeapIdentifier(long address) throws IOException { // header information is in le byte order raf.order(RandomAccessFile.LITTLE_ENDIAN); raf.seek(address); nelems = raf.readInt(); heapAddress = readOffset(); index = raf.readInt(); if (debugDetail) debugOut.println(" read HeapIdentifier address=" + address + this); if (debugHeap) dump("heapIdentifier", getFileOffset(address), 16, true); }
findDimensionScales(ncGroup, h5group, facade); findDimensionScales2D(h5group, facade); allHaveSharedDimensions &= findSharedDimensions(ncGroup, h5group, facade); createDimensions(ncGroup, h5group); ucar.nc2.Group nestedGroup = new ucar.nc2.Group(ncfile, ncGroup, facadeNested.name); ncGroup.addGroup(nestedGroup); allHaveSharedDimensions &= makeNetcdfGroup(nestedGroup, h5groupNested); if (debug1) { log.debug("--made Group " + nestedGroup.getFullName() + " add to " + ncGroup.getFullName()); Variable v = makeVariable(ncGroup, facadeNested); if ((v != null) && (v.getDataType() != null)) { v.setParentGroup(ncGroup); List<MessageAttribute> fatts = filterAttributes(h5group.facade.dobj.attributes); for (MessageAttribute matt : fatts) { try { makeAttributes(null, matt, ncGroup); } catch (InvalidRangeException e) { throw new IOException(e.getMessage()); processSystemAttributes(h5group.facade.dobj.messages, ncGroup); return allHaveSharedDimensions;
s = new Structure(ncfile, ncGroup, null, vname); v = s; if (!makeVariableShapeAndType(v, facade.dobj.mdt, facade.dobj.mds, vinfo, facade.dimList)) return null; addMembersToStructure(ncGroup, s, vinfo, facade.dobj.mdt); v.setElementSize(facade.dobj.mdt.byteSize); if (!makeVariableShapeAndType(v, facade.dobj.mdt, facade.dobj.mds, vinfo, facade.dimList)) return null; List<MessageAttribute> fatts = filterAttributes(facade.dobj.attributes); for (MessageAttribute matt : fatts) { try { makeAttributes(s, matt, v.getAttributes()); } catch (InvalidRangeException e) { throw new IOException(e.getMessage()); processSystemAttributes(facade.dobj.messages, v.getAttributes()); if (fillAttribute != null && v.findAttribute(CDM.FILL_VALUE) == null) v.addAttribute(fillAttribute); Array newData = findReferenceObjectNames(v.read()); v.setDataType(DataType.STRING); v.setCachedData(newData, true); // so H5iosp.read() is never called
break; case 10: // ARRAY dt = getNCtype(h5sm.mdt.base.type, h5sm.mdt.base.byteSize, h5sm.mdt.unsigned); dim = h5sm.mdt.dim; break; default: // PRIMITIVE dt = getNCtype(h5sm.mdt.type, h5sm.mdt.byteSize, h5sm.mdt.unsigned); dim = new int[]{1}; break; for (int i = 0; i < chunk.getNelems(); i++) { long address = chunk.getSrcPos() + layout.getElemSize() * i; String sval = readHeapString(address); data.set(count++, sval); for (int i = 0; i < chunk.getNelems(); i++) { long address = chunk.getSrcPos() + layout.getElemSize() * i; Array vlenArray = getHeapDataArray(address, readType, endian); if (vinfo.typeInfo.base.hdfType == 7) data[count++] = h5iosp.convertReference(vlenArray); ArrayObject.D1 sarray = (ArrayObject.D1) Array.factory(DataType.STRING, new int[] {n}); for (int i = 0; i < n; i++) { String sval = convertString(bdata, i * strlen, strlen); sarray.set(i, sval); String sval = convertString((byte[]) data); ArrayObject.D1 sarray = (ArrayObject.D1) Array.factory(DataType.STRING, new int[] {1}); sarray.set(0, sval);
@Test public void test1() throws InvalidRangeException, IOException { H5header.setDebugFlags( new ucar.nc2.util.DebugFlagsImpl("H5header/header")); TestDir.readAll(TestDir.cdmUnitTestDir +"formats/hdf5/npoess/ExampleFiles/AVAFO_NPP_d2003125_t10109_e101038_b9_c2005829155458_devl_Tst.h5"); H5header.setDebugFlags( new ucar.nc2.util.DebugFlagsImpl()); }
private Variable makeVariableMember(Group g, Structure s, String name, long dataPos, MessageDatatype mdt) throws IOException { Variable v; Vinfo vinfo = new Vinfo(mdt, null, dataPos); // LOOK need mds if (vinfo.getNCDataType() == null) { debugOut.println("SKIPPING DataType= " + vinfo.typeInfo.hdfType + " for variable " + name); return null; } if (mdt.type == 6) { v = new Structure(ncfile, g, s, name); makeVariableShapeAndType(v, mdt, null, vinfo, null); addMembersToStructure(g, (Structure) v, vinfo, mdt); v.setElementSize(mdt.byteSize); } else { v = new Variable(ncfile, g, s, name); makeVariableShapeAndType(v, mdt, null, vinfo, null); } // special case of variable length strings if (v.getDataType() == DataType.STRING) v.setElementSize(16); // because the array has elements that are HeapIdentifier v.setSPobject(vinfo); vinfo.setOwner(v); if (vinfo.typeInfo.unsigned) v.addAttribute(new Attribute(CDM.UNSIGNED, "true")); return v; }
if (debugSymbolTable) debugOut.println("--> readSymbolTableEntry position=" + raf.getFilePointer()); nameOffset = readOffset(); objectHeaderAddress = readOffset(); cacheType = raf.readInt(); raf.skipBytes(4); if (debugSymbolTable) dump("Group Entry scratch pad", posData, 16, false); btreeAddress = readOffset(); nameHeapAddress = readOffset(); if (debugSymbolTable) debugOut.println("btreeAddress=" + btreeAddress + " nameHeadAddress=" + nameHeapAddress);
@Override public void close() throws IOException { super.close(); headerParser.close(); }
public Object sendIospMessage(Object message) { if (message.toString().equals(IOSP_MESSAGE_INCLUDE_ORIGINAL_ATTRIBUTES)) { includeOriginalAttributes = true; return null; } if (message.toString().equals("header")) return headerParser; if (message.toString().equals("headerEmpty")) { NetcdfFile ncfile = new NetcdfFileSubclass(); return new H5header(raf, ncfile, this); } return super.sendIospMessage(message); }
findDimensionScales(ncGroup, h5group, facade); findDimensionScales2D(h5group, facade); allHaveSharedDimensions &= findSharedDimensions(ncGroup, h5group, facade); createDimensions(ncGroup, h5group); ucar.nc2.Group nestedGroup = new ucar.nc2.Group(ncfile, ncGroup, facadeNested.name); ncGroup.addGroup(nestedGroup); allHaveSharedDimensions &= makeNetcdfGroup(nestedGroup, h5groupNested); if (debug1) debugOut.println("--made Group " + nestedGroup.getFullName() + " add to " + ncGroup.getFullName()); if (debugReference && facadeNested.dobj.mdt.type == 7) debugOut.println(facadeNested); Variable v = makeVariable(ncGroup, facadeNested); if ((v != null) && (v.getDataType() != null)) { v.setParentGroup(ncGroup); List<MessageAttribute> fatts = filterAttributes(h5group.facade.dobj.attributes); for (MessageAttribute matt : fatts) { try { makeAttributes(null, matt, ncGroup); } catch (InvalidRangeException e) { throw new IOException(e.getMessage()); processSystemAttributes(h5group.facade.dobj.messages, ncGroup); return allHaveSharedDimensions;
s = new Structure(ncfile, ncGroup, null, vname); v = s; if (!makeVariableShapeAndType(v, facade.dobj.mdt, facade.dobj.mds, vinfo, facade.dimList)) return null; addMembersToStructure(ncGroup, s, vinfo, facade.dobj.mdt); v.setElementSize(facade.dobj.mdt.byteSize); if (!makeVariableShapeAndType(v, facade.dobj.mdt, facade.dobj.mds, vinfo, facade.dimList)) return null; List<MessageAttribute> fatts = filterAttributes(facade.dobj.attributes); for (MessageAttribute matt : fatts) { try { makeAttributes(s, matt, v); } catch (InvalidRangeException e) { throw new IOException(e.getMessage()); processSystemAttributes(facade.dobj.messages, v); if (fillAttribute != null && v.findAttribute(CDM.FILL_VALUE) == null) v.addAttribute(fillAttribute); Array newData = findReferenceObjectNames(v.read()); v.setDataType(DataType.STRING); v.setCachedData(newData, true); // so H5iosp.read() is never called
break; case 10: // ARRAY dt = getNCtype(h5sm.mdt.base.type, h5sm.mdt.base.byteSize); dim = h5sm.mdt.dim; break; default: // PRIMITIVE dt = getNCtype(h5sm.mdt.type, h5sm.mdt.byteSize); dim = new int[]{1}; break; for (int i = 0; i < chunk.getNelems(); i++) { long address = chunk.getSrcPos() + layout.getElemSize() * i; String sval = readHeapString(address); data.set(count++, sval); for (int i = 0; i < chunk.getNelems(); i++) { long address = chunk.getSrcPos() + layout.getElemSize() * i; Array vlenArray = getHeapDataArray(address, readType, endian); if (vinfo.typeInfo.base.hdfType == 7) data[count++] = h5iosp.convertReference(vlenArray); ArrayObject.D1 sarray = new ArrayObject.D1(String.class, n); for (int i = 0; i < n; i++) { String sval = convertString(bdata, i * strlen, strlen); sarray.set(i, sval); String sval = convertString((byte[]) data); ArrayObject.D1 sarray = new ArrayObject.D1(String.class, 1); sarray.set(0, sval);
@AfterClass static public void after() { H5header.setDebugFlags(new DebugFlagsImpl("")); // make sure debug flags are off }
HeapIdentifier(long address) throws IOException { // header information is in le byte order raf.order(RandomAccessFile.LITTLE_ENDIAN); raf.seek(address); nelems = raf.readInt(); heapAddress = readOffset(); index = raf.readInt(); if (debugDetail) { log.debug(" read HeapIdentifier address=" + address + this); } if (debugHeap) dump("heapIdentifier", getFileOffset(address), 16, true); }
private Variable makeVariableMember(Group g, Structure s, String name, long dataPos, MessageDatatype mdt) throws IOException { Variable v; Vinfo vinfo = new Vinfo(mdt, null, dataPos); // LOOK need mds if (vinfo.getNCDataType() == null) { log.debug("SKIPPING DataType= " + vinfo.typeInfo.hdfType + " for variable " + name); return null; } if (mdt.type == 6) { v = new Structure(ncfile, g, s, name); makeVariableShapeAndType(v, mdt, null, vinfo, null); addMembersToStructure(g, (Structure) v, vinfo, mdt); v.setElementSize(mdt.byteSize); } else { v = new Variable(ncfile, g, s, name); makeVariableShapeAndType(v, mdt, null, vinfo, null); } // special case of variable length strings if (v.getDataType() == DataType.STRING) v.setElementSize(16); // because the array has elements that are HeapIdentifier else if (v.getDataType() == DataType.OPAQUE) // special case of opaque v.setElementSize(mdt.getBaseSize()); v.setSPobject(vinfo); vinfo.setOwner(v); //if (vinfo.typeInfo.unsigned) // v.addAttribute(new Attribute(CDM.UNSIGNED, "true")); return v; }
if (debugSymbolTable) debugOut.println("--> readSymbolTableEntry position=" + raf.getFilePointer()); nameOffset = readOffset(); objectHeaderAddress = readOffset(); cacheType = raf.readInt(); raf.skipBytes(4); if (debugSymbolTable) dump("Group Entry scratch pad", posData, 16, false); btreeAddress = readOffset(); nameHeapAddress = readOffset(); if (debugSymbolTable) debugOut.println("btreeAddress=" + btreeAddress + " nameHeadAddress=" + nameHeapAddress);
/** * Close the file. * * @throws IOException on io error */ public void close() throws IOException { if (raf != null) { raf.close(); // log.warn("H5iosp.close called on "+myRaf.getLocation()+" for ncfile="+ncfile.hashCode()+" for iosp="+this.hashCode()); } raf = null; headerParser.close(); }