public MetadataElement getAsMetadataElement(CompoundData compoundData) throws IOException { CompoundType type = compoundData.getType(); final int memberCount = type.getMemberCount(); MetadataElement metadataElement = new MetadataElement(type.getName()); for (int i = 0; i < memberCount; i++) { String typeName = type.getMemberName(i); CompoundMember member = type.getMember(i); FormatMetadata formatMetadata = (FormatMetadata) member.getMetadata(); if (typeName.equals("fill")) { // ignore } else if (formatMetadata != null && formatMetadata.getType().equals("string")) { String stringValue = getAsString(compoundData.getSequence(i)); Map<Object, String> map = getMetaData(member).getItemMap(); if (map != null) { stringValue = map.get(stringValue); } ProductData data = ProductData.createInstance(stringValue); MetadataAttribute attribute = new MetadataAttribute(typeName, data, true); attribute.setDescription(getDescription(member)); attribute.setUnit(getUnits(member)); metadataElement.addAttribute(attribute); } else if (member.getType().getName().equals("DATE")) { CompoundData dateCompound = compoundData.getCompound(i); ProductData data = createDate(dateCompound); MetadataAttribute attribute = new MetadataAttribute(typeName, data, true); attribute.setDescription(getDescription(member)); attribute.setUnit(getUnits(member)); metadataElement.addAttribute(attribute); } else if (member.getType().isSequenceType()) { SequenceData sequence = compoundData.getSequence(i); for (int j = 0; j < sequence.getType().getElementCount(); j++) { CompoundData compound = sequence.getCompound(j); metadataElement.addElement(getAsMetadataElement(compound)); } } else if (member.getType().isCompoundType()) { metadataElement.addElement(getAsMetadataElement(compoundData.getCompound(i))); } else if (member.getType().isSimpleType()) { int intValue = compoundData.getInt(i); Map<Object, String> map = getMetaData(member).getItemMap(); ProductData data; if (map != null) { String stringValue = map.get(intValue); data = ProductData.createInstance(stringValue); } else { double scalingFactor = getMetaData(member).getScalingFactor(); if (scalingFactor == 1.0) { data = ProductData.createInstance(new int[] {intValue}); } else { data = ProductData.createInstance(new double[] {intValue * scalingFactor}); } } MetadataAttribute attribute = new MetadataAttribute(typeName, data, true); attribute.setDescription(getDescription(member)); attribute.setUnit(getUnits(member)); metadataElement.addAttribute(attribute); } else { System.out.println("not handled: name=" + typeName); System.out.println("member = " + member.getType()); } } return metadataElement; }
private static String getDescription(CompoundMember member) { FormatMetadata metaData = getMetaData(member); return metaData.getDescription(); }
private static String getUnits(CompoundMember member) { FormatMetadata metaData = getMetaData(member); return metaData.getUnits(); }
private static double getScalingFactor(CompoundMember member) { FormatMetadata metaData = getMetaData(member); return metaData.getScalingFactor(); }