package org.esa.beam.smos.ee2netcdf.variable; import org.esa.beam.dataio.netcdf.nc.NVariable; import ucar.ma2.DataType; public class VariableWriterFactory { public static VariableWriter create(NVariable nVariable, VariableDescriptor variableDescriptor, int gridPointCount, int btDataCount) { final DataType dataType = variableDescriptor.getDataType(); final int memberIndex = variableDescriptor.getBtDataMemberIndex(); final boolean is2d = variableDescriptor.isIs2d(); float fillValue = 0.f; if (variableDescriptor.isFillValuePresent()) { fillValue = variableDescriptor.getFillValue(); } if (is2d) { if (dataType == DataType.FLOAT) { if (variableDescriptor.isGridPointData()) { return new FloatStructSequence2DWriter(nVariable, gridPointCount, btDataCount, memberIndex, fillValue); } else { return new FloatStructMember2DWriter(nVariable, gridPointCount, btDataCount, memberIndex, fillValue); } } else if (dataType == DataType.INT) { return new IntStructSequence2DWriter(nVariable, gridPointCount, btDataCount, memberIndex, (int) fillValue); } else if (dataType == DataType.SHORT) { return new ShortStructSequence2DWriter(nVariable, gridPointCount, btDataCount, memberIndex, (short) fillValue); } else if (dataType == DataType.BYTE) { throw new IllegalArgumentException("Unsupported data type for writer: " + dataType); } } else { if (dataType == DataType.FLOAT) { return new FloatStructMemberWriter(nVariable, memberIndex, gridPointCount, fillValue); } else if (dataType == DataType.INT) { return new IntStructMemberWriter(nVariable, memberIndex, gridPointCount, (int) fillValue); } else if (dataType == DataType.SHORT) { return new ShortStructMemberWriter(nVariable, memberIndex, gridPointCount, (short) fillValue); } else if (dataType == DataType.BYTE) { return new ByteStructMemberWriter(nVariable, memberIndex, gridPointCount, (byte) fillValue); } else if (dataType == DataType.LONG) { return new LongStructMemberWriter(nVariable, memberIndex, gridPointCount, (long) fillValue); } else if (dataType == DataType.DOUBLE) { return new DoubleStructMemberWriter(nVariable, memberIndex, gridPointCount, fillValue); } } throw new IllegalArgumentException("Unsupported data type for writer: " + dataType); } }