package services; import java.io.IOException; import java.io.PrintWriter; import java.text.ParseException; import java.util.List; import matrix.DataMatrixInstance; import matrix.general.DataMatrixHandler; import org.molgenis.data.Data; import org.molgenis.framework.db.Database; import org.molgenis.framework.db.DatabaseException; import org.molgenis.framework.db.QueryRule; import org.molgenis.framework.db.QueryRule.Operator; import org.molgenis.framework.server.MolgenisContext; import org.molgenis.framework.server.MolgenisRequest; import org.molgenis.framework.server.MolgenisResponse; import org.molgenis.framework.server.MolgenisService; import org.molgenis.util.HttpServletRequestTuple; import org.molgenis.util.Tuple; public class getmatrixinfo implements MolgenisService { // TODO: Danny: unused, but i guess we do want to use it // private static Logger logger = Logger.getLogger(getmatrixinfo.class); private DataMatrixHandler dmh; private MolgenisContext mc; public getmatrixinfo(MolgenisContext mc) { this.mc = mc; } @Override public void handleRequest(MolgenisRequest request, MolgenisResponse response) throws ParseException, DatabaseException, IOException { boolean databaseIsAvailable = false; boolean setupSuccess = false; Database db = null; DataMatrixInstance instance = null; try { db = request.getDatabase(); databaseIsAvailable = true; } catch (Exception e) { PrintWriter out = response.getResponse().getWriter(); response.getResponse().setContentType("text/plain"); out.print("Database unavailable."); out.print("\n\n"); e.printStackTrace(out); out.close(); } if (databaseIsAvailable) { try { int matrixId = request.getInt("id"); QueryRule q = new QueryRule("id", Operator.EQUALS, matrixId); List<Data> dataList = db.find(Data.class, q); if (dataList.size() != 1) { throw new Exception("Datamatrix for ID " + matrixId + " was not found."); } Data data = dataList.get(0); dmh = new DataMatrixHandler(db); instance = dmh.createInstance(data, db); setupSuccess = true; } catch (Exception e) { PrintWriter out = response.getResponse().getWriter(); response.getResponse().setContentType("text/plain"); displayUsage(out, db); out.print("\n\n"); e.printStackTrace(out); out.close(); } } if (setupSuccess) { PrintWriter out = response.getResponse().getWriter(); response.getResponse().setContentType("text/plain"); try { out.println("matrix info"); out.println("name = " + instance.getData().getName()); out.println("numberofcols = " + instance.getNumberOfCols()); out.println("numberofrows = " + instance.getNumberOfRows()); out.println("colnames = " + "TODO"); out.println("rownames = " + "TODO"); out.print("\n\n"); out.close(); } catch (Exception e) { displayUsage(out, db); out.print("\n\n"); e.printStackTrace(out); } finally { out.close(); } } } public void displayUsage(PrintWriter out, Database db) { String usage = "Downloadable matrices available in this database:\n\n" + matricesFromDb(db) + "\n"; out.print(usage); } public String matricesFromDb(Database db) { String res = ""; try { List<Data> dataList = db.find(Data.class); for (Data data : dataList) { if (!dmh.findSource(data, db).equals("null")) { res += data.toString() + "\n"; } } } catch (Exception e) { res += "An error occurred when retrieving matrix information:\n\n"; res += e.getMessage(); } return res; } }