package com.venky.swf.plugins.lucene.extensions; import java.lang.reflect.Proxy; import com.venky.extension.Extension; import com.venky.swf.db.model.Model; import com.venky.swf.db.model.reflection.ModelReflector; import com.venky.swf.db.table.ModelInvocationHandler; import com.venky.swf.db.table.Record; import com.venky.swf.plugins.lucene.index.LuceneIndexer; public abstract class IndexExtension implements Extension{ protected Class<? extends Model> getRealModelClass(Model proxy){ if (Proxy.isProxyClass(proxy.getClass())){ ModelInvocationHandler handler = (ModelInvocationHandler)Proxy.getInvocationHandler(proxy); return handler.getReflector().getRealModelClass(); }else { throw new RuntimeException("Model parameter is not a Dynamic proxy"); } } public void invoke(Object... context) { Model proxy = (Model)context[0]; Class<? extends Model> realModelClass = getRealModelClass(proxy); if (realModelClass != null){ LuceneIndexer indexer = LuceneIndexer.instance(ModelReflector.instance(realModelClass)); updateIndex(indexer,proxy.getRawRecord()); } } protected abstract void updateIndex(LuceneIndexer indexer, Record record); }