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 if(version < SymbolID.Version_2525E)//add handful of SymbolID.Version_2525D codes to lookup 183 { 184 AddVersion10Symbols(lookup); 185 } 186 187 } 188 catch(Exception exc) 189 { 190 System.out.println(exc.getMessage()); 191 } 192 193 } 194 195 private void AddVersion10Symbols(Map<String,MSInfo> lookup) 196 { 197 String id = null; 198 String ss = null; 199 int intSS = 0; 200 String e = null; 201 String et = null; 202 String est = null; 203 String ec = null; 204 String g = null; 205 String dr = null; 206 String m = null; 207 String[] modifiers = null; 208 209 String[] units = {"120300", "161900", "162200", "162600", "162700", "163400", "163800", "163900", "164100", "164700"}; 210 String[] similar = {"120200", "161800", "161800", "161800", "161800", "161800", "161800", "161800", "161800", "161800"}; 211 String[] unitNames = {"Amphibious", 212 "NATO Supply Class II", 213 "NATO Supply Class V", 214 "Pipeline", 215 "Postal", 216 "Supply", 217 "US Supply Class II", 218 "US Supply Class III", 219 "US Supply Class IV", 220 "Water"}; 221 222 MSInfo msiTemp = null; 223 ss = "10"; 224 for(int i = 0; i < units.length; i++) 225 { 226 msiTemp = lookup.get("10" + similar[i]); 227 String[] path = msiTemp.getPath().split("/"); 228 229 ss = path[0]; 230 if(path.length>2) 231 e = path[1]; 232 if(path.length>3) 233 et = path[2]; 234 235 if(e == null || e.equals("")) 236 e = unitNames[i]; 237 else if(et == null || et.equals("")) 238 et = unitNames[i]; 239 else 240 est = unitNames[i]; 241 242 ec = units[i]; 243 244 lookup.put(10 + ec, new MSInfo(SymbolID.Version_2525D, "10", e, et, est, ec, populateModifierList("10",ec, SymbolID.Version_2525Dch1))); 245 } 246 est = ""; 247 248 lookup.put("25214000", new MSInfo(SymbolID.Version_2525D, "25", "Maritime Control Points", "Forward Observer - Spotter Position", est, "214000", "Point","Point2",populateModifierList("25","214000", SymbolID.Version_2525Dch1))); 249 //3 point Bridge not implemented 250 //lookup.put("25271400", new MSInfo(SymbolID.Version_2525D, "25", "Protection Areas", "Bridge", est, "271400", "Line","Line16",populateModifierList("25","271400", SymbolID.Version_2525Dch1))); 251 252 } 253 254 private ArrayList<String> populateModifierList(String[] modifiers) 255 { 256 ArrayList<String> mods = new ArrayList<String>(); 257 if(modifiers != null && modifiers.length > 0) 258 { 259 for (String mod : modifiers) 260 { 261 mods.add(Modifiers.getModifierKey(mod)); 262 } 263 } 264 return mods; 265 } 266 267 private ArrayList<String> populateModifierList(String symbolSet, String ec, int version) 268 { 269 int ss = Integer.valueOf(symbolSet); 270 ArrayList<String> modifiers = new ArrayList<String>(); 271 272 if(version >= SymbolID.Version_2525E) 273 { 274 switch (ss) { 275 case SymbolID.SymbolSet_LandUnit: 276 case SymbolID.SymbolSet_LandCivilianUnit_Organization: 277 modifiers.add(Modifiers.A_SYMBOL_ICON); 278 modifiers.add(Modifiers.B_ECHELON); 279 modifiers.add(Modifiers.C_QUANTITY); 280 modifiers.add(Modifiers.D_TASK_FORCE_INDICATOR); 281 modifiers.add(Modifiers.F_REINFORCED_REDUCED); 282 modifiers.add(Modifiers.G_STAFF_COMMENTS); 283 modifiers.add(Modifiers.H_ADDITIONAL_INFO_1); 284 modifiers.add(Modifiers.J_EVALUATION_RATING); 285 modifiers.add(Modifiers.K_COMBAT_EFFECTIVENESS); 286 modifiers.add(Modifiers.L_SIGNATURE_EQUIP); 287 modifiers.add(Modifiers.M_HIGHER_FORMATION); 288 modifiers.add(Modifiers.P_IFF_SIF_AIS); 289 modifiers.add(Modifiers.Q_DIRECTION_OF_MOVEMENT); 290 modifiers.add(Modifiers.S_HQ_STAFF_INDICATOR); 291 modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1); 292 modifiers.add(Modifiers.W_DTG_1); 293 modifiers.add(Modifiers.X_ALTITUDE_DEPTH); 294 modifiers.add(Modifiers.Y_LOCATION); 295 modifiers.add(Modifiers.Z_SPEED); 296 if(ss==SymbolID.SymbolSet_LandUnit && ec.equals("110000")) 297 modifiers.add(Modifiers.AA_SPECIAL_C2_HQ); 298 modifiers.add(Modifiers.AB_FEINT_DUMMY_INDICATOR); 299 modifiers.add(Modifiers.AD_PLATFORM_TYPE); 300 modifiers.add(Modifiers.AE_EQUIPMENT_TEARDOWN_TIME); 301 modifiers.add(Modifiers.AF_COMMON_IDENTIFIER); 302 modifiers.add(Modifiers.AH_AREA_OF_UNCERTAINTY); 303 modifiers.add(Modifiers.AI_DEAD_RECKONING_TRAILER); 304 modifiers.add(Modifiers.AK_PAIRING_LINE); 305 modifiers.add(Modifiers.AL_OPERATIONAL_CONDITION); 306 modifiers.add(Modifiers.AO_ENGAGEMENT_BAR); 307 modifiers.add(Modifiers.AQ_GUARDED_UNIT); 308 modifiers.add(Modifiers.AS_COUNTRY); 309 break; 310 case SymbolID.SymbolSet_LandEquipment: 311 case SymbolID.SymbolSet_SignalsIntelligence_Land: 312 modifiers.add(Modifiers.A_SYMBOL_ICON); 313 modifiers.add(Modifiers.C_QUANTITY); 314 modifiers.add(Modifiers.G_STAFF_COMMENTS); 315 modifiers.add(Modifiers.H_ADDITIONAL_INFO_1); 316 modifiers.add(Modifiers.J_EVALUATION_RATING); 317 modifiers.add(Modifiers.K_COMBAT_EFFECTIVENESS); 318 modifiers.add(Modifiers.L_SIGNATURE_EQUIP); 319 modifiers.add(Modifiers.N_HOSTILE); 320 modifiers.add(Modifiers.P_IFF_SIF_AIS); 321 modifiers.add(Modifiers.Q_DIRECTION_OF_MOVEMENT); 322 modifiers.add(Modifiers.R_MOBILITY_INDICATOR); 323 modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1); 324 modifiers.add(Modifiers.V_EQUIP_TYPE); 325 modifiers.add(Modifiers.W_DTG_1); 326 modifiers.add(Modifiers.X_ALTITUDE_DEPTH); 327 modifiers.add(Modifiers.Y_LOCATION); 328 modifiers.add(Modifiers.Z_SPEED); 329 modifiers.add(Modifiers.AB_FEINT_DUMMY_INDICATOR); 330 modifiers.add(Modifiers.AD_PLATFORM_TYPE); 331 modifiers.add(Modifiers.AE_EQUIPMENT_TEARDOWN_TIME); 332 modifiers.add(Modifiers.AF_COMMON_IDENTIFIER); 333 modifiers.add(Modifiers.AG_AUX_EQUIP_INDICATOR); 334 modifiers.add(Modifiers.AH_AREA_OF_UNCERTAINTY); 335 modifiers.add(Modifiers.AI_DEAD_RECKONING_TRAILER); 336 modifiers.add(Modifiers.AK_PAIRING_LINE); 337 modifiers.add(Modifiers.AL_OPERATIONAL_CONDITION); 338 modifiers.add(Modifiers.AO_ENGAGEMENT_BAR); 339 modifiers.add(Modifiers.AQ_GUARDED_UNIT); 340 modifiers.add(Modifiers.AS_COUNTRY); 341 break; 342 case SymbolID.SymbolSet_LandInstallation: 343 modifiers.add(Modifiers.A_SYMBOL_ICON); 344 modifiers.add(Modifiers.C_QUANTITY); 345 modifiers.add(Modifiers.G_STAFF_COMMENTS); 346 modifiers.add(Modifiers.H_ADDITIONAL_INFO_1); 347 modifiers.add(Modifiers.J_EVALUATION_RATING); 348 modifiers.add(Modifiers.K_COMBAT_EFFECTIVENESS); 349 modifiers.add(Modifiers.P_IFF_SIF_AIS); 350 modifiers.add(Modifiers.S_HQ_STAFF_INDICATOR); 351 modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1); 352 modifiers.add(Modifiers.W_DTG_1); 353 modifiers.add(Modifiers.X_ALTITUDE_DEPTH); 354 modifiers.add(Modifiers.Y_LOCATION); 355 modifiers.add(Modifiers.AB_FEINT_DUMMY_INDICATOR); 356 modifiers.add(Modifiers.AE_EQUIPMENT_TEARDOWN_TIME); 357 modifiers.add(Modifiers.AH_AREA_OF_UNCERTAINTY); 358 modifiers.add(Modifiers.AI_DEAD_RECKONING_TRAILER); 359 modifiers.add(Modifiers.AK_PAIRING_LINE); 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.AS_COUNTRY); 364 break; 365 case SymbolID.SymbolSet_DismountedIndividuals: 366 modifiers.add(Modifiers.A_SYMBOL_ICON); 367 modifiers.add(Modifiers.G_STAFF_COMMENTS); 368 modifiers.add(Modifiers.H_ADDITIONAL_INFO_1); 369 modifiers.add(Modifiers.J_EVALUATION_RATING); 370 modifiers.add(Modifiers.K_COMBAT_EFFECTIVENESS); 371 modifiers.add(Modifiers.M_HIGHER_FORMATION); 372 modifiers.add(Modifiers.Q_DIRECTION_OF_MOVEMENT); 373 modifiers.add(Modifiers.P_IFF_SIF_AIS); 374 modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1); 375 modifiers.add(Modifiers.V_EQUIP_TYPE); 376 modifiers.add(Modifiers.W_DTG_1); 377 modifiers.add(Modifiers.X_ALTITUDE_DEPTH); 378 modifiers.add(Modifiers.Y_LOCATION); 379 modifiers.add(Modifiers.AB_FEINT_DUMMY_INDICATOR); 380 modifiers.add(Modifiers.AF_COMMON_IDENTIFIER); 381 modifiers.add(Modifiers.AS_COUNTRY); 382 modifiers.add(Modifiers.AV_LEADERSHIP); 383 break; 384 case SymbolID.SymbolSet_Space: 385 case SymbolID.SymbolSet_SpaceMissile: 386 case SymbolID.SymbolSet_Air: 387 case SymbolID.SymbolSet_AirMissile: 388 modifiers.add(Modifiers.A_SYMBOL_ICON); 389 modifiers.add(Modifiers.B_ECHELON); 390 modifiers.add(Modifiers.C_QUANTITY); 391 modifiers.add(Modifiers.G_STAFF_COMMENTS); 392 modifiers.add(Modifiers.H_ADDITIONAL_INFO_1); 393 modifiers.add(Modifiers.J_EVALUATION_RATING); 394 modifiers.add(Modifiers.P_IFF_SIF_AIS); 395 //modifiers.add(Modifiers.Q_DIRECTION_OF_MOVEMENT); 396 modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1); 397 modifiers.add(Modifiers.V_EQUIP_TYPE); 398 modifiers.add(Modifiers.W_DTG_1); 399 modifiers.add(Modifiers.X_ALTITUDE_DEPTH); 400 modifiers.add(Modifiers.Y_LOCATION); 401 modifiers.add(Modifiers.Z_SPEED); 402 modifiers.add(Modifiers.AB_FEINT_DUMMY_INDICATOR); 403 modifiers.add(Modifiers.AD_PLATFORM_TYPE); 404 modifiers.add(Modifiers.AF_COMMON_IDENTIFIER); 405 modifiers.add(Modifiers.AJ_SPEED_LEADER); 406 modifiers.add(Modifiers.AL_OPERATIONAL_CONDITION); 407 modifiers.add(Modifiers.AO_ENGAGEMENT_BAR); 408 modifiers.add(Modifiers.AR_SPECIAL_DESIGNATOR); 409 modifiers.add(Modifiers.AS_COUNTRY); 410 break; 411 case SymbolID.SymbolSet_SeaSurface: 412 modifiers.add(Modifiers.A_SYMBOL_ICON); 413 modifiers.add(Modifiers.G_STAFF_COMMENTS); 414 modifiers.add(Modifiers.H_ADDITIONAL_INFO_1); 415 modifiers.add(Modifiers.P_IFF_SIF_AIS); 416 //modifiers.add(Modifiers.Q_DIRECTION_OF_MOVEMENT); 417 modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1); 418 modifiers.add(Modifiers.V_EQUIP_TYPE); 419 modifiers.add(Modifiers.Y_LOCATION); 420 modifiers.add(Modifiers.Z_SPEED); 421 modifiers.add(Modifiers.AB_FEINT_DUMMY_INDICATOR); 422 modifiers.add(Modifiers.AG_AUX_EQUIP_INDICATOR); 423 modifiers.add(Modifiers.AJ_SPEED_LEADER); 424 modifiers.add(Modifiers.AL_OPERATIONAL_CONDITION); 425 modifiers.add(Modifiers.AO_ENGAGEMENT_BAR); 426 modifiers.add(Modifiers.AQ_GUARDED_UNIT); 427 modifiers.add(Modifiers.AR_SPECIAL_DESIGNATOR); 428 modifiers.add(Modifiers.AS_COUNTRY); 429 break; 430 case SymbolID.SymbolSet_SeaSubsurface: 431 modifiers.add(Modifiers.A_SYMBOL_ICON); 432 modifiers.add(Modifiers.G_STAFF_COMMENTS); 433 modifiers.add(Modifiers.H_ADDITIONAL_INFO_1); 434 modifiers.add(Modifiers.P_IFF_SIF_AIS); 435 //modifiers.add(Modifiers.Q_DIRECTION_OF_MOVEMENT); 436 modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1); 437 modifiers.add(Modifiers.V_EQUIP_TYPE); 438 modifiers.add(Modifiers.X_ALTITUDE_DEPTH); 439 modifiers.add(Modifiers.Y_LOCATION); 440 modifiers.add(Modifiers.Z_SPEED); 441 modifiers.add(Modifiers.AB_FEINT_DUMMY_INDICATOR); 442 modifiers.add(Modifiers.AJ_SPEED_LEADER); 443 modifiers.add(Modifiers.AL_OPERATIONAL_CONDITION); 444 modifiers.add(Modifiers.AO_ENGAGEMENT_BAR); 445 modifiers.add(Modifiers.AQ_GUARDED_UNIT); 446 modifiers.add(Modifiers.AR_SPECIAL_DESIGNATOR); 447 modifiers.add(Modifiers.AS_COUNTRY); 448 break; 449 case SymbolID.SymbolSet_Activities: 450 modifiers.add(Modifiers.A_SYMBOL_ICON); 451 modifiers.add(Modifiers.C_QUANTITY); 452 modifiers.add(Modifiers.G_STAFF_COMMENTS); 453 modifiers.add(Modifiers.H_ADDITIONAL_INFO_1); 454 modifiers.add(Modifiers.J_EVALUATION_RATING); 455 modifiers.add(Modifiers.Q_DIRECTION_OF_MOVEMENT); 456 modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1); 457 modifiers.add(Modifiers.W_DTG_1); 458 modifiers.add(Modifiers.Y_LOCATION); 459 modifiers.add(Modifiers.AB_FEINT_DUMMY_INDICATOR); 460 modifiers.add(Modifiers.AS_COUNTRY); 461 break; 462 case SymbolID.SymbolSet_CyberSpace: 463 modifiers.add(Modifiers.A_SYMBOL_ICON); 464 modifiers.add(Modifiers.B_ECHELON); 465 modifiers.add(Modifiers.F_REINFORCED_REDUCED); 466 modifiers.add(Modifiers.G_STAFF_COMMENTS); 467 modifiers.add(Modifiers.H_ADDITIONAL_INFO_1); 468 modifiers.add(Modifiers.K_COMBAT_EFFECTIVENESS); 469 modifiers.add(Modifiers.L_SIGNATURE_EQUIP); 470 modifiers.add(Modifiers.M_HIGHER_FORMATION); 471 modifiers.add(Modifiers.S_HQ_STAFF_INDICATOR); 472 modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1); 473 modifiers.add(Modifiers.V_EQUIP_TYPE); 474 modifiers.add(Modifiers.W_DTG_1); 475 modifiers.add(Modifiers.Y_LOCATION); 476 modifiers.add(Modifiers.AS_COUNTRY); 477 break; 478 /*case SymbolID.SymbolSet_SignalsIntelligence_Air: 479 case SymbolID.SymbolSet_SignalsIntelligence_Land: 480 case SymbolID.SymbolSet_SignalsIntelligence_SeaSurface: 481 case SymbolID.SymbolSet_SignalsIntelligence_SeaSubsurface: 482 case SymbolID.SymbolSet_SignalsIntelligence_Space: 483 modifiers.add(Modifiers.A_SYMBOL_ICON); 484 modifiers.add(Modifiers.D_TASK_FORCE_INDICATOR); 485 modifiers.add(Modifiers.G_STAFF_COMMENTS); 486 modifiers.add(Modifiers.H_ADDITIONAL_INFO_1); 487 modifiers.add(Modifiers.J_EVALUATION_RATING); 488 modifiers.add(Modifiers.M_HIGHER_FORMATION); 489 modifiers.add(Modifiers.R2_SIGNIT_MOBILITY_INDICATOR); 490 modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1); 491 modifiers.add(Modifiers.V_EQUIP_TYPE); 492 modifiers.add(Modifiers.W1_DTG_2); 493 modifiers.add(Modifiers.Y_LOCATION); 494 modifiers.add(Modifiers.AD_PLATFORM_TYPE);//like equipment 495 modifiers.add(Modifiers.AE_EQUIPMENT_TEARDOWN_TIME);//like equipment 496 modifiers.add(Modifiers.AF_COMMON_IDENTIFIER);//like equipment 497 break;*/ 498 499 case SymbolID.SymbolSet_ControlMeasure: 500 //values come from files during MSLookup load 501 break; 502 case SymbolID.SymbolSet_Atmospheric: 503 //Tropopause low, Tropopause high 504 if ((ec.equals("110102")) || (ec.equals("110202")) || 505 (ec.equals("162200"))) 506 modifiers.add(Modifiers.X_ALTITUDE_DEPTH); 507 else if (ec.equals("140200")) 508 modifiers.add(Modifiers.AN_AZIMUTH); 509 break; 510 case SymbolID.SymbolSet_MineWarfare: 511 case SymbolID.SymbolSet_Oceanographic: 512 case SymbolID.SymbolSet_MeteorologicalSpace: 513 default://no modifiers 514 515 } 516 } 517 else 518 { 519 switch (ss) { 520 case SymbolID.SymbolSet_LandUnit: 521 case SymbolID.SymbolSet_LandCivilianUnit_Organization: 522 modifiers.add(Modifiers.A_SYMBOL_ICON); 523 modifiers.add(Modifiers.B_ECHELON); 524 modifiers.add(Modifiers.D_TASK_FORCE_INDICATOR); 525 modifiers.add(Modifiers.F_REINFORCED_REDUCED); 526 modifiers.add(Modifiers.G_STAFF_COMMENTS); 527 modifiers.add(Modifiers.H_ADDITIONAL_INFO_1); 528 modifiers.add(Modifiers.J_EVALUATION_RATING); 529 modifiers.add(Modifiers.K_COMBAT_EFFECTIVENESS); 530 modifiers.add(Modifiers.M_HIGHER_FORMATION); 531 modifiers.add(Modifiers.P_IFF_SIF_AIS); 532 modifiers.add(Modifiers.Q_DIRECTION_OF_MOVEMENT); 533 modifiers.add(Modifiers.S_HQ_STAFF_INDICATOR); 534 modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1); 535 modifiers.add(Modifiers.W_DTG_1); 536 modifiers.add(Modifiers.X_ALTITUDE_DEPTH); 537 modifiers.add(Modifiers.Y_LOCATION); 538 modifiers.add(Modifiers.Z_SPEED); 539 if(ss==SymbolID.SymbolSet_LandUnit && ec.equals("110000")) 540 modifiers.add(Modifiers.AA_SPECIAL_C2_HQ); 541 modifiers.add(Modifiers.AB_FEINT_DUMMY_INDICATOR); 542 modifiers.add(Modifiers.AH_AREA_OF_UNCERTAINTY); 543 modifiers.add(Modifiers.AI_DEAD_RECKONING_TRAILER); 544 modifiers.add(Modifiers.AK_PAIRING_LINE); 545 modifiers.add(Modifiers.AL_OPERATIONAL_CONDITION); 546 modifiers.add(Modifiers.AO_ENGAGEMENT_BAR); 547 modifiers.add(Modifiers.AS_COUNTRY); 548 break; 549 case SymbolID.SymbolSet_LandEquipment: 550 case SymbolID.SymbolSet_SignalsIntelligence_Land: 551 modifiers.add(Modifiers.A_SYMBOL_ICON); 552 modifiers.add(Modifiers.C_QUANTITY); 553 modifiers.add(Modifiers.G_STAFF_COMMENTS); 554 modifiers.add(Modifiers.H_ADDITIONAL_INFO_1); 555 modifiers.add(Modifiers.J_EVALUATION_RATING); 556 modifiers.add(Modifiers.L_SIGNATURE_EQUIP); 557 modifiers.add(Modifiers.N_HOSTILE); 558 modifiers.add(Modifiers.P_IFF_SIF_AIS); 559 modifiers.add(Modifiers.Q_DIRECTION_OF_MOVEMENT); 560 modifiers.add(Modifiers.R_MOBILITY_INDICATOR); 561 modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1); 562 modifiers.add(Modifiers.V_EQUIP_TYPE); 563 modifiers.add(Modifiers.W_DTG_1); 564 modifiers.add(Modifiers.X_ALTITUDE_DEPTH); 565 modifiers.add(Modifiers.Y_LOCATION); 566 modifiers.add(Modifiers.Z_SPEED); 567 modifiers.add(Modifiers.AB_FEINT_DUMMY_INDICATOR); 568 modifiers.add(Modifiers.AD_PLATFORM_TYPE); 569 modifiers.add(Modifiers.AE_EQUIPMENT_TEARDOWN_TIME); 570 modifiers.add(Modifiers.AF_COMMON_IDENTIFIER); 571 modifiers.add(Modifiers.AG_AUX_EQUIP_INDICATOR); 572 modifiers.add(Modifiers.AH_AREA_OF_UNCERTAINTY); 573 modifiers.add(Modifiers.AI_DEAD_RECKONING_TRAILER); 574 modifiers.add(Modifiers.AK_PAIRING_LINE); 575 modifiers.add(Modifiers.AL_OPERATIONAL_CONDITION); 576 modifiers.add(Modifiers.AO_ENGAGEMENT_BAR); 577 modifiers.add(Modifiers.AQ_GUARDED_UNIT); 578 modifiers.add(Modifiers.AR_SPECIAL_DESIGNATOR); 579 modifiers.add(Modifiers.AS_COUNTRY); 580 break; 581 case SymbolID.SymbolSet_LandInstallation: 582 modifiers.add(Modifiers.A_SYMBOL_ICON); 583 modifiers.add(Modifiers.G_STAFF_COMMENTS); 584 modifiers.add(Modifiers.H_ADDITIONAL_INFO_1); 585 modifiers.add(Modifiers.J_EVALUATION_RATING); 586 modifiers.add(Modifiers.K_COMBAT_EFFECTIVENESS); 587 modifiers.add(Modifiers.P_IFF_SIF_AIS); 588 modifiers.add(Modifiers.S_HQ_STAFF_INDICATOR); 589 modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1); 590 modifiers.add(Modifiers.W_DTG_1); 591 modifiers.add(Modifiers.X_ALTITUDE_DEPTH); 592 modifiers.add(Modifiers.Y_LOCATION); 593 modifiers.add(Modifiers.AB_FEINT_DUMMY_INDICATOR); 594 modifiers.add(Modifiers.AH_AREA_OF_UNCERTAINTY); 595 modifiers.add(Modifiers.AI_DEAD_RECKONING_TRAILER); 596 modifiers.add(Modifiers.AK_PAIRING_LINE); 597 modifiers.add(Modifiers.AL_OPERATIONAL_CONDITION); 598 modifiers.add(Modifiers.AO_ENGAGEMENT_BAR); 599 modifiers.add(Modifiers.AS_COUNTRY); 600 break; 601 case SymbolID.SymbolSet_Space: 602 case SymbolID.SymbolSet_SpaceMissile: 603 case SymbolID.SymbolSet_SignalsIntelligence_Space: 604 modifiers.add(Modifiers.A_SYMBOL_ICON); 605 modifiers.add(Modifiers.G_STAFF_COMMENTS); 606 modifiers.add(Modifiers.H_ADDITIONAL_INFO_1); 607 modifiers.add(Modifiers.Q_DIRECTION_OF_MOVEMENT); 608 modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1); 609 modifiers.add(Modifiers.V_EQUIP_TYPE); 610 modifiers.add(Modifiers.X_ALTITUDE_DEPTH); 611 modifiers.add(Modifiers.Z_SPEED); 612 modifiers.add(Modifiers.AB_FEINT_DUMMY_INDICATOR); 613 modifiers.add(Modifiers.AJ_SPEED_LEADER); 614 modifiers.add(Modifiers.AL_OPERATIONAL_CONDITION); 615 modifiers.add(Modifiers.AO_ENGAGEMENT_BAR); 616 modifiers.add(Modifiers.AS_COUNTRY); 617 break; 618 case SymbolID.SymbolSet_Air: 619 case SymbolID.SymbolSet_AirMissile: 620 case SymbolID.SymbolSet_SignalsIntelligence_Air: 621 modifiers.add(Modifiers.A_SYMBOL_ICON); 622 modifiers.add(Modifiers.G_STAFF_COMMENTS); 623 modifiers.add(Modifiers.H_ADDITIONAL_INFO_1); 624 modifiers.add(Modifiers.P_IFF_SIF_AIS);//air only 625 modifiers.add(Modifiers.Q_DIRECTION_OF_MOVEMENT); 626 modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1); 627 modifiers.add(Modifiers.V_EQUIP_TYPE); 628 modifiers.add(Modifiers.X_ALTITUDE_DEPTH); 629 modifiers.add(Modifiers.Z_SPEED); 630 modifiers.add(Modifiers.AB_FEINT_DUMMY_INDICATOR); 631 modifiers.add(Modifiers.AJ_SPEED_LEADER); 632 modifiers.add(Modifiers.AL_OPERATIONAL_CONDITION); 633 modifiers.add(Modifiers.AO_ENGAGEMENT_BAR); 634 modifiers.add(Modifiers.AS_COUNTRY); 635 break; 636 case SymbolID.SymbolSet_SeaSurface: 637 case SymbolID.SymbolSet_SignalsIntelligence_SeaSurface: 638 modifiers.add(Modifiers.A_SYMBOL_ICON); 639 modifiers.add(Modifiers.G_STAFF_COMMENTS); 640 modifiers.add(Modifiers.H_ADDITIONAL_INFO_1); 641 modifiers.add(Modifiers.P_IFF_SIF_AIS); 642 modifiers.add(Modifiers.Q_DIRECTION_OF_MOVEMENT); 643 modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1); 644 modifiers.add(Modifiers.V_EQUIP_TYPE); 645 modifiers.add(Modifiers.Y_LOCATION); 646 modifiers.add(Modifiers.Z_SPEED); 647 modifiers.add(Modifiers.AB_FEINT_DUMMY_INDICATOR); 648 modifiers.add(Modifiers.AJ_SPEED_LEADER); 649 modifiers.add(Modifiers.AL_OPERATIONAL_CONDITION); 650 modifiers.add(Modifiers.AO_ENGAGEMENT_BAR); 651 modifiers.add(Modifiers.AQ_GUARDED_UNIT); 652 modifiers.add(Modifiers.AR_SPECIAL_DESIGNATOR); 653 modifiers.add(Modifiers.AS_COUNTRY); 654 break; 655 case SymbolID.SymbolSet_SeaSubsurface: 656 case SymbolID.SymbolSet_SignalsIntelligence_SeaSubsurface: 657 modifiers.add(Modifiers.A_SYMBOL_ICON); 658 modifiers.add(Modifiers.AG_AUX_EQUIP_INDICATOR); 659 modifiers.add(Modifiers.AL_OPERATIONAL_CONDITION); 660 modifiers.add(Modifiers.AO_ENGAGEMENT_BAR); 661 modifiers.add(Modifiers.AR_SPECIAL_DESIGNATOR); 662 modifiers.add(Modifiers.G_STAFF_COMMENTS); 663 modifiers.add(Modifiers.H_ADDITIONAL_INFO_1); 664 modifiers.add(Modifiers.Q_DIRECTION_OF_MOVEMENT); 665 modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1); 666 modifiers.add(Modifiers.V_EQUIP_TYPE); 667 modifiers.add(Modifiers.X_ALTITUDE_DEPTH); 668 modifiers.add(Modifiers.AB_FEINT_DUMMY_INDICATOR); 669 modifiers.add(Modifiers.AJ_SPEED_LEADER); 670 modifiers.add(Modifiers.AS_COUNTRY); 671 break; 672 case SymbolID.SymbolSet_Activities: 673 modifiers.add(Modifiers.A_SYMBOL_ICON); 674 modifiers.add(Modifiers.G_STAFF_COMMENTS); 675 modifiers.add(Modifiers.H_ADDITIONAL_INFO_1); 676 modifiers.add(Modifiers.J_EVALUATION_RATING); 677 modifiers.add(Modifiers.Q_DIRECTION_OF_MOVEMENT); 678 modifiers.add(Modifiers.W_DTG_1); 679 modifiers.add(Modifiers.Y_LOCATION); 680 modifiers.add(Modifiers.AB_FEINT_DUMMY_INDICATOR); 681 modifiers.add(Modifiers.AS_COUNTRY); 682 break; 683 case SymbolID.SymbolSet_CyberSpace: 684 modifiers.add(Modifiers.A_SYMBOL_ICON); 685 modifiers.add(Modifiers.B_ECHELON); 686 modifiers.add(Modifiers.D_TASK_FORCE_INDICATOR); 687 modifiers.add(Modifiers.F_REINFORCED_REDUCED); 688 modifiers.add(Modifiers.G_STAFF_COMMENTS); 689 modifiers.add(Modifiers.H_ADDITIONAL_INFO_1); 690 modifiers.add(Modifiers.K_COMBAT_EFFECTIVENESS); 691 modifiers.add(Modifiers.L_SIGNATURE_EQUIP); 692 modifiers.add(Modifiers.M_HIGHER_FORMATION); 693 modifiers.add(Modifiers.S_HQ_STAFF_INDICATOR); 694 modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1); 695 modifiers.add(Modifiers.V_EQUIP_TYPE); 696 modifiers.add(Modifiers.W_DTG_1); 697 modifiers.add(Modifiers.Y_LOCATION); 698 modifiers.add(Modifiers.AO_ENGAGEMENT_BAR); 699 modifiers.add(Modifiers.AS_COUNTRY); 700 break; 701 /*case SymbolID.SymbolSet_SignalsIntelligence_Air: 702 case SymbolID.SymbolSet_SignalsIntelligence_Land: 703 case SymbolID.SymbolSet_SignalsIntelligence_SeaSurface: 704 case SymbolID.SymbolSet_SignalsIntelligence_SeaSubsurface: 705 case SymbolID.SymbolSet_SignalsIntelligence_Space: 706 modifiers.add(Modifiers.A_SYMBOL_ICON); 707 modifiers.add(Modifiers.D_TASK_FORCE_INDICATOR); 708 modifiers.add(Modifiers.G_STAFF_COMMENTS); 709 modifiers.add(Modifiers.H_ADDITIONAL_INFO_1); 710 modifiers.add(Modifiers.J_EVALUATION_RATING); 711 modifiers.add(Modifiers.M_HIGHER_FORMATION); 712 modifiers.add(Modifiers.R2_SIGNIT_MOBILITY_INDICATOR); 713 modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1); 714 modifiers.add(Modifiers.V_EQUIP_TYPE); 715 modifiers.add(Modifiers.W1_DTG_2); 716 modifiers.add(Modifiers.Y_LOCATION); 717 modifiers.add(Modifiers.AD_PLATFORM_TYPE);//like equipment 718 modifiers.add(Modifiers.AE_EQUIPMENT_TEARDOWN_TIME);//like equipment 719 modifiers.add(Modifiers.AF_COMMON_IDENTIFIER);//like equipment 720 break;*/ 721 722 case SymbolID.SymbolSet_ControlMeasure: 723 //values come from files during MSLookup load 724 break; 725 case SymbolID.SymbolSet_Atmospheric: 726 //Tropopause low, Tropopause high 727 if ((ec.equals("110102")) || (ec.equals("110202")) || 728 (ec.equals("162200"))) 729 modifiers.add(Modifiers.X_ALTITUDE_DEPTH); 730 else if (ec.equals("140200")) 731 modifiers.add(Modifiers.AN_AZIMUTH); 732 break; 733 case SymbolID.SymbolSet_MineWarfare: 734 case SymbolID.SymbolSet_Oceanographic: 735 case SymbolID.SymbolSet_MeteorologicalSpace: 736 default://no modifiers 737 738 } 739 } 740 741 if(ss == SymbolID.SymbolSet_SignalsIntelligence_Air || 742 ss == SymbolID.SymbolSet_SignalsIntelligence_Land || 743 ss == SymbolID.SymbolSet_SignalsIntelligence_SeaSurface || 744 ss == SymbolID.SymbolSet_SignalsIntelligence_SeaSubsurface || 745 ss == SymbolID.SymbolSet_SignalsIntelligence_Space) 746 modifiers.add(Modifiers.R2_SIGNIT_MOBILITY_INDICATOR); 747 748 return modifiers; 749 } 750 751 /** 752 * 753 * @param symbolID Full 20-30 digits from the symbol code 754 * @return 755 */ 756 public MSInfo getMSLInfo(String symbolID) 757 { 758 int length = symbolID.length(); 759 760 if(length >= 20 && length <= 30) 761 { 762 int version = SymbolID.getVersion(symbolID); 763 return getMSLInfo(SymbolUtilities.getBasicSymbolID(symbolID), version); 764 } 765 else 766 return null; 767 } 768 769 /** 770 * 771 * @param basicID id SymbolSet + Entity code like 50110100 772 * @param version like SymbolID.Version_2525Dch1 773 * @return 774 */ 775 public MSInfo getMSLInfo(String basicID, int version) 776 { 777 int length = basicID.length(); 778 if(length == 8) 779 { 780 if(version >= SymbolID.Version_2525E) 781 { 782 if(_MSLookupE.containsKey(basicID)) 783 return _MSLookupE.get(basicID); 784 else 785 return null; 786 } 787 else if (version == SymbolID.Version_2525D && basicID.equals("25272100")) 788 { 789 // MSDZ can have extra point in D 790 return new MSInfo(SymbolID.Version_2525D, "25", 791 "Protection Areas", "Minimum Safe Distance Zone", "", 792 "272100", "Area", "Area14", new ArrayList<>()); 793 } 794 else 795 { 796 if(_MSLookupD.containsKey(basicID)) 797 return _MSLookupD.get(basicID); 798 else 799 return null; 800 } 801 } 802 else if(length >= 20 && length <= 30)//probably got a full id instead of a basic ID. 803 { 804 return getMSLInfo(SymbolUtilities.getBasicSymbolID(basicID), version); 805 } 806 else 807 return null; 808 } 809 810 /** 811 * returns a list of all the keys in the order they are listed in the MilStd 2525D document. 812 * @return 813 */ 814 public List<String> getIDList(int version) 815 { 816 if(version < SymbolID.Version_2525E) 817 return _IDListD; 818 else if(version >= SymbolID.Version_2525E) 819 return _IDListE; 820 else 821 return _IDListD; 822 } 823 824 /* 825 * For use only by MilStdIconRenderer.addCustomSymbol() 826 * @param msInfo 827 * @return 828 */ 829 public boolean addCustomSymbol(MSInfo msInfo) 830 { 831 boolean success = false; 832 try 833 { 834 int version = msInfo.getVersion(); 835 if (version < SymbolID.Version_2525E) 836 { 837 if(this._IDListD.indexOf(msInfo.getBasicSymbolID()) == -1) 838 { 839 this._IDListD.add(msInfo.getBasicSymbolID()); 840 MSLookup._MSLookupD.put(msInfo.getBasicSymbolID(), msInfo); 841 success = true; 842 } 843 else 844 ErrorLogger.LogMessage("Symbol Set and Entity Code combination already exist: " + msInfo.getBasicSymbolID(), Level.INFO,false); 845 } 846 else if (version >= SymbolID.Version_2525E) 847 { 848 if(this._IDListE.indexOf(msInfo.getBasicSymbolID()) == -1) 849 { 850 this._IDListE.add(msInfo.getBasicSymbolID()); 851 MSLookup._MSLookupE.put(msInfo.getBasicSymbolID(), msInfo); 852 success = true; 853 } 854 else 855 ErrorLogger.LogMessage("Symbol Set and Entity Code combination already exist: " + msInfo.getBasicSymbolID(), Level.INFO,false); 856 } 857 } 858 catch(Exception e) 859 { 860 ErrorLogger.LogException("MSLookup", "addCustomSymbol",e); 861 } 862 return success; 863 } 864}