Java Code Examples for ucar.ma2.DataType#STRUCTURE

The following examples show how to use ucar.ma2.DataType#STRUCTURE . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: GDVConvention.java    From netcdf-java with BSD 3-Clause "New" or "Revised" License 6 votes vote down vote up
/** look for aliases. */
@Override
protected void identifyCoordinateAxes() {

  for (VarProcess vp : varList) {
    if (vp.isCoordinateVariable)
      continue;

    if (vp.vb.dataType == DataType.STRUCTURE)
      continue; // cant be a structure

    String dimName = findAlias(vp.vb);
    if (dimName.isEmpty()) // none
      continue;
    rootGroup.findDimension(dimName).ifPresent(dim -> {
      vp.isCoordinateAxis = true;
      parseInfo.format(" Coordinate Axis added (GDV alias) = %s for dimension %s%n", vp.vb.getFullName(), dimName);
    });
  }

  super.identifyCoordinateAxes();

  // desperado
  identifyCoordinateAxesForce();
}
 
Example 2
Source File: Table.java    From netcdf-java with BSD 3-Clause "New" or "Revised" License 6 votes vote down vote up
@Override
public StructureDataIterator getStructureDataIterator(Cursor cursor) {
  StructureData parentStruct = cursor.getParentStructure();

  StructureMembers members = parentStruct.getStructureMembers();
  StructureMembers.Member m = members.findMember(nestedTableName);

  if (m.getDataType() == DataType.SEQUENCE) {
    ArraySequence seq = parentStruct.getArraySequence(m);
    return seq.getStructureDataIterator();
  } else if (m.getDataType() == DataType.STRUCTURE) {
    ArrayStructure as = parentStruct.getArrayStructure(m);
    return as.getStructureDataIterator();
  }

  throw new IllegalStateException("Cant find nested table member = " + nestedTableName);
}
 
Example 3
Source File: NcDDS.java    From tds with BSD 3-Clause "New" or "Revised" License 6 votes vote down vote up
private BaseType createScalarVariable(NetcdfFile ncfile, Variable v) {
  DataType dt = v.getDataType();
  if (dt == DataType.DOUBLE)
    return new NcSDFloat64(v);
  else if (dt == DataType.FLOAT)
    return new NcSDFloat32(v);
  else if (dt == DataType.INT)
    return new NcSDInt32(v);
  else if (dt == DataType.UINT)
    return new NcSDUInt32(v);
  else if (dt == DataType.SHORT)
    return new NcSDInt16(v);
  else if (dt == DataType.USHORT)
    return new NcSDUInt16(v);
  else if ((dt == DataType.BYTE) || (dt == DataType.UBYTE))
    return new NcSDByte(v);
  else if (dt == DataType.CHAR)
    return new NcSDString(v);
  else if (dt == DataType.STRING)
    return new NcSDString(v);
  else if (dt == DataType.STRUCTURE)
    return createStructure(ncfile, (Structure) v);
  else
    throw new UnsupportedOperationException("NcDDS Variable data type = " + dt);
}
 
Example 4
Source File: CDMDSP.java    From netcdf-java with BSD 3-Clause "New" or "Revised" License 5 votes vote down vote up
/**
 * Walk this variable, including fields, to construct sequence types
 * for any contained vlen dimensions
 *
 * @param cdmvar variable to walk
 */

protected void buildseqtypes(Variable cdmvar) throws DapException {
  if (CDMUtil.hasVLEN(cdmvar)) {
    buildseqtype(cdmvar);
  }
  if (cdmvar.getDataType() == DataType.STRUCTURE || cdmvar.getDataType() == DataType.SEQUENCE) {
    Structure struct = (Structure) cdmvar;
    List<Variable> fields = struct.getVariables();
    for (int i = 0; i < fields.size(); i++) {
      Variable field = fields.get(i);
      buildseqtypes(field); // recurse for inner vlen dims
    }
  }
}
 
