JAL-3690 Remove references to old AlignCalcManager.
[jalview.git] / src / jalview / workers / AlignCalcWorker.java
1 /*
2  * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3  * Copyright (C) $$Year-Rel$$ The Jalview Authors
4  * 
5  * This file is part of Jalview.
6  * 
7  * Jalview is free software: you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License 
9  * as published by the Free Software Foundation, either version 3
10  * of the License, or (at your option) any later version.
11  *  
12  * Jalview is distributed in the hope that it will be useful, but 
13  * WITHOUT ANY WARRANTY; without even the implied warranty 
14  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
15  * PURPOSE.  See the GNU General Public License for more details.
16  * 
17  * You should have received a copy of the GNU General Public License
18  * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
19  * The Jalview Authors are detailed in the 'AUTHORS' file.
20  */
21 package jalview.workers;
22
23 import jalview.api.AlignCalcManagerI2;
24 import jalview.api.AlignCalcWorkerI;
25 import jalview.api.AlignViewportI;
26 import jalview.api.AlignmentViewPanel;
27 import jalview.datamodel.AlignmentAnnotation;
28 import jalview.datamodel.AlignmentI;
29 import jalview.datamodel.Annotation;
30
31 import java.util.List;
32
33 /**
34  * Base class for alignment calculation workers
35  * 
36  * @author jimp
37  * 
38  */
39 public abstract class AlignCalcWorker implements AlignCalcWorkerI
40 {
41   /**
42    * manager and data source for calculations
43    */
44   protected AlignViewportI alignViewport;
45
46   protected AlignCalcManagerI2 calcMan;
47
48   protected AlignmentViewPanel ap;
49
50   protected List<AlignmentAnnotation> ourAnnots;
51
52   public AlignCalcWorker(AlignViewportI alignViewport,
53           AlignmentViewPanel alignPanel)
54   {
55     this.alignViewport = alignViewport;
56     calcMan = alignViewport.getCalcManager();
57     ap = alignPanel;
58   }
59
60   protected void abortAndDestroy()
61   {
62     if (calcMan != null)
63     {
64       calcMan.cancelWorker(this);
65       calcMan.removeWorker(this);
66     }
67     alignViewport = null;
68     calcMan = null;
69     ap = null;
70
71   }
72
73   @Override
74   public boolean involves(AlignmentAnnotation i)
75   {
76     return ourAnnots != null && ourAnnots.contains(i);
77   }
78
79   /**
80    * Permanently removes from the alignment all annotation rows managed by this
81    * worker
82    */
83   @Override
84   public void removeAnnotation()
85   {
86     if (ourAnnots != null && alignViewport != null)
87     {
88       AlignmentI alignment = alignViewport.getAlignment();
89       synchronized (ourAnnots)
90       {
91         for (AlignmentAnnotation aa : ourAnnots)
92         {
93           alignment.deleteAnnotation(aa, true);
94         }
95       }
96       ourAnnots.clear();
97     }
98   }
99
100   // TODO: allow GUI to query workers associated with annotation to add items to
101   // annotation label panel popup menu
102
103   @Override
104   public boolean isDeletable()
105   {
106     return false;
107   }
108
109   /**
110    * Calculate min and max values of annotations and set as graphMin, graphMax
111    * on the AlignmentAnnotation. This is needed because otherwise, well, bad
112    * things happen.
113    * 
114    * @param ann
115    * @param anns
116    */
117   protected void setGraphMinMax(AlignmentAnnotation ann, Annotation[] anns)
118   {
119     // TODO feels like this belongs inside AlignmentAnnotation!
120     float max = Float.MIN_VALUE;
121     float min = Float.MAX_VALUE;
122     boolean set = false;
123     for (Annotation a : anns)
124     {
125       if (a != null)
126       {
127         set = true;
128         float val = a.value;
129         max = Math.max(max, val);
130         min = Math.min(min, val);
131       }
132     }
133     if (set)
134     {
135       ann.graphMin = min;
136       ann.graphMax = max;
137     }
138   }
139
140   public AlignViewportI getAlignViewport()
141   {
142     return alignViewport;
143   }
144 }