diff --git a/uk/ac/sanger/artemis/SimpleEntryGroup.java b/uk/ac/sanger/artemis/SimpleEntryGroup.java index 63d53fc542cd7a1c401fca324529c640dbf86fc1..2b896b74fed07223dee0fd21d79b7ed653847b83 100644 --- a/uk/ac/sanger/artemis/SimpleEntryGroup.java +++ b/uk/ac/sanger/artemis/SimpleEntryGroup.java @@ -20,18 +20,24 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/SimpleEntryGroup.java,v 1.4 2006-03-21 16:05:48 tjc Exp $ + * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/SimpleEntryGroup.java,v 1.5 2006-08-07 14:57:10 tjc Exp $ **/ package uk.ac.sanger.artemis; import uk.ac.sanger.artemis.sequence.*; +import uk.ac.sanger.artemis.io.EntryInformationException; import uk.ac.sanger.artemis.io.Range; import uk.ac.sanger.artemis.io.StreamSequence; import uk.ac.sanger.artemis.io.SimpleDocumentEntry; +import uk.ac.sanger.artemis.io.DatabaseDocumentEntry; +import uk.ac.sanger.artemis.io.DocumentEntry; +import uk.ac.sanger.artemis.util.DatabaseDocument; import uk.ac.sanger.artemis.util.ReadOnlyException; import uk.ac.sanger.artemis.util.OutOfRangeException; import uk.ac.sanger.artemis.chado.ChadoTransactionManager; + +import java.io.IOException; import java.util.Vector; import java.util.NoSuchElementException; @@ -41,7 +47,7 @@ import java.util.NoSuchElementException; * once. Objects of this class act a bit like single Entry objects. * * @author Kim Rutherford - * @version $Id: SimpleEntryGroup.java,v 1.4 2006-03-21 16:05:48 tjc Exp $ + * @version $Id: SimpleEntryGroup.java,v 1.5 2006-08-07 14:57:10 tjc Exp $ **/ public class SimpleEntryGroup extends EntryVector @@ -693,7 +699,32 @@ public class SimpleEntryGroup extends EntryVector **/ public Entry createEntry() { - final Entry new_entry = Entry.newEntry(getBases()); + Entry new_entry = null; + uk.ac.sanger.artemis.io.Entry default_entry = + getDefaultEntry().getEMBLEntry(); + if(default_entry != null && + default_entry instanceof DatabaseDocumentEntry) + { + DatabaseDocument doc = + (DatabaseDocument)((DocumentEntry)getDefaultEntry().getEMBLEntry()).getDocument(); + DatabaseDocument new_doc = doc.createDatabaseDocument(); + + try + { + DatabaseDocumentEntry new_doc_entry = + new DatabaseDocumentEntry(); + new_doc_entry.setDocument(new_doc); + new_entry = new Entry(getBases(), new_doc_entry); + } + catch(Exception e) + { + e.printStackTrace(); + } + + } + else + new_entry = Entry.newEntry(getBases()); + add(new_entry); return new_entry; } diff --git a/uk/ac/sanger/artemis/components/DatabaseEntrySource.java b/uk/ac/sanger/artemis/components/DatabaseEntrySource.java index baafc54ecb32b1ef7eef3b6872fe01806f7186d8..bac513adc6a431af702f85b82a955fd019503fdd 100644 --- a/uk/ac/sanger/artemis/components/DatabaseEntrySource.java +++ b/uk/ac/sanger/artemis/components/DatabaseEntrySource.java @@ -384,7 +384,7 @@ public class DatabaseEntrySource implements EntrySource { DatabaseDocument doc = new DatabaseDocument(location, pfield, id, schema, splitGFFEntry, progress_listener); - db_entry = new DatabaseDocumentEntry(doc); + db_entry = new DatabaseDocumentEntry(doc, null); } final Bases real_bases; @@ -437,7 +437,7 @@ public class DatabaseEntrySource implements EntrySource db_entry = new DatabaseDocumentEntry[new_docs.length]; for(int i = 0; i < new_docs.length; i++) - db_entry[i] = new DatabaseDocumentEntry(new_docs[i]); + db_entry[i] = new DatabaseDocumentEntry(new_docs[i], null); } catch (EntryInformationException e) { diff --git a/uk/ac/sanger/artemis/components/genebuilder/GeneBuilderFrame.java b/uk/ac/sanger/artemis/components/genebuilder/GeneBuilderFrame.java index 0952586ca9993ec1b459b4557294d14ec4643a60..044bcaa1a15310ec88f02556e896a2fe1afd6f0c 100644 --- a/uk/ac/sanger/artemis/components/genebuilder/GeneBuilderFrame.java +++ b/uk/ac/sanger/artemis/components/genebuilder/GeneBuilderFrame.java @@ -20,7 +20,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/components/genebuilder/GeneBuilderFrame.java,v 1.11 2006-08-04 11:05:53 tjc Exp $ + * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/components/genebuilder/GeneBuilderFrame.java,v 1.12 2006-08-07 14:57:10 tjc Exp $ */ package uk.ac.sanger.artemis.components.genebuilder; @@ -44,6 +44,7 @@ import uk.ac.sanger.artemis.SelectionChangeEvent; import uk.ac.sanger.artemis.SelectionChangeListener; import uk.ac.sanger.artemis.EntryGroup; import uk.ac.sanger.artemis.Feature; +import uk.ac.sanger.artemis.io.Qualifier; import uk.ac.sanger.artemis.FeatureChangeEvent; import uk.ac.sanger.artemis.FeatureChangeListener; import uk.ac.sanger.artemis.GotoEventSource; @@ -301,16 +302,20 @@ public class GeneBuilderFrame extends JFrame } break; case EntryChangeEvent.FEATURE_ADDED: + Qualifier parent_qualifier = + qualifiers.getQualifierByName("Parent"); + + if(parent_qualifier == null) + return; tree.addNode(event.getFeature()); feature.addFeatureChangeListener(this); - String parent = - (String)qualifiers.getQualifierByName("Parent").getValues().get(0); - + String parent = (String)parent_qualifier.getValues().get(0); String gene_name = null; try { - gene_name = (String)chado_gene.getGene().getQualifierByName("ID").getValues().get(0); + gene_name = + (String)chado_gene.getGene().getQualifierByName("ID").getValues().get(0); } catch(InvalidRelationException e) { diff --git a/uk/ac/sanger/artemis/components/genebuilder/GeneViewerPanel.java b/uk/ac/sanger/artemis/components/genebuilder/GeneViewerPanel.java index 36cf912bba4ce02d5a87be2cdd0933e560863b6e..fd115cbdd888aad9e1291adf349ffe444fc7fc87 100644 --- a/uk/ac/sanger/artemis/components/genebuilder/GeneViewerPanel.java +++ b/uk/ac/sanger/artemis/components/genebuilder/GeneViewerPanel.java @@ -20,7 +20,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/components/genebuilder/GeneViewerPanel.java,v 1.18 2006-08-04 11:05:53 tjc Exp $ + * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/components/genebuilder/GeneViewerPanel.java,v 1.19 2006-08-07 14:57:10 tjc Exp $ */ package uk.ac.sanger.artemis.components.genebuilder; @@ -658,69 +658,69 @@ public class GeneViewerPanel extends JPanel List exons = chado_gene.getExonsOfTranscript( getFeatureID( embl_transcript )); - if(exons == null) - return; - ypos += border*2; - boolean last_segment = false; - - // build from artemis objects - for(int i=0; i<exons.size(); i++) + if(exons != null) { - int last_ex_start = 0; - int last_ex_end = 0; - int last_ypos = 0; - - Feature embl_exon = (Feature)exons.get(i); + boolean last_segment = false; + + // build from artemis objects + for(int i=0; i<exons.size(); i++) + { + int last_ex_start = 0; + int last_ex_end = 0; + int last_ypos = 0; - uk.ac.sanger.artemis.Feature exon = - (uk.ac.sanger.artemis.Feature)embl_exon.getUserData(); + Feature embl_exon = (Feature) exons.get(i); - RangeVector ranges = exon.getLocation().getRanges(); - FeatureSegmentVector segments = null; - - try - { - segments = exon.getSegments(); - } - catch(NullPointerException npe){} - - float selected_size; - for(int j=0; j<ranges.size(); j++) - { - Range range = (Range)ranges.get(j); + uk.ac.sanger.artemis.Feature exon = + (uk.ac.sanger.artemis.Feature)embl_exon.getUserData(); - int ex_start = border+(int)((range.getStart()-start)*fraction); - int ex_end = border+(int)((range.getEnd()-start)*fraction); + RangeVector ranges = exon.getLocation().getRanges(); + FeatureSegmentVector segments = null; - if(exon.getColour() != null) - g2d.setColor( exon.getColour() ); + try + { + segments = exon.getSegments(); + } + catch(NullPointerException npe) + { + } - if(j == ranges.size()-1) - last_segment = true; - - selected_size = 2.f; - if(segments != null) + float selected_size; + for(int j = 0; j < ranges.size(); j++) { - for(int k=0; k<segments.size(); k++) + Range range = (Range) ranges.get(j); + + int ex_start = border + (int)((range.getStart() - start) * fraction); + int ex_end = border + (int)((range.getEnd() - start) * fraction); + + if(exon.getColour() != null) + g2d.setColor(exon.getColour()); + + if(j == ranges.size() - 1) + last_segment = true; + + selected_size = 2.f; + if(segments != null) { - FeatureSegment segment = segments.elementAt(k); - if(range.equals(segment.getRawRange()) && - selection.contains(segment)) - selected_size = 4.f; + for(int k = 0; k < segments.size(); k++) + { + FeatureSegment segment = segments.elementAt(k); + if(range.equals(segment.getRawRange()) + && selection.contains(segment)) + selected_size = 4.f; + } } - } - - drawExons(g2d, ex_start, ex_end, - last_ex_start, last_ex_end, last_ypos, - 0, ypos, exon.getColour(), - 2, exon.isForwardFeature(), - last_segment, selection.contains(exon), selected_size); - last_ex_end = ex_end; - last_ex_start = ex_start; - last_ypos = ypos; + drawExons(g2d, ex_start, ex_end, last_ex_start, last_ex_end, + last_ypos, 0, ypos, exon.getColour(), 2, exon.isForwardFeature(), + last_segment, selection.contains(exon), selected_size); + + last_ex_end = ex_end; + last_ex_start = ex_start; + last_ypos = ypos; + } } } @@ -1255,8 +1255,6 @@ public class GeneViewerPanel extends JPanel */ class PopupListener extends MouseAdapter { - private JMenuItem exonMenu = new JMenuItem(); - private ActionListener exonListener; public void mousePressed(MouseEvent e) { maybeShowPopup(e); @@ -1271,39 +1269,10 @@ public class GeneViewerPanel extends JPanel { if(e.isPopupTrigger()) { - exonMenu.removeActionListener(exonListener); final Feature embl_transcript = getTranscriptAt(e.getPoint()); if(embl_transcript == null) return; - try - { - final String uniquename = - (String)(embl_transcript.getQualifierByName("ID").getValues().get(0)); - - exonMenu.setText("Show exon list for "+uniquename); - exonListener = new ActionListener() - { - public void actionPerformed(ActionEvent event) - { - try - { - showExonsList(uniquename); - } - catch(InvalidRelationException e) - { - e.printStackTrace(); - } - } - }; - exonMenu.addActionListener(exonListener); - popup.add(exonMenu); - } - catch(InvalidRelationException e1) - { - e1.printStackTrace(); - } - popup.show(e.getComponent(), e.getX(), e.getY()); } diff --git a/uk/ac/sanger/artemis/io/DatabaseDocumentEntry.java b/uk/ac/sanger/artemis/io/DatabaseDocumentEntry.java index 46bf3ec584d9624689b3920429ea38d23bee132c..051e6c92942dd7adb492ddb9a5270e35c57cd37a 100644 --- a/uk/ac/sanger/artemis/io/DatabaseDocumentEntry.java +++ b/uk/ac/sanger/artemis/io/DatabaseDocumentEntry.java @@ -38,12 +38,18 @@ public class DatabaseDocumentEntry extends GFFDocumentEntry implements DocumentEntry { - public DatabaseDocumentEntry(final Document doc) + public DatabaseDocumentEntry(final Document doc, + final ReadListener listener) throws EntryInformationException, IOException { - super(doc,null); + super(doc,listener); } + public DatabaseDocumentEntry() + { + super(new GFFEntryInformation()); + } + /** * Returns true if and only if this entry is read only. For now this * always returns true - BlastDocumentEntry objects can't be changed. diff --git a/uk/ac/sanger/artemis/io/GFFStreamFeature.java b/uk/ac/sanger/artemis/io/GFFStreamFeature.java index 4e05ce75a745dc65d3da4ea3bb40d9c45cac2831..c8bb170ba51266e30b3851ee8c2112bcca8e5fc9 100644 --- a/uk/ac/sanger/artemis/io/GFFStreamFeature.java +++ b/uk/ac/sanger/artemis/io/GFFStreamFeature.java @@ -20,7 +20,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/io/GFFStreamFeature.java,v 1.42 2006-08-04 11:00:30 tjc Exp $ + * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/io/GFFStreamFeature.java,v 1.43 2006-08-07 14:57:10 tjc Exp $ */ package uk.ac.sanger.artemis.io; @@ -40,7 +40,7 @@ import java.text.SimpleDateFormat; * A StreamFeature that thinks it is a GFF feature. * * @author Kim Rutherford - * @version $Id: GFFStreamFeature.java,v 1.42 2006-08-04 11:00:30 tjc Exp $ + * @version $Id: GFFStreamFeature.java,v 1.43 2006-08-07 14:57:10 tjc Exp $ **/ public class GFFStreamFeature extends SimpleDocumentFeature @@ -86,6 +86,8 @@ public class GFFStreamFeature extends SimpleDocumentFeature setKey(key); setLocation(location); setQualifiers(qualifiers); + + /* if(getQualifierByName("score") == null) setQualifier(new Qualifier("score", ".")); @@ -94,7 +96,7 @@ public class GFFStreamFeature extends SimpleDocumentFeature if(getQualifierByName("gff_seqname") == null) setQualifier(new Qualifier("gff_seqname", ".")); - + */ if(getQualifierByName("ID") == null) setQualifier(new Qualifier("ID", "to_be_set")); @@ -207,11 +209,14 @@ public class GFFStreamFeature extends SimpleDocumentFeature } } - final Qualifier gff_seqname = - new Qualifier("gff_seqname", decode((String)line_bits.elementAt(0))); - - setQualifier(gff_seqname); + if( !((String)line_bits.elementAt(0)).equals("null") ) + { + final Qualifier gff_seqname = + new Qualifier("gff_seqname", decode((String)line_bits.elementAt(0))); + setQualifier(gff_seqname); + } + final Key key = new Key((String)line_bits.elementAt(2)); setKey(key); @@ -219,10 +224,13 @@ public class GFFStreamFeature extends SimpleDocumentFeature new Qualifier("gff_source", (String)line_bits.elementAt(1)); setQualifier(source_qualifier); - final Qualifier score_qualifier = - new Qualifier("score", (String)line_bits.elementAt(5)); - setQualifier(score_qualifier); - + if( !((String)line_bits.elementAt(5)).equals(".") ) + { + final Qualifier score_qualifier = + new Qualifier("score", (String)line_bits.elementAt(5)); + setQualifier(score_qualifier); + } + String frame = (String)line_bits.elementAt(7); if(frame.equals ("0")) diff --git a/uk/ac/sanger/artemis/util/DatabaseDocument.java b/uk/ac/sanger/artemis/util/DatabaseDocument.java index 58a4195c12fb4765bd2216fbd4db6cde86fb77f7..96836b2b6833f33e3522559135330f89d5144e6f 100644 --- a/uk/ac/sanger/artemis/util/DatabaseDocument.java +++ b/uk/ac/sanger/artemis/util/DatabaseDocument.java @@ -109,6 +109,7 @@ public class DatabaseDocument extends Document } } + /** * * Create a new Document from a database. @@ -244,14 +245,13 @@ public class DatabaseDocument extends Document this.name = name; } - /** - * Return a Document with the last element stripped off. - */ - public Document getParent() + + public DatabaseDocument createDatabaseDocument() { - return null; + return new DatabaseDocument( (String)getLocation(), pfield, + feature_id, schema ); } - + /** * Return true if and only if the Document refered to by this object exists * and is readable. Always returns true. @@ -310,7 +310,7 @@ public class DatabaseDocument extends Document if(gff_buffer[0].size() > 0) entry.append(gff_buffer[0]); - getSequence(dao, entry); + getChadoSequence(dao, entry); } else { @@ -320,7 +320,7 @@ public class DatabaseDocument extends Document entry.append(gff_buffer[i]); } - getSequence(dao, entry); + getChadoSequence(dao, entry); } instream = new ByteArrayInputStream(entry.getBytes()); @@ -784,7 +784,7 @@ public class DatabaseDocument extends Document * @return the resulting buffer * @throws java.sql.SQLException */ - private ByteBuffer getSequence(ChadoDAO dao, ByteBuffer buff) + private ByteBuffer getChadoSequence(ChadoDAO dao, ByteBuffer buff) throws java.sql.SQLException { ChadoFeature feature = dao.getSequence(Integer.parseInt(feature_id), @@ -1173,4 +1173,9 @@ public class DatabaseDocument extends Document e.printStackTrace(); } } + + public Document getParent() + { + return null; + } }