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 }