From cb382499e8875bdc32d93b1984dcd40097dac639 Mon Sep 17 00:00:00 2001
From: Arne Stabenau <stabenau@sanger.ac.uk>
Date: Thu, 9 Dec 2004 18:14:15 +0000
Subject: [PATCH] added support for created_date and modified_date in
 gene,exon,transcript and translation

---
 modules/Bio/EnsEMBL/DBSQL/ExonAdaptor.pm      | 35 ++++++++++----
 modules/Bio/EnsEMBL/DBSQL/GeneAdaptor.pm      | 30 +++++++++---
 .../Bio/EnsEMBL/DBSQL/TranscriptAdaptor.pm    | 28 +++++++++--
 .../Bio/EnsEMBL/DBSQL/TranslationAdaptor.pm   | 47 ++++++++++++++-----
 modules/Bio/EnsEMBL/Exon.pm                   | 22 ++++++++-
 modules/Bio/EnsEMBL/Gene.pm                   | 22 ++++++++-
 modules/Bio/EnsEMBL/Transcript.pm             | 22 +++++++--
 modules/Bio/EnsEMBL/Translation.pm            | 20 +++++++-
 8 files changed, 186 insertions(+), 40 deletions(-)

diff --git a/modules/Bio/EnsEMBL/DBSQL/ExonAdaptor.pm b/modules/Bio/EnsEMBL/DBSQL/ExonAdaptor.pm
index ef39b4f46f..6b9af24e11 100644
--- a/modules/Bio/EnsEMBL/DBSQL/ExonAdaptor.pm
+++ b/modules/Bio/EnsEMBL/DBSQL/ExonAdaptor.pm
@@ -82,7 +82,8 @@ sub _columns {
 
   return qw( e.exon_id e.seq_region_id e.seq_region_start e.seq_region_end 
 	     e.seq_region_strand e.phase e.end_phase
-	     esi.stable_id esi.version );
+	     esi.stable_id esi.version UNIX_TIMESTAMP(created_date)
+             UNIX_TIMESTAMP(modified_date) );
 }
 
 
@@ -250,12 +251,26 @@ sub store {
 
   #store any stable_id information
   if ($exon->stable_id && $exon->version()) {
-    my $sth = $self->prepare(
+
+    my $statement = 
       "INSERT INTO exon_stable_id " .
-      "SET version = ?, " .
+	"SET version = ?, " .
           "stable_id = ?, " .
-          "exon_id = ?");
+	    "exon_id = ?";
+  
+    if( $exon->created_date() ) {
+      $statement .= "created_date = from_unixtime( ".$exon->created_date()."),";
+    } else {
+      $statement .= "created_date = \"0000-00-00 00:00:00\",";
+    }
+
+    if( $exon->modified_date() ) {
+      $statement .= "modified_date = from_unixtime( ".$exon->modified_date().")";
+    } else {
+      $statement .= "modified_date = \"0000-00-00 00:00:00\"";
+    }
 
+    my $sth = $self->prepare( $statement );
     $sth->execute( $exon->version, $exon->stable_id, $exonId );
   }
 
@@ -451,12 +466,14 @@ sub _objs_from_sth {
 
   my ( $exon_id, $seq_region_id, $seq_region_start,
        $seq_region_end, $seq_region_strand, $phase,
-       $end_phase, $stable_id, $version );
+       $end_phase, $stable_id, $version, $created_date, 
+       $modified_date );
 
   $sth->bind_columns(  \$exon_id, \$seq_region_id, 
-        \$seq_region_start,
-        \$seq_region_end, \$seq_region_strand, \$phase,
-        \$end_phase, \$stable_id, \$version );
+		       \$seq_region_start,
+		       \$seq_region_end, \$seq_region_strand, \$phase,
+		       \$end_phase, \$stable_id, \$version, \$created_date,
+		       \$modified_date );
 
   my $asm_cs;
   my $cmp_cs;
@@ -574,6 +591,8 @@ sub _objs_from_sth {
 	'-dbID'          =>  $exon_id,
         '-stable_id'     =>  $stable_id,
         '-version'       =>  $version,
+	'-created_date'  =>  $created_date || undef,
+	'-modified_date' =>  $modified_date || undef,
         '-phase'         =>  $phase,
         '-end_phase'     =>  $end_phase )
 
diff --git a/modules/Bio/EnsEMBL/DBSQL/GeneAdaptor.pm b/modules/Bio/EnsEMBL/DBSQL/GeneAdaptor.pm
index 4a8458a7a7..cb9c57c80d 100644
--- a/modules/Bio/EnsEMBL/DBSQL/GeneAdaptor.pm
+++ b/modules/Bio/EnsEMBL/DBSQL/GeneAdaptor.pm
@@ -92,9 +92,10 @@ sub _columns {
 
   return qw( g.gene_id g.seq_region_id g.seq_region_start g.seq_region_end
 	     g.seq_region_strand g.analysis_id g.type g.display_xref_id
-	     gd.description gsi.stable_id gsi.version x.display_label
-       x.dbprimary_acc x.description x.version exdb.db_name exdb.status
-       exdb.release );
+	     gd.description gsi.stable_id gsi.version UNIX_TIMESTAMP(gsi.created_date)
+	     UNIX_TIMESTAMP(gsi.modified_date) 
+	     x.display_label x.dbprimary_acc x.description x.version 
+	     exdb.db_name exdb.status exdb.release );
 }
 
 
@@ -776,10 +777,21 @@ sub store {
      my $statement = "INSERT INTO gene_stable_id
                          SET gene_id = ?,
                              stable_id = ?,
-                             version = ?";
+                             version = ?, ";
+     if( $gene->created_date() ) {
+       $statement .= "created_date = from_unixtime( ".$gene->created_date()."),";
+     } else {
+       $statement .= "created_date = \"0000-00-00 00:00:00\",";
+     }
+
+     if( $gene->modified_date() ) {
+       $statement .= "modified_date = from_unixtime( ".$gene->modified_date().")";
+     } else {
+       $statement .= "modified_date = \"0000-00-00 00:00:00\"";
+     }
 
      $sth = $self->prepare($statement);
-     $sth->execute( $gene_dbID, $gene->stable_id(), $gene->version() );
+     $sth->execute( $gene_dbID, $gene->stable_id(), $gene->version());
      $sth->finish();
    }
 
@@ -1085,14 +1097,16 @@ sub _objs_from_sth {
 
   my ( $gene_id, $seq_region_id, $seq_region_start, $seq_region_end, 
        $seq_region_strand, $analysis_id, $type, $display_xref_id, 
-       $gene_description, $stable_id, $version, $xref_display_id,
+       $gene_description, $stable_id, $version, $created_date, 
+       $modified_date, $xref_display_id,
        $xref_primary_acc, $xref_desc, $xref_version, $external_name, 
        $external_db, $external_status, $external_release );
 
   $sth->bind_columns( \$gene_id, \$seq_region_id, \$seq_region_start,
           \$seq_region_end, \$seq_region_strand, \$analysis_id, \$type,
           \$display_xref_id, \$gene_description, \$stable_id, \$version,
-          \$xref_display_id, \$xref_primary_acc, \$xref_desc, \$xref_version,
+          \$created_date, \$modified_date, 
+	  \$xref_display_id, \$xref_primary_acc, \$xref_desc, \$xref_version,
           \$external_db, \$external_status,
           \$external_release );
 
@@ -1217,6 +1231,8 @@ sub _objs_from_sth {
         '-dbID'          =>  $gene_id,
         '-stable_id'     =>  $stable_id,
         '-version'       =>  $version,
+	'-created_date'  =>  $created_date || undef,
+	'-modified_date' =>  $modified_date || undef,
         '-description'   =>  $gene_description,
         '-external_name' =>  $external_name,
         '-external_db'   =>  $external_db,
diff --git a/modules/Bio/EnsEMBL/DBSQL/TranscriptAdaptor.pm b/modules/Bio/EnsEMBL/DBSQL/TranscriptAdaptor.pm
index 815f1fdbcd..322cfe2c62 100644
--- a/modules/Bio/EnsEMBL/DBSQL/TranscriptAdaptor.pm
+++ b/modules/Bio/EnsEMBL/DBSQL/TranscriptAdaptor.pm
@@ -99,7 +99,8 @@ sub _columns {
 
   return qw( t.transcript_id t.seq_region_id t.seq_region_start t.seq_region_end 
 	     t.seq_region_strand t.gene_id 
-             t.display_xref_id tsi.stable_id tsi.version
+             t.display_xref_id tsi.stable_id tsi.version UNIX_TIMESTAMP(created_date)
+             UNIX_TIMESTAMP(modified_date)
              x.display_label exdb.db_name exdb.status );
 }
 
@@ -653,8 +654,23 @@ sub store {
      }
 
      my $statement = 
-       "INSERT INTO transcript_stable_id(transcript_id,stable_id,version)" .
-         " VALUES(?, ?, ?)";
+       "INSERT INTO transcript_stable_id ".
+	 "SET transcript_id = ?, ".
+	   "  stable_id = ?, ".
+	     "version = ?, ";
+
+     if( $transcript->created_date() ) {
+       $statement .= "created_date = from_unixtime( ".$transcript->created_date()."),";
+     } else {
+       $statement .= "created_date = \"0000-00-00 00:00:00\",";
+     }
+
+     if( $transcript->modified_date() ) {
+       $statement .= "modified_date = from_unixtime( ".$transcript->modified_date().")";
+     } else {
+       $statement .= "modified_date = \"0000-00-00 00:00:00\"";
+     }
+
      my $sth = $self->prepare($statement);
      $sth->execute($transc_dbID, $transcript->stable_id, $transcript->version);
      $sth->finish();
@@ -929,12 +945,12 @@ sub _objs_from_sth {
 
   my ( $transcript_id, $seq_region_id, $seq_region_start, $seq_region_end, 
        $seq_region_strand, $gene_id,  
-       $display_xref_id, $stable_id, $version,
+       $display_xref_id, $stable_id, $version, $created_date, $modified_date,
        $external_name, $external_db, $external_status );
 
   $sth->bind_columns( \$transcript_id, \$seq_region_id, \$seq_region_start, 
                       \$seq_region_end, \$seq_region_strand, \$gene_id,  
-                      \$display_xref_id, \$stable_id, \$version,
+                      \$display_xref_id, \$stable_id, \$version, \$created_date, \$modified_date,
                       \$external_name, \$external_db, \$external_status );
 
 
@@ -1067,6 +1083,8 @@ sub _objs_from_sth {
         '-dbID'          =>  $transcript_id,
         '-stable_id'     =>  $stable_id,
         '-version'       =>  $version,
+	'-created_date'  =>  $created_date || undef,
+	'-modified_date' =>  $modified_date || undef,
         '-external_name' =>  $external_name,
         '-external_db'   =>  $external_db,
         '-external_status' => $external_status,
diff --git a/modules/Bio/EnsEMBL/DBSQL/TranslationAdaptor.pm b/modules/Bio/EnsEMBL/DBSQL/TranslationAdaptor.pm
index 57e407a4c6..a245bb9922 100644
--- a/modules/Bio/EnsEMBL/DBSQL/TranslationAdaptor.pm
+++ b/modules/Bio/EnsEMBL/DBSQL/TranslationAdaptor.pm
@@ -78,7 +78,8 @@ sub fetch_by_Transcript {
   my $sql = "
     SELECT tl.translation_id, tl.start_exon_id,
            tl.end_exon_id, tl.seq_start, tl.seq_end,
-           tlsi.stable_id, tlsi.version
+           tlsi.stable_id, tlsi.version, UNIX_TIMESTAMP(tlsi.created_date),
+           UNIX_TIMESTAMP(tlsi.modified_date)
       FROM translation tl
  LEFT JOIN translation_stable_id tlsi
         ON tlsi.translation_id = tl.translation_id
@@ -89,8 +90,9 @@ sub fetch_by_Transcript {
   $sth->execute( $transcript_id );
 
   my ( $translation_id, $start_exon_id, $end_exon_id,
-       $seq_start, $seq_end, $stable_id, $version ) = 
-  $sth->fetchrow_array();
+       $seq_start, $seq_end, $stable_id, $version, $created_date, 
+       $modified_date ) = 
+	 $sth->fetchrow_array();
   $sth->finish;
   if( ! defined $translation_id ) {
     return undef;
@@ -124,7 +126,9 @@ sub fetch_by_Transcript {
      -start_exon => $start_exon,
      -end_exon => $end_exon,
      -stable_id => $stable_id,
-     -version => $version
+     -version => $version,
+     -created_date => $created_date || undef,
+     -modified_date => $modified_date || undef
    );
 
   return $translation;
@@ -235,9 +239,25 @@ sub store {
      throw("Trying to store incomplete stable id information for translation");
     }
 
-    my $sth = $self->prepare
-      ("INSERT INTO translation_stable_id(translation_id, stable_id, version)".
-       "     VALUES (?, ?, ?)");
+     my $statement = 
+       "INSERT INTO translation_stable_id ".
+	 "SET translation_id = ?, ".
+	   "  stable_id = ?, ".
+	     "version = ?, ";
+
+    if( $translation->created_date() ) {
+      $statement .= "created_date = from_unixtime( ".$translation->created_date()."),";
+    } else {
+      $statement .= "created_date = \"0000-00-00 00:00:00\",";
+    }
+
+    if( $translation->modified_date() ) {
+      $statement .= "modified_date = from_unixtime( ".$translation->modified_date().")";
+    } else {
+      $statement .= "modified_date = \"0000-00-00 00:00:00\"";
+    }
+
+    my $sth = $self->prepare($statement);
 
     $sth->execute($transl_dbID, $translation->stable_id(), 
                   $translation->version());
@@ -463,7 +483,8 @@ sub fetch_all_by_Transcript_list {
   my $max_size = 200;
 
   my ( $tr_id,$tl_id, $start_exon_id, $end_exon_id,
-       $seq_start, $seq_end, $stable_id, $version );
+       $seq_start, $seq_end, $stable_id, $version, 
+       $created_date, $modified_date );
 
   my %ex_hash;
 
@@ -485,7 +506,8 @@ sub fetch_all_by_Transcript_list {
     my $sth = $self->prepare
       ("SELECT tl.transcript_id, tl.translation_id, tl.start_exon_id,
            tl.end_exon_id, tl.seq_start, tl.seq_end,
-           tlsi.stable_id, tlsi.version
+           tlsi.stable_id, tlsi.version, UNIX_TIMESTAMP(tlsi.created_date),
+           UNIX_TIMESTAMP(tlsi.modified_date)
       FROM translation tl
  LEFT JOIN translation_stable_id tlsi
         ON tlsi.translation_id = tl.translation_id
@@ -494,7 +516,8 @@ sub fetch_all_by_Transcript_list {
     $sth->execute();
 
     $sth->bind_columns( \$tr_id, \$tl_id, \$start_exon_id, \$end_exon_id,
-                        \$seq_start, \$seq_end, \$stable_id, \$version );
+                        \$seq_start, \$seq_end, \$stable_id, \$version,
+			\$created_date, \$modified_date );
 
     while($sth->fetch()) {
       my ($start_exon, $end_exon);
@@ -528,7 +551,9 @@ sub fetch_all_by_Transcript_list {
          -start_exon => $start_exon,
          -end_exon => $end_exon,
          -stable_id => $stable_id,
-         -version => $version);
+         -version => $version,
+	 -created_date => $created_date || undef,
+	 -modified_date => $modified_date || undef);
 
       $tr->translation($tl);
 
diff --git a/modules/Bio/EnsEMBL/Exon.pm b/modules/Bio/EnsEMBL/Exon.pm
index e0e448b24b..112e97336d 100755
--- a/modules/Bio/EnsEMBL/Exon.pm
+++ b/modules/Bio/EnsEMBL/Exon.pm
@@ -81,13 +81,16 @@ sub new {
 
   my $self = $class->SUPER::new( @_ );
 
-  my ( $phase, $end_phase, $stable_id, $version ) = 
-    rearrange( [ "PHASE", "END_PHASE", "STABLE_ID", "VERSION" ], @_ );
+  my ( $phase, $end_phase, $stable_id, $version, $created_date, $modified_date ) = 
+    rearrange( [ "PHASE", "END_PHASE", "STABLE_ID", "VERSION",
+		 "CREATED_DATE", "MODIFIED_DATE" ], @_ );
 
   $self->{'phase'} = $phase;
   $self->{'end_phase'} = $end_phase;
   $self->{'stable_id'} = $stable_id;
   $self->{'version'} = $version;
+  $self->{'created_date'} = $created_date;
+  $self->{'modified_date'} = $modified_date;
 
   return $self;
 }
@@ -590,6 +593,21 @@ sub stable_id {
 }
 
 
+sub created_date {
+  my $self = shift;
+  $self->{'created_date'} = shift if ( @_ );
+  return $self->{'created_date'};
+}
+
+
+sub modified_date {
+  my $self = shift;
+  $self->{'modified_date'} = shift if ( @_ );
+  return $self->{'modified_date'};
+}
+
+
+
 =head2 version
 
   Arg [1]    : string $version
diff --git a/modules/Bio/EnsEMBL/Gene.pm b/modules/Bio/EnsEMBL/Gene.pm
index 58a06b84f4..722f17f42e 100755
--- a/modules/Bio/EnsEMBL/Gene.pm
+++ b/modules/Bio/EnsEMBL/Gene.pm
@@ -59,10 +59,11 @@ sub new {
   my $self = $class->SUPER::new(@_);
 
   my ( $stable_id, $version, $external_name, $type, $external_db, 
-       $external_status, $display_xref, $description, $transcripts ) = 
+       $external_status, $display_xref, $description, $transcripts,
+       $created_date, $modified_date ) = 
     rearrange( [ 'STABLE_ID', 'VERSION', 'EXTERNAL_NAME', 'TYPE',
 		 'EXTERNAL_DB', 'EXTERNAL_STATUS', 'DISPLAY_XREF', 'DESCRIPTION',
-                 'TRANSCRIPTS'], @_ );
+                 'TRANSCRIPTS', 'CREATED_DATE', 'MODIFIED_DATE'], @_ );
 
   if ($transcripts) {
     $self->{'_transcript_array'} = $transcripts;
@@ -71,6 +72,9 @@ sub new {
 
   $self->stable_id( $stable_id );
   $self->version( $version );
+  $self->{'created_date'} = $created_date;
+  $self->{'modified_date'} = $modified_date;
+
   $self->external_name( $external_name ) if( defined $external_name );
   $self->external_db( $external_db ) if( defined $external_db );
   $self->external_status( $external_status ) if( defined $external_status );
@@ -469,6 +473,20 @@ sub stable_id{
 }
 
 
+sub created_date {
+  my $self = shift;
+  $self->{'created_date'} = shift if ( @_ );
+  return $self->{'created_date'};
+}
+
+
+sub modified_date {
+  my $self = shift;
+  $self->{'modified_date'} = shift if ( @_ );
+  return $self->{'modified_date'};
+}
+
+
 =head2 transform
 
   Arg  1     : String $coordinate_system_name
diff --git a/modules/Bio/EnsEMBL/Transcript.pm b/modules/Bio/EnsEMBL/Transcript.pm
index 76aa0d5861..d9c2994b12 100755
--- a/modules/Bio/EnsEMBL/Transcript.pm
+++ b/modules/Bio/EnsEMBL/Transcript.pm
@@ -100,7 +100,7 @@ sub new {
   my $self = $class->SUPER::new(@_);
 
   my ( $exons, $stable_id, $version, $external_name, $external_db,
-       $external_status, $display_xref );
+       $external_status, $display_xref, $created_date, $modified_date );
 
   #catch for old style constructor calling:
   if((@_ > 0) && ref($_[0])) {
@@ -111,9 +111,10 @@ sub new {
   }
   else {
     ( $exons, $stable_id, $version, $external_name, $external_db,
-      $external_status, $display_xref ) = 
+      $external_status, $display_xref, $created_date, $modified_date ) = 
         rearrange( [ "EXONS", 'STABLE_ID', 'VERSION', 'EXTERNAL_NAME', 
-                     'EXTERNAL_DB', 'EXTERNAL_STATUS', 'DISPLAY_XREF' ], @_ );
+                     'EXTERNAL_DB', 'EXTERNAL_STATUS', 'DISPLAY_XREF',
+		     'CREATED_DATE', 'MODIFIED_DATE' ], @_ );
   }
 
   if( $exons ) {
@@ -123,6 +124,8 @@ sub new {
 
   $self->stable_id( $stable_id );
   $self->version( $version );
+  $self->{'created_date'} = $created_date;
+  $self->{'modified_date'} = $modified_date;
   $self->external_name( $external_name ) if( defined $external_name );
   $self->external_db( $external_db ) if( defined $external_db );
   $self->external_status( $external_status ) if( defined $external_status );
@@ -1421,6 +1424,19 @@ sub stable_id{
   return $self->{'stable_id'};
 }
 
+sub created_date {
+  my $self = shift;
+  $self->{'created_date'} = shift if ( @_ );
+  return $self->{'created_date'};
+}
+
+
+sub modified_date {
+  my $self = shift;
+  $self->{'modified_date'} = shift if ( @_ );
+  return $self->{'modified_date'};
+}
+
 
 
 =head2 swap_exons
diff --git a/modules/Bio/EnsEMBL/Translation.pm b/modules/Bio/EnsEMBL/Translation.pm
index 2a49baa806..7e6ef7740f 100755
--- a/modules/Bio/EnsEMBL/Translation.pm
+++ b/modules/Bio/EnsEMBL/Translation.pm
@@ -74,10 +74,11 @@ sub new {
   my $class = ref($caller) || $caller;
 
   my ( $start_exon, $end_exon, $seq_start, $seq_end,
-       $stable_id, $version, $dbID, $adaptor, $seq ) = 
+       $stable_id, $version, $dbID, $adaptor, $seq,
+       $created_date, $modified_date ) = 
     rearrange( [ "START_EXON", "END_EXON", "SEQ_START", "SEQ_END",
                  "STABLE_ID", "VERSION", "DBID", "ADAPTOR",
-                 "SEQ" ], @_ );
+                 "SEQ", "CREATED_DATE", "MODIFIED_DATE" ], @_ );
 
   my $self = bless {
 		    'start_exon' => $start_exon,
@@ -88,6 +89,8 @@ sub new {
 		    'end'        => $seq_end,
 		    'stable_id'  => $stable_id,
 		    'version'    => $version,
+		    'created_date' => $created_date,
+		    'modified_date' => $modified_date,
         'seq'        => $seq
 		   }, $class;
 
@@ -235,6 +238,19 @@ sub stable_id {
   return $self->{'stable_id'};
 }
 
+sub created_date {
+  my $self = shift;
+  $self->{'created_date'} = shift if ( @_ );
+  return $self->{'created_date'};
+}
+
+
+sub modified_date {
+  my $self = shift;
+  $self->{'modified_date'} = shift if ( @_ );
+  return $self->{'modified_date'};
+}
+
 
 
 =head2 transform
-- 
GitLab