package nl.ipo.cds.validation.gml.codelists;
import java.util.HashMap;
import java.util.Map;
public abstract class CachingCodeListFactory implements CodeListFactory {
private final Map<String, CodeList> codeLists = new HashMap<> ();
@Override
public CodeList getCodeList (final String codeSpace) throws CodeListException {
if (codeLists.containsKey (codeSpace)) {
final CodeList codeList = codeLists.get (codeSpace);
if (codeList == null) {
throw new CodeListException (codeSpace, codeSpace, String.format ("Code list %s not found", codeSpace));
}
return codeList;
}
try {
final CodeList codeList = doGetCodeList (codeSpace);
codeLists.put (codeSpace, codeList);
return codeList;
} catch (CodeListException e) {
codeLists.put (codeSpace, null);
throw e;
}
}
protected abstract CodeList doGetCodeList (String codeSpace) throws CodeListException;
}