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