001    package edu.nrao.sss.webapp;
002    
003    import edu.nrao.sss.astronomy.CelestialCoordinateSystem;
004    import edu.nrao.sss.astronomy.Epoch;
005    import edu.nrao.sss.astronomy.StokesParameter;
006    import edu.nrao.sss.astronomy.VelocityConvention;
007    import edu.nrao.sss.astronomy.VelocityFrame;
008    import edu.nrao.sss.measure.AngularVelocityUnits;
009    import edu.nrao.sss.measure.DistanceUnits;
010    import edu.nrao.sss.measure.LinearVelocityUnits;
011    import edu.nrao.sss.measure.TimeUnits;
012    import edu.nrao.sss.model.project.scan.AntennaWrap;
013    import edu.nrao.sss.model.project.scan.PositionType;
014    import edu.nrao.sss.model.project.scan.ScanTimeType;
015    import edu.nrao.sss.model.project.scan.ScanMode;
016    import edu.nrao.sss.model.project.scan.TippingOrder;
017    import edu.nrao.sss.model.resource.AntennaSpecifier;
018    import edu.nrao.sss.model.resource.TelescopeConfiguration;
019    import edu.nrao.sss.model.resource.TelescopeType;
020    import edu.nrao.sss.model.source.BrightnessDistribution;
021    import edu.nrao.sss.util.EnumerationUtility;
022    import edu.nrao.sss.util.FileCompressionFormat;
023    
024    import java.util.ArrayList;
025    import java.util.Collection;
026    import java.util.EnumSet;
027    import java.util.List;
028    
029    import javax.faces.model.SelectItem;
030    
031    public class SelectItemCollectionFactory
032    {
033            private EnumerationUtility util = EnumerationUtility.getSharedInstance();
034    
035            /**
036             * Creates a new SelectItemCollectionFactory that uses the default shared
037             * instance of EnumerationUtility.
038             */
039            public SelectItemCollectionFactory() {}
040    
041            /**
042             * Creates a new SelectItemCollectionFactory that uses <code>util</code> as
043             * the EnumerationUtility (if it is non-null).
044             */
045            public SelectItemCollectionFactory(EnumerationUtility eUtil)
046            {
047                    if (eUtil != null)
048                            this.util = eUtil;
049            }
050    
051            /**
052             * sets the EnumerationUtility that will be used from now on.
053             */
054            public void setEnumerationUtility(EnumerationUtility eUtil)
055            {
056                    if (eUtil != null)
057                            this.util = eUtil;
058            }
059    
060            /**
061             * @return the EnumerationUtility used by this SelectItemCollectionFactory.
062             * Garunteed to be non-null.
063             */
064            public EnumerationUtility getEnumerationUtility()
065            {
066                    return this.util;
067            }
068    
069            /**
070             * The returned collection is NOT thread safe!
071             */
072            public Collection<SelectItem> createFrom(Iterable<? extends Enum> inputCol)
073            {
074                    ArrayList<SelectItem> col = new ArrayList<SelectItem>();
075                    
076                    for (Enum item : inputCol)
077                    {
078                            col.add(new SelectItem(item, item.toString()));
079                    }
080                    return col;
081            }
082            
083            public Collection<SelectItem> getDistanceUnitSymbols()
084            {
085                    EnumSet<DistanceUnits> du = util.getSelectableSetFor(DistanceUnits.class);
086     
087                    ArrayList<SelectItem> col = new ArrayList<SelectItem>();
088                    
089                    for (DistanceUnits item : du)
090                    {
091                            col.add(new SelectItem(item, item.getSymbol()));
092                    }
093    
094                    return col;
095            }
096    
097            public Collection<SelectItem> getBrightnessDistributions()
098            {
099                    EnumSet<BrightnessDistribution> es = util.getSelectableSetFor(BrightnessDistribution.class);
100     
101                    return createFrom(es);
102            }
103    
104            public Collection<SelectItem> getFileCompressionFormats()
105            {
106                    EnumSet<FileCompressionFormat> es = util.getSelectableSetFor(FileCompressionFormat.class);
107     
108                    return createFrom(es);
109            }
110    
111            public Collection<SelectItem> getCelestialCoordinateSystems()
112            {
113                    EnumSet<CelestialCoordinateSystem> es = util.getSelectableSetFor(CelestialCoordinateSystem.class);
114     
115                    return createFrom(es);
116            }
117    
118            public Collection<SelectItem> getEpochs()
119            {
120                    EnumSet<Epoch> es = util.getSelectableSetFor(Epoch.class);
121     
122                    return createFrom(es);
123            }
124    
125            public Collection<SelectItem> getAngularVelocityUnits()
126            {
127                    List<SelectItem> es = new ArrayList<SelectItem>();
128        es.add(new SelectItem(AngularVelocityUnits.ARC_SECONDS_PER_DAY, AngularVelocityUnits.ARC_SECONDS_PER_DAY.getSymbol()));
129        es.add(new SelectItem(AngularVelocityUnits.MILLI_ARC_SECONDS_PER_YEAR, AngularVelocityUnits.MILLI_ARC_SECONDS_PER_YEAR.getSymbol()));
130                    return es;
131            }
132    
133            public Collection<SelectItem> getLinearVelocityUnits()
134            {
135                    List<SelectItem> es = new ArrayList<SelectItem>();
136        es.add(new SelectItem(LinearVelocityUnits.KILOMETERS_PER_SECOND, LinearVelocityUnits.KILOMETERS_PER_SECOND.getSymbol()));
137        es.add(new SelectItem(LinearVelocityUnits.Z, LinearVelocityUnits.Z.getSymbol()));
138                    return es;
139            }
140    
141      /**
142       * TODO: This is currently limiting the selection of VelocityFrame to
143       * topocentric geocentric barycentric and LSR-Kinematic. 
144       */
145            public Collection<SelectItem> getVelocityFrames()
146            {
147                    ArrayList<SelectItem> col = new ArrayList<SelectItem>();
148        col.add(new SelectItem(VelocityFrame.TOPOCENTRIC,   VelocityFrame.TOPOCENTRIC.toString()));
149        col.add(new SelectItem(VelocityFrame.GEOCENTRIC,    VelocityFrame.GEOCENTRIC.toString()));
150        col.add(new SelectItem(VelocityFrame.BARYCENTRIC,   VelocityFrame.BARYCENTRIC.toString()));
151        col.add(new SelectItem(VelocityFrame.LSR_KINEMATIC, "Lsr"));
152     
153                    return col;
154            }
155    
156            public Collection<SelectItem> getVelocityConventions()
157            {
158                    EnumSet<VelocityConvention> es = util.getSelectableSetFor(VelocityConvention.class);
159     
160                    return createFrom(es);
161            }
162    
163            public Collection<SelectItem> getStokesParameters()
164            {
165                    EnumSet<StokesParameter> es = util.getSelectableSetFor(StokesParameter.class);
166     
167                    return createFrom(es);
168            }
169    
170            public Collection<SelectItem> getTelescopeTypes()
171            {
172                    EnumSet<TelescopeType> es = util.getSelectableSetFor(TelescopeType.class);
173     
174                    return createFrom(es);
175            }
176    
177            public Collection<SelectItem> getTelescopeConfigurations()
178            {
179                    List<SelectItem> col = new ArrayList<SelectItem>();
180                    for (Enum item : util.getSelectableSetFor(TelescopeConfiguration.class))
181                    {
182                            col.add(new SelectItem(item, ((TelescopeConfiguration)item).getCode()));
183                    }
184                    return col;
185            }
186    
187            public Collection<SelectItem> getAntennaWraps()
188            {
189                    ArrayList<SelectItem> col = new ArrayList<SelectItem>();
190                    
191        col.add(new SelectItem(AntennaWrap.NO_PREFERENCE, "No Preference"));
192        col.add(new SelectItem(AntennaWrap.CLOCKWISE, "CW (Right)"));
193        col.add(new SelectItem(AntennaWrap.COUNTERCLOCKWISE, "CCW (Left)"));
194    
195                    return col;
196            }
197    
198            public Collection<SelectItem> getScanTimeTypes()
199            {
200                    EnumSet<ScanTimeType> es = util.getSelectableSetFor(ScanTimeType.class);
201     
202                    return createFrom(es);
203            }
204    
205            public Collection<SelectItem> getScanModes()
206            {
207                    EnumSet<ScanMode> es = util.getSelectableSetFor(ScanMode.class);
208     
209                    return createFrom(es);
210            }
211    
212            public Collection<SelectItem> getTimeUnits()
213            {
214                    EnumSet<TimeUnits> es = util.getSelectableSetFor(TimeUnits.class);
215     
216                    return createFrom(es);
217            }
218    
219            public Collection<SelectItem> getTippingOrders()
220            {
221                    EnumSet<TippingOrder> es = util.getSelectableSetFor(TippingOrder.class);
222     
223                    return createFrom(es);
224            }
225    
226            public Collection<SelectItem> getPositionTypes()
227            {
228                    EnumSet<PositionType> es = util.getSelectableSetFor(PositionType.class);
229     
230                    return createFrom(es);
231            }
232    
233            public Collection<SelectItem> getAntennaSpecifiers()
234            {
235                    EnumSet<AntennaSpecifier> es = util.getSelectableSetFor(AntennaSpecifier.class);
236     
237                    return createFrom(es);
238            }
239    
240            public Collection<SelectItem> getVlaCorrelatorModes()
241            {
242                    EnumSet<edu.nrao.sss.model.resource.vla.CorrelatorMode> es =
243          util.getSelectableSetFor(edu.nrao.sss.model.resource.vla.CorrelatorMode.class);
244     
245                    return createFrom(es);
246            }
247    
248            public Collection<SelectItem> getProcessingTypes()
249            {
250                    EnumSet<edu.nrao.sss.model.resource.vla.ProcessingType> es =
251          util.getSelectableSetFor(edu.nrao.sss.model.resource.vla.ProcessingType.class);
252     
253                    return createFrom(es);
254            }
255    
256            public Collection<SelectItem> getSchedulingTypes()
257            {
258                    EnumSet<edu.nrao.sss.model.project.SchedulingType> es =
259          util.getSelectableSetFor(edu.nrao.sss.model.project.SchedulingType.class);
260     
261                    return createFrom(es);
262            }
263    }