diff --git a/artemis_sqlmap/Feature.xml b/artemis_sqlmap/Feature.xml index 4a837149f034adf993b10e9f074501da7a674002..de00ed9bf1344b9874361600e50c1f6643628b43 100644 --- a/artemis_sqlmap/Feature.xml +++ b/artemis_sqlmap/Feature.xml @@ -72,7 +72,8 @@ select="getFeatureRelationship" /> <result property="featureSynonyms" column="{feature.uniqueName=uniqueName}" select="getLazyFeatureSynonymsByUniquename" /> - <result property="organism" column="organism_id" select="getOrganism" /> + <result property="organism" column="{organismId=organismId}" + select="getOrganism" /> </resultMap> @@ -207,7 +208,7 @@ timelastmodified, f.feature_id AS id, uniquename, - organism_id, + organism_id AS organismId, name, f.type_id, seqlen AS length, @@ -243,7 +244,7 @@ <select id="getResidueType" parameterClass="java.lang.String" resultClass="java.lang.Long"> SELECT DISTINCT type_id - FROM $value$.feature + FROM feature WHERE residues notnull </select> @@ -256,8 +257,8 @@ uniquename, feature_id, type_id - FROM organism, $schema$.feature WHERE - organism.organism_id=$schema$.feature.organism_id AND + FROM organism, feature WHERE + organism.organism_id=feature.organism_id AND residues notnull <iterate prepend="AND" property="cvTermIds" conjunction="OR" open="(" close=")"> type_id=#cvTermIds[]# diff --git a/artemis_sqlmap/Organism.xml b/artemis_sqlmap/Organism.xml index 7aa505065d92994a2cf9c2b9c2cd0b27da1feca1..cc8c9d32d76acc3cc2d893b7674524fd4627c4f5 100644 --- a/artemis_sqlmap/Organism.xml +++ b/artemis_sqlmap/Organism.xml @@ -6,10 +6,19 @@ <sqlMap namespace="Organism"> - <select id="getOrganism" resultClass="org.gmod.schema.organism.Organism"> - SELECT organism_id AS organismId, abbreviation, genus, species, common_name, comment + <select id="getOrganism" + resultClass="org.gmod.schema.organism.Organism"> + SELECT organism_id AS organismId, abbreviation, genus, species, common_name AS commonName, comment FROM organism - WHERE organism_id=#value# + <dynamic> + <isNotNull prepend="WHERE" property="organismId"> + organism_id=#organismId# + </isNotNull> + + <isNull prepend="ORDER BY" property="organismId"> + commonName + </isNull> + </dynamic> </select> </sqlMap> diff --git a/uk/ac/sanger/artemis/chado/ChadoDAO.java b/uk/ac/sanger/artemis/chado/ChadoDAO.java index 881248c2fdb96f5791fe47223c38c10c98c1ccb4..af1c178e0f727a3abded3512fdcb34ddb805221d 100644 --- a/uk/ac/sanger/artemis/chado/ChadoDAO.java +++ b/uk/ac/sanger/artemis/chado/ChadoDAO.java @@ -164,6 +164,8 @@ public interface ChadoDAO public FeatureCvTerm getFeatureCvTermByFeatureAndCvTerm(Feature feature, CvTerm cvTerm, boolean not); + public List getOrganisms(); + // // WRITE BACK // diff --git a/uk/ac/sanger/artemis/chado/IBatisDAO.java b/uk/ac/sanger/artemis/chado/IBatisDAO.java index 5f9b89370314fdd62e3f03adee3fbed2b79b97b3..017b335628bbedf1938116faa8585c797c355f8f 100644 --- a/uk/ac/sanger/artemis/chado/IBatisDAO.java +++ b/uk/ac/sanger/artemis/chado/IBatisDAO.java @@ -298,6 +298,11 @@ public class IBatisDAO implements ChadoDAO return null; } + public List getOrganisms() + { + return sqlMap.queryForList("getOrganism", null); + } + // // WRITE BACK // diff --git a/uk/ac/sanger/artemis/chado/JdbcDAO.java b/uk/ac/sanger/artemis/chado/JdbcDAO.java index 2aee5cf0223cf0366d973b2b70e2619203c4a5e9..aed3429db74b690a254e006cae691a3f42920c83 100644 --- a/uk/ac/sanger/artemis/chado/JdbcDAO.java +++ b/uk/ac/sanger/artemis/chado/JdbcDAO.java @@ -283,8 +283,12 @@ public class JdbcDAO final String schema) { String sql = new String( - "SELECT abbreviation, uniquename, name, feature_id, type_id FROM organism, "+ - schema + ".feature WHERE ("); + "SELECT abbreviation, uniquename, name, feature_id, type_id FROM organism, "); + + if(schema != null || !schema.equals("")) + sql = sql + schema +"." ; + + sql = sql + "feature WHERE ("; for(int j = 0; j < cvTermIds.size(); j++) { @@ -293,8 +297,12 @@ public class JdbcDAO sql = sql + " OR "; } - sql = sql + ") and organism.organism_id=" + schema - + ".feature.organism_id " + "and residues notnull " + sql = sql + ") and organism.organism_id="; + + if(schema != null || !schema.equals("")) + sql = sql + schema +"." ; + + sql = sql + "feature.organism_id " + "and residues notnull " + "ORDER BY abbreviation"; appendToLogFile(sql, sqlLog); @@ -336,8 +344,11 @@ public class JdbcDAO */ public List getResidueType(final String schema) { - String sql = "SELECT DISTINCT type_id FROM " +schema+ - ".feature WHERE residues notnull"; + String sql = "SELECT DISTINCT type_id FROM "; + + if(schema != null || !schema.equals("")) + sql = sql + schema +"." ; + sql = sql + "feature WHERE residues notnull"; appendToLogFile(sql, sqlLog); List cvterm_ids = new Vector(); @@ -552,6 +563,40 @@ public class JdbcDAO } + public List getOrganisms() + { + String sql = "SELECT organism_id AS organismId, abbreviation, "+ + "genus, species, common_name AS commonName, comment "+ + "FROM organism ORDER BY commonName"; + + appendToLogFile(sql, sqlLog); + List organisms = new Vector(); + + try + { + Statement st = conn.createStatement(); + ResultSet rs = st.executeQuery(sql); + + while(rs.next()) + { + Organism organism = new Organism(); + organism.setOrganismId(rs.getInt("organismId")); + organism.setAbbreviation(rs.getString("abbreviation")); + organism.setGenus(rs.getString("genus")); + organism.setSpecies(rs.getString("species")); + organism.setCommonName(rs.getString("commonName")); + organism.setComment(rs.getString("comment")); + organisms.add(organism); + } + } + catch(SQLException sqle) + { + throw new RuntimeException(sqle); + } + return organisms; + } + + // // WRITE // diff --git a/uk/ac/sanger/artemis/components/DatabaseEntrySource.java b/uk/ac/sanger/artemis/components/DatabaseEntrySource.java index bac513adc6a431af702f85b82a955fd019503fdd..4c05e1b14475f398bea6b33484ff444f35e3ae3e 100644 --- a/uk/ac/sanger/artemis/components/DatabaseEntrySource.java +++ b/uk/ac/sanger/artemis/components/DatabaseEntrySource.java @@ -34,6 +34,8 @@ import java.io.*; import java.util.*; import java.net.ConnectException; +import org.gmod.schema.organism.Organism; + import uk.ac.sanger.artemis.util.*; import uk.ac.sanger.artemis.*; import uk.ac.sanger.artemis.sequence.*; @@ -304,14 +306,19 @@ public class DatabaseEntrySource implements EntrySource final Object v_organism[] = entries.keySet().toArray(); final int v_organism_size = v_organism.length; - Arrays.sort(v_organism); - + Arrays.sort(v_organism); + for(int i=0; i<schema.size(); i++) { - String name = (String)schema.get(i); + int nchild = 0; + String name; + + if(schema.get(i) instanceof String) + name = (String)schema.get(i); + else + name = ((Organism)schema.get(i)).getCommonName(); + schema_node = new DefaultMutableTreeNode(name); - top.add(schema_node); - Hashtable seq_type_node = new Hashtable(); for(int j = 0; j < v_organism_size; j++) @@ -336,8 +343,11 @@ public class DatabaseEntrySource implements EntrySource seq_node = new DefaultMutableTreeNode(seq_name); typ_node.add(seq_node); + nchild++; } } + if(nchild > 0) + top.add(schema_node); } } diff --git a/uk/ac/sanger/artemis/util/DatabaseDocument.java b/uk/ac/sanger/artemis/util/DatabaseDocument.java index 9a9ecded3d72f7344d2c07afb8a87c4427c8646b..792934376836cff178694737f49de04b7dfc39aa 100644 --- a/uk/ac/sanger/artemis/util/DatabaseDocument.java +++ b/uk/ac/sanger/artemis/util/DatabaseDocument.java @@ -39,6 +39,7 @@ import org.gmod.schema.sequence.FeatureLoc; import org.gmod.schema.sequence.FeatureRelationship; import org.gmod.schema.sequence.FeatureSynonym; import org.gmod.schema.cv.CvTerm; +import org.gmod.schema.organism.Organism; import java.sql.*; import java.text.SimpleDateFormat; @@ -232,6 +233,7 @@ public class DatabaseDocument extends Document private void reset(String location, String schema) { this.schema = schema; + if(!location.endsWith("="+schema)) { int index = location.lastIndexOf('='); @@ -976,6 +978,91 @@ public class DatabaseDocument extends Document } + /** + * Create a hashtable of the available entries with residues. + * @return a <code>Hashtable</code> of the <code>String</code> + * representation (schema-type-feature_name) and the + * corresponding feature_id + * @throws ConnectException + * @throws java.sql.SQLException + */ + public Hashtable getDatabaseEntries2() + throws ConnectException, java.sql.SQLException + { + db = new Hashtable(); + String schema = null; + + try + { + ChadoDAO dao = null; + dao = getDAO(); + schema_list = dao.getOrganisms(); + Iterator it = schema_list.iterator(); + + while(it.hasNext()) + { + Organism organism = (Organism)it.next(); + schema = organism.getCommonName(); + + reset((String)getLocation(), schema); + + try + { + dao = getDAO(); + List list = dao.getResidueType(schema); + + if(list.size() == 0) // no residues for this organism + continue; + + List list_residue_features = dao.getResidueFeatures(list, schema); + Iterator it_residue_features = list_residue_features.iterator(); + while(it_residue_features.hasNext()) + { + Feature feature = (Feature)it_residue_features.next(); + String typeName = getCvtermName(feature.getCvTerm().getCvTermId(), getDAO()); + + db.put(schema + " - " + typeName + " - " + feature.getUniqueName(), + Integer.toString(feature.getFeatureId())); + } + } + catch(RuntimeException e) + { + } + catch(java.sql.SQLException sqlExp) + { + } + } + + } + catch(RuntimeException sqlExp) + { + JOptionPane.showMessageDialog(null, "SQL Problems...\n"+ + sqlExp.getMessage(), + "SQL Error", + JOptionPane.ERROR_MESSAGE); + sqlExp.printStackTrace(); + } + catch(ConnectException exp) + { + JOptionPane.showMessageDialog(null, "Connection Problems...\n"+ + exp.getMessage(), + "Connection Error", + JOptionPane.ERROR_MESSAGE); + throw exp; + } + catch(java.sql.SQLException sqlExp) + { + JOptionPane.showMessageDialog(null, "SQL Problems....\n"+ + sqlExp.getMessage(), + "SQL Error", + JOptionPane.ERROR_MESSAGE); + throw sqlExp; + } + + return db; + } + + /** * Get the data access object (DAO). * @return data access object @@ -992,7 +1079,10 @@ public class DatabaseDocument extends Document else { if(connIB == null) + { + System.setProperty("chado", (String)getLocation()); connIB = new IBatisDAO(pfield); + } return connIB; } }