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