Example 5
Source File: NcMLReaderNew.java    From netcdf-java with BSD 3-Clause "New" or "Revised" License 5 votes vote down vote up
private StructureDS.Builder readStructureNew(Group.Builder groupBuilder, Element varElem) {
  String name = varElem.getAttributeValue("name");
  String type = varElem.getAttributeValue("type");
  DataType dtype = DataType.getType(type);

  // list of dimension names
  String dimNames = varElem.getAttributeValue("shape");
  if (dimNames == null) {
    dimNames = ""; // deprecated, prefer explicit ""
  }
  List<Dimension> varDims = groupBuilder.makeDimensionsList(dimNames);

  StructureDS.Builder structBuilder;
  if (dtype == DataType.STRUCTURE) {
    structBuilder = StructureDS.builder().setName(name).addDimensions(varDims);
  } else {
    structBuilder = SequenceDS.builder().setName(name);
  }

  java.util.List<Element> varList = varElem.getChildren("variable", ncNS);
  for (Element vElem : varList) {
    readMemberVariable(groupBuilder, structBuilder, null, vElem);
  }

  // look for attributes
  java.util.List<Element> attList = varElem.getChildren("attribute", ncNS);
  for (Element attElem : attList) {
    readAtt(structBuilder.getAttributeContainer(), null, attElem);
  }

  return structBuilder;
}
 
Example 6
Source File: TestPointDatasets.java    From netcdf-java with BSD 3-Clause "New" or "Revised" License 5 votes vote down vote up
static private void checkData(StructureData sdata) {

    for (StructureMembers.Member member : sdata.getMembers()) {
      DataType dt = member.getDataType();
      if (dt == DataType.FLOAT) {
        sdata.getScalarFloat(member);
        sdata.getJavaArrayFloat(member);
      } else if (dt == DataType.DOUBLE) {
        sdata.getScalarDouble(member);
        sdata.getJavaArrayDouble(member);
      } else if (dt == DataType.BYTE) {
        sdata.getScalarByte(member);
        sdata.getJavaArrayByte(member);
      } else if (dt == DataType.SHORT) {
        sdata.getScalarShort(member);
        sdata.getJavaArrayShort(member);
      } else if (dt == DataType.INT) {
        sdata.getScalarInt(member);
        sdata.getJavaArrayInt(member);
      } else if (dt == DataType.LONG) {
        sdata.getScalarLong(member);
        sdata.getJavaArrayLong(member);
      } else if (dt == DataType.CHAR) {
        sdata.getScalarChar(member);
        sdata.getJavaArrayChar(member);
        sdata.getScalarString(member);
      } else if (dt == DataType.STRING) {
        sdata.getScalarString(member);
      }

      if ((dt != DataType.STRING) && (dt != DataType.CHAR) && (dt != DataType.STRUCTURE) && (dt != DataType.SEQUENCE)) {
        sdata.convertScalarFloat(member.getName());
      }

    }
  }
 
Example 7
Source File: CDMTypeFcns.java    From netcdf-java with BSD 3-Clause "New" or "Revised" License 4 votes vote down vote up
public static DataType daptype2cdmtype(DapType type) {
  assert (type != null);
  switch (type.getTypeSort()) {
    case Char:
      return DataType.CHAR;
    case UInt8:
      return DataType.UBYTE;
    case Int8:
      return DataType.BYTE;
    case Int16:
      return DataType.SHORT;
    case UInt16:
      return DataType.USHORT;
    case Int32:
      return DataType.INT;
    case UInt32:
      return DataType.UINT;
    case Int64:
      return DataType.LONG;
    case UInt64:
      return DataType.ULONG;
    case Float32:
      return DataType.FLOAT;
    case Float64:
      return DataType.DOUBLE;
    case String:
    case URL:
      return DataType.STRING;
    case Opaque:
      return DataType.OPAQUE;
    case Enum:
      // Coverity[FB.BC_UNCONFIRMED_CAST]
      DapEnumeration dapenum = (DapEnumeration) type;
      switch (dapenum.getBaseType().getTypeSort()) {
        case Char:
        case UInt8:
        case Int8:
          return DataType.ENUM1;
        case Int16:
        case UInt16:
          return DataType.ENUM2;
        case Int32:
        case UInt32:
          return DataType.ENUM4;
        case Int64:
        case UInt64:
          // since there is no ENUM8, use ENUM4
          return DataType.ENUM4;
        default:
          break;
      }
      break;
    case Structure:
      return DataType.STRUCTURE;
    case Sequence:
      return DataType.SEQUENCE;
    default:
      break;
  }
  return null;
}
 
