Newer
Older
*/
public static List getCvControledCurationNames()
{
if(cvControledCuratioNames != null)
return cvControledCuratioNames;
cvControledCuratioNames = new Vector();
final Enumeration enum_cvterm = cvterms.elements();
while(enum_cvterm.hasMoreElements())
{
final CvTerm cvTerm = (CvTerm)enum_cvterm.nextElement();
final String cvNameStr = cvTerm.getCv().getName();
if(cvNameStr.startsWith(DatabaseDocument.CONTROLLED_CURATION_TAG_CVNAME) &&
!cvControledCuratioNames.contains(cvNameStr))
cvControledCuratioNames.add(cvNameStr);
}
return cvControledCuratioNames;
}
/**
* Look up synonym type names e.g. synonym, systematic_id.
* @return the synonym tag names
*/
public static String[] getSynonymTypeNames(final String cv_name,
final GFFStreamFeature feature)
if(cvterms == null)
{
DatabaseDocument doc = (DatabaseDocument)feature.getDocumentEntry().getDocument();
try
{
Cv cv = new Cv();
cv.setName(cv_name);
List synonymCvTerms = doc.getDAO().getCvTermByNameInCv(null, cv);
String synonymNames[] = new String[synonymCvTerms.size()];
for(int i=0; i<synonymCvTerms.size(); i++)
synonymNames[i] = ((CvTerm) synonymCvTerms.get(i)).getName();
return synonymNames;
}
catch(ConnectException e){}
catch(SQLException e){}
}
Vector synonym_names = new Vector();
Enumeration cvterm_enum = cvterms.elements();
while(cvterm_enum.hasMoreElements())
{
CvTerm cvterm = (CvTerm)cvterm_enum.nextElement();
if(cvterm.getCv().getName().equals(cv_name))
synonym_names.add(cvterm.getName());
}
return (String[])synonym_names.toArray(
new String[synonym_names.size()]);
}
public void insertCvTerm(CvTerm cvTerm)
{
final GmodDAO dao = getDAOOnly();
dao.persist(cvTerm);
cvTerm = dao.getCvTermByNameAndCvName(cvTerm.getName(), cvTerm.getCv().getName());
cvterms.put(new Integer(cvTerm.getCvTermId()), cvTerm);
}
/**
* Get the sequence for a feature.
* @param dao the data access object
* @param buff the buffer to add the sequence to
* @return the resulting buffer
* @throws java.sql.SQLException
*/
Feature feature = dao.getFeatureById(Integer.parseInt(srcFeatureId));
getChadoSequence(feature, buff);
return feature;
}
/**
* Get the sequence for a feature.
* @param dao the data access object
* @param buff the buffer to add the sequence to
* @return the resulting buffer
* @throws java.sql.SQLException
*/
private void getChadoSequence(final Feature feature, ByteBuffer buff)
{
/**
* Get the CDS FeatureLoc's associated with a give protein
* @param peptideName
* @return
*/
public List getCdsFeatureLocsByPeptideName(final String peptideName)
Collection frs = peptideFeature.getFeatureRelationshipsForSubjectId();
Iterator it = frs.iterator();
Feature transcriptFeature = null;
while(it.hasNext())
{
FeatureRelationship fr = (FeatureRelationship)it.next();
if(fr.getCvTerm().getName().equalsIgnoreCase("derives_from"))
{
transcriptFeature = fr.getFeatureByObjectId();
logger4j.debug("TRANSCRIPT :: "+transcriptFeature.getUniqueName());
break;
}
}
if(transcriptFeature == null)
return null;
return getCdsFeatureLocsByTranscriptName(transcriptFeature.getUniqueName());
* Get the CDS FeatureLoc's associated with a given transcript
* @param transcriptName
* @return
*/
public List getCdsFeatureLocsByTranscriptName(final String transcriptName)
{
Feature transcriptFeature = getFeatureByUniquename(transcriptName);
if(transcriptFeature == null)
Collection frs = transcriptFeature.getFeatureRelationshipsForObjectId();
Iterator it = frs.iterator();
while(it.hasNext())
{
FeatureRelationship fr = (FeatureRelationship)it.next();
org.gmod.schema.sequence.Feature child = fr.getFeatureBySubjectId();
if(child.getCvTerm().getName().equals("exon") ||
child.getCvTerm().getName().equals("pseudogenic_exon"))
Collection featureLocs = child.getFeatureLocsForFeatureId();
Iterator it2 = featureLocs.iterator();
while(it2.hasNext())
{
FeatureLoc featureLoc = (FeatureLoc) it2.next();
cdsFeatureLocs.add(featureLoc);
}
Collections.sort(cdsFeatureLocs, new LocationComarator());
/**
* Get the sequence for a feature.
* @return the resulting buffer
*/
public PartialSequence getChadoSequence(final String uniqueName)
{
Feature feature = (Feature) getDAOOnly().getResiduesByUniqueName(uniqueName).get(0);
char[] c = getChars(feature.getResidues());
PartialSequence ps = new PartialSequence(c, feature.getSeqLen(),
feature.getFeatureLoc().getFmin().intValue()+1,
feature.getFeatureLoc().getStrand(),
feature.getFeatureLoc().getPhase());
return ps;
}
/**
* Convert byte array to char array
* @param b byte array
* @return char array
*/
private char[] getChars(final byte b[])
{
char[] c = new char[b.length];
for(int i = 0; i < b.length; i++)
c[i] = (char)b[i];
/**
* Get the <code>List</code> of available schemas.
* @return the <code>List</code> of available schemas
*/
public List getSchema()
{
return schema_list;
}
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
public Feature getFeatureByUniquename(final String uniqueName)
{
GmodDAO dao = getDAOOnly();
List features = dao.getFeaturesByUniqueName(uniqueName);
if(features == null || features.size() < 1)
return null;
return (Feature)(dao.getFeaturesByUniqueName(uniqueName).get(0));
}
/**
* Given a gene unique name return the poplypeptide chado features that belong
* to that gene
* @param geneName
* @return
*/
public Vector getPolypeptideFeatures(final String geneName)
{
Feature geneFeature = getFeatureByUniquename(geneName);
if(geneFeature == null)
return null;
Collection frs = geneFeature.getFeatureRelationshipsForObjectId();
Iterator it = frs.iterator();
List transcripts = new Vector(frs.size());
while(it.hasNext())
{
FeatureRelationship fr = (FeatureRelationship)it.next();
transcripts.add(fr.getFeatureBySubjectId());
}
Vector polypep = new Vector();
for(int i=0; i<transcripts.size(); i++)
{
org.gmod.schema.sequence.Feature transcript =
(org.gmod.schema.sequence.Feature) transcripts.get(i);
frs = transcript.getFeatureRelationshipsForObjectId();
it = frs.iterator();
while(it.hasNext())
{
FeatureRelationship fr = (FeatureRelationship)it.next();
if(fr.getCvTerm().getName().equalsIgnoreCase("derives_from"))
if(fr.getFeatureBySubjectId().getCvTerm().getName().equalsIgnoreCase("polypeptide"))
polypep.add(fr.getFeatureBySubjectId());
}
}
return polypep;
}
/**
* Given a gene unique name return the poplypeptides that belong
* to that gene
* @param geneName
* @return
*/
/*public Vector getPolypeptideNames(final String geneName)
{
Vector polypeptides = getPolypeptideFeatures(geneName);
Vector polypeptideNames = new Vector(polypeptides.size());
for(int i=0; i<polypeptides.size(); i++)
{
Feature feature = (Feature)polypeptides.get(i);
polypeptideNames.add(feature.getUniqueName());
}
return polypeptideNames;
public List getClustersByFeatureIds(final List featureIds)
{
GmodDAO dao = getDAOOnly();
return dao.getClustersByFeatureIds(featureIds);
}
public List getParentFeaturesByChildFeatureIds(final List subjectIds)
{
GmodDAO dao = getDAOOnly();
return dao.getParentFeaturesByChildFeatureIds(subjectIds);
}
public List getFeatureDbXRefsByFeatureId(final List featureIds)
{
GmodDAO dao = getDAOOnly();
return dao.getFeatureDbXRefsByFeatureId(featureIds);
}
* Used by SimilarityLazyQualifierValue.bulkRetrieve() to get the match features
* @param featureIds the <code>List</code> of feature_id's
* @return the corresponding features
*/
public List getFeaturesByListOfIds(final List featureIds)
{
GmodDAO dao = getDAOOnly();
return dao.getFeaturesByListOfIds(featureIds);
}
public List getFeaturePropByFeatureIds(final List featureIds)
{
GmodDAO dao = getDAOOnly();
return dao.getFeaturePropByFeatureIds(featureIds);
}
public List getSimilarityMatches(List featureIds)
GmodDAO dao = getDAOOnly();
if(featureIds == null)
return dao.getSimilarityMatches(new Integer(srcFeatureId));
else
return dao.getSimilarityMatchesByFeatureIds(featureIds);
public List getFeatureLocsByListOfIds(List featureIds)
{
GmodDAO dao = getDAOOnly();
return dao.getFeatureLocsByListOfIds(featureIds);
}
* Get a list of the organisms with sequences
* @return
* @throws ConnectException
* @throws java.sql.SQLException
*/
public List getOrganismsContainingSrcFeatures()
throws ConnectException, java.sql.SQLException
cvThread = new CvTermThread(dao);
cvThread.start();
list = dao.getOrganismsContainingSrcFeatures();
Collections.sort(list, new Comparator()
Organism org1 = (Organism)o1;
Organism org2 = (Organism)o2;
String name1 = org1.getCommonName();
String name2 = org2.getCommonName();
if(name1 == null)
name1 = org1.getGenus() + "." + org1.getSpecies();
if(name2 == null)
name2 = org2.getGenus() + "." + org2.getSpecies();
return name1.compareToIgnoreCase( name2 );
}
});
}
catch(RuntimeException sqlExp)
{
JOptionPane.showMessageDialog(null, "SQL Problems...\n"+
sqlExp.getMessage(),
"SQL Error",
JOptionPane.ERROR_MESSAGE);
}
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);
logger4j.debug(sqlExp.getMessage());
throw sqlExp;
}
if(cvThread.isAlive())
return true;
else
return false;
}
public List getResidueFeatures(Integer organismId)
{
return getDAOOnly().getResidueFeatures(organismId);
/**
*
*/
public void showCvTermLookUp()
{
try
{
new ChadoCvTermView( getDAO() );
}
catch(ConnectException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch(SQLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* Get the data access object (DAO).
* @return data access object
*/
if(!iBatis)
{
if(jdbcDAO == null)
jdbcDAO = new JdbcDAO((String)getLocation(), pfield);
return jdbcDAO;
}
else
{
System.setProperty("chado", (String)getLocation());
/**
* Get the username for this connection
* @return
*/
public String getUserName()
{
// "localhost:10001/backup?chado"
String url = (String)getLocation();
int index = url.indexOf("?");
String userName = url.substring(index+1).trim();
if(userName.startsWith("user="))
userName = userName.substring(5);
return userName;
}
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
private GmodDAO getDAOOnly()
{
GmodDAO dao = null;
try
{
dao = getDAO();
}
catch(RuntimeException sqlExp)
{
JOptionPane.showMessageDialog(null, "SQL Problems...\n"+
sqlExp.getMessage(),
"SQL Error",
JOptionPane.ERROR_MESSAGE);
}
catch(ConnectException exp)
{
JOptionPane.showMessageDialog(null, "Connection Problems...\n"+
exp.getMessage(),
"Connection Error",
JOptionPane.ERROR_MESSAGE);
}
catch(java.sql.SQLException sqlExp)
{
JOptionPane.showMessageDialog(null, "SQL Problems....\n"+
sqlExp.getMessage(),
"SQL Error",
JOptionPane.ERROR_MESSAGE);
}
return dao;
}
* Create a new OutputStream object from this Document. The contents of the
* Document can be written from the stream.
*
* @exception IOException
* Thrown if the Document can't be written.
*/
public OutputStream getOutputStream() throws IOException
{
final File write_file = new File(System.getProperty("user.dir")+
System.getProperty("file.separator")+
getName());
final FileOutputStream file_output_stream =
new FileOutputStream(write_file);
if(write_file.getName().endsWith(".gz"))
{
// assume this file should be gzipped
return new java.util.zip.GZIPOutputStream (file_output_stream);
}
else
return file_output_stream;
/**
* Commit the <code>ChadoTransaction</code> SQL back to the
* database.
* @param sql the collection of <code>ChadoTransaction</code> objects
* @return
*/
public int commit(final Vector sql,
final boolean force)
final Hashtable featureIdStore = new Hashtable();
boolean useTransactions = false;
if(!force && dao instanceof IBatisDAO)
useTransactions = true;
((IBatisDAO) dao).startTransaction();
logger4j.debug("START TRANSACTION");
}
boolean unchanged;
//
// check feature timestamps have not changed
Vector names_checked = new Vector();
final Object uniquenames[] = getUniqueNames(tsn);
for(int j=0; j<uniquenames.length; j++)
final String uniquename = (String) uniquenames[j];
if(uniquename == null || names_checked.contains(uniquename))
continue;
names_checked.add(uniquename);
final String keyName = tsn.getFeatureKey();
unchanged = checkFeatureTimestamp(schema, uniquename,
if(!unchanged)
{
if(useTransactions)
((IBatisDAO) dao).endTransaction();
return 0;
}
final Timestamp ts = new Timestamp(new java.util.Date().getTime());
//
// commit to database
for(ncommit = 0; ncommit < sql.size(); ncommit++)
try
{
ChadoTransaction tsn = (ChadoTransaction) sql.get(ncommit);
}
catch (RuntimeException re)
{
if(!force)
throw re;
logger4j.warn(constructExceptionMessage(re, sql, ncommit));
logger4j.warn("NOW TRYING TO CONTINUE TO COMMIT");
}
//
// update timelastmodified timestamp
names_checked = new Vector();
final ChadoTransaction tsn = (ChadoTransaction) sql.get(i);
final Object uniquenames[] = getUniqueNames(tsn);
if(uniquenames == null)
if(tsn.getType() == ChadoTransaction.UPDATE &&
tsn.getFeatureObject() instanceof Feature)
{
for(int j=0; j<uniquenames.length; j++)
names_checked.add((String) uniquenames[j]);
continue;
}
for(int j=0; j<uniquenames.length; j++)
{
final String uniquename = (String) uniquenames[j];
if(uniquename == null || names_checked.contains(uniquename))
continue;
// retieve from featureId store
if(featureIdStore != null && featureIdStore.containsKey(uniquename))
{
Feature f = (Feature) featureIdStore.get(uniquename);
}
else
feature = dao.getFeatureByUniqueName(uniquename,
tsn.getFeatureKey());
if(feature != null)
{
feature.setTimeLastModified(ts);
feature.setName("0"); // do not change name
}
GFFStreamFeature gff_feature = (GFFStreamFeature) tsn.getGff_feature();
gff_feature.setLastModified(ts);
final String nocommit = System.getProperty("nocommit");
if( useTransactions &&
(nocommit == null || nocommit.equals("false")))
logger4j.debug("TRANSACTION COMPLETE");
else if(useTransactions &&
(nocommit != null && nocommit.equals("true")))
logger4j.debug("TRANSACTION NOT COMMITTED : nocommit property set to true");
JOptionPane.showMessageDialog(null, "Problems Writing...\n" +
JOptionPane.showMessageDialog(null, "Problems connecting..."+
conn_ex.getMessage(),
"Database Connection Error - Check Server",
JOptionPane.ERROR_MESSAGE);
catch (RuntimeException re)
{
final String msg = constructExceptionMessage(re, sql, ncommit);
JOptionPane.showMessageDialog(null, msg,
"Problems Writing to Database ",
JOptionPane.ERROR_MESSAGE);
logger4j.error(msg);
}
finally
{
if(useTransactions)
try
{
((IBatisDAO) dao).endTransaction();
catch(SQLException e){ e.printStackTrace(); }
if(featureIdStore != null)
featureIdStore.clear();
return ncommit;
}
/**
* Get the uniquenames involved in a transaction
* @param tsn
* @return
*/
private Object[] getUniqueNames(final ChadoTransaction tsn)
{
if(tsn.getGff_feature() == null)
return null;
if(tsn.getGff_feature().getSegmentRangeStore() == null ||
tsn.getGff_feature().getSegmentRangeStore().size() < 2 ||
tsn.getFeatureObject() instanceof FeatureProp)
return new Object[]{ tsn.getUniquename() };
else
return tsn.getGff_feature().getSegmentRangeStore().keySet().toArray();
}
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
/**
* Construct an exeption message from the ChadoTransaction
* @param re
* @param sql
* @param ncommit
* @return
*/
private String constructExceptionMessage(final RuntimeException re,
final Vector sql,
final int ncommit)
{
String msg = "";
if(ncommit > -1 && ncommit < sql.size())
{
final ChadoTransaction t_failed = (ChadoTransaction)sql.get(ncommit);
if(t_failed.getType() == ChadoTransaction.DELETE)
msg = "DELETE failed ";
else if(t_failed.getType() == ChadoTransaction.INSERT)
msg = "INSERT failed ";
else if(t_failed.getType() == ChadoTransaction.UPDATE)
msg = "UPDATE failed ";
if(t_failed.getUniquename() != null)
msg = msg + "for " + t_failed.getUniquename()+":";
else if(t_failed.getFeatureObject() != null &&
t_failed.getFeatureObject() instanceof Feature)
{
final Feature chadoFeature = (Feature)t_failed.getFeatureObject();
if(chadoFeature.getUniqueName() != null)
msg = msg + "for " + chadoFeature.getUniqueName() +":";
}
msg = msg+"\n";
}
return msg + re.getMessage();
}
/**
* Commit a single chado transaction
* @param tsn
* @param dao
*/
private void commitChadoTransaction(final ChadoTransaction tsn,
{
if(tsn.getType() == ChadoTransaction.UPDATE)
{
if(tsn.getFeatureObject() instanceof Feature)
{
Feature feature = (Feature)tsn.getFeatureObject();
if(feature.getUniqueName() != null)
{
final String uniquename;
if(tsn.getOldUniquename() != null)
uniquename = (String)tsn.getOldUniquename();
else
uniquename = feature.getUniqueName();
Feature old_feature
= dao.getFeatureByUniqueName(uniquename, tsn.getFeatureKey());
if(old_feature != null)
feature.setFeatureId( old_feature.getFeatureId() );
tsn.setOldUniquename(feature.getUniqueName());
}
}
dao.merge(tsn.getFeatureObject());
//dao.updateAttributes(tsn);
}
else if(tsn.getType() == ChadoTransaction.INSERT)
{
if(tsn.getFeatureObject() instanceof FeatureCvTerm)
ArtemisUtils.inserFeatureCvTerm(dao, (FeatureCvTerm)tsn.getFeatureObject());
else
{
// set srcfeature_id
if(tsn.getFeatureObject() instanceof Feature &&
((Feature) tsn.getFeatureObject()).getFeatureLoc() != null)
{
FeatureLoc featureloc = ((Feature) tsn.getFeatureObject()).getFeatureLoc();
Feature featureBySrcFeatureId = new Feature();
featureBySrcFeatureId.setFeatureId(Integer.parseInt(srcFeatureId));
featureloc.setFeatureBySrcFeatureId(featureBySrcFeatureId);
}
if(tsn.getFeatureObject() instanceof Feature)
{
String keyStr = tsn.getGff_feature().getKey().getKeyString();
if(GeneUtils.isFeatureToUpdateResidues(keyStr))
{
String residues = GeneUtils.deriveResidues(tsn.getGff_feature());
if(residues != null)
((Feature)tsn.getFeatureObject()).setResidues(residues.getBytes());
}
}
dao.persist(tsn.getFeatureObject());
}
}
else if(tsn.getType() == ChadoTransaction.DELETE)
{
if(tsn.getFeatureObject() instanceof FeatureCvTerm)
ArtemisUtils.deleteFeatureCvTerm(dao, (FeatureCvTerm)tsn.getFeatureObject());
else
dao.delete(tsn.getFeatureObject());
}
/**
* Check the <code>Timestamp</code> on a feature (for versioning).
* @param schema the schema
* @param uniquename the feature uniquename
* @param timestamp the last read feature timestamp
*/
public boolean checkFeatureTimestamp(final String schema,
final GmodDAO dao,
final Hashtable featureIdStore,
final ChadoTransaction tsn)
final Timestamp timestamp = tsn.getLastModified();
final Object featureObject = tsn.getFeatureObject();
final Feature feature = dao.getFeatureByUniqueName(uniquename, keyName);
if(featureObject instanceof FeatureProp)
((FeatureProp)featureObject).setFeature(feature);
else if(featureObject instanceof FeatureLoc)
{
if(((FeatureLoc)featureObject).getFeatureByFeatureId().getUniqueName().equals(uniquename))
{
logger4j.debug("Setting featureId for:" + uniquename );
((FeatureLoc)featureObject).setFeatureByFeatureId(feature);
}
}
{
now.setNanos(0);
timestamp.setNanos(0);
if(now.compareTo(timestamp) != 0)
{
new SimpleDateFormat("dd.MM.yyyy hh:mm:ss z");
//System.out.println(date_format.format(now)+" "+
// date_format.format(timestamp));
int select = JOptionPane.showConfirmDialog(null, uniquename +
date_format.format(now)+"\nOverwite?",
"Feature Changed",
JOptionPane.OK_CANCEL_OPTION);
if(select == JOptionPane.OK_OPTION)
return true;
else
return false;
public static void main(String args[])
{
try
{
DatabaseEntrySource src = new DatabaseEntrySource();
src.setLocation(true);
if(System.getProperty("ibatis") == null)
dao = new JdbcDAO(src.getLocation(), src.getPfield());
else
dao = new IBatisDAO(src.getPfield());
List schemas = new Vector();
schemas.add(args[1]);
featureList.add(dao.getFeatureByUniqueName(args[0], "polypeptide"));
int fmin = feature.getFeatureLoc().getFmin().intValue() + 1;
int fmax = feature.getFeatureLoc().getFmax().intValue();
((FeatureProp)(new Vector(feature.getFeatureProps()).get(0))).getCvTerm().getName();
System.out.print(" "+feature.getFeatureLoc().getStrand());
System.out.println(" "+Integer.toString(feature.getFeatureId()));
/* Hashtable synonyms = getAllFeatureSynonyms(dao, null);
Vector syns = (Vector)synonyms.get(new Integer(feature.getId()));
for(int j=0; j<syns.size(); j++)
{
FeatureSynonym alias = (FeatureSynonym)syns.get(j);
System.out.print(" "+alias.getSynonym().getCvterm().getName()+
"="+alias.getSynonym().getName());
}
catch(SQLException sqle)
{
sqle.printStackTrace();
}
catch(RuntimeException re)
{
re.printStackTrace();
}
catch(ConnectException e)
{
e.printStackTrace();
}
public Document getParent()
{
return null;
}
/**
* Find from a list the FeatureLoc with a given srcFeature
* @param locs
* @param srcfeature_id
* @return
*/
public static FeatureLoc getFeatureLoc(List locs, int srcfeature_id)
{
for(int i=0; i<locs.size(); i++)
{
FeatureLoc loc = (FeatureLoc)locs.get(i);
if(loc.getFeatureBySrcFeatureId().getFeatureId() == srcfeature_id)
return loc;
}
return null;
}
public String getSrcFeatureId()
{
return srcFeatureId;
}