public void add(ImageMetadata metadata, int imageOrder) {
   String key = metadata.getKey();
   String source = metadata.getSource().toString();
   keyLength = Math.max(keyLength, key.length());
   sourceLength = Math.max(sourceLength, source.length());
   if (metadata.getUnit() != null)
     unitLength = Math.max(unitLength, metadata.getUnit().length());
   if (metadata.getValue() != null) {
     if (metadata.getUnit() != null) {
       valueWithUnitLength[imageOrder] =
           Math.max(valueWithUnitLength[imageOrder], metadata.getValue().toString().length());
     }
     valueLength = Math.max(valueLength, metadata.getValue().toString().length());
   }
   if (!metadataByKeyName.containsKey(key)) {
     metadataByKeyName.put(key, new HashMap<String, ImageMetadata[]>());
   }
   if (!metadataByKeyName.get(key).containsKey(source)) {
     metadataByKeyName.get(key).put(source, new ImageMetadata[2]);
   }
   metadataByKeyName.get(key).get(source)[imageOrder] = metadata;
 }