Example 8
Source File: NcStream.java    From netcdf-java with BSD 3-Clause "New" or "Revised" License 4 votes vote down vote up
public static DataType convertDataType(ucar.nc2.stream.NcStreamProto.DataType dtype) {
  switch (dtype) {
    case CHAR:
      return DataType.CHAR;
    case BYTE:
      return DataType.BYTE;
    case SHORT:
      return DataType.SHORT;
    case INT:
      return DataType.INT;
    case LONG:
      return DataType.LONG;
    case FLOAT:
      return DataType.FLOAT;
    case DOUBLE:
      return DataType.DOUBLE;
    case STRING:
      return DataType.STRING;
    case STRUCTURE:
      return DataType.STRUCTURE;
    case SEQUENCE:
      return DataType.SEQUENCE;
    case ENUM1:
      return DataType.ENUM1;
    case ENUM2:
      return DataType.ENUM2;
    case ENUM4:
      return DataType.ENUM4;
    case OPAQUE:
      return DataType.OPAQUE;
    case UBYTE:
      return DataType.UBYTE;
    case USHORT:
      return DataType.USHORT;
    case UINT:
      return DataType.UINT;
    case ULONG:
      return DataType.ULONG;
  }
  throw new IllegalStateException("illegal data type " + dtype);
}
 
Example 9
Source File: NcMLReaderNew.java    From netcdf-java with BSD 3-Clause "New" or "Revised" License 4 votes vote down vote up
/**
 * Read the NcML variable element, and nested elements.
 *
 * @param groupBuilder put dimension into this group
 * @param refGroup parent Group in referenced dataset, may be null
 * @param varElem ncml variable element
 */
private void readVariable(Group.Builder groupBuilder, @Nullable Group refGroup, Element varElem) {
  String name = varElem.getAttributeValue("name");
  if (name == null) {
    errlog.format("NcML Variable name is required (%s)%n", varElem);
    return;
  }
  String nameInFile = Optional.ofNullable(varElem.getAttributeValue("orgName")).orElse(name);

  DataType dtype = null;
  String typeS = varElem.getAttributeValue("type");
  if (typeS != null) {
    dtype = DataType.getType(typeS);
  }

  // see if it already exists
  Variable refv = (refGroup == null) ? null : refGroup.findVariableLocal(nameInFile);
  Optional<Variable.Builder<?>> addedFromAgg = groupBuilder.findVariableLocal(nameInFile);
  if (refv == null && !addedFromAgg.isPresent()) { // new
    if (dtype == null) {
      errlog.format("NcML Variable dtype is required for new variable (%s)%n", name);
      return;
    }
    if (dtype == DataType.STRUCTURE || dtype == DataType.SEQUENCE) {
      groupBuilder.addVariable(readStructureNew(groupBuilder, varElem));
    } else {
      groupBuilder.addVariable(readVariableNew(groupBuilder, dtype, varElem));
    }
    return;
  }

  // refv exists
  if (refv != null) {
    if (dtype == null) {
      dtype = refv.getDataType();
    }
    if (dtype == DataType.STRUCTURE || dtype == DataType.SEQUENCE) {
      readStructureExisting(groupBuilder, null, dtype, (Structure) refv, varElem)
          .ifPresent(groupBuilder::addVariable);
    } else {
      readVariableExisting(groupBuilder, null, dtype, refv, varElem).ifPresent(groupBuilder::addVariable);
    }
    return;
  }

  // refv does not exist, but addedFromAgg may be present
  DataType finalDtype = dtype;
  addedFromAgg.ifPresent(agg -> {
    if (agg instanceof VariableDS.Builder<?>) {
      VariableDS.Builder<?> aggDs = (VariableDS.Builder<?>) agg;
      aggDs.setOriginalName(nameInFile);
    }
    DataType reallyFinalDtype = finalDtype != null ? finalDtype : agg.dataType;
    augmentVariableNew(agg, reallyFinalDtype, varElem);
  });
}
 
