1 package jalview.viewmodel.seqfeatures;
4 import java.util.ArrayList;
5 import java.util.LinkedHashMap;
7 import java.util.Vector;
9 import jalview.api.DBRefEntryI;
10 import jalview.datamodel.AlignmentI;
11 import jalview.datamodel.DBRefEntry;
12 import jalview.datamodel.SequenceFeature;
13 import jalview.datamodel.SequenceI;
14 import jalview.datamodel.features.SequenceFeaturesI;
16 public class IdColumns
19 AlignmentI alignment = null;
21 public IdColumns(AlignmentI al)
24 columns.put(STRUCTURES_NUM.getLabel(), STRUCTURES_NUM);
28 public final static IdColumn STRUCTURES_NUM;
31 STRUCTURES_NUM = new IdColumn("3D Structures",
32 "Number of associated structure files", false);
35 LinkedHashMap<String, IdColumn> columns = new LinkedHashMap<String, IdColumn>();
38 * register a feature on the columnset
41 * @return true if feature was not seen before
43 boolean updateListForFeature(SequenceFeature sf)
45 String colname = sf.getType();
46 if (columns.get(colname) != null)
51 IdColumn col = new IdColumn(colname,
52 "Nonpositional feature: " + colname, false);
53 col.featureTypeName = sf.getType();
54 // col.featureGroupName = sf.getFeatureGroup();
55 columns.put(colname, col);
59 boolean updateListForDbxref(DBRefEntryI dbref)
61 String colname = dbref.getSource();
62 if (columns.get(colname) != null)
67 IdColumn col = new IdColumn(colname,
68 "Database CrossReference: " + colname, false);
69 col.DbRefName = colname;
70 // col.featureGroupName = sf.getFeatureGroup();
71 columns.put(colname, col);
75 public void updateTypeList()
77 for (SequenceI sq : alignment.getSequences())
80 while (seq.getDatasetSequence() != null)
82 seq = seq.getDatasetSequence();
85 SequenceFeaturesI sqf = seq.getFeatures();
86 List<SequenceFeature> nonpos = sqf.getNonPositionalFeatures();
89 for (SequenceFeature sf : nonpos)
91 updateListForFeature(sf);
94 if (seq.getDBRefs() != null)
96 for (DBRefEntryI dbr : seq.getDBRefs())
98 updateListForDbxref(dbr);
104 public void toggleVisible(String column)
106 IdColumn col = columns.get(column);
109 col.visible = !col.visible;
113 public List<IdColumn> getVisible()
115 // probably want to cache this
116 ArrayList<IdColumn> vis = new ArrayList();
117 for (IdColumn col : columns.values())
127 public final class ColumnCell
129 public final String label;
131 public final Color bg;
133 public final Color fg;
135 public ColumnCell(final String label, final Color bg, final Color fg)
144 * render the column value for this sequence
150 public ColumnCell getCellFor(SequenceI seq, IdColumn col)
152 ColumnCell cell = null;
155 SequenceI dseq = seq;
156 while (dseq.getDatasetSequence() != null)
158 dseq = dseq.getDatasetSequence();
160 if (col == STRUCTURES_NUM)
162 Vector pdbE = dseq.getAllPDBEntries();
167 return new ColumnCell("" + pdbE.size(), Color.red, Color.white);
169 if (col.featureTypeName != null)
171 List<SequenceFeature> np = dseq.getFeatures()
172 .getNonPositionalFeatures(col.featureTypeName);
175 for (SequenceFeature npfeat : np)
177 // nb deal with multiplicities!
178 if (col.featureGroupName == null || (npfeat.featureGroup != null
179 && npfeat.featureGroup.equals(col.featureGroupName)))
181 Color fg = Color.black;
182 Color bg = Color.white;
184 return new ColumnCell(npfeat.description, fg, bg);
189 if (col.DbRefName != null)
191 List<DBRefEntryI> refs = new ArrayList<DBRefEntryI>();
192 for (DBRefEntryI dbr : dseq.getDBRefs())
194 if (dbr.getSource().equals(col.DbRefName))
203 StringBuilder dbr = new StringBuilder();
204 dbr.append(refs.size());
205 for (DBRefEntryI ref : refs)
207 dbr.append(" "+ref.getAccessionId());
209 return new ColumnCell(dbr.toString(), Color.black, Color.white);
213 // no value for this sequence in given column
217 public IdColumn[] getIdColumns()
219 return columns.values().toArray(new IdColumn[0]);