From dd58d5e578c43c69b57db9d3724c23d556d717ce Mon Sep 17 00:00:00 2001
From: tjc <tjc@ee4ac58c-ac51-4696-9907-e4b3aa274f04>
Date: Thu, 30 Nov 2006 10:02:14 +0000
Subject: [PATCH] add FeatureCvTermPubs

git-svn-id: svn+ssh://svn.internal.sanger.ac.uk/repos/svn/pathsoft/artemis/trunk@5044 ee4ac58c-ac51-4696-9907-e4b3aa274f04
---
 .../sanger/artemis/util/DatabaseDocument.java | 79 +++++++++++++++++--
 1 file changed, 72 insertions(+), 7 deletions(-)

diff --git a/uk/ac/sanger/artemis/util/DatabaseDocument.java b/uk/ac/sanger/artemis/util/DatabaseDocument.java
index a14ccbed2..096e06712 100644
--- a/uk/ac/sanger/artemis/util/DatabaseDocument.java
+++ b/uk/ac/sanger/artemis/util/DatabaseDocument.java
@@ -43,6 +43,7 @@ import org.gmod.schema.sequence.FeatureSynonym;
 import org.gmod.schema.sequence.FeatureCvTerm;
 import org.gmod.schema.sequence.FeatureCvTermProp;
 import org.gmod.schema.sequence.FeatureCvTermDbXRef;
+import org.gmod.schema.sequence.FeatureCvTermPub;
 import org.gmod.schema.cv.CvTerm;
 import org.gmod.schema.general.DbXRef;
 import org.gmod.schema.organism.Organism;
@@ -503,6 +504,8 @@ public class DatabaseDocument extends Document
 
     Hashtable featureCvTerms = getFeatureCvTermsByFeature(dao);
     Hashtable featureCvTermDbXRefs = getFeatureCvTermDbXRef(dao);
+    Hashtable featureCvTermPubs = getFeatureCvTermPub(dao);
+    
     List pubDbXRefs= dao.getPubDbXRef();
 
     // create gff byte stream
@@ -522,7 +525,8 @@ public class DatabaseDocument extends Document
       
       chadoToGFF(feat, parentFeature.getUniqueName(),
                  dbxrefs, synonym, featureCvTerms,
-                 pubDbXRefs, featureCvTermDbXRefs, id_store, dao, 
+                 pubDbXRefs, featureCvTermDbXRefs, featureCvTermPubs,
+                 id_store, dao, 
                  feat.getFeatureLoc(), this_buff);
        
       if( i%10 == 0 || i == feature_size-1)
@@ -592,7 +596,7 @@ public class DatabaseDocument extends Document
   
   private Hashtable getFeatureCvTermDbXRef(final GmodDAO dao)
   {
-    List list = dao.getFeatureCvTermDbXRef(null);
+    List list = dao.getFeatureCvTermDbXRefByFeature(null);
     if(list == null || list.size() == 0)
       return null;
     
@@ -620,6 +624,36 @@ public class DatabaseDocument extends Document
     return featureCvTermDbXRefs;
   }
   
+  private Hashtable getFeatureCvTermPub(final GmodDAO dao)
+  {
+    List list = dao.getFeatureCvTermPubByFeature(null);
+    if(list == null || list.size() == 0)
+      return null;
+    
+    Integer featureCvTermId;
+    List value;
+    
+    Hashtable featureCvTermPubs = new Hashtable(list.size());
+    for(int i=0; i<list.size(); i++)
+    {
+      FeatureCvTermPub featureCvTermPub =
+        (FeatureCvTermPub)list.get(i);
+      
+      featureCvTermId = new Integer(
+          featureCvTermPub.getFeatureCvTerm().getFeatureCvTermId());
+      
+      if(featureCvTermPubs.containsKey(featureCvTermId))
+        value = (Vector)featureCvTermPubs.get(featureCvTermId);
+      else
+        value = new Vector();
+      
+      value.add(featureCvTermPub);
+      featureCvTermPubs.put(featureCvTermId, value);
+    }
+     
+    return featureCvTermPubs;
+  }
+  
   /**
    * Use by the gene editor to retrieve the gene and related
    * features
@@ -663,7 +697,7 @@ public class DatabaseDocument extends Document
 
     ByteBuffer buff = new ByteBuffer();
     
-    chadoToGFF(feature, null, null, null, null, null, null, null, dao,
+    chadoToGFF(feature, null, null, null, null, null, null, null, null, dao,
                featureloc, buff);
 
     // get children of gene
@@ -683,7 +717,7 @@ public class DatabaseDocument extends Document
 
       FeatureLoc loc = getFeatureLoc(new Vector(
           transcript.getFeatureLocsForFeatureId()), src_id);
-      chadoToGFF(transcript, feature.getUniqueName(), null, null,
+      chadoToGFF(transcript, feature.getUniqueName(), null, null, null,
           null, null, null, id_store, dao, loc, buff);
 
       // get children of transcript - exons and pp
@@ -703,7 +737,7 @@ public class DatabaseDocument extends Document
 
         loc = getFeatureLoc(
             new Vector(child.getFeatureLocsForFeatureId()),src_id);
-        chadoToGFF(child, transcript.getUniqueName(), null,null,
+        chadoToGFF(child, transcript.getUniqueName(), null,null, null,
                    null, null, null, id_store, dao, loc, buff);
       }
     }
@@ -733,6 +767,7 @@ public class DatabaseDocument extends Document
                                  final Hashtable featureCvTerms,
                                  final List pubDbXRefs,
                                  final Hashtable featureCvTermDbXRefs,
+                                 final Hashtable featureCvTermPubs,
                                  final Hashtable id_store,
                                  final GmodDAO dao,
                                  final FeatureLoc featureloc,
@@ -914,9 +949,11 @@ public class DatabaseDocument extends Document
         
         List featureCvTermDbXRefList = 
             (List)featureCvTermDbXRefs.get(featureCvTermId);
+        
+        List featureCvTermPubList = (List)featureCvTermPubs.get(featureCvTermId);
           
         appendControlledVocabulary(this_buff, dao, feature_cvterm,
-                                   featureCvTermDbXRefList, pubDbXRefs);
+                                   featureCvTermDbXRefList,featureCvTermPubList, pubDbXRefs);
       }
       //System.out.println(new String(this_buff.getBytes()));
     }
@@ -935,6 +972,7 @@ public class DatabaseDocument extends Document
                                           final GmodDAO dao,
                                           final FeatureCvTerm feature_cvterm,
                                           final List featureCvTermDbXRefs,
+                                          final List featureCvTermPubs,
                                           final List pubDbXRefs)
   {
     CvTerm cvterm =  getCvTerm( feature_cvterm.getCvTerm().getCvTermId(), dao);
@@ -1029,14 +1067,41 @@ public class DatabaseDocument extends Document
       attr_buff.append("term="+feature_cvterm.getCvTerm().getName()+"%3B");
       
       // PMID
+      int nfound_pub = 0;
       if(feature_cvterm.getPub().getUniqueName() != null &&
          !feature_cvterm.getPub().getUniqueName().equals("NULL"))
       {
         Pub pub = feature_cvterm.getPub();
         attr_buff.append("db_xref="+
-            pub.getUniqueName()+ "%3B");
+            pub.getUniqueName());
+        nfound_pub++;
+      }
+      
+      if(featureCvTermPubs != null &&
+          featureCvTermPubs.size() > 0)
+      {
+        for(int i=0; i<featureCvTermPubs.size(); i++)
+        {
+          FeatureCvTermPub featureCvTermPub =
+            (FeatureCvTermPub)featureCvTermPubs.get(i);
+          
+          if(feature_cvterm.getFeatureCvTermId() != 
+            featureCvTermPub.getFeatureCvTerm().getFeatureCvTermId())
+            continue;
+          
+          if(nfound_pub == 0)
+            attr_buff.append("db_xref=");
+          else if(nfound_pub > 1)
+            attr_buff.append("|");
+
+          attr_buff.append(featureCvTermPub.getPub().getUniqueName());
+          nfound_pub++;
+        }
       }
       
+      if(nfound_pub > 0)
+        attr_buff.append("%3B");
+      
       if(featureCvTermDbXRefs != null &&
           featureCvTermDbXRefs.size() > 0 )
       {  
-- 
GitLab