Example 10
Source File: NcMLReaderNew.java    From netcdf-java with BSD 3-Clause "New" or "Revised" License 4 votes vote down vote up
private Optional<StructureDS.Builder> readStructureExisting(Group.Builder groupBuilder,
    @Nullable StructureDS.Builder<?> parentStructure, DataType dtype, Structure refStructure, Element varElem) {
  String name = varElem.getAttributeValue("name");
  String nameInFile = Optional.ofNullable(varElem.getAttributeValue("orgName")).orElse(name);

  StructureDS.Builder<?> structBuilder;
  if (this.explicit) { // all metadata is in the ncml, do not copy
    if (dtype == DataType.STRUCTURE) {
      structBuilder = StructureDS.builder().setName(name).setOriginalVariable(refStructure);
    } else {
      structBuilder = SequenceDS.builder().setName(name).setOriginalVariable(refStructure);
    }
  } else { // modify existing
    if (parentStructure != null) {
      structBuilder = (StructureDS.Builder<?>) parentStructure.findMemberVariable(nameInFile)
          .orElseThrow(() -> new IllegalStateException("Cant find variable " + nameInFile));
    } else {
      structBuilder = (StructureDS.Builder<?>) groupBuilder.findVariableLocal(nameInFile)
          .orElseThrow(() -> new IllegalStateException("Cant find variable " + nameInFile));
    }
  }

  String dimNames = varElem.getAttributeValue("shape"); // list of dimension names
  if (dimNames != null) {
    List<Dimension> varDims = groupBuilder.makeDimensionsList(dimNames);
    structBuilder.addDimensions(varDims); // TODO check conformable
  }

  java.util.List<Element> attList = varElem.getChildren("attribute", ncNS);
  for (Element attElem : attList) {
    readAtt(structBuilder.getAttributeContainer(), refStructure, attElem);
  }

  java.util.List<Element> varList = varElem.getChildren("variable", ncNS);
  for (Element vElem : varList) {
    readMemberVariable(groupBuilder, structBuilder, refStructure, vElem);
  }

  // process remove command
  java.util.List<Element> removeList = varElem.getChildren("remove", ncNS);
  for (Element remElem : removeList) {
    cmdRemove(structBuilder, remElem.getAttributeValue("type"), remElem.getAttributeValue("name"));
  }

  // look for logical views
  // processLogicalViews(v, refGroup, varElem);
  return (this.explicit) ? Optional.of(structBuilder) : Optional.empty();
}
 
Example 11
Source File: NcMLReaderNew.java    From netcdf-java with BSD 3-Clause "New" or "Revised" License 4 votes vote down vote up
private void readMemberVariable(Group.Builder groupBuilder, StructureDS.Builder<?> parentStructure,
    @Nullable Structure refParentStructure, Element varElem) {
  String name = varElem.getAttributeValue("name");
  if (name == null) {
    errlog.format("NcML Variable name is required (%s)%n", varElem);
    return;
  }
  String nameInFile = Optional.ofNullable(varElem.getAttributeValue("orgName")).orElse(name);

  DataType dtype = null;
  String typeS = varElem.getAttributeValue("type");
  if (typeS != null) {
    dtype = DataType.getType(typeS);
  }

  // see if it already exists
  Variable refv = (refParentStructure == null) ? null : refParentStructure.findVariable(nameInFile);
  if (refv == null) { // new
    if (dtype == null) {
      errlog.format("NcML Variable dtype is required for new (nested) variable (%s)%n", name);
      return;
    }
    if (dtype == DataType.STRUCTURE || dtype == DataType.SEQUENCE) {
      parentStructure.addMemberVariable(readStructureNew(groupBuilder, varElem));
    } else {
      parentStructure.addMemberVariable(readVariableNew(groupBuilder, dtype, varElem));
    }
    return;
  }

  // refv exists
  if (dtype == null) {
    dtype = refv.getDataType();
  }

  if (dtype == DataType.STRUCTURE || dtype == DataType.SEQUENCE) {
    readStructureExisting(groupBuilder, parentStructure, dtype, (Structure) refv, varElem)
        .ifPresent(parentStructure::addMemberVariable);
  } else {
    readVariableExisting(groupBuilder, parentStructure, dtype, refv, varElem)
        .ifPresent(parentStructure::addMemberVariable);
  }
}
 
