diff --git a/common/source/java/ch/systemsx/cisd/common/parser/AbstractParserObjectFactory.java b/common/source/java/ch/systemsx/cisd/common/parser/AbstractParserObjectFactory.java index 4b38e3056419f92b642064783fb67e4178371974..26eca52fb3bf442f6866e48300b5b390a622587b 100644 --- a/common/source/java/ch/systemsx/cisd/common/parser/AbstractParserObjectFactory.java +++ b/common/source/java/ch/systemsx/cisd/common/parser/AbstractParserObjectFactory.java @@ -126,11 +126,25 @@ public abstract class AbstractParserObjectFactory<E> implements IParserObjectFac propertyNames.removeAll(propertyDescriptors.keySet()); if (propertyNames.size() > 0) { - throw UserFailureException.fromTemplate("Following properties '%s' are not part of '%s'.", propertyNames, - clazz.getSimpleName()); + throw UserFailureException.fromTemplate("The following header columns are not part of '%s': %s", + clazz.getSimpleName(), format(propertyNames)); } } + private final String format(Set<String> set) + { + final StringBuilder builder = new StringBuilder(); + for (String s : set) + { + builder.append("'"); + builder.append(s); + builder.append("', "); + } + // Remove trailing ", " + builder.setLength(builder.length() - 2); + return builder.toString(); + } + /** * Analyzes given <code>Class</code> and returns a <code>Map</code> containing the mandatory <code>Field</code>s * keyed by {@link Field#getName()}.