sclass WebThoughtSpace extends OptionalConcept { S globalID; new Webs webs; new L openQuestions; transient Map websByID; transient MultiMap index; class Webs extends NotifyingList { *() { super(new L); } *(L l) { super(l); } public synchronized bool add(Web web) { synchronized(this) { if (!list.add(web)) false; } lock dbLock(); if (index != null) ai_addWebToIndex(index, web); if (websByID != null) websByID.put(web.globalID, web); _change(); true; } void change() { lock dbLock(); index = null; websByID = null; _change(); } public synchronized L subList(int i, int j) { ret new Webs(list.subList(i, j)); } } *() {} *(Web... webs) { addAll(this.webs, webs); } void addWeb(Web web) { webs.add(web); } WebNode indexedNode(S query) { ret first(indexedNodes(query)); } L indexedNodes(S query) { lock dbLock(); if (index == null) index = ai_indexWebs(webs); ret index.get(query); } }