extensions/net.sf.basedb.reggie/trunk/src/net/sf/basedb/reggie/converter/LookupConverter.java

Code
Comments
Other
Rev Date Author Line
1904 13 Mar 13 nicklas 1 package net.sf.basedb.reggie.converter;
1904 13 Mar 13 nicklas 2
1904 13 Mar 13 nicklas 3 import java.util.Map;
1904 13 Mar 13 nicklas 4
1905 13 Mar 13 nicklas 5 import net.sf.basedb.core.InvalidDataException;
1904 13 Mar 13 nicklas 6
1905 13 Mar 13 nicklas 7
1904 13 Mar 13 nicklas 8 /**
1904 13 Mar 13 nicklas 9   Value converter implementation for looking up values in
1905 13 Mar 13 nicklas 10   a map if given a key. If an error message template is
1905 13 Mar 13 nicklas 11   given, the converter will throw an {@link InvalidDataException}
1905 13 Mar 13 nicklas 12   when no value exists for a key. The template may contain the
1905 13 Mar 13 nicklas 13   marker '{KEY}' which is replaced with the string representation of
1905 13 Mar 13 nicklas 14   the current key value.
1904 13 Mar 13 nicklas 15   
1904 13 Mar 13 nicklas 16   @author Nicklas
1904 13 Mar 13 nicklas 17   @since 2.12
1904 13 Mar 13 nicklas 18 */
1904 13 Mar 13 nicklas 19 public class LookupConverter<F, T>
1904 13 Mar 13 nicklas 20   implements ValueConverter<F, T> 
1904 13 Mar 13 nicklas 21 {
1904 13 Mar 13 nicklas 22
1904 13 Mar 13 nicklas 23   private final Map<F, T> map;
2825 16 Oct 14 nicklas 24   private final Map<F, String> errors;
3362 01 Jun 15 nicklas 25   private final String errorTemplate;
3362 01 Jun 15 nicklas 26
3362 01 Jun 15 nicklas 27   public LookupConverter(Map<F, T> map, Map<F, String> errors, String errorTemplate)
1904 13 Mar 13 nicklas 28   {
1904 13 Mar 13 nicklas 29     this.map = map;
2825 16 Oct 14 nicklas 30     this.errors = errors;
3362 01 Jun 15 nicklas 31     this.errorTemplate = errorTemplate;
1904 13 Mar 13 nicklas 32   }
1904 13 Mar 13 nicklas 33   
1904 13 Mar 13 nicklas 34   @Override
1904 13 Mar 13 nicklas 35   public T convert(F key)
1904 13 Mar 13 nicklas 36   {
1905 13 Mar 13 nicklas 37     T value = map.get(key);
3362 01 Jun 15 nicklas 38     if (value == null)
1905 13 Mar 13 nicklas 39     {
3362 01 Jun 15 nicklas 40       String msg = errors != null && errors.containsKey(key) ? errors.get(key) : errorTemplate;
3362 01 Jun 15 nicklas 41       if (msg != null)
3362 01 Jun 15 nicklas 42       {
3362 01 Jun 15 nicklas 43         msg = msg.replace("{KEY}", key.toString());
3362 01 Jun 15 nicklas 44         throw new InvalidDataException(msg);
3362 01 Jun 15 nicklas 45       }
1905 13 Mar 13 nicklas 46     }
1905 13 Mar 13 nicklas 47     return value;
1904 13 Mar 13 nicklas 48   }
1904 13 Mar 13 nicklas 49
1904 13 Mar 13 nicklas 50 }