package com.venky.swf.plugins.lucene.configuration; import java.io.IOException; import java.util.List; import com.venky.swf.configuration.Installer; import com.venky.swf.db.Database; import com.venky.swf.db.model.Model; import com.venky.swf.db.model.reflection.ModelReflector; import com.venky.swf.db.table.Table; import com.venky.swf.plugins.lucene.db.model.IndexDirectory; import com.venky.swf.plugins.lucene.index.LuceneIndexer; import com.venky.swf.sql.Expression; import com.venky.swf.sql.Operator; import com.venky.swf.sql.Select; public class AppInstaller implements Installer{ public void install(){ Table<IndexDirectory> table = Database.getTable(IndexDirectory.class); for (String tableName: Database.getTableNames()){ if (tableName.equals(table.getTableName())){ continue; } Table<? extends Model> currentTable = Database.getTable(tableName); if (!tableName.equals(currentTable.getRealTableName())){ continue; } //Do this only for real Tables. if (currentTable.getReflector() == null){ continue; } LuceneIndexer indexer = LuceneIndexer.instance(currentTable.getReflector()); if (indexer.hasIndexedFields()){ mkdir(currentTable); } } mkdir("MODEL"); } private boolean mkdir(String tableName){ boolean created = false; ModelReflector<IndexDirectory> ref = ModelReflector.instance(IndexDirectory.class); List<IndexDirectory> dirs = new Select().from(IndexDirectory.class).where(new Expression(ref.getPool(),ref.getColumnDescriptor("NAME").getName(),Operator.EQ,tableName)).execute(); if (dirs.isEmpty()){ IndexDirectory rec = Database.getTable(IndexDirectory.class).newRecord(); rec.setName(tableName); rec.save(); created = true; } return created; } private <M extends Model> void mkdir(Table<M> currentTable){ if (mkdir(currentTable.getTableName())){ List<Model> records = new Select().from(currentTable.getModelClass()).execute(); for (Model m:records){ try { LuceneIndexer.instance(currentTable.getModelClass()).addDocument(m.getRawRecord()); } catch (IOException e) { e.printStackTrace(); break; } } } } }