private static void addFlagCoding(Product product, FlagCoding flagCoding, String flagCodingName) { final FlagCoding targetFlagCoding = new FlagCoding(flagCodingName); targetFlagCoding.setDescription(flagCoding.getDescription()); ProductUtils.copyMetadata(flagCoding, targetFlagCoding); product.getFlagCodingGroup().add(targetFlagCoding); }
private static void addFlagCoding(Product product, FlagCoding flagCoding) { final FlagCoding targetFlagCoding = new FlagCoding(flagCoding.getName()); targetFlagCoding.setDescription(flagCoding.getDescription()); ProductUtils.copyMetadata(flagCoding, targetFlagCoding); product.getFlagCodingGroup().add(targetFlagCoding); }
public static void writeFlagCoding(Band band, NFileWriteable ncFile) throws IOException { final FlagCoding flagCoding = band.getFlagCoding(); if (flagCoding != null) { final String[] flagNames = flagCoding.getFlagNames(); ProductData flagValueData = ProductData.createInstance(band.getDataType(), flagNames.length); final StringBuilder meanings = new StringBuilder(); for (int i = 0; i < flagValueData.getNumElems(); i++) { if (meanings.length() > 0) { meanings.append(" "); } String name = flagNames[i]; meanings.append(name); flagValueData.setElemIntAt(i, flagCoding.getFlagMask(name)); } String variableName = ReaderUtils.getVariableName(band); String description = flagCoding.getDescription(); if (description != null) { ncFile.findVariable(variableName).addAttribute("long_name", description); } ncFile.findVariable(variableName).addAttribute(FLAG_MEANINGS, meanings.toString()); final Array maskValues = Array.factory(flagValueData.getElems()); maskValues.setUnsigned(flagValueData.isUnsigned()); ncFile.findVariable(variableName).addAttribute(FLAG_MASKS, maskValues); } }
protected void addFlagCodingsToProduct(Product product) { final ProductNodeGroup<FlagCoding> flagCodingGroup = getSourceProduct().getFlagCodingGroup(); for (int i = 0; i < flagCodingGroup.getNodeCount(); i++) { FlagCoding sourceFlagCoding = flagCodingGroup.get(i); FlagCoding destFlagCoding = new FlagCoding(sourceFlagCoding.getName()); destFlagCoding.setDescription(sourceFlagCoding.getDescription()); cloneFlags(sourceFlagCoding, destFlagCoding); product.getFlagCodingGroup().add(destFlagCoding); } }
/** * Copies the given source flag coding to the target product. * If it exists already, the method simply returns the existing instance. * * @param sourceFlagCoding the source flag coding * @param target the target product * * @return The flag coding. */ public static FlagCoding copyFlagCoding(FlagCoding sourceFlagCoding, Product target) { FlagCoding flagCoding = target.getFlagCodingGroup().get(sourceFlagCoding.getName()); if (flagCoding == null) { flagCoding = new FlagCoding(sourceFlagCoding.getName()); flagCoding.setDescription(sourceFlagCoding.getDescription()); target.getFlagCodingGroup().add(flagCoding); copyMetadata(sourceFlagCoding, flagCoding); } return flagCoding; }
public void testWriteFlagCoding() throws Exception { Band flagBand = new Band("flag_band", ProductData.TYPE_UINT8, 10, 10); FlagCoding flagCoding = new FlagCoding("some_flags"); flagBand.setSampleCoding(flagCoding); flagCoding.setDescription("A Flag Coding"); for (int i = 0; i < 8; i++) { addFlag(flagCoding, i); } NetcdfFileWriteable writeable = NetcdfFileWriteable.createNew("not stored"); writeable.addDimension("y", flagBand.getSceneRasterHeight()); writeable.addDimension("x", flagBand.getSceneRasterWidth()); final DataType ncDataType = DataTypeUtils.getNetcdfDataType(flagBand.getDataType()); Variable variable = writeable.addVariable(flagBand.getName(), ncDataType, writeable.getRootGroup().getDimensions()); CfBandPart.writeCfBandAttributes(flagBand, new N3Variable(variable, writeable)); CfFlagCodingPart.writeFlagCoding(flagBand, new N3FileWriteable(writeable)); Variable someFlagsVariable = writeable.findVariable("flag_band"); assertNotNull(someFlagsVariable); Attribute flagMasksAttrib = someFlagsVariable.findAttribute("flag_masks"); assertNotNull(flagMasksAttrib); assertEquals(someFlagsVariable.getDataType(), flagMasksAttrib.getDataType()); assertEquals(8, flagMasksAttrib.getLength()); assertTrue(flagMasksAttrib.isUnsigned()); for (int i = 0; i < 8; i++) { assertEquals(1 << i, flagMasksAttrib.getValues().getInt(i)); } Attribute descriptionAttrib = someFlagsVariable.findAttribute("long_name"); assertNotNull(flagCoding.getDescription(), descriptionAttrib.getStringValue()); }