Mercurial Hosting > luan
view src/luan/modules/lucene/LuanOpDoer.java @ 1551:9cc4cee39b8b
add LuanOpDoer
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Sun, 04 Oct 2020 16:29:54 -0600 |
parents | |
children | 52241b69c339 |
line wrap: on
line source
package luan.modules.lucene; import java.io.IOException; import java.util.Map; import org.apache.lucene.search.Query; import goodjava.lucene.api.GoodIndexWriter; import goodjava.lucene.logging.OpDoer; import goodjava.lucene.logging.BasicOpDoer; import luan.LuanFunction; import luan.LuanException; import luan.LuanRuntimeException; final class LuanOpDoer implements OpDoer { private final OpDoer opDoer; private final LuanFunction fn; LuanOpDoer(GoodIndexWriter writer,LuanFunction fn) { this.opDoer = new BasicOpDoer(writer); this.fn = fn; } public GoodIndexWriter writer() { return opDoer.writer(); } public void commit() throws IOException { try { fn.call(new CommitAction(opDoer)); } catch(LuanException e) { throw new LuanRuntimeException(e); } } public void deleteAll(long time) throws IOException { try { fn.call(new DeleteAllAction(opDoer,time)); } catch(LuanException e) { throw new LuanRuntimeException(e); } } public void deleteDocuments(long time,Query query) throws IOException { try { fn.call(new DeleteDocumentsAction(opDoer,time,query)); } catch(LuanException e) { throw new LuanRuntimeException(e); } } public void addDocument(long time,Map<String,Object> storedFields) throws IOException { try { fn.call(new AddDocumentAction(opDoer,time,storedFields)); } catch(LuanException e) { throw new LuanRuntimeException(e); } } public void updateDocument(long time,String keyFieldName,Map<String,Object> storedFields) throws IOException { try { fn.call(new UpdateDocumentAction(opDoer,time,keyFieldName,storedFields)); } catch(LuanException e) { throw new LuanRuntimeException(e); } } public void tag(long time,String tag) throws IOException { try { fn.call(new TagAction(opDoer,time,tag)); } catch(LuanException e) { throw new LuanRuntimeException(e); } } public static abstract class Action { public final OpDoer opDoer; public final String name; private Action(OpDoer opDoer,String name) { this.opDoer = opDoer; this.name = name; } public abstract void run() throws IOException; } public static final class CommitAction extends Action { private CommitAction(OpDoer opDoer) { super(opDoer,"commit"); } public void run() throws IOException { opDoer.commit(); } } public static final class DeleteAllAction extends Action { public final long time; private DeleteAllAction(OpDoer opDoer,long time) { super(opDoer,"deleteAll"); this.time = time; } public void run() throws IOException { opDoer.deleteAll(time); } } public static final class DeleteDocumentsAction extends Action { public final long time; public final Query query; private DeleteDocumentsAction(OpDoer opDoer,long time,Query query) { super(opDoer,"deleteDocuments"); this.time = time; this.query = query; } public void run() throws IOException { opDoer.deleteDocuments(time,query); } } public static final class AddDocumentAction extends Action { public final long time; public final Map<String,Object> storedFields; private AddDocumentAction(OpDoer opDoer,long time,Map<String,Object> storedFields) { super(opDoer,"addDocument"); this.time = time; this.storedFields = storedFields; } public void run() throws IOException { opDoer.addDocument(time,storedFields); } } public static final class UpdateDocumentAction extends Action { public final long time; public final String keyFieldName; public final Map<String,Object> storedFields; private UpdateDocumentAction(OpDoer opDoer,long time,String keyFieldName,Map<String,Object> storedFields) { super(opDoer,"updateDocument"); this.time = time; this.keyFieldName = keyFieldName; this.storedFields = storedFields; } public void run() throws IOException { opDoer.updateDocument(time,keyFieldName,storedFields); } } public static final class TagAction extends Action { public final long time; public final String tag; private TagAction(OpDoer opDoer,long time,String tag) { super(opDoer,"tag"); this.time = time; this.tag = tag; } public void run() throws IOException { opDoer.tag(time,tag); } } }