From: Mark G. <mg...@us...> - 2005-09-28 22:20:02
|
Update of /cvsroot/gmod/apollo/src/java/apollo/dataadapter/chado/jdbc In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv12043/src/java/apollo/dataadapter/chado/jdbc Modified Files: AbstractChadoInstance.java ChadoInstance.java JdbcChadoAdapter.java Log Message: moved seqType chado jdbc configuration from chado db to chado instance where it really belongs - i think seqType predates the chado instance and thats why it wasnt there to begin with. also "chromosomes" config is now "values" inside the seqtype itself - i think this only works for location seq types - which may be the only type that needs it - but can easily ammend it to work for other types (dont think one would want to config a gene list). Index: AbstractChadoInstance.java =================================================================== RCS file: /cvsroot/gmod/apollo/src/java/apollo/dataadapter/chado/jdbc/AbstractChadoInstance.java,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -d -r1.16 -r1.17 *** AbstractChadoInstance.java 23 Sep 2005 17:28:13 -0000 1.16 --- AbstractChadoInstance.java 28 Sep 2005 22:19:54 -0000 1.17 *************** *** 11,16 **** --- 11,18 ---- import apollo.datamodel.SequenceI; import apollo.datamodel.StrandedFeatureSet; + import apollo.dataadapter.DataInput; import apollo.dataadapter.chado.ChadoAdapter; import apollo.dataadapter.chado.ChadoTransaction; + import apollo.dataadapter.chado.SeqType; abstract class AbstractChadoInstance implements ChadoInstance { *************** *** 33,38 **** --- 35,44 ---- private String transProtRelationCvTerm = "derives_from"; // default private boolean retrieveAnnotations = true; + private String topLevelFeatType; + private String id; private final static Double Z = new Double(0.0); private final static Double D100 = new Double(100.0); + /** A list of seq types allowing the user to choose from */ + private List seqTypes; protected AbstractChadoInstance() {} *************** *** 51,54 **** --- 57,62 ---- } + public void setId(String id) { this.id = id; } + public void setChadoAdapter(JdbcChadoAdapter jdbcAdapter) { this.jdbcChadoAdapter = jdbcAdapter; *************** *** 305,308 **** --- 313,451 ---- } + public void setSeqTypeList(List seqTypes) { + this.seqTypes = seqTypes; + } + + public int getSeqTypesSize() { + if (seqTypes == null) + return 0; + return seqTypes.size(); + } + public SeqType getSeqType(int i) { return (SeqType)seqTypes.get(i); } + + /** Assumes theres only 1 location seq type - returns first it finds */ + public SeqType getLocationSeqType() { + for (int i=0; i<getSeqTypesSize(); i++) { + SeqType seqType = getSeqType(i); + if (seqType.hasStartAndEnd()) + return seqType; + } + return null; // shouldnt happen + } + + /** Top level feature type is needed for saving back to chado. Also for querying + locations from the command line (where type isnt given). This is configured + in chado-adapter cfg file under <seqTypes> <type> with <isTopLevel>true. + If top level is not configged tries to gleen from seq types - if theres any + seqTypes with start&end, uses that, if no locs then just looks for 'chromosome' + in type name, and if all that fails just sets to "chromosome". */ + public String getTopLevelFeatType() { + if (topLevelFeatType != null) + return topLevelFeatType; + + // check first if explicitly set with <isTopLevel> in chado config + for (int i=0; i<getSeqTypesSize(); i++) { + SeqType seqType = getSeqType(i); + if (seqType.isTopLevelFeatType()) { + topLevelFeatType = seqType.getName(); + return topLevelFeatType; + } + } + + // not explicitly set, usually the seqType with start&end is top level, and + // usually there is only one of these (if theres more than one print msg) + for (int i=0; i<getSeqTypesSize(); i++) { + SeqType seqType = getSeqType(i); + + if (seqType.hasStartAndEnd()) { + + // not set - 1st location - hopefully there is only 1 location + if (topLevelFeatType == null) { + topLevelFeatType = seqType.getName(); + } + + // there are 2 locations! yikes + else { + + String m = "2 locations specified in seq types for instance "+id; + + if (hasChromosomeInString(seqType.getName())) + topLevelFeatType = seqType.getName(); + + if (hasChromosomeInString(topLevelFeatType)) { + m += "using "+topLevelFeatType+" for top level feat because it has " + +"'chromosome' in it"; + } + + else {// chromosome not in either type + m += "Arbitrarily setting top level feat to "+topLevelFeatType+ + ". Set top level feat type explicitly with <isTopLevel>"; + } + + System.out.println(m); + } + + } + + } + if (topLevelFeatType != null) // got it with location + return topLevelFeatType; + + // isTopLevel not explicitly set nor is there a location - look for chrom + for (int i=0; i<getSeqTypesSize(); i++) { + SeqType seqType = getSeqType(i); + if (hasChromosomeInString(seqType.getName())) { + topLevelFeatType = seqType.getName(); + + System.out.println("Setting top level feat type to "+topLevelFeatType+ + " because it had 'chromosome' in it. Set explicitly "+ + "with <isTopLevel>true in <sequenceTypes> <type>"); + return topLevelFeatType; + } + } + + // everything failed - just set to chromosome and hope it works + // lets hope it doesnt get to this point - it shouldnt + topLevelFeatType = "chromosome"; + System.out.println("Couldnt discern top level feat type from config. Just setting " + +"it to 'choromosome' and hoping to get lucky. Top level " + +"seq type needs to be configured."); + return topLevelFeatType; + } + + private boolean hasChromosomeInString(String type) { + return type.indexOf("chromosome") != -1; + } + + /** If dataInputs type is configured as a location, then change dataInput to be + a location - is there a better way to do this? */ + public void checkForLocation(DataInput dataInput) { + if (dataInput.getSoType() == null && dataInput.isRegion()) + dataInput.setSoType(getLocationSeqType().getName()); + if (isLocation(dataInput.getSoType()) && !dataInput.isRegion()) { + // it is a location - make it so, this causes loc in string to be parsed + // which is the desired effect + dataInput.makeDataTypeRegion(); // a little silly + } + } + private boolean isLocation(String type) { + SeqType st = getSeqType(type); + if (st == null) + return false; + return st.hasStartAndEnd(); + } + public SeqType getSeqType(String name) { + for (int i=0; i<getSeqTypesSize(); i++) { + if (getSeqType(i).getName().equals(name)) + return getSeqType(i); + } + return null; + } + public boolean typeHasStartAndEnd(String typeName) { + SeqType st = getSeqType(typeName); + if (st == null) return false; + return st.hasStartAndEnd(); + } + protected void debugPrintTime() { JdbcChadoAdapter.debugPrintTime(); } Index: ChadoInstance.java =================================================================== RCS file: /cvsroot/gmod/apollo/src/java/apollo/dataadapter/chado/jdbc/ChadoInstance.java,v retrieving revision 1.26 retrieving revision 1.27 diff -C2 -d -r1.26 -r1.27 *** ChadoInstance.java 22 Sep 2005 12:48:47 -0000 1.26 --- ChadoInstance.java 28 Sep 2005 22:19:54 -0000 1.27 *************** *** 8,11 **** --- 8,13 ---- import apollo.dataadapter.Region; import apollo.dataadapter.chado.ChadoAdapter; + import apollo.dataadapter.DataInput; + import apollo.dataadapter.chado.SeqType; import apollo.datamodel.CurationSet; import apollo.datamodel.Transcript; *************** *** 40,43 **** --- 42,47 ---- + public void setId(String id); + /** Field from query result to use for gene name (fb uses gene_name, tigr uses gene_uniquename) *************** *** 190,193 **** --- 194,217 ---- public List getChadoTransMacros(); + public void setSeqTypeList(List seqTypes); + + /** Top level feature type is needed for saving back to chado. Also for querying + locations from the command line (where type isnt given). This is configured + in chado-adapter cfg file */ + public String getTopLevelFeatType(); + /** Return number of seq types for instance */ + public int getSeqTypesSize(); + /** Return ith SeqType */ + public SeqType getSeqType(int i); + /** SeqType for name */ + public SeqType getSeqType(String name); + /** Returns seq type that has location */ + public SeqType getLocationSeqType(); + /** Does type require start & end data */ + public boolean typeHasStartAndEnd(String typeName); + /** If dataInputs type is configured as a location, then change dataInput to be + a location */ + public void checkForLocation(DataInput dataInput); + public ChadoInstance cloneInstance(); } Index: JdbcChadoAdapter.java =================================================================== RCS file: /cvsroot/gmod/apollo/src/java/apollo/dataadapter/chado/jdbc/JdbcChadoAdapter.java,v retrieving revision 1.118 retrieving revision 1.119 diff -C2 -d -r1.118 -r1.119 *** JdbcChadoAdapter.java 22 Sep 2005 15:54:16 -0000 1.118 --- JdbcChadoAdapter.java 28 Sep 2005 22:19:54 -0000 1.119 *************** *** 2816,2820 **** } ! protected static void debugPrintTime() { if (!debug) return; Calendar now = Calendar.getInstance(); --- 2816,2820 ---- } ! public static void debugPrintTime() { if (!debug) return; Calendar now = Calendar.getInstance(); |