Example 12
Source File: H5headerNew.java    From netcdf-java with BSD 3-Clause "New" or "Revised" License 4 votes vote down vote up
private TypeInfo calcNCtype(MessageDatatype mdt) {
  int hdfType = mdt.type;
  int byteSize = mdt.byteSize;
  byte[] flags = mdt.flags;
  // boolean unsigned = mdt.unsigned;

  TypeInfo tinfo = new TypeInfo(hdfType, byteSize);

  if (hdfType == 0) { // int, long, short, byte
    tinfo.dataType = getNCtype(hdfType, byteSize, mdt.unsigned);
    tinfo.endian = ((flags[0] & 1) == 0) ? RandomAccessFile.LITTLE_ENDIAN : RandomAccessFile.BIG_ENDIAN;
    tinfo.unsigned = ((flags[0] & 8) == 0);

  } else if (hdfType == 1) { // floats, doubles
    tinfo.dataType = getNCtype(hdfType, byteSize, mdt.unsigned);
    tinfo.endian = ((flags[0] & 1) == 0) ? RandomAccessFile.LITTLE_ENDIAN : RandomAccessFile.BIG_ENDIAN;

  } else if (hdfType == 2) { // time
    tinfo.dataType = DataType.STRING;
    tinfo.endian = ((flags[0] & 1) == 0) ? RandomAccessFile.LITTLE_ENDIAN : RandomAccessFile.BIG_ENDIAN;

  } else if (hdfType == 3) { // fixed length strings map to CHAR. String is used for Vlen type = 1.
    tinfo.dataType = DataType.CHAR;
    tinfo.vpad = (flags[0] & 0xf);
    // when elem length = 1, there is a problem with dimensionality.
    // eg char cr(2); has a storage_size of [1,1].

  } else if (hdfType == 4) { // bit field
    tinfo.dataType = getNCtype(hdfType, byteSize, mdt.unsigned);

  } else if (hdfType == 5) { // opaque
    tinfo.dataType = DataType.OPAQUE;

  } else if (hdfType == 6) { // structure
    tinfo.dataType = DataType.STRUCTURE;

  } else if (hdfType == 7) { // reference
    tinfo.endian = RandomAccessFile.LITTLE_ENDIAN;
    tinfo.dataType = DataType.LONG; // file offset of the referenced object
    // LOOK - should get the object, and change type to whatever it is (?)

  } else if (hdfType == 8) { // enums
    if (tinfo.byteSize == 1)
      tinfo.dataType = DataType.ENUM1;
    else if (tinfo.byteSize == 2)
      tinfo.dataType = DataType.ENUM2;
    else if (tinfo.byteSize == 4)
      tinfo.dataType = DataType.ENUM4;
    else {
      log.warn("Illegal byte suze for enum type = {}", tinfo.byteSize);
      throw new IllegalStateException("Illegal byte suze for enum type = " + tinfo.byteSize);
    }

    // enumMap = mdt.map;

  } else if (hdfType == 9) { // variable length array
    tinfo.isVString = mdt.isVString;
    tinfo.isVlen = mdt.isVlen;
    if (mdt.isVString) {
      tinfo.vpad = ((flags[0] >> 4) & 0xf);
      tinfo.dataType = DataType.STRING;
    } else {
      tinfo.dataType = getNCtype(mdt.getBaseType(), mdt.getBaseSize(), mdt.base.unsigned);
      tinfo.endian = mdt.base.endian;
      tinfo.unsigned = mdt.base.unsigned;
    }
  } else if (hdfType == 10) { // array : used for structure members
    tinfo.endian = (mdt.getFlags()[0] & 1) == 0 ? RandomAccessFile.LITTLE_ENDIAN : RandomAccessFile.BIG_ENDIAN;
    if (mdt.isVString()) {
      tinfo.dataType = DataType.STRING;
    } else {
      int basetype = mdt.getBaseType();
      tinfo.dataType = getNCtype(basetype, mdt.getBaseSize(), mdt.unsigned);
    }
  } else if (warnings) {
    log.debug("WARNING not handling hdf dataType = " + hdfType + " size= " + byteSize);
  }

  if (mdt.base != null) {
    tinfo.base = calcNCtype(mdt.base);
  }
  return tinfo;
}
 
Example 13
Source File: H5headerNew.java    From netcdf-java with BSD 3-Clause "New" or "Revised" License 4 votes vote down vote up
DataType getNCtype(int hdfType, int size, boolean unsigned) {
  if ((hdfType == 0) || (hdfType == 4)) { // integer, bit field
    DataType.Signedness signedness = unsigned ? DataType.Signedness.UNSIGNED : DataType.Signedness.SIGNED;

    if (size == 1)
      return DataType.BYTE.withSignedness(signedness);
    else if (size == 2)
      return DataType.SHORT.withSignedness(signedness);
    else if (size == 4)
      return DataType.INT.withSignedness(signedness);
    else if (size == 8)
      return DataType.LONG.withSignedness(signedness);
    else if (warnings) {
      log.debug("WARNING HDF5 file " + raf.getLocation() + " not handling hdf integer type (" + hdfType
          + ") with size= " + size);
      log.warn(
          "HDF5 file " + raf.getLocation() + " not handling hdf integer type (" + hdfType + ") with size= " + size);
      return null;
    }

  } else if (hdfType == 1) {
    if (size == 4)
      return DataType.FLOAT;
    else if (size == 8)
      return DataType.DOUBLE;
    else if (warnings) {
      log.debug("WARNING HDF5 file " + raf.getLocation() + " not handling hdf float type with size= " + size);
      log.warn("HDF5 file " + raf.getLocation() + " not handling hdf float type with size= " + size);
      return null;
    }

  } else if (hdfType == 3) { // fixed length strings. String is used for Vlen type = 1
    return DataType.CHAR;

  } else if (hdfType == 6) {
    return DataType.STRUCTURE;

  } else if (hdfType == 7) { // reference
    return DataType.ULONG;

  } else if (hdfType == 9) {
    return null; // dunno

  } else if (warnings) {
    log.debug("WARNING not handling hdf type = " + hdfType + " size= " + size);
    log.warn("HDF5 file " + raf.getLocation() + " not handling hdf type = " + hdfType + " size= " + size);
  }
  return null;
}
 
Example 14
Source File: NetcdfCopier.java    From netcdf-java with BSD 3-Clause "New" or "Revised" License 4 votes vote down vote up
private Variable.Builder copyVariable(Group.Builder parent, Variable oldVar) throws IOException {
  Variable.Builder vb;
  DataType newType = oldVar.getDataType();
  String dimNames = Dimensions.makeDimensionsString(oldVar.getDimensions());

  if (newType == DataType.STRUCTURE) {
    Structure oldStruct = (Structure) oldVar;
    Structure.Builder sb = Structure.builder().setName(oldVar.getShortName());
    for (Variable nested : oldStruct.getVariables()) {
      sb.addMemberVariable(copyVariable(parent, nested));
    }
    vb = sb;
  } else {
    vb = Variable.builder().setName(oldVar.getShortName()).setDataType(newType);
    if (!extended && newType == DataType.STRING) {
      // find maximum length
      Array data = oldVar.read();
      IndexIterator ii = data.getIndexIterator();
      int max_len = 0;
      while (ii.hasNext()) {
        String s = (String) ii.getObjectNext();
        max_len = Math.max(max_len, s.length());
      }

      // add last dimension
      String strlenDimName = oldVar.getShortName() + "_strlen";
      parent.addDimension(Dimension.builder(strlenDimName, max_len).setIsShared(false).build());

      newType = DataType.CHAR;
      vb.setDataType(DataType.CHAR);
      dimNames += " " + strlenDimName;
    }
  }
  vb.setParentGroupBuilder(parent).setDimensionsByName(dimNames);

  if (newType.isEnum()) {
    EnumTypedef en = oldVar.getEnumTypedef();
    vb.setEnumTypeName(en.getShortName());
  }

  // attributes
  for (Attribute att : oldVar.attributes()) {
    vb.addAttribute(convertAttribute(att));
    if (debug) {
      System.out.println("add varAtt= " + att);
    }
  }

  return vb;
}
 
Example 15
Source File: Evaluator.java    From netcdf-java with BSD 3-Clause "New" or "Revised" License 2 votes vote down vote up
/**
 * Does this dataset have a record structure? netcdf-3 specific
 * 
 * @param ds in this dataset
 * @return true if record structure exists
 */
public static boolean hasNetcdf3RecordStructure(NetcdfDataset ds) {
  Variable v = ds.findVariable("record");
  return (v != null) && (v.getDataType() == DataType.STRUCTURE);
}