/* Date: October 28, 2010 * Template: PluginScreenJavaTemplateGen.java.ftl * generator: org.molgenis.generators.ui.PluginScreenJavaTemplateGen 3.3.3 * * THIS FILE IS A TEMPLATE. PLEASE EDIT :-) */ package plugin.search; import java.util.ArrayList; import java.util.List; import java.util.Vector; import org.molgenis.framework.db.Database; import org.molgenis.framework.db.DatabaseException; import org.molgenis.framework.ui.PluginModel; import org.molgenis.framework.ui.ScreenController; import org.molgenis.framework.ui.ScreenMessage; import org.molgenis.framework.ui.ScreenModel; import org.molgenis.model.elements.Field; import org.molgenis.util.Entity; import org.molgenis.util.Tuple; import app.JDBCMetaDatabase; public class SimpleWholeDatabaseSearch extends PluginModel<Entity> { private static final long serialVersionUID = 4004696283997492221L; public SimpleWholeDatabaseSearch(String name, ScreenController<?> parent) { super(name, parent); } private SimpleWholeDatabaseSearchModel model = new SimpleWholeDatabaseSearchModel(); JDBCMetaDatabase metadb; public SimpleWholeDatabaseSearchModel getMyModel() { return model; } public String getCustomHtmlHeaders() { return ""; } @Override public String getViewName() { return "plugin_search_SimpleWholeDatabaseSearch"; } @Override public String getViewTemplate() { return "plugin/search/SimpleWholeDatabaseSearch.ftl"; } @Override public void handleRequest(Database db, Tuple request) { try { if (request.getString("__action") != null) { String action = request.getString("__action"); if (action.equals("doSearch")) { String searchThis = request.getString("searchThis"); this.model.searchThis = searchThis; long start = System.currentTimeMillis(); List<org.molgenis.util.Entity> results = search(searchThis, db); long stop = System.currentTimeMillis(); double time = (stop - start) / 1000.0; System.out.println("TIME " + time); this.model.setTime(time); this.model.setResults(results); this.setMessages(new ScreenMessage("Search complete", true)); } } } catch (Exception e) { e.printStackTrace(); this.setMessages(new ScreenMessage(e.getMessage() != null ? e.getMessage() : "null", false)); } } private List<Entity> search(String searchThis, Database db) throws DatabaseException { List<org.molgenis.util.Entity> res = new ArrayList<org.molgenis.util.Entity>(); for (org.molgenis.model.elements.Entity eClass : db.getMetaData().getEntities(false, false)) { String name = eClass.getName(); Class<? extends Entity> entityClass = db.getClassForName(name); // user must have at least have read permissions if (this.getLogin().canRead(entityClass)) { List<? extends org.molgenis.util.Entity> eInstances = db.find(entityClass); for (org.molgenis.util.Entity e : eInstances) { for (String field : e.getFields()) { // match if: // 1. Field value is not NULL // 2. Class is equal to Type, hereby removing // superclasses from results // 3. Lowercased value matches the lowercased search // string if (e.get(field) != null && e.get(Field.TYPE_FIELD).toString().equals(name) && e.get(field).toString().toLowerCase().contains(searchThis.toLowerCase())) { res.add(e); break; } } } } } return res; } @Override public void reload(Database db) { try { if (metadb == null) { metadb = new JDBCMetaDatabase(); } } catch (Exception e) { e.printStackTrace(); this.setMessages(new ScreenMessage(e.getMessage() != null ? e.getMessage() : "null", false)); } } }