ascii file
[jalview.git] / src / jalview / io / vamsas / Dbref.java
1 package jalview.io.vamsas;
2
3 import jalview.datamodel.DBRefEntry;
4 import jalview.datamodel.SequenceI;
5 import uk.ac.vamsas.objects.core.DbRef;
6 import uk.ac.vamsas.objects.core.Map;
7 import uk.ac.vamsas.objects.core.Sequence;
8 import jalview.io.VamsasAppDatastore;
9
10 public class Dbref extends Rangetype
11 {
12   jalview.datamodel.SequenceI sq = null;
13   uk.ac.vamsas.objects.core.Sequence sequence = null;
14   DbRef dbref = null;
15   DBRefEntry dbentry=null;
16   public Dbref(VamsasAppDatastore datastore, DBRefEntry dbentry, jalview.datamodel.SequenceI sq2, uk.ac.vamsas.objects.core.Sequence sequence2)
17   {
18     super(datastore);
19     dbref = (DbRef) getjv2vObj(dbentry);
20     sq = sq2;
21     sequence = sequence2;
22     this.dbentry = dbentry;
23     if (dbref==null)
24     {
25       add();
26     } else {
27       if (dbref.isUpdated())
28       {
29         conflict();
30       } else {
31         update();
32       }
33         
34     }
35     
36   }
37
38   public Dbref(VamsasAppDatastore datastore, DbRef ref, Sequence vdseq, SequenceI dsseq)
39   {
40     super(datastore);
41     dbref = ref;
42     sequence = vdseq;
43     sq = dsseq;
44     dbentry = (jalview.datamodel.DBRefEntry) getvObj2jv(dbref);
45     if (dbentry == null)
46     {
47       addFromDocument();
48     } else {
49       if (dbref.isUpdated())
50       {
51         update();
52       }
53     }
54   }
55
56   private void update()
57   {
58     // TODO: verify and update dbrefs in vamsas document
59     // there will be trouble when a dataset sequence is modified to
60     // contain more residues than were originally referenced - we must
61     // then make a number of dataset sequence entries - this info is already stored 
62     jalview.bin.Cache.log.debug("TODO verify update of dataset sequence database references.");
63   }
64
65   private void conflict()
66   {
67     jalview.bin.Cache.log.debug("Conflict in dbentry update for "+dbref.getAccessionId()+dbref.getSource()+" "+dbref.getVorbaId());
68     // TODO Auto-generated method stub
69     
70   }
71   private void addFromDocument()
72   {
73     // add new dbref
74     sq.addDBRef(dbentry = new jalview.datamodel.DBRefEntry
75             (
76                     dbref.getSource().toString(),
77                  dbref.getVersion().toString(),
78                  dbref.getAccessionId().toString()));
79     if (dbref.getMapCount()>0)
80     {
81       // TODO: Jalview ignores all the other maps
82       if (dbref.getMapCount()>1)
83       {
84         jalview.bin.Cache.log.debug("Ignoring additional mappings on DbRef: "+dbentry.getSource()+":"+dbentry.getAccessionId());
85       }
86       jalview.datamodel.Mapping mp = new jalview.datamodel.Mapping(parsemapType(dbref.getMap(0)));
87       dbentry.setMap(mp);
88     }
89     // TODO: jalview ignores links and properties because it doesn't know what to do with them.
90     
91     bindjvvobj(dbentry, dbref);
92   }
93   private void add()
94   {
95     DbRef dbref = new DbRef();
96     bindjvvobj(dbentry, dbref);
97     dbref.setAccessionId(dbentry.getAccessionId());
98     dbref.setSource(dbentry.getSource());
99     dbref.setVersion(dbentry.getVersion());
100     if (dbentry.getMap()!=null)
101     {
102       jalview.datamodel.Mapping mp = dbentry.getMap();
103       if (mp.getMap()!=null)
104       {
105         Map vMap = new Map();
106         initMapType(vMap, mp.getMap(), true);
107         dbref.addMap(vMap);
108       } else {
109         jalview.bin.Cache.log.debug("Ignoring mapless DbRef.Map "+dbentry.getSrcAccString());
110       }
111     }
112     sequence.addDbRef(dbref);
113   }
114
115 }