// TODO: run dbBot() sclass ConceptsLoadedOnDemand { new Map loaded; // key = just the case ID. value can be null in case of error Lock lock = lock(); Concepts get(S caseID) { ret conceptsForCase(caseID); } Concepts conceptsForCase(S caseID) { lock lock; assertNempty(+caseID); if (loaded.containsKey(caseID)) ret assertNotNull("Concepts load error", loaded.get(caseID)); S id = getDBProgramID() + "/" + caseID; print("Loading concepts for case " + id); Concepts c = new Concepts(id); loaded.put(caseID, c); ret c; } }