package no.priv.garshol.duke.cleaners; import java.util.Map; import java.util.HashMap; import java.io.FileReader; import java.io.IOException; import no.priv.garshol.duke.Cleaner; import no.priv.garshol.duke.DukeException; import no.priv.garshol.duke.utils.CSVReader; // FIXME: we may also want an option to allow unmapped values to be // returned as is (or even via the sub-cleaner) /** * A cleaner which loads a mapping file in CSV format and maps values * according to that file. * @since 0.5 */ public class MappingFileCleaner implements Cleaner { private Map<String, String> mapping; public String clean(String value) { String newvalue = mapping.get(value); if (newvalue == null) return value; return newvalue; } public void setMappingFile(String filename) { mapping = new HashMap(); // FIXME: character encoding? try { CSVReader csv = new CSVReader(new FileReader(filename)); String[] row = csv.next(); while (row != null) { mapping.put(row[0], row[1]); row = csv.next(); } csv.close(); } catch (IOException e) { throw new DukeException("Error loading mapping file " + filename, e); } } }