001package armyc2.c5isr.renderer.utilities; 002 003import android.content.Context; 004import android.os.Build; 005 006import java.io.BufferedReader; 007import java.io.InputStream; 008import java.io.InputStreamReader; 009import java.util.ArrayList; 010import java.util.HashMap; 011import java.util.List; 012import java.util.Map; 013import java.util.logging.Level; 014 015import armyc2.c5isr.renderer.R; 016 017/** 018 * Class that holds all the {@link MSInfo} objects with symbol information 019 */ 020public class MSLookup { 021 022 private static MSLookup _instance = null; 023 private static Boolean _initCalled = false; 024 025 private static Map<String, MSInfo> _MSLookupD = null; 026 private static Map<String, MSInfo> _MSLookupE = null; 027 private String TAG = "MSLookup"; 028 private List<String> _IDListD = null; 029 private List<String> _IDListE = null; 030 031 032 /* 033 * Holds SymbolDefs for all symbols. (basicSymbolID, Description, MinPoint, MaxPoints, etc...) Call 034 * getInstance(). 035 * 036 */ 037 private MSLookup() { 038 // init(null); 039 // _initCalled=true; 040 } 041 042 public static synchronized MSLookup getInstance() { 043 if (_instance == null) { 044 _instance = new MSLookup(); 045 } 046 047 return _instance; 048 } 049 050 public final synchronized void init(Context context) 051 { 052 if (_initCalled == false) 053 { 054 _MSLookupD = new HashMap<>(); 055 _MSLookupE = new HashMap<>(); 056 _IDListD = new ArrayList<>(); 057 _IDListE = new ArrayList<>(); 058 059 try 060 { 061 InputStream isD = context.getResources().openRawResource(R.raw.msd); 062 InputStream isE = context.getResources().openRawResource(R.raw.mse); 063 064 BufferedReader brD = new BufferedReader(new InputStreamReader(isD)); 065 populateLookup(brD, SymbolID.Version_2525Dch1); 066 brD.close(); 067 068 BufferedReader brE = new BufferedReader(new InputStreamReader(isE)); 069 populateLookup(brE, SymbolID.Version_2525E); 070 brE.close(); 071 072 _initCalled = true; 073 } 074 catch (Exception e) 075 { 076 System.out.println(e.getMessage()); 077 } 078 } 079 } 080 081 private void populateLookup(BufferedReader br, int version) 082 { 083 Map<String, MSInfo> lookup; 084 List<String> list; 085 String[] temp = null; 086 String delimiter = "\t"; 087 088 try 089 { 090 if(version >= SymbolID.Version_2525E) { 091 lookup = _MSLookupE; 092 list = _IDListE; 093 } 094 else//2525Dch1 095 { 096 lookup = _MSLookupD; 097 list = _IDListD; 098 } 099 100 String id = null; 101 String ss = null; 102 int intSS = 0; 103 String e = null; 104 String et = null; 105 String est = null; 106 String ec = null; 107 String g = null; 108 String dr = null; 109 String m = null; 110 String[] modifiers = null; 111 112 String line = br.readLine(); 113 while (line != null) { 114 //parse first line 115 temp = line.split(delimiter); 116 117 if(temp.length < 5) 118 ec = "000000"; 119 else 120 ec = temp[4]; 121 if(ec.equals("0")) 122 ec = "000000"; 123 124 if(temp.length < 4) 125 est = ""; 126 else 127 est = temp[3]; 128 if(temp.length < 3) 129 et = ""; 130 else if(est.equals("")) 131 et = temp[2]; 132 if(temp.length < 2) 133 e = ""; 134 else if(et.equals("")) 135 e = temp[1]; 136 137 if(!temp[0].equals("")) 138 ss = temp[0]; 139 140 id = ss + ec; 141 142 intSS = Integer.parseInt(ss); 143 if(!ec.equals("000000")) 144 { 145 if (temp.length >= 7) 146 {//Control Measures and METOCS 147 if(temp.length >= 8) 148 { 149 m = temp[7];//modifiers 150 if(m != null && !m.equals("")) 151 //m = m.replace("\"",""); 152 modifiers = m.split(","); 153 else 154 modifiers = null; 155 } 156 g = temp[5];//geometry 157 dr = temp[6];//draw rule 158 lookup.put(id, new MSInfo(version, ss, e, et, est, ec, g, dr, populateModifierList(modifiers))); 159 } 160 else 161 {//Everything else 162 //_MSLookupD.put(id, new MSInfo(ss, e, et, est, ec)); 163 lookup.put(id, new MSInfo(version, ss, e, et, est, ec,populateModifierList(ss,ec, version))); 164 } 165 list.add(id); 166 } 167 else if(intSS != SymbolID.SymbolSet_ControlMeasure && 168 intSS != SymbolID.SymbolSet_Atmospheric && 169 intSS != SymbolID.SymbolSet_Oceanographic && 170 intSS != SymbolID.SymbolSet_MeteorologicalSpace) 171 { 172 lookup.put(id, new MSInfo(version, ss, e, et, est, ec, populateModifierList(ss, ec, version))); 173 list.add(id); 174 } 175 176 modifiers = null; 177 178 //read next line for next loop 179 line = br.readLine(); 180 } 181 182 } 183 catch(Exception exc) 184 { 185 System.out.println(exc.getMessage()); 186 } 187 188 } 189 190 private ArrayList<String> populateModifierList(String[] modifiers) 191 { 192 ArrayList<String> mods = new ArrayList<String>(); 193 if(modifiers != null && modifiers.length > 0) 194 { 195 for (String mod : modifiers) 196 { 197 mods.add(Modifiers.getModifierKey(mod)); 198 } 199 } 200 return mods; 201 } 202 203 private ArrayList<String> populateModifierList(String symbolSet, String ec, int version) 204 { 205 int ss = Integer.valueOf(symbolSet); 206 ArrayList<String> modifiers = new ArrayList<String>(); 207 208 if(version >= SymbolID.Version_2525E) 209 { 210 switch (ss) { 211 case SymbolID.SymbolSet_LandUnit: 212 case SymbolID.SymbolSet_LandCivilianUnit_Organization: 213 modifiers.add(Modifiers.A_SYMBOL_ICON); 214 modifiers.add(Modifiers.B_ECHELON); 215 modifiers.add(Modifiers.C_QUANTITY); 216 modifiers.add(Modifiers.D_TASK_FORCE_INDICATOR); 217 modifiers.add(Modifiers.F_REINFORCED_REDUCED); 218 modifiers.add(Modifiers.G_STAFF_COMMENTS); 219 modifiers.add(Modifiers.H_ADDITIONAL_INFO_1); 220 modifiers.add(Modifiers.J_EVALUATION_RATING); 221 modifiers.add(Modifiers.K_COMBAT_EFFECTIVENESS); 222 modifiers.add(Modifiers.L_SIGNATURE_EQUIP); 223 modifiers.add(Modifiers.M_HIGHER_FORMATION); 224 modifiers.add(Modifiers.P_IFF_SIF_AIS); 225 modifiers.add(Modifiers.Q_DIRECTION_OF_MOVEMENT); 226 modifiers.add(Modifiers.S_HQ_STAFF_INDICATOR); 227 modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1); 228 modifiers.add(Modifiers.W_DTG_1); 229 modifiers.add(Modifiers.X_ALTITUDE_DEPTH); 230 modifiers.add(Modifiers.Y_LOCATION); 231 modifiers.add(Modifiers.Z_SPEED); 232 if(ss==SymbolID.SymbolSet_LandUnit && ec.equals("110000")) 233 modifiers.add(Modifiers.AA_SPECIAL_C2_HQ); 234 modifiers.add(Modifiers.AB_FEINT_DUMMY_INDICATOR); 235 modifiers.add(Modifiers.AD_PLATFORM_TYPE); 236 modifiers.add(Modifiers.AE_EQUIPMENT_TEARDOWN_TIME); 237 modifiers.add(Modifiers.AF_COMMON_IDENTIFIER); 238 modifiers.add(Modifiers.AH_AREA_OF_UNCERTAINTY); 239 modifiers.add(Modifiers.AI_DEAD_RECKONING_TRAILER); 240 modifiers.add(Modifiers.AK_PAIRING_LINE); 241 modifiers.add(Modifiers.AL_OPERATIONAL_CONDITION); 242 modifiers.add(Modifiers.AO_ENGAGEMENT_BAR); 243 modifiers.add(Modifiers.AQ_GUARDED_UNIT); 244 modifiers.add(Modifiers.AS_COUNTRY); 245 break; 246 case SymbolID.SymbolSet_LandEquipment: 247 case SymbolID.SymbolSet_SignalsIntelligence_Land: 248 modifiers.add(Modifiers.A_SYMBOL_ICON); 249 modifiers.add(Modifiers.C_QUANTITY); 250 modifiers.add(Modifiers.G_STAFF_COMMENTS); 251 modifiers.add(Modifiers.H_ADDITIONAL_INFO_1); 252 modifiers.add(Modifiers.J_EVALUATION_RATING); 253 modifiers.add(Modifiers.K_COMBAT_EFFECTIVENESS); 254 modifiers.add(Modifiers.L_SIGNATURE_EQUIP); 255 modifiers.add(Modifiers.N_HOSTILE); 256 modifiers.add(Modifiers.P_IFF_SIF_AIS); 257 modifiers.add(Modifiers.Q_DIRECTION_OF_MOVEMENT); 258 modifiers.add(Modifiers.R_MOBILITY_INDICATOR); 259 modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1); 260 modifiers.add(Modifiers.V_EQUIP_TYPE); 261 modifiers.add(Modifiers.W_DTG_1); 262 modifiers.add(Modifiers.X_ALTITUDE_DEPTH); 263 modifiers.add(Modifiers.Y_LOCATION); 264 modifiers.add(Modifiers.Z_SPEED); 265 modifiers.add(Modifiers.AB_FEINT_DUMMY_INDICATOR); 266 modifiers.add(Modifiers.AD_PLATFORM_TYPE); 267 modifiers.add(Modifiers.AE_EQUIPMENT_TEARDOWN_TIME); 268 modifiers.add(Modifiers.AF_COMMON_IDENTIFIER); 269 modifiers.add(Modifiers.AG_AUX_EQUIP_INDICATOR); 270 modifiers.add(Modifiers.AH_AREA_OF_UNCERTAINTY); 271 modifiers.add(Modifiers.AI_DEAD_RECKONING_TRAILER); 272 modifiers.add(Modifiers.AK_PAIRING_LINE); 273 modifiers.add(Modifiers.AL_OPERATIONAL_CONDITION); 274 modifiers.add(Modifiers.AO_ENGAGEMENT_BAR); 275 modifiers.add(Modifiers.AQ_GUARDED_UNIT); 276 modifiers.add(Modifiers.AS_COUNTRY); 277 break; 278 case SymbolID.SymbolSet_LandInstallation: 279 modifiers.add(Modifiers.A_SYMBOL_ICON); 280 modifiers.add(Modifiers.C_QUANTITY); 281 modifiers.add(Modifiers.G_STAFF_COMMENTS); 282 modifiers.add(Modifiers.H_ADDITIONAL_INFO_1); 283 modifiers.add(Modifiers.J_EVALUATION_RATING); 284 modifiers.add(Modifiers.K_COMBAT_EFFECTIVENESS); 285 modifiers.add(Modifiers.P_IFF_SIF_AIS); 286 modifiers.add(Modifiers.S_HQ_STAFF_INDICATOR); 287 modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1); 288 modifiers.add(Modifiers.W_DTG_1); 289 modifiers.add(Modifiers.X_ALTITUDE_DEPTH); 290 modifiers.add(Modifiers.Y_LOCATION); 291 modifiers.add(Modifiers.AB_FEINT_DUMMY_INDICATOR); 292 modifiers.add(Modifiers.AE_EQUIPMENT_TEARDOWN_TIME); 293 modifiers.add(Modifiers.AH_AREA_OF_UNCERTAINTY); 294 modifiers.add(Modifiers.AI_DEAD_RECKONING_TRAILER); 295 modifiers.add(Modifiers.AK_PAIRING_LINE); 296 modifiers.add(Modifiers.AL_OPERATIONAL_CONDITION); 297 //modifiers.add(Modifiers.AO_ENGAGEMENT_BAR); 298 modifiers.add(Modifiers.AQ_GUARDED_UNIT); 299 modifiers.add(Modifiers.AS_COUNTRY); 300 break; 301 case SymbolID.SymbolSet_DismountedIndividuals: 302 modifiers.add(Modifiers.A_SYMBOL_ICON); 303 modifiers.add(Modifiers.G_STAFF_COMMENTS); 304 modifiers.add(Modifiers.H_ADDITIONAL_INFO_1); 305 modifiers.add(Modifiers.J_EVALUATION_RATING); 306 modifiers.add(Modifiers.K_COMBAT_EFFECTIVENESS); 307 modifiers.add(Modifiers.M_HIGHER_FORMATION); 308 modifiers.add(Modifiers.Q_DIRECTION_OF_MOVEMENT); 309 modifiers.add(Modifiers.P_IFF_SIF_AIS); 310 modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1); 311 modifiers.add(Modifiers.V_EQUIP_TYPE); 312 modifiers.add(Modifiers.W_DTG_1); 313 modifiers.add(Modifiers.X_ALTITUDE_DEPTH); 314 modifiers.add(Modifiers.Y_LOCATION); 315 modifiers.add(Modifiers.AB_FEINT_DUMMY_INDICATOR); 316 modifiers.add(Modifiers.AF_COMMON_IDENTIFIER); 317 modifiers.add(Modifiers.AS_COUNTRY); 318 modifiers.add(Modifiers.AV_LEADERSHIP); 319 break; 320 case SymbolID.SymbolSet_Space: 321 case SymbolID.SymbolSet_SpaceMissile: 322 case SymbolID.SymbolSet_Air: 323 case SymbolID.SymbolSet_AirMissile: 324 modifiers.add(Modifiers.A_SYMBOL_ICON); 325 modifiers.add(Modifiers.B_ECHELON); 326 modifiers.add(Modifiers.C_QUANTITY); 327 modifiers.add(Modifiers.G_STAFF_COMMENTS); 328 modifiers.add(Modifiers.H_ADDITIONAL_INFO_1); 329 modifiers.add(Modifiers.J_EVALUATION_RATING); 330 modifiers.add(Modifiers.P_IFF_SIF_AIS); 331 //modifiers.add(Modifiers.Q_DIRECTION_OF_MOVEMENT); 332 modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1); 333 modifiers.add(Modifiers.V_EQUIP_TYPE); 334 modifiers.add(Modifiers.W_DTG_1); 335 modifiers.add(Modifiers.X_ALTITUDE_DEPTH); 336 modifiers.add(Modifiers.Y_LOCATION); 337 modifiers.add(Modifiers.Z_SPEED); 338 modifiers.add(Modifiers.AB_FEINT_DUMMY_INDICATOR); 339 modifiers.add(Modifiers.AD_PLATFORM_TYPE); 340 modifiers.add(Modifiers.AF_COMMON_IDENTIFIER); 341 modifiers.add(Modifiers.AJ_SPEED_LEADER); 342 modifiers.add(Modifiers.AL_OPERATIONAL_CONDITION); 343 modifiers.add(Modifiers.AO_ENGAGEMENT_BAR); 344 modifiers.add(Modifiers.AR_SPECIAL_DESIGNATOR); 345 modifiers.add(Modifiers.AS_COUNTRY); 346 break; 347 case SymbolID.SymbolSet_SeaSurface: 348 modifiers.add(Modifiers.A_SYMBOL_ICON); 349 modifiers.add(Modifiers.G_STAFF_COMMENTS); 350 modifiers.add(Modifiers.H_ADDITIONAL_INFO_1); 351 modifiers.add(Modifiers.P_IFF_SIF_AIS); 352 //modifiers.add(Modifiers.Q_DIRECTION_OF_MOVEMENT); 353 modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1); 354 modifiers.add(Modifiers.V_EQUIP_TYPE); 355 modifiers.add(Modifiers.Y_LOCATION); 356 modifiers.add(Modifiers.Z_SPEED); 357 modifiers.add(Modifiers.AB_FEINT_DUMMY_INDICATOR); 358 modifiers.add(Modifiers.AG_AUX_EQUIP_INDICATOR); 359 modifiers.add(Modifiers.AJ_SPEED_LEADER); 360 modifiers.add(Modifiers.AL_OPERATIONAL_CONDITION); 361 modifiers.add(Modifiers.AO_ENGAGEMENT_BAR); 362 modifiers.add(Modifiers.AQ_GUARDED_UNIT); 363 modifiers.add(Modifiers.AR_SPECIAL_DESIGNATOR); 364 modifiers.add(Modifiers.AS_COUNTRY); 365 break; 366 case SymbolID.SymbolSet_SeaSubsurface: 367 modifiers.add(Modifiers.A_SYMBOL_ICON); 368 modifiers.add(Modifiers.G_STAFF_COMMENTS); 369 modifiers.add(Modifiers.H_ADDITIONAL_INFO_1); 370 modifiers.add(Modifiers.P_IFF_SIF_AIS); 371 //modifiers.add(Modifiers.Q_DIRECTION_OF_MOVEMENT); 372 modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1); 373 modifiers.add(Modifiers.V_EQUIP_TYPE); 374 modifiers.add(Modifiers.X_ALTITUDE_DEPTH); 375 modifiers.add(Modifiers.Y_LOCATION); 376 modifiers.add(Modifiers.Z_SPEED); 377 modifiers.add(Modifiers.AB_FEINT_DUMMY_INDICATOR); 378 modifiers.add(Modifiers.AJ_SPEED_LEADER); 379 modifiers.add(Modifiers.AL_OPERATIONAL_CONDITION); 380 modifiers.add(Modifiers.AO_ENGAGEMENT_BAR); 381 modifiers.add(Modifiers.AQ_GUARDED_UNIT); 382 modifiers.add(Modifiers.AR_SPECIAL_DESIGNATOR); 383 modifiers.add(Modifiers.AS_COUNTRY); 384 break; 385 case SymbolID.SymbolSet_Activities: 386 modifiers.add(Modifiers.A_SYMBOL_ICON); 387 modifiers.add(Modifiers.C_QUANTITY); 388 modifiers.add(Modifiers.G_STAFF_COMMENTS); 389 modifiers.add(Modifiers.H_ADDITIONAL_INFO_1); 390 modifiers.add(Modifiers.J_EVALUATION_RATING); 391 modifiers.add(Modifiers.Q_DIRECTION_OF_MOVEMENT); 392 modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1); 393 modifiers.add(Modifiers.W_DTG_1); 394 modifiers.add(Modifiers.Y_LOCATION); 395 modifiers.add(Modifiers.AB_FEINT_DUMMY_INDICATOR); 396 modifiers.add(Modifiers.AS_COUNTRY); 397 break; 398 case SymbolID.SymbolSet_CyberSpace: 399 modifiers.add(Modifiers.A_SYMBOL_ICON); 400 modifiers.add(Modifiers.B_ECHELON); 401 modifiers.add(Modifiers.F_REINFORCED_REDUCED); 402 modifiers.add(Modifiers.G_STAFF_COMMENTS); 403 modifiers.add(Modifiers.H_ADDITIONAL_INFO_1); 404 modifiers.add(Modifiers.K_COMBAT_EFFECTIVENESS); 405 modifiers.add(Modifiers.L_SIGNATURE_EQUIP); 406 modifiers.add(Modifiers.M_HIGHER_FORMATION); 407 modifiers.add(Modifiers.S_HQ_STAFF_INDICATOR); 408 modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1); 409 modifiers.add(Modifiers.V_EQUIP_TYPE); 410 modifiers.add(Modifiers.W_DTG_1); 411 modifiers.add(Modifiers.Y_LOCATION); 412 modifiers.add(Modifiers.AS_COUNTRY); 413 break; 414 /*case SymbolID.SymbolSet_SignalsIntelligence_Air: 415 case SymbolID.SymbolSet_SignalsIntelligence_Land: 416 case SymbolID.SymbolSet_SignalsIntelligence_SeaSurface: 417 case SymbolID.SymbolSet_SignalsIntelligence_SeaSubsurface: 418 case SymbolID.SymbolSet_SignalsIntelligence_Space: 419 modifiers.add(Modifiers.A_SYMBOL_ICON); 420 modifiers.add(Modifiers.D_TASK_FORCE_INDICATOR); 421 modifiers.add(Modifiers.G_STAFF_COMMENTS); 422 modifiers.add(Modifiers.H_ADDITIONAL_INFO_1); 423 modifiers.add(Modifiers.J_EVALUATION_RATING); 424 modifiers.add(Modifiers.M_HIGHER_FORMATION); 425 modifiers.add(Modifiers.R2_SIGNIT_MOBILITY_INDICATOR); 426 modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1); 427 modifiers.add(Modifiers.V_EQUIP_TYPE); 428 modifiers.add(Modifiers.W1_DTG_2); 429 modifiers.add(Modifiers.Y_LOCATION); 430 modifiers.add(Modifiers.AD_PLATFORM_TYPE);//like equipment 431 modifiers.add(Modifiers.AE_EQUIPMENT_TEARDOWN_TIME);//like equipment 432 modifiers.add(Modifiers.AF_COMMON_IDENTIFIER);//like equipment 433 break;*/ 434 435 case SymbolID.SymbolSet_ControlMeasure: 436 //values come from files during MSLookup load 437 break; 438 case SymbolID.SymbolSet_Atmospheric: 439 //Tropopause low, Tropopause high 440 if ((ec.equals("110102")) || (ec.equals("110202")) || 441 (ec.equals("162200"))) 442 modifiers.add(Modifiers.X_ALTITUDE_DEPTH); 443 else if (ec.equals("140200")) 444 modifiers.add(Modifiers.AN_AZIMUTH); 445 break; 446 case SymbolID.SymbolSet_MineWarfare: 447 case SymbolID.SymbolSet_Oceanographic: 448 case SymbolID.SymbolSet_MeteorologicalSpace: 449 default://no modifiers 450 451 } 452 } 453 else 454 { 455 switch (ss) { 456 case SymbolID.SymbolSet_LandUnit: 457 case SymbolID.SymbolSet_LandCivilianUnit_Organization: 458 modifiers.add(Modifiers.A_SYMBOL_ICON); 459 modifiers.add(Modifiers.B_ECHELON); 460 modifiers.add(Modifiers.D_TASK_FORCE_INDICATOR); 461 modifiers.add(Modifiers.F_REINFORCED_REDUCED); 462 modifiers.add(Modifiers.G_STAFF_COMMENTS); 463 modifiers.add(Modifiers.H_ADDITIONAL_INFO_1); 464 modifiers.add(Modifiers.J_EVALUATION_RATING); 465 modifiers.add(Modifiers.K_COMBAT_EFFECTIVENESS); 466 modifiers.add(Modifiers.M_HIGHER_FORMATION); 467 modifiers.add(Modifiers.P_IFF_SIF_AIS); 468 modifiers.add(Modifiers.Q_DIRECTION_OF_MOVEMENT); 469 modifiers.add(Modifiers.S_HQ_STAFF_INDICATOR); 470 modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1); 471 modifiers.add(Modifiers.W_DTG_1); 472 modifiers.add(Modifiers.X_ALTITUDE_DEPTH); 473 modifiers.add(Modifiers.Y_LOCATION); 474 modifiers.add(Modifiers.Z_SPEED); 475 if(ss==SymbolID.SymbolSet_LandUnit && ec.equals("110000")) 476 modifiers.add(Modifiers.AA_SPECIAL_C2_HQ); 477 modifiers.add(Modifiers.AB_FEINT_DUMMY_INDICATOR); 478 modifiers.add(Modifiers.AH_AREA_OF_UNCERTAINTY); 479 modifiers.add(Modifiers.AI_DEAD_RECKONING_TRAILER); 480 modifiers.add(Modifiers.AK_PAIRING_LINE); 481 modifiers.add(Modifiers.AL_OPERATIONAL_CONDITION); 482 modifiers.add(Modifiers.AO_ENGAGEMENT_BAR); 483 modifiers.add(Modifiers.AS_COUNTRY); 484 break; 485 case SymbolID.SymbolSet_LandEquipment: 486 case SymbolID.SymbolSet_SignalsIntelligence_Land: 487 modifiers.add(Modifiers.A_SYMBOL_ICON); 488 modifiers.add(Modifiers.C_QUANTITY); 489 modifiers.add(Modifiers.G_STAFF_COMMENTS); 490 modifiers.add(Modifiers.H_ADDITIONAL_INFO_1); 491 modifiers.add(Modifiers.J_EVALUATION_RATING); 492 modifiers.add(Modifiers.L_SIGNATURE_EQUIP); 493 modifiers.add(Modifiers.N_HOSTILE); 494 modifiers.add(Modifiers.P_IFF_SIF_AIS); 495 modifiers.add(Modifiers.Q_DIRECTION_OF_MOVEMENT); 496 modifiers.add(Modifiers.R_MOBILITY_INDICATOR); 497 modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1); 498 modifiers.add(Modifiers.V_EQUIP_TYPE); 499 modifiers.add(Modifiers.W_DTG_1); 500 modifiers.add(Modifiers.X_ALTITUDE_DEPTH); 501 modifiers.add(Modifiers.Y_LOCATION); 502 modifiers.add(Modifiers.Z_SPEED); 503 modifiers.add(Modifiers.AB_FEINT_DUMMY_INDICATOR); 504 modifiers.add(Modifiers.AD_PLATFORM_TYPE); 505 modifiers.add(Modifiers.AE_EQUIPMENT_TEARDOWN_TIME); 506 modifiers.add(Modifiers.AF_COMMON_IDENTIFIER); 507 modifiers.add(Modifiers.AG_AUX_EQUIP_INDICATOR); 508 modifiers.add(Modifiers.AH_AREA_OF_UNCERTAINTY); 509 modifiers.add(Modifiers.AI_DEAD_RECKONING_TRAILER); 510 modifiers.add(Modifiers.AK_PAIRING_LINE); 511 modifiers.add(Modifiers.AL_OPERATIONAL_CONDITION); 512 modifiers.add(Modifiers.AO_ENGAGEMENT_BAR); 513 modifiers.add(Modifiers.AQ_GUARDED_UNIT); 514 modifiers.add(Modifiers.AR_SPECIAL_DESIGNATOR); 515 modifiers.add(Modifiers.AS_COUNTRY); 516 break; 517 case SymbolID.SymbolSet_LandInstallation: 518 modifiers.add(Modifiers.A_SYMBOL_ICON); 519 modifiers.add(Modifiers.G_STAFF_COMMENTS); 520 modifiers.add(Modifiers.H_ADDITIONAL_INFO_1); 521 modifiers.add(Modifiers.J_EVALUATION_RATING); 522 modifiers.add(Modifiers.K_COMBAT_EFFECTIVENESS); 523 modifiers.add(Modifiers.P_IFF_SIF_AIS); 524 modifiers.add(Modifiers.S_HQ_STAFF_INDICATOR); 525 modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1); 526 modifiers.add(Modifiers.W_DTG_1); 527 modifiers.add(Modifiers.X_ALTITUDE_DEPTH); 528 modifiers.add(Modifiers.Y_LOCATION); 529 modifiers.add(Modifiers.AB_FEINT_DUMMY_INDICATOR); 530 modifiers.add(Modifiers.AH_AREA_OF_UNCERTAINTY); 531 modifiers.add(Modifiers.AI_DEAD_RECKONING_TRAILER); 532 modifiers.add(Modifiers.AK_PAIRING_LINE); 533 modifiers.add(Modifiers.AL_OPERATIONAL_CONDITION); 534 modifiers.add(Modifiers.AO_ENGAGEMENT_BAR); 535 modifiers.add(Modifiers.AS_COUNTRY); 536 break; 537 case SymbolID.SymbolSet_Space: 538 case SymbolID.SymbolSet_SpaceMissile: 539 case SymbolID.SymbolSet_SignalsIntelligence_Space: 540 modifiers.add(Modifiers.A_SYMBOL_ICON); 541 modifiers.add(Modifiers.G_STAFF_COMMENTS); 542 modifiers.add(Modifiers.H_ADDITIONAL_INFO_1); 543 modifiers.add(Modifiers.Q_DIRECTION_OF_MOVEMENT); 544 modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1); 545 modifiers.add(Modifiers.V_EQUIP_TYPE); 546 modifiers.add(Modifiers.X_ALTITUDE_DEPTH); 547 modifiers.add(Modifiers.Z_SPEED); 548 modifiers.add(Modifiers.AB_FEINT_DUMMY_INDICATOR); 549 modifiers.add(Modifiers.AJ_SPEED_LEADER); 550 modifiers.add(Modifiers.AL_OPERATIONAL_CONDITION); 551 modifiers.add(Modifiers.AO_ENGAGEMENT_BAR); 552 modifiers.add(Modifiers.AS_COUNTRY); 553 break; 554 case SymbolID.SymbolSet_Air: 555 case SymbolID.SymbolSet_AirMissile: 556 case SymbolID.SymbolSet_SignalsIntelligence_Air: 557 modifiers.add(Modifiers.A_SYMBOL_ICON); 558 modifiers.add(Modifiers.G_STAFF_COMMENTS); 559 modifiers.add(Modifiers.H_ADDITIONAL_INFO_1); 560 modifiers.add(Modifiers.P_IFF_SIF_AIS);//air only 561 modifiers.add(Modifiers.Q_DIRECTION_OF_MOVEMENT); 562 modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1); 563 modifiers.add(Modifiers.V_EQUIP_TYPE); 564 modifiers.add(Modifiers.X_ALTITUDE_DEPTH); 565 modifiers.add(Modifiers.Z_SPEED); 566 modifiers.add(Modifiers.AB_FEINT_DUMMY_INDICATOR); 567 modifiers.add(Modifiers.AJ_SPEED_LEADER); 568 modifiers.add(Modifiers.AL_OPERATIONAL_CONDITION); 569 modifiers.add(Modifiers.AO_ENGAGEMENT_BAR); 570 modifiers.add(Modifiers.AS_COUNTRY); 571 break; 572 case SymbolID.SymbolSet_SeaSurface: 573 case SymbolID.SymbolSet_SignalsIntelligence_SeaSurface: 574 modifiers.add(Modifiers.A_SYMBOL_ICON); 575 modifiers.add(Modifiers.G_STAFF_COMMENTS); 576 modifiers.add(Modifiers.H_ADDITIONAL_INFO_1); 577 modifiers.add(Modifiers.P_IFF_SIF_AIS); 578 modifiers.add(Modifiers.Q_DIRECTION_OF_MOVEMENT); 579 modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1); 580 modifiers.add(Modifiers.V_EQUIP_TYPE); 581 modifiers.add(Modifiers.Y_LOCATION); 582 modifiers.add(Modifiers.Z_SPEED); 583 modifiers.add(Modifiers.AB_FEINT_DUMMY_INDICATOR); 584 modifiers.add(Modifiers.AJ_SPEED_LEADER); 585 modifiers.add(Modifiers.AL_OPERATIONAL_CONDITION); 586 modifiers.add(Modifiers.AO_ENGAGEMENT_BAR); 587 modifiers.add(Modifiers.AQ_GUARDED_UNIT); 588 modifiers.add(Modifiers.AR_SPECIAL_DESIGNATOR); 589 modifiers.add(Modifiers.AS_COUNTRY); 590 break; 591 case SymbolID.SymbolSet_SeaSubsurface: 592 case SymbolID.SymbolSet_SignalsIntelligence_SeaSubsurface: 593 modifiers.add(Modifiers.A_SYMBOL_ICON); 594 modifiers.add(Modifiers.AG_AUX_EQUIP_INDICATOR); 595 modifiers.add(Modifiers.AL_OPERATIONAL_CONDITION); 596 modifiers.add(Modifiers.AO_ENGAGEMENT_BAR); 597 modifiers.add(Modifiers.AR_SPECIAL_DESIGNATOR); 598 modifiers.add(Modifiers.G_STAFF_COMMENTS); 599 modifiers.add(Modifiers.H_ADDITIONAL_INFO_1); 600 modifiers.add(Modifiers.Q_DIRECTION_OF_MOVEMENT); 601 modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1); 602 modifiers.add(Modifiers.V_EQUIP_TYPE); 603 modifiers.add(Modifiers.X_ALTITUDE_DEPTH); 604 modifiers.add(Modifiers.AB_FEINT_DUMMY_INDICATOR); 605 modifiers.add(Modifiers.AJ_SPEED_LEADER); 606 modifiers.add(Modifiers.AS_COUNTRY); 607 break; 608 case SymbolID.SymbolSet_Activities: 609 modifiers.add(Modifiers.A_SYMBOL_ICON); 610 modifiers.add(Modifiers.G_STAFF_COMMENTS); 611 modifiers.add(Modifiers.H_ADDITIONAL_INFO_1); 612 modifiers.add(Modifiers.J_EVALUATION_RATING); 613 modifiers.add(Modifiers.Q_DIRECTION_OF_MOVEMENT); 614 modifiers.add(Modifiers.W_DTG_1); 615 modifiers.add(Modifiers.Y_LOCATION); 616 modifiers.add(Modifiers.AB_FEINT_DUMMY_INDICATOR); 617 modifiers.add(Modifiers.AS_COUNTRY); 618 break; 619 case SymbolID.SymbolSet_CyberSpace: 620 modifiers.add(Modifiers.A_SYMBOL_ICON); 621 modifiers.add(Modifiers.B_ECHELON); 622 modifiers.add(Modifiers.D_TASK_FORCE_INDICATOR); 623 modifiers.add(Modifiers.F_REINFORCED_REDUCED); 624 modifiers.add(Modifiers.G_STAFF_COMMENTS); 625 modifiers.add(Modifiers.H_ADDITIONAL_INFO_1); 626 modifiers.add(Modifiers.K_COMBAT_EFFECTIVENESS); 627 modifiers.add(Modifiers.L_SIGNATURE_EQUIP); 628 modifiers.add(Modifiers.M_HIGHER_FORMATION); 629 modifiers.add(Modifiers.S_HQ_STAFF_INDICATOR); 630 modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1); 631 modifiers.add(Modifiers.V_EQUIP_TYPE); 632 modifiers.add(Modifiers.W_DTG_1); 633 modifiers.add(Modifiers.Y_LOCATION); 634 modifiers.add(Modifiers.AO_ENGAGEMENT_BAR); 635 modifiers.add(Modifiers.AS_COUNTRY); 636 break; 637 /*case SymbolID.SymbolSet_SignalsIntelligence_Air: 638 case SymbolID.SymbolSet_SignalsIntelligence_Land: 639 case SymbolID.SymbolSet_SignalsIntelligence_SeaSurface: 640 case SymbolID.SymbolSet_SignalsIntelligence_SeaSubsurface: 641 case SymbolID.SymbolSet_SignalsIntelligence_Space: 642 modifiers.add(Modifiers.A_SYMBOL_ICON); 643 modifiers.add(Modifiers.D_TASK_FORCE_INDICATOR); 644 modifiers.add(Modifiers.G_STAFF_COMMENTS); 645 modifiers.add(Modifiers.H_ADDITIONAL_INFO_1); 646 modifiers.add(Modifiers.J_EVALUATION_RATING); 647 modifiers.add(Modifiers.M_HIGHER_FORMATION); 648 modifiers.add(Modifiers.R2_SIGNIT_MOBILITY_INDICATOR); 649 modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1); 650 modifiers.add(Modifiers.V_EQUIP_TYPE); 651 modifiers.add(Modifiers.W1_DTG_2); 652 modifiers.add(Modifiers.Y_LOCATION); 653 modifiers.add(Modifiers.AD_PLATFORM_TYPE);//like equipment 654 modifiers.add(Modifiers.AE_EQUIPMENT_TEARDOWN_TIME);//like equipment 655 modifiers.add(Modifiers.AF_COMMON_IDENTIFIER);//like equipment 656 break;*/ 657 658 case SymbolID.SymbolSet_ControlMeasure: 659 //values come from files during MSLookup load 660 break; 661 case SymbolID.SymbolSet_Atmospheric: 662 //Tropopause low, Tropopause high 663 if ((ec.equals("110102")) || (ec.equals("110202")) || 664 (ec.equals("162200"))) 665 modifiers.add(Modifiers.X_ALTITUDE_DEPTH); 666 else if (ec.equals("140200")) 667 modifiers.add(Modifiers.AN_AZIMUTH); 668 break; 669 case SymbolID.SymbolSet_MineWarfare: 670 case SymbolID.SymbolSet_Oceanographic: 671 case SymbolID.SymbolSet_MeteorologicalSpace: 672 default://no modifiers 673 674 } 675 } 676 677 if(ss == SymbolID.SymbolSet_SignalsIntelligence_Air || 678 ss == SymbolID.SymbolSet_SignalsIntelligence_Land || 679 ss == SymbolID.SymbolSet_SignalsIntelligence_SeaSurface || 680 ss == SymbolID.SymbolSet_SignalsIntelligence_SeaSubsurface || 681 ss == SymbolID.SymbolSet_SignalsIntelligence_Space) 682 modifiers.add(Modifiers.R2_SIGNIT_MOBILITY_INDICATOR); 683 684 return modifiers; 685 } 686 687 /** 688 * 689 * @param symbolID Full 20-30 digits from the symbol code 690 * @return 691 */ 692 public MSInfo getMSLInfo(String symbolID) 693 { 694 int length = symbolID.length(); 695 696 if(length >= 20 && length <= 30) 697 { 698 int version = SymbolID.getVersion(symbolID); 699 return getMSLInfo(SymbolUtilities.getBasicSymbolID(symbolID), version); 700 } 701 else 702 return null; 703 } 704 705 /** 706 * 707 * @param basicID id SymbolSet + Entity code like 50110100 708 * @param version like SymbolID.Version_2525Dch1 709 * @return 710 */ 711 public MSInfo getMSLInfo(String basicID, int version) 712 { 713 int length = basicID.length(); 714 if(length == 8) 715 { 716 if(version >= SymbolID.Version_2525E) 717 { 718 if(_MSLookupE.containsKey(basicID)) 719 return _MSLookupE.get(basicID); 720 else 721 return null; 722 } 723 else if (version == SymbolID.Version_2525D && basicID.equals("25272100")) 724 { 725 // MSDZ can have extra point in D 726 return new MSInfo(SymbolID.Version_2525D, "25", 727 "Protection Areas", "Minimum Safe Distance Zone", "", 728 "272100", "Area", "Area14", new ArrayList<>()); 729 } 730 else 731 { 732 if(_MSLookupD.containsKey(basicID)) 733 return _MSLookupD.get(basicID); 734 else 735 return null; 736 } 737 } 738 else if(length >= 20 && length <= 30)//probably got a full id instead of a basic ID. 739 { 740 return getMSLInfo(SymbolUtilities.getBasicSymbolID(basicID), version); 741 } 742 else 743 return null; 744 } 745 746 /** 747 * returns a list of all the keys in the order they are listed in the MilStd 2525D document. 748 * @return 749 */ 750 public List<String> getIDList(int version) 751 { 752 if(version < SymbolID.Version_2525E) 753 return _IDListD; 754 else if(version >= SymbolID.Version_2525E) 755 return _IDListE; 756 else 757 return _IDListD; 758 } 759 760 /* 761 * For use only by MilStdIconRenderer.addCustomSymbol() 762 * @param msInfo 763 * @return 764 */ 765 public boolean addCustomSymbol(MSInfo msInfo) 766 { 767 boolean success = false; 768 try 769 { 770 int version = msInfo.getVersion(); 771 if (version < SymbolID.Version_2525E) 772 { 773 if(this._IDListD.indexOf(msInfo.getBasicSymbolID()) == -1) 774 { 775 this._IDListD.add(msInfo.getBasicSymbolID()); 776 MSLookup._MSLookupD.put(msInfo.getBasicSymbolID(), msInfo); 777 success = true; 778 } 779 else 780 ErrorLogger.LogMessage("Symbol Set and Entity Code combination already exist: " + msInfo.getBasicSymbolID(), Level.INFO,false); 781 } 782 else if (version >= SymbolID.Version_2525E) 783 { 784 if(this._IDListE.indexOf(msInfo.getBasicSymbolID()) == -1) 785 { 786 this._IDListE.add(msInfo.getBasicSymbolID()); 787 MSLookup._MSLookupE.put(msInfo.getBasicSymbolID(), msInfo); 788 success = true; 789 } 790 else 791 ErrorLogger.LogMessage("Symbol Set and Entity Code combination already exist: " + msInfo.getBasicSymbolID(), Level.INFO,false); 792 } 793 } 794 catch(Exception e) 795 { 796 ErrorLogger.LogException("MSLookup", "addCustomSymbol",e); 797 } 798 return success; 799 } 800}