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.AL_OPERATIONAL_CONDITION); 550 modifiers.add(Modifiers.AO_ENGAGEMENT_BAR); 551 modifiers.add(Modifiers.AS_COUNTRY); 552 break; 553 case SymbolID.SymbolSet_Air: 554 case SymbolID.SymbolSet_AirMissile: 555 case SymbolID.SymbolSet_SignalsIntelligence_Air: 556 modifiers.add(Modifiers.A_SYMBOL_ICON); 557 modifiers.add(Modifiers.G_STAFF_COMMENTS); 558 modifiers.add(Modifiers.H_ADDITIONAL_INFO_1); 559 modifiers.add(Modifiers.P_IFF_SIF_AIS);//air only 560 modifiers.add(Modifiers.Q_DIRECTION_OF_MOVEMENT); 561 modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1); 562 modifiers.add(Modifiers.V_EQUIP_TYPE); 563 modifiers.add(Modifiers.X_ALTITUDE_DEPTH); 564 modifiers.add(Modifiers.Z_SPEED); 565 modifiers.add(Modifiers.AB_FEINT_DUMMY_INDICATOR); 566 modifiers.add(Modifiers.AL_OPERATIONAL_CONDITION); 567 modifiers.add(Modifiers.AO_ENGAGEMENT_BAR); 568 modifiers.add(Modifiers.AS_COUNTRY); 569 break; 570 case SymbolID.SymbolSet_SeaSurface: 571 case SymbolID.SymbolSet_SignalsIntelligence_SeaSurface: 572 modifiers.add(Modifiers.A_SYMBOL_ICON); 573 modifiers.add(Modifiers.G_STAFF_COMMENTS); 574 modifiers.add(Modifiers.H_ADDITIONAL_INFO_1); 575 modifiers.add(Modifiers.P_IFF_SIF_AIS); 576 modifiers.add(Modifiers.Q_DIRECTION_OF_MOVEMENT); 577 modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1); 578 modifiers.add(Modifiers.V_EQUIP_TYPE); 579 modifiers.add(Modifiers.Y_LOCATION); 580 modifiers.add(Modifiers.Z_SPEED); 581 modifiers.add(Modifiers.AB_FEINT_DUMMY_INDICATOR); 582 modifiers.add(Modifiers.AL_OPERATIONAL_CONDITION); 583 modifiers.add(Modifiers.AO_ENGAGEMENT_BAR); 584 modifiers.add(Modifiers.AQ_GUARDED_UNIT); 585 modifiers.add(Modifiers.AR_SPECIAL_DESIGNATOR); 586 modifiers.add(Modifiers.AS_COUNTRY); 587 break; 588 case SymbolID.SymbolSet_SeaSubsurface: 589 case SymbolID.SymbolSet_SignalsIntelligence_SeaSubsurface: 590 modifiers.add(Modifiers.A_SYMBOL_ICON); 591 modifiers.add(Modifiers.AG_AUX_EQUIP_INDICATOR); 592 modifiers.add(Modifiers.AL_OPERATIONAL_CONDITION); 593 modifiers.add(Modifiers.AO_ENGAGEMENT_BAR); 594 modifiers.add(Modifiers.AR_SPECIAL_DESIGNATOR); 595 modifiers.add(Modifiers.G_STAFF_COMMENTS); 596 modifiers.add(Modifiers.H_ADDITIONAL_INFO_1); 597 modifiers.add(Modifiers.Q_DIRECTION_OF_MOVEMENT); 598 modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1); 599 modifiers.add(Modifiers.V_EQUIP_TYPE); 600 modifiers.add(Modifiers.X_ALTITUDE_DEPTH); 601 modifiers.add(Modifiers.AB_FEINT_DUMMY_INDICATOR); 602 modifiers.add(Modifiers.AS_COUNTRY); 603 break; 604 case SymbolID.SymbolSet_Activities: 605 modifiers.add(Modifiers.A_SYMBOL_ICON); 606 modifiers.add(Modifiers.G_STAFF_COMMENTS); 607 modifiers.add(Modifiers.H_ADDITIONAL_INFO_1); 608 modifiers.add(Modifiers.J_EVALUATION_RATING); 609 modifiers.add(Modifiers.Q_DIRECTION_OF_MOVEMENT); 610 modifiers.add(Modifiers.W_DTG_1); 611 modifiers.add(Modifiers.Y_LOCATION); 612 modifiers.add(Modifiers.AB_FEINT_DUMMY_INDICATOR); 613 modifiers.add(Modifiers.AS_COUNTRY); 614 break; 615 case SymbolID.SymbolSet_CyberSpace: 616 modifiers.add(Modifiers.A_SYMBOL_ICON); 617 modifiers.add(Modifiers.B_ECHELON); 618 modifiers.add(Modifiers.D_TASK_FORCE_INDICATOR); 619 modifiers.add(Modifiers.F_REINFORCED_REDUCED); 620 modifiers.add(Modifiers.G_STAFF_COMMENTS); 621 modifiers.add(Modifiers.H_ADDITIONAL_INFO_1); 622 modifiers.add(Modifiers.K_COMBAT_EFFECTIVENESS); 623 modifiers.add(Modifiers.L_SIGNATURE_EQUIP); 624 modifiers.add(Modifiers.M_HIGHER_FORMATION); 625 modifiers.add(Modifiers.S_HQ_STAFF_INDICATOR); 626 modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1); 627 modifiers.add(Modifiers.V_EQUIP_TYPE); 628 modifiers.add(Modifiers.W_DTG_1); 629 modifiers.add(Modifiers.Y_LOCATION); 630 modifiers.add(Modifiers.AO_ENGAGEMENT_BAR); 631 modifiers.add(Modifiers.AS_COUNTRY); 632 break; 633 /*case SymbolID.SymbolSet_SignalsIntelligence_Air: 634 case SymbolID.SymbolSet_SignalsIntelligence_Land: 635 case SymbolID.SymbolSet_SignalsIntelligence_SeaSurface: 636 case SymbolID.SymbolSet_SignalsIntelligence_SeaSubsurface: 637 case SymbolID.SymbolSet_SignalsIntelligence_Space: 638 modifiers.add(Modifiers.A_SYMBOL_ICON); 639 modifiers.add(Modifiers.D_TASK_FORCE_INDICATOR); 640 modifiers.add(Modifiers.G_STAFF_COMMENTS); 641 modifiers.add(Modifiers.H_ADDITIONAL_INFO_1); 642 modifiers.add(Modifiers.J_EVALUATION_RATING); 643 modifiers.add(Modifiers.M_HIGHER_FORMATION); 644 modifiers.add(Modifiers.R2_SIGNIT_MOBILITY_INDICATOR); 645 modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1); 646 modifiers.add(Modifiers.V_EQUIP_TYPE); 647 modifiers.add(Modifiers.W1_DTG_2); 648 modifiers.add(Modifiers.Y_LOCATION); 649 modifiers.add(Modifiers.AD_PLATFORM_TYPE);//like equipment 650 modifiers.add(Modifiers.AE_EQUIPMENT_TEARDOWN_TIME);//like equipment 651 modifiers.add(Modifiers.AF_COMMON_IDENTIFIER);//like equipment 652 break;*/ 653 654 case SymbolID.SymbolSet_ControlMeasure: 655 //values come from files during MSLookup load 656 break; 657 case SymbolID.SymbolSet_Atmospheric: 658 //Tropopause low, Tropopause high 659 if ((ec.equals("110102")) || (ec.equals("110202")) || 660 (ec.equals("162200"))) 661 modifiers.add(Modifiers.X_ALTITUDE_DEPTH); 662 else if (ec.equals("140200")) 663 modifiers.add(Modifiers.AN_AZIMUTH); 664 break; 665 case SymbolID.SymbolSet_MineWarfare: 666 case SymbolID.SymbolSet_Oceanographic: 667 case SymbolID.SymbolSet_MeteorologicalSpace: 668 default://no modifiers 669 670 } 671 } 672 673 if(ss == SymbolID.SymbolSet_SignalsIntelligence_Air || 674 ss == SymbolID.SymbolSet_SignalsIntelligence_Land || 675 ss == SymbolID.SymbolSet_SignalsIntelligence_SeaSurface || 676 ss == SymbolID.SymbolSet_SignalsIntelligence_SeaSubsurface || 677 ss == SymbolID.SymbolSet_SignalsIntelligence_Space) 678 modifiers.add(Modifiers.R2_SIGNIT_MOBILITY_INDICATOR); 679 680 return modifiers; 681 } 682 683 /** 684 * 685 * @param symbolID Full 20-30 digits from the symbol code 686 * @return 687 */ 688 public MSInfo getMSLInfo(String symbolID) 689 { 690 int length = symbolID.length(); 691 692 if(length >= 20 && length <= 30) 693 { 694 int version = SymbolID.getVersion(symbolID); 695 return getMSLInfo(SymbolUtilities.getBasicSymbolID(symbolID), version); 696 } 697 else 698 return null; 699 } 700 701 /** 702 * 703 * @param basicID id SymbolSet + Entity code like 50110100 704 * @param version like SymbolID.Version_2525Dch1 705 * @return 706 */ 707 public MSInfo getMSLInfo(String basicID, int version) 708 { 709 int length = basicID.length(); 710 if(length == 8) 711 { 712 if(version >= SymbolID.Version_2525E) 713 { 714 if(_MSLookupE.containsKey(basicID)) 715 return _MSLookupE.get(basicID); 716 else 717 return null; 718 } 719 else if (version == SymbolID.Version_2525D && basicID.equals("25272100")) 720 { 721 // MSDZ can have extra point in D 722 return new MSInfo(SymbolID.Version_2525D, "25", 723 "Protection Areas", "Minimum Safe Distance Zone", "", 724 "272100", "Area", "Area14", new ArrayList<>()); 725 } 726 else 727 { 728 if(_MSLookupD.containsKey(basicID)) 729 return _MSLookupD.get(basicID); 730 else 731 return null; 732 } 733 } 734 else if(length >= 20 && length <= 30)//probably got a full id instead of a basic ID. 735 { 736 return getMSLInfo(SymbolUtilities.getBasicSymbolID(basicID), version); 737 } 738 else 739 return null; 740 } 741 742 /** 743 * returns a list of all the keys in the order they are listed in the MilStd 2525D document. 744 * @return 745 */ 746 public List<String> getIDList(int version) 747 { 748 if(version < SymbolID.Version_2525E) 749 return _IDListD; 750 else if(version >= SymbolID.Version_2525E) 751 return _IDListE; 752 else 753 return _IDListD; 754 } 755 756 /* 757 * For use only by MilStdIconRenderer.addCustomSymbol() 758 * @param msInfo 759 * @return 760 */ 761 public boolean addCustomSymbol(MSInfo msInfo) 762 { 763 boolean success = false; 764 try 765 { 766 int version = msInfo.getVersion(); 767 if (version < SymbolID.Version_2525E) 768 { 769 if(this._IDListD.indexOf(msInfo.getBasicSymbolID()) == -1) 770 { 771 this._IDListD.add(msInfo.getBasicSymbolID()); 772 MSLookup._MSLookupD.put(msInfo.getBasicSymbolID(), msInfo); 773 success = true; 774 } 775 else 776 ErrorLogger.LogMessage("Symbol Set and Entity Code combination already exist: " + msInfo.getBasicSymbolID(), Level.INFO,false); 777 } 778 else if (version >= SymbolID.Version_2525E) 779 { 780 if(this._IDListE.indexOf(msInfo.getBasicSymbolID()) == -1) 781 { 782 this._IDListE.add(msInfo.getBasicSymbolID()); 783 MSLookup._MSLookupE.put(msInfo.getBasicSymbolID(), msInfo); 784 success = true; 785 } 786 else 787 ErrorLogger.LogMessage("Symbol Set and Entity Code combination already exist: " + msInfo.getBasicSymbolID(), Level.INFO,false); 788 } 789 } 790 catch(Exception e) 791 { 792 ErrorLogger.LogException("MSLookup", "addCustomSymbol",e); 793 } 794 return success; 795 } 796}