JAL-1953 start on making everything interface based
[jalview.git] / src / jalview / ext / archaeopteryx / LoadedTreeSequenceAssociation.java
1 package jalview.ext.archaeopteryx;
2
3 import jalview.analysis.SequenceIdMatcher;
4 import jalview.datamodel.SequenceI;
5 import jalview.ext.treeviewer.ExternalLoadedTreeAssociationI;
6 import jalview.ext.treeviewer.ExternalTreeI;
7 import jalview.ext.treeviewer.ExternalTreeNodeI;
8 import jalview.util.MappingUtils;
9
10 import java.util.HashMap;
11 import java.util.Iterator;
12 import java.util.Map;
13
14
15 public class LoadedTreeSequenceAssociation
16         implements ExternalLoadedTreeAssociationI
17 {
18   SequenceI[] alignSequences;
19
20   ExternalTreeI tree;
21
22   Map<SequenceI, ExternalTreeNodeI> alignmentWithNodes;
23
24   Map<ExternalTreeNodeI, SequenceI> nodesWithAlignment;
25
26   public LoadedTreeSequenceAssociation(SequenceI[] alignmentSequences,
27           ExternalTreeI aptxTree)
28   {
29     alignSequences = alignmentSequences;
30     tree = aptxTree;
31     alignmentWithNodes = new HashMap<>(alignSequences.length);
32     nodesWithAlignment = new HashMap<>(alignSequences.length);
33
34   }
35
36
37
38   /**
39    * Tries to match sequences from Jalview with tree nodes in Archaeopteryx and
40    * fills in the tree node with sequence data if a match is found.
41    * 
42    * Partially refactored from the old Jalview TreeModel
43    * associateLeavesToSequences method.
44    *
45    * @param seqs
46    * @param aptxTree
47    */
48   @Override
49   public void associateLeavesToSequences()
50
51   {
52     SequenceIdMatcher algnIds = new SequenceIdMatcher(alignSequences);
53     SequenceI nodeSequence;
54     String nodeSequenceName;
55
56     if (!tree.isEmpty())
57     {
58       for (final Iterator<ExternalTreeNodeI> iter = tree
59               .iterateInPreOrder(); iter
60               .hasNext();)
61       {
62         ExternalTreeNodeI treeNode = iter.next();
63         nodeSequenceName = treeNode.getNodeName();
64
65         nodeSequence = algnIds.findIdMatch(nodeSequenceName);
66         if (nodeSequence != null)
67         {
68
69           treeNode.setSequence(nodeSequence);
70
71           MappingUtils.putWithDuplicationCheck(alignmentWithNodes,
72                   nodeSequence, treeNode);
73           MappingUtils.putWithDuplicationCheck(nodesWithAlignment, treeNode,
74                   nodeSequence);
75
76
77         }
78
79     }
80
81     }
82   }
83
84
85
86   public Map<SequenceI, ExternalTreeNodeI> getAlignmentWithNodes()
87   {
88     return alignmentWithNodes;
89   }
90
91   public Map<ExternalTreeNodeI, SequenceI> getNodesWithAlignment()
92   {
93     return nodesWithAlignment;
94   }
95
96
97 }
98
99
100
101
102
103