package GeDBIT.parallel.rmi; import java.io.IOException; import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; import java.util.logging.Level; import GeDBIT.app.QueryVPIndex; import GeDBIT.index.Index; import GeDBIT.index.TableManager; import GeDBIT.type.DNATable; import GeDBIT.type.DoubleVectorTable; import GeDBIT.type.ImageTable; import GeDBIT.type.PeptideTable; import GeDBIT.type.SpectraWithPrecursorMassTable; import GeDBIT.type.Table; public class LocalIndexImpl extends UnicastRemoteObject implements LocalIndex { private static final long serialVersionUID = 1061237826684535271L; public LocalIndexImpl() throws RemoteException { super(); } public void query(String[] args) throws RemoteException { String indexName = ""; String queryFileName = ""; String forPrint = ""; int firstQuery = 0; int lastQuery = 1; double minRadius = 0.0; double maxRadius = 10.0; double step = 1.0; boolean verify = false; Level debug = Level.OFF; int frag = 6; int dim = 2; int pathLength = 0; String dataType = "sequence"; String resultsFileName = null; for (int i = 0; i < args.length; i = i + 2) { if (args[i].equalsIgnoreCase("-d")) indexName = args[i + 1]; else if (args[i].equalsIgnoreCase("-q")) queryFileName = args[i + 1]; else if (args[i].equalsIgnoreCase("-t")) dataType = args[i + 1]; else if (args[i].equalsIgnoreCase("-forprint")) forPrint += args[i + 1] + ", "; else if (args[i].equalsIgnoreCase("-f")) firstQuery = Integer.parseInt(args[i + 1]); else if (args[i].equalsIgnoreCase("-l")) lastQuery = Integer.parseInt(args[i + 1]); else if (args[i].equalsIgnoreCase("-p")) pathLength = Integer.parseInt(args[i + 1]); else if (args[i].equalsIgnoreCase("-i")) minRadius = Double.parseDouble(args[i + 1]); else if (args[i].equalsIgnoreCase("-a")) maxRadius = Double.parseDouble(args[i + 1]); else if (args[i].equalsIgnoreCase("-s")) step = Double.parseDouble(args[i + 1]); else if (args[i].equalsIgnoreCase("-g")) debug = Level.parse(args[i + 1]); else if (args[i].equalsIgnoreCase("-frag")) frag = Integer.parseInt(args[i + 1]); else if (args[i].equalsIgnoreCase("-dim")) dim = Integer.parseInt(args[i + 1]); else if (args[i].equalsIgnoreCase("-v")) verify = (Integer.parseInt(args[i + 1]) == 1) ? true : false; else if (args[i].equalsIgnoreCase("-res")) resultsFileName = args[i + 1]; else if (args[i].equalsIgnoreCase("-st") || args[i].equalsIgnoreCase("-sv")) continue; else throw new IllegalArgumentException("Invalid option " + args[i]); } if (indexName == "") throw new IllegalArgumentException("Invalid Index file name!"); if (queryFileName == "") throw new IllegalArgumentException("Invalid Query file name!"); if ((firstQuery < 0) || (lastQuery < 0) || (lastQuery < firstQuery)) throw new IllegalArgumentException( "Invalid first query index or last query index!"); if ((minRadius < 0) || (maxRadius < 0) || (maxRadius < minRadius) || (step <= 0)) throw new IllegalArgumentException( "Invalid min radius, max radius, or radius increasement unit!"); Table dataTable = TableManager.getTableManager(indexName).getTable( indexName); Index index; if (dataTable != null) index = dataTable.getIndex(); else throw new Error("index: " + indexName + " does not exist"); Table queryTable = null; try { if (dataType.equalsIgnoreCase("protein")) queryTable = new PeptideTable(queryFileName, "", lastQuery, frag); else if (dataType.equalsIgnoreCase("vector")) queryTable = new DoubleVectorTable(queryFileName, "", lastQuery, dim); else if (dataType.equalsIgnoreCase("dna")) queryTable = new DNATable(queryFileName, "", lastQuery, frag); else if (dataType.equalsIgnoreCase("image")) queryTable = new ImageTable(queryFileName, "", lastQuery); else if (dataType.equalsIgnoreCase("msms")) queryTable = new SpectraWithPrecursorMassTable(queryFileName, "", lastQuery); else System.err.println("data type not supported! " + dataType); } catch (IOException e1) { e1.printStackTrace(); } QueryVPIndex evaluator = new QueryVPIndex(index, queryTable, minRadius, maxRadius, step, verify, debug, pathLength, frag, resultsFileName, firstQuery, lastQuery, forPrint); evaluator.evaluate(); } }