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> _MSLookup6D = null;
027    private static Map<String, MSInfo> _MSLookupE = null;
028    private static Map<String, MSInfo> _MSLookup6E = null;
029    private String TAG = "MSLookup";
030    private List<String> _IDListD = null;
031    private List<String> _IDList6D = null;
032    private List<String> _IDListE = null;
033    private List<String> _IDList6E = null;
034
035
036    /*
037     * Holds SymbolDefs for all symbols. (basicSymbolID, Description, MinPoint, MaxPoints, etc...) Call
038     * getInstance().
039     *
040     */
041    private MSLookup() {
042        // init(null);
043        // _initCalled=true;
044    }
045
046    public static synchronized MSLookup getInstance() {
047        if (_instance == null) {
048            _instance = new MSLookup();
049        }
050
051        return _instance;
052    }
053
054    public final synchronized void init(Context context)
055    {
056        if (_initCalled == false)
057        {
058            _MSLookupD = new HashMap<>();
059            _MSLookup6D = new HashMap<>();
060            _MSLookupE = new HashMap<>();
061            _MSLookup6E = new HashMap<>();
062            _IDListD = new ArrayList<>();
063            _IDList6D = new ArrayList<>();
064            _IDListE = new ArrayList<>();
065            _IDList6E = new ArrayList<>();
066
067            try
068            {
069                InputStream isD = context.getResources().openRawResource(R.raw.msd);
070                InputStream isE = context.getResources().openRawResource(R.raw.mse);
071
072                BufferedReader brD = new BufferedReader(new InputStreamReader(isD));
073                populateLookup(brD, SymbolID.Version_2525Dch1);
074                brD.close();
075
076                BufferedReader brE = new BufferedReader(new InputStreamReader(isE));
077                populateLookup(brE, SymbolID.Version_2525E);
078                brE.close();
079
080                _initCalled = true;
081            }
082            catch (Exception e)
083            {
084                System.out.println(e.getMessage());
085            }
086        }
087    }
088
089    private void populateLookup(BufferedReader br, int version)
090    {
091        Map<String, MSInfo> lookup;
092        List<String> list;
093        String[] temp = null;
094        String delimiter = "\t";
095
096        try
097        {
098
099            String id = null;
100            String ss = null;
101            int intSS = 0;
102            String e = null;
103            String et = null;
104            String est = null;
105            String ec = null;
106            String ver = 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 < 6)
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                if (!temp[5].equals(""))
141                    ver = temp[5];
142
143                id = ss + ec;
144
145                intSS = Integer.parseInt(ss);
146                if(!ec.equals("000000"))
147                {
148                    if (temp.length >= 8)
149                    {//Control Measures and METOCS
150                        if(temp.length >= 9)
151                        {
152                            m = temp[8];//modifiers
153                            if(m != null && !m.equals(""))
154                                //m = m.replace("\"","");
155                                modifiers = m.split(",");
156                            else
157                                modifiers = null;
158                        }
159                        g = temp[6];//geometry
160                        dr = temp[7];//draw rule
161
162                        //multi points
163                        String[] verArr = ver.split(",");
164                        for(String v : verArr)
165                        {
166                            addToLookup(new MSInfo(Integer.parseInt(v), ss, e, et, est, ec, g, dr, populateModifierList(modifiers)));
167                        }
168                    }
169                    else
170                    {//Everything else
171                        //single points
172                        String[] verArr = ver.split(",");
173                        for(String v : verArr)
174                        {
175                            addToLookup(new MSInfo(Integer.parseInt(v), ss, e, et, est, ec, populateModifierList(ss, ec, Integer.parseInt(v))));
176                        }
177                    }
178                    addToList(ver, id);
179                }
180                else if(intSS != SymbolID.SymbolSet_ControlMeasure &&
181                        intSS != SymbolID.SymbolSet_Atmospheric &&
182                        intSS != SymbolID.SymbolSet_Oceanographic &&
183                        intSS != SymbolID.SymbolSet_MeteorologicalSpace)
184                {
185                    String[] verArr = ver.split(",");
186                    for(String v : verArr)
187                    {
188                        addToLookup(new MSInfo(Integer.parseInt(v), ss, e, et, est, ec, populateModifierList(ss, ec, Integer.parseInt(v))));
189                    }
190                    addToList(ver, id);
191                }
192
193                modifiers = null;
194
195                //read next line for next loop
196                line = br.readLine();
197            }
198        }
199        catch(Exception exc)
200        {
201            System.out.println(exc.getMessage());
202        }
203
204    }
205
206    private void addToLookup(MSInfo msi)
207    {
208        int version = msi.getVersion();
209        if(version==SymbolID.Version_2525Dch1)
210            _MSLookupD.put(msi.getBasicSymbolID(), msi);
211        if(version==SymbolID.Version_APP6D)
212            _MSLookup6D.put(msi.getBasicSymbolID(), msi);
213        if(version==SymbolID.Version_2525Ech1)
214            _MSLookupE.put(msi.getBasicSymbolID(), msi);
215        if(version==SymbolID.Version_APP6Ech2)
216            _MSLookup6E.put(msi.getBasicSymbolID(), msi);
217    }
218
219    private boolean addCustomToLookupAndList(MSInfo msi)
220    {
221        boolean success = false;
222        int version = msi.getVersion();
223        if(version==SymbolID.Version_2525Dch1) {
224            if(!_MSLookupD.containsKey(msi.getBasicSymbolID())) {
225                _MSLookupD.put(msi.getBasicSymbolID(), msi);
226                _IDListD.add(msi.getBasicSymbolID());
227                success = true;
228            }
229        }
230        if(version==SymbolID.Version_APP6D){
231            if (!_MSLookup6D.containsKey(msi.getBasicSymbolID())) {
232                _MSLookup6D.put(msi.getBasicSymbolID(), msi);
233                _IDList6D.add(msi.getBasicSymbolID());
234                success = true;
235            }
236        }
237        if(version==SymbolID.Version_2525Ech1){
238            if(!_MSLookupE.containsKey(msi.getBasicSymbolID())) {
239                _MSLookupE.put(msi.getBasicSymbolID(), msi);
240                _IDListE.add(msi.getBasicSymbolID());
241                success = true;
242            }
243        }
244        if(version==SymbolID.Version_APP6Ech2) {
245            if(!_MSLookup6E.containsKey(msi.getBasicSymbolID())) {
246                _MSLookup6E.put(msi.getBasicSymbolID(), msi);
247                _IDList6E.add(msi.getBasicSymbolID());
248                success = true;
249            }
250        }
251        return success;
252    }
253
254    private void addToList(String versions, String basicSymbolID)
255    {
256        if(versions.contains(String.valueOf(SymbolID.Version_2525Dch1)))
257            _IDListD.add(basicSymbolID);
258        if(versions.contains(String.valueOf(SymbolID.Version_APP6D)))
259            _IDList6D.add(basicSymbolID);
260        if(versions.contains(String.valueOf(SymbolID.Version_2525Ech1)))
261            _IDListE.add(basicSymbolID);
262        if(versions.contains(String.valueOf(SymbolID.Version_APP6Ech2)))
263            _IDList6E.add(basicSymbolID);
264    }
265
266    private ArrayList<String> populateModifierList(String[] modifiers)
267    {
268        ArrayList<String> mods = new ArrayList<String>();
269        if(modifiers != null && modifiers.length > 0)
270        {
271            for (String mod : modifiers)
272            {
273                mods.add(Modifiers.getModifierKey(mod));
274            }
275        }
276        return mods;
277    }
278
279    private ArrayList<String> populateModifierList(String symbolSet, String ec, int version)
280    {
281        int ss = Integer.valueOf(symbolSet);
282        ArrayList<String> modifiers = new ArrayList<String>();
283
284        if(version >= SymbolID.Version_2525E)
285        {
286            switch (ss) {
287                case SymbolID.SymbolSet_LandUnit:
288                case SymbolID.SymbolSet_LandCivilianUnit_Organization:
289                    modifiers.add(Modifiers.A_SYMBOL_ICON);
290                    modifiers.add(Modifiers.B_ECHELON);
291                    modifiers.add(Modifiers.C_QUANTITY);
292                    modifiers.add(Modifiers.D_TASK_FORCE_INDICATOR);
293                    modifiers.add(Modifiers.F_REINFORCED_REDUCED);
294                    modifiers.add(Modifiers.G_STAFF_COMMENTS);
295                    modifiers.add(Modifiers.H_ADDITIONAL_INFO_1);
296                    modifiers.add(Modifiers.J_EVALUATION_RATING);
297                    modifiers.add(Modifiers.K_COMBAT_EFFECTIVENESS);
298                    modifiers.add(Modifiers.L_SIGNATURE_EQUIP);
299                    modifiers.add(Modifiers.M_HIGHER_FORMATION);
300                    modifiers.add(Modifiers.P_IFF_SIF_AIS);
301                    modifiers.add(Modifiers.Q_DIRECTION_OF_MOVEMENT);
302                    modifiers.add(Modifiers.S_HQ_STAFF_INDICATOR);
303                    modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1);
304                    modifiers.add(Modifiers.W_DTG_1);
305                    modifiers.add(Modifiers.X_ALTITUDE_DEPTH);
306                    modifiers.add(Modifiers.Y_LOCATION);
307                    modifiers.add(Modifiers.Z_SPEED);
308                    if(ss==SymbolID.SymbolSet_LandUnit && ec.equals("110000"))
309                        modifiers.add(Modifiers.AA_SPECIAL_C2_HQ);
310                    modifiers.add(Modifiers.AB_FEINT_DUMMY_INDICATOR);
311                    modifiers.add(Modifiers.AD_PLATFORM_TYPE);
312                    modifiers.add(Modifiers.AE_EQUIPMENT_TEARDOWN_TIME);
313                    modifiers.add(Modifiers.AF_COMMON_IDENTIFIER);
314                    modifiers.add(Modifiers.AH_AREA_OF_UNCERTAINTY);
315                    modifiers.add(Modifiers.AI_DEAD_RECKONING_TRAILER);
316                    modifiers.add(Modifiers.AK_PAIRING_LINE);
317                    modifiers.add(Modifiers.AL_OPERATIONAL_CONDITION);
318                    modifiers.add(Modifiers.AO_ENGAGEMENT_BAR);
319                    modifiers.add(Modifiers.AQ_GUARDED_UNIT);
320                    modifiers.add(Modifiers.AS_COUNTRY);
321                    break;
322                case SymbolID.SymbolSet_LandEquipment:
323                case SymbolID.SymbolSet_SignalsIntelligence_Land:
324                    modifiers.add(Modifiers.A_SYMBOL_ICON);
325                    modifiers.add(Modifiers.C_QUANTITY);
326                    modifiers.add(Modifiers.G_STAFF_COMMENTS);
327                    modifiers.add(Modifiers.H_ADDITIONAL_INFO_1);
328                    modifiers.add(Modifiers.J_EVALUATION_RATING);
329                    modifiers.add(Modifiers.K_COMBAT_EFFECTIVENESS);
330                    modifiers.add(Modifiers.L_SIGNATURE_EQUIP);
331                    modifiers.add(Modifiers.N_HOSTILE);
332                    modifiers.add(Modifiers.P_IFF_SIF_AIS);
333                    modifiers.add(Modifiers.Q_DIRECTION_OF_MOVEMENT);
334                    modifiers.add(Modifiers.R_MOBILITY_INDICATOR);
335                    modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1);
336                    modifiers.add(Modifiers.V_EQUIP_TYPE);
337                    modifiers.add(Modifiers.W_DTG_1);
338                    modifiers.add(Modifiers.X_ALTITUDE_DEPTH);
339                    modifiers.add(Modifiers.Y_LOCATION);
340                    modifiers.add(Modifiers.Z_SPEED);
341                    modifiers.add(Modifiers.AB_FEINT_DUMMY_INDICATOR);
342                    modifiers.add(Modifiers.AD_PLATFORM_TYPE);
343                    modifiers.add(Modifiers.AE_EQUIPMENT_TEARDOWN_TIME);
344                    modifiers.add(Modifiers.AF_COMMON_IDENTIFIER);
345                    modifiers.add(Modifiers.AG_AUX_EQUIP_INDICATOR);
346                    modifiers.add(Modifiers.AH_AREA_OF_UNCERTAINTY);
347                    modifiers.add(Modifiers.AI_DEAD_RECKONING_TRAILER);
348                    modifiers.add(Modifiers.AK_PAIRING_LINE);
349                    modifiers.add(Modifiers.AL_OPERATIONAL_CONDITION);
350                    modifiers.add(Modifiers.AO_ENGAGEMENT_BAR);
351                    modifiers.add(Modifiers.AQ_GUARDED_UNIT);
352                    modifiers.add(Modifiers.AS_COUNTRY);
353                    break;
354                case SymbolID.SymbolSet_LandInstallation:
355                    modifiers.add(Modifiers.A_SYMBOL_ICON);
356                    modifiers.add(Modifiers.C_QUANTITY);
357                    modifiers.add(Modifiers.G_STAFF_COMMENTS);
358                    modifiers.add(Modifiers.H_ADDITIONAL_INFO_1);
359                    modifiers.add(Modifiers.J_EVALUATION_RATING);
360                    modifiers.add(Modifiers.K_COMBAT_EFFECTIVENESS);
361                    modifiers.add(Modifiers.P_IFF_SIF_AIS);
362                    modifiers.add(Modifiers.S_HQ_STAFF_INDICATOR);
363                    modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1);
364                    modifiers.add(Modifiers.W_DTG_1);
365                    modifiers.add(Modifiers.X_ALTITUDE_DEPTH);
366                    modifiers.add(Modifiers.Y_LOCATION);
367                    modifiers.add(Modifiers.AB_FEINT_DUMMY_INDICATOR);
368                    modifiers.add(Modifiers.AE_EQUIPMENT_TEARDOWN_TIME);
369                    modifiers.add(Modifiers.AH_AREA_OF_UNCERTAINTY);
370                    modifiers.add(Modifiers.AI_DEAD_RECKONING_TRAILER);
371                    modifiers.add(Modifiers.AK_PAIRING_LINE);
372                    modifiers.add(Modifiers.AL_OPERATIONAL_CONDITION);
373                    //modifiers.add(Modifiers.AO_ENGAGEMENT_BAR);
374                    modifiers.add(Modifiers.AQ_GUARDED_UNIT);
375                    modifiers.add(Modifiers.AS_COUNTRY);
376                    break;
377                case SymbolID.SymbolSet_DismountedIndividuals:
378                    modifiers.add(Modifiers.A_SYMBOL_ICON);
379                    modifiers.add(Modifiers.G_STAFF_COMMENTS);
380                    modifiers.add(Modifiers.H_ADDITIONAL_INFO_1);
381                    modifiers.add(Modifiers.J_EVALUATION_RATING);
382                    modifiers.add(Modifiers.K_COMBAT_EFFECTIVENESS);
383                    modifiers.add(Modifiers.M_HIGHER_FORMATION);
384                    modifiers.add(Modifiers.Q_DIRECTION_OF_MOVEMENT);
385                    modifiers.add(Modifiers.P_IFF_SIF_AIS);
386                    modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1);
387                    modifiers.add(Modifiers.V_EQUIP_TYPE);
388                    modifiers.add(Modifiers.W_DTG_1);
389                    modifiers.add(Modifiers.X_ALTITUDE_DEPTH);
390                    modifiers.add(Modifiers.Y_LOCATION);
391                    modifiers.add(Modifiers.AB_FEINT_DUMMY_INDICATOR);
392                    modifiers.add(Modifiers.AF_COMMON_IDENTIFIER);
393                    modifiers.add(Modifiers.AS_COUNTRY);
394                    modifiers.add(Modifiers.AV_LEADERSHIP);
395                    break;
396                case SymbolID.SymbolSet_Space:
397                case SymbolID.SymbolSet_SpaceMissile:
398                case SymbolID.SymbolSet_Air:
399                case SymbolID.SymbolSet_AirMissile:
400                    modifiers.add(Modifiers.A_SYMBOL_ICON);
401                    modifiers.add(Modifiers.B_ECHELON);
402                    modifiers.add(Modifiers.C_QUANTITY);
403                    modifiers.add(Modifiers.G_STAFF_COMMENTS);
404                    modifiers.add(Modifiers.H_ADDITIONAL_INFO_1);
405                    modifiers.add(Modifiers.J_EVALUATION_RATING);
406                    modifiers.add(Modifiers.P_IFF_SIF_AIS);
407                    //modifiers.add(Modifiers.Q_DIRECTION_OF_MOVEMENT);
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.X_ALTITUDE_DEPTH);
412                    modifiers.add(Modifiers.Y_LOCATION);
413                    modifiers.add(Modifiers.Z_SPEED);
414                    modifiers.add(Modifiers.AB_FEINT_DUMMY_INDICATOR);
415                    modifiers.add(Modifiers.AD_PLATFORM_TYPE);
416                    modifiers.add(Modifiers.AF_COMMON_IDENTIFIER);
417                    modifiers.add(Modifiers.AJ_SPEED_LEADER);
418                    modifiers.add(Modifiers.AL_OPERATIONAL_CONDITION);
419                    modifiers.add(Modifiers.AO_ENGAGEMENT_BAR);
420                    modifiers.add(Modifiers.AR_SPECIAL_DESIGNATOR);
421                    modifiers.add(Modifiers.AS_COUNTRY);
422                    break;
423                case SymbolID.SymbolSet_SeaSurface:
424                    modifiers.add(Modifiers.A_SYMBOL_ICON);
425                    modifiers.add(Modifiers.G_STAFF_COMMENTS);
426                    modifiers.add(Modifiers.H_ADDITIONAL_INFO_1);
427                    modifiers.add(Modifiers.P_IFF_SIF_AIS);
428                    //modifiers.add(Modifiers.Q_DIRECTION_OF_MOVEMENT);
429                    modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1);
430                    modifiers.add(Modifiers.V_EQUIP_TYPE);
431                    modifiers.add(Modifiers.Y_LOCATION);
432                    modifiers.add(Modifiers.Z_SPEED);
433                    modifiers.add(Modifiers.AB_FEINT_DUMMY_INDICATOR);
434                    modifiers.add(Modifiers.AG_AUX_EQUIP_INDICATOR);
435                    modifiers.add(Modifiers.AJ_SPEED_LEADER);
436                    modifiers.add(Modifiers.AL_OPERATIONAL_CONDITION);
437                    modifiers.add(Modifiers.AO_ENGAGEMENT_BAR);
438                    modifiers.add(Modifiers.AQ_GUARDED_UNIT);
439                    modifiers.add(Modifiers.AR_SPECIAL_DESIGNATOR);
440                    modifiers.add(Modifiers.AS_COUNTRY);
441                    break;
442                case SymbolID.SymbolSet_SeaSubsurface:
443                    modifiers.add(Modifiers.A_SYMBOL_ICON);
444                    modifiers.add(Modifiers.G_STAFF_COMMENTS);
445                    modifiers.add(Modifiers.H_ADDITIONAL_INFO_1);
446                    modifiers.add(Modifiers.P_IFF_SIF_AIS);
447                    //modifiers.add(Modifiers.Q_DIRECTION_OF_MOVEMENT);
448                    modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1);
449                    modifiers.add(Modifiers.V_EQUIP_TYPE);
450                    modifiers.add(Modifiers.X_ALTITUDE_DEPTH);
451                    modifiers.add(Modifiers.Y_LOCATION);
452                    modifiers.add(Modifiers.Z_SPEED);
453                    modifiers.add(Modifiers.AB_FEINT_DUMMY_INDICATOR);
454                    modifiers.add(Modifiers.AJ_SPEED_LEADER);
455                    modifiers.add(Modifiers.AL_OPERATIONAL_CONDITION);
456                    modifiers.add(Modifiers.AO_ENGAGEMENT_BAR);
457                    modifiers.add(Modifiers.AQ_GUARDED_UNIT);
458                    modifiers.add(Modifiers.AR_SPECIAL_DESIGNATOR);
459                    modifiers.add(Modifiers.AS_COUNTRY);
460                    break;
461                case SymbolID.SymbolSet_Activities:
462                    modifiers.add(Modifiers.A_SYMBOL_ICON);
463                    modifiers.add(Modifiers.C_QUANTITY);
464                    modifiers.add(Modifiers.G_STAFF_COMMENTS);
465                    modifiers.add(Modifiers.H_ADDITIONAL_INFO_1);
466                    modifiers.add(Modifiers.J_EVALUATION_RATING);
467                    modifiers.add(Modifiers.Q_DIRECTION_OF_MOVEMENT);
468                    modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1);
469                    modifiers.add(Modifiers.W_DTG_1);
470                    modifiers.add(Modifiers.Y_LOCATION);
471                    modifiers.add(Modifiers.AB_FEINT_DUMMY_INDICATOR);
472                    modifiers.add(Modifiers.AS_COUNTRY);
473                    break;
474                case SymbolID.SymbolSet_CyberSpace:
475                    modifiers.add(Modifiers.A_SYMBOL_ICON);
476                    modifiers.add(Modifiers.B_ECHELON);
477                    modifiers.add(Modifiers.F_REINFORCED_REDUCED);
478                    modifiers.add(Modifiers.G_STAFF_COMMENTS);
479                    modifiers.add(Modifiers.H_ADDITIONAL_INFO_1);
480                    modifiers.add(Modifiers.K_COMBAT_EFFECTIVENESS);
481                    modifiers.add(Modifiers.L_SIGNATURE_EQUIP);
482                    modifiers.add(Modifiers.M_HIGHER_FORMATION);
483                    modifiers.add(Modifiers.S_HQ_STAFF_INDICATOR);
484                    modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1);
485                    modifiers.add(Modifiers.V_EQUIP_TYPE);
486                    modifiers.add(Modifiers.W_DTG_1);
487                    modifiers.add(Modifiers.Y_LOCATION);
488                    modifiers.add(Modifiers.AS_COUNTRY);
489                    break;
490            /*case SymbolID.SymbolSet_SignalsIntelligence_Air:
491            case SymbolID.SymbolSet_SignalsIntelligence_Land:
492            case SymbolID.SymbolSet_SignalsIntelligence_SeaSurface:
493            case SymbolID.SymbolSet_SignalsIntelligence_SeaSubsurface:
494            case SymbolID.SymbolSet_SignalsIntelligence_Space:
495                modifiers.add(Modifiers.A_SYMBOL_ICON);
496                modifiers.add(Modifiers.D_TASK_FORCE_INDICATOR);
497                modifiers.add(Modifiers.G_STAFF_COMMENTS);
498                modifiers.add(Modifiers.H_ADDITIONAL_INFO_1);
499                modifiers.add(Modifiers.J_EVALUATION_RATING);
500                modifiers.add(Modifiers.M_HIGHER_FORMATION);
501                modifiers.add(Modifiers.R2_SIGNIT_MOBILITY_INDICATOR);
502                modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1);
503                modifiers.add(Modifiers.V_EQUIP_TYPE);
504                modifiers.add(Modifiers.W1_DTG_2);
505                modifiers.add(Modifiers.Y_LOCATION);
506                modifiers.add(Modifiers.AD_PLATFORM_TYPE);//like equipment
507                modifiers.add(Modifiers.AE_EQUIPMENT_TEARDOWN_TIME);//like equipment
508                modifiers.add(Modifiers.AF_COMMON_IDENTIFIER);//like equipment
509                break;*/
510
511                case SymbolID.SymbolSet_ControlMeasure:
512                    //values come from files during MSLookup load
513                    break;
514                case SymbolID.SymbolSet_Atmospheric:
515                    //Tropopause low, Tropopause high
516                    if ((ec.equals("110102")) || (ec.equals("110202")) ||
517                            (ec.equals("162200")))
518                        modifiers.add(Modifiers.X_ALTITUDE_DEPTH);
519                    else if (ec.equals("140200"))
520                        modifiers.add(Modifiers.AN_AZIMUTH);
521                    break;
522                case SymbolID.SymbolSet_MineWarfare:
523                case SymbolID.SymbolSet_Oceanographic:
524                case SymbolID.SymbolSet_MeteorologicalSpace:
525                default://no modifiers
526
527            }
528        }
529        else if(version == SymbolID.Version_2525Dch1)
530        {
531            switch (ss) {
532                case SymbolID.SymbolSet_LandUnit:
533                case SymbolID.SymbolSet_LandCivilianUnit_Organization:
534                    modifiers.add(Modifiers.A_SYMBOL_ICON);
535                    modifiers.add(Modifiers.B_ECHELON);
536                    modifiers.add(Modifiers.D_TASK_FORCE_INDICATOR);
537                    modifiers.add(Modifiers.F_REINFORCED_REDUCED);
538                    modifiers.add(Modifiers.G_STAFF_COMMENTS);
539                    modifiers.add(Modifiers.H_ADDITIONAL_INFO_1);
540                    modifiers.add(Modifiers.J_EVALUATION_RATING);
541                    modifiers.add(Modifiers.K_COMBAT_EFFECTIVENESS);
542                    modifiers.add(Modifiers.M_HIGHER_FORMATION);
543                    modifiers.add(Modifiers.P_IFF_SIF_AIS);
544                    modifiers.add(Modifiers.Q_DIRECTION_OF_MOVEMENT);
545                    modifiers.add(Modifiers.S_HQ_STAFF_INDICATOR);
546                    modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1);
547                    modifiers.add(Modifiers.W_DTG_1);
548                    modifiers.add(Modifiers.X_ALTITUDE_DEPTH);
549                    modifiers.add(Modifiers.Y_LOCATION);
550                    modifiers.add(Modifiers.Z_SPEED);
551                    if(ss==SymbolID.SymbolSet_LandUnit && ec.equals("110000"))
552                        modifiers.add(Modifiers.AA_SPECIAL_C2_HQ);
553                    modifiers.add(Modifiers.AB_FEINT_DUMMY_INDICATOR);
554                    modifiers.add(Modifiers.AH_AREA_OF_UNCERTAINTY);
555                    modifiers.add(Modifiers.AI_DEAD_RECKONING_TRAILER);
556                    modifiers.add(Modifiers.AK_PAIRING_LINE);
557                    modifiers.add(Modifiers.AL_OPERATIONAL_CONDITION);
558                    modifiers.add(Modifiers.AO_ENGAGEMENT_BAR);
559                    modifiers.add(Modifiers.AS_COUNTRY);
560                    break;
561                case SymbolID.SymbolSet_LandEquipment:
562                case SymbolID.SymbolSet_SignalsIntelligence_Land:
563                    modifiers.add(Modifiers.A_SYMBOL_ICON);
564                    modifiers.add(Modifiers.C_QUANTITY);
565                    modifiers.add(Modifiers.G_STAFF_COMMENTS);
566                    modifiers.add(Modifiers.H_ADDITIONAL_INFO_1);
567                    modifiers.add(Modifiers.J_EVALUATION_RATING);
568                    modifiers.add(Modifiers.L_SIGNATURE_EQUIP);
569                    modifiers.add(Modifiers.N_HOSTILE);
570                    modifiers.add(Modifiers.P_IFF_SIF_AIS);
571                    modifiers.add(Modifiers.Q_DIRECTION_OF_MOVEMENT);
572                    modifiers.add(Modifiers.R_MOBILITY_INDICATOR);
573                    modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1);
574                    modifiers.add(Modifiers.V_EQUIP_TYPE);
575                    modifiers.add(Modifiers.W_DTG_1);
576                    modifiers.add(Modifiers.X_ALTITUDE_DEPTH);
577                    modifiers.add(Modifiers.Y_LOCATION);
578                    modifiers.add(Modifiers.Z_SPEED);
579                    modifiers.add(Modifiers.AB_FEINT_DUMMY_INDICATOR);
580                    modifiers.add(Modifiers.AD_PLATFORM_TYPE);
581                    modifiers.add(Modifiers.AE_EQUIPMENT_TEARDOWN_TIME);
582                    modifiers.add(Modifiers.AF_COMMON_IDENTIFIER);
583                    modifiers.add(Modifiers.AG_AUX_EQUIP_INDICATOR);
584                    modifiers.add(Modifiers.AH_AREA_OF_UNCERTAINTY);
585                    modifiers.add(Modifiers.AI_DEAD_RECKONING_TRAILER);
586                    modifiers.add(Modifiers.AK_PAIRING_LINE);
587                    modifiers.add(Modifiers.AL_OPERATIONAL_CONDITION);
588                    modifiers.add(Modifiers.AO_ENGAGEMENT_BAR);
589                    modifiers.add(Modifiers.AQ_GUARDED_UNIT);
590                    modifiers.add(Modifiers.AR_SPECIAL_DESIGNATOR);
591                    modifiers.add(Modifiers.AS_COUNTRY);
592                    break;
593                case SymbolID.SymbolSet_LandInstallation:
594                    modifiers.add(Modifiers.A_SYMBOL_ICON);
595                    modifiers.add(Modifiers.G_STAFF_COMMENTS);
596                    modifiers.add(Modifiers.H_ADDITIONAL_INFO_1);
597                    modifiers.add(Modifiers.J_EVALUATION_RATING);
598                    modifiers.add(Modifiers.K_COMBAT_EFFECTIVENESS);
599                    modifiers.add(Modifiers.P_IFF_SIF_AIS);
600                    modifiers.add(Modifiers.S_HQ_STAFF_INDICATOR);
601                    modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1);
602                    modifiers.add(Modifiers.W_DTG_1);
603                    modifiers.add(Modifiers.X_ALTITUDE_DEPTH);
604                    modifiers.add(Modifiers.Y_LOCATION);
605                    modifiers.add(Modifiers.AB_FEINT_DUMMY_INDICATOR);
606                    modifiers.add(Modifiers.AH_AREA_OF_UNCERTAINTY);
607                    modifiers.add(Modifiers.AI_DEAD_RECKONING_TRAILER);
608                    modifiers.add(Modifiers.AK_PAIRING_LINE);
609                    modifiers.add(Modifiers.AL_OPERATIONAL_CONDITION);
610                    modifiers.add(Modifiers.AO_ENGAGEMENT_BAR);
611                    modifiers.add(Modifiers.AS_COUNTRY);
612                    break;
613                case SymbolID.SymbolSet_Space:
614                case SymbolID.SymbolSet_SpaceMissile:
615                case SymbolID.SymbolSet_SignalsIntelligence_Space:
616                    modifiers.add(Modifiers.A_SYMBOL_ICON);
617                    modifiers.add(Modifiers.G_STAFF_COMMENTS);
618                    modifiers.add(Modifiers.H_ADDITIONAL_INFO_1);
619                    modifiers.add(Modifiers.Q_DIRECTION_OF_MOVEMENT);
620                    modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1);
621                    modifiers.add(Modifiers.V_EQUIP_TYPE);
622                    modifiers.add(Modifiers.X_ALTITUDE_DEPTH);
623                    modifiers.add(Modifiers.Z_SPEED);
624                    modifiers.add(Modifiers.AB_FEINT_DUMMY_INDICATOR);
625                    modifiers.add(Modifiers.AJ_SPEED_LEADER);
626                    modifiers.add(Modifiers.AL_OPERATIONAL_CONDITION);
627                    modifiers.add(Modifiers.AO_ENGAGEMENT_BAR);
628                    modifiers.add(Modifiers.AS_COUNTRY);
629                    break;
630                case SymbolID.SymbolSet_Air:
631                case SymbolID.SymbolSet_AirMissile:
632                case SymbolID.SymbolSet_SignalsIntelligence_Air:
633                    modifiers.add(Modifiers.A_SYMBOL_ICON);
634                    modifiers.add(Modifiers.G_STAFF_COMMENTS);
635                    modifiers.add(Modifiers.H_ADDITIONAL_INFO_1);
636                    modifiers.add(Modifiers.P_IFF_SIF_AIS);//air only
637                    modifiers.add(Modifiers.Q_DIRECTION_OF_MOVEMENT);
638                    modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1);
639                    modifiers.add(Modifiers.V_EQUIP_TYPE);
640                    modifiers.add(Modifiers.X_ALTITUDE_DEPTH);
641                    modifiers.add(Modifiers.Z_SPEED);
642                    modifiers.add(Modifiers.AB_FEINT_DUMMY_INDICATOR);
643                    modifiers.add(Modifiers.AJ_SPEED_LEADER);
644                    modifiers.add(Modifiers.AL_OPERATIONAL_CONDITION);
645                    modifiers.add(Modifiers.AO_ENGAGEMENT_BAR);
646                    modifiers.add(Modifiers.AS_COUNTRY);
647                    break;
648                case SymbolID.SymbolSet_SeaSurface:
649                case SymbolID.SymbolSet_SignalsIntelligence_SeaSurface:
650                    modifiers.add(Modifiers.A_SYMBOL_ICON);
651                    modifiers.add(Modifiers.G_STAFF_COMMENTS);
652                    modifiers.add(Modifiers.H_ADDITIONAL_INFO_1);
653                    modifiers.add(Modifiers.P_IFF_SIF_AIS);
654                    modifiers.add(Modifiers.Q_DIRECTION_OF_MOVEMENT);
655                    modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1);
656                    modifiers.add(Modifiers.V_EQUIP_TYPE);
657                    modifiers.add(Modifiers.Y_LOCATION);
658                    modifiers.add(Modifiers.Z_SPEED);
659                    modifiers.add(Modifiers.AB_FEINT_DUMMY_INDICATOR);
660                    modifiers.add(Modifiers.AJ_SPEED_LEADER);
661                    modifiers.add(Modifiers.AL_OPERATIONAL_CONDITION);
662                    modifiers.add(Modifiers.AO_ENGAGEMENT_BAR);
663                    modifiers.add(Modifiers.AQ_GUARDED_UNIT);
664                    modifiers.add(Modifiers.AR_SPECIAL_DESIGNATOR);
665                    modifiers.add(Modifiers.AS_COUNTRY);
666                    break;
667                case SymbolID.SymbolSet_SeaSubsurface:
668                case SymbolID.SymbolSet_SignalsIntelligence_SeaSubsurface:
669                    modifiers.add(Modifiers.A_SYMBOL_ICON);
670                    modifiers.add(Modifiers.AG_AUX_EQUIP_INDICATOR);
671                    modifiers.add(Modifiers.AL_OPERATIONAL_CONDITION);
672                    modifiers.add(Modifiers.AO_ENGAGEMENT_BAR);
673                    modifiers.add(Modifiers.AR_SPECIAL_DESIGNATOR);
674                    modifiers.add(Modifiers.G_STAFF_COMMENTS);
675                    modifiers.add(Modifiers.H_ADDITIONAL_INFO_1);
676                    modifiers.add(Modifiers.Q_DIRECTION_OF_MOVEMENT);
677                    modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1);
678                    modifiers.add(Modifiers.V_EQUIP_TYPE);
679                    modifiers.add(Modifiers.X_ALTITUDE_DEPTH);
680                    modifiers.add(Modifiers.AB_FEINT_DUMMY_INDICATOR);
681                    modifiers.add(Modifiers.AJ_SPEED_LEADER);
682                    modifiers.add(Modifiers.AS_COUNTRY);
683                    break;
684                case SymbolID.SymbolSet_Activities:
685                    modifiers.add(Modifiers.A_SYMBOL_ICON);
686                    modifiers.add(Modifiers.G_STAFF_COMMENTS);
687                    modifiers.add(Modifiers.H_ADDITIONAL_INFO_1);
688                    modifiers.add(Modifiers.J_EVALUATION_RATING);
689                    modifiers.add(Modifiers.Q_DIRECTION_OF_MOVEMENT);
690                    modifiers.add(Modifiers.W_DTG_1);
691                    modifiers.add(Modifiers.Y_LOCATION);
692                    modifiers.add(Modifiers.AB_FEINT_DUMMY_INDICATOR);
693                    modifiers.add(Modifiers.AS_COUNTRY);
694                    break;
695                case SymbolID.SymbolSet_CyberSpace:
696                    modifiers.add(Modifiers.A_SYMBOL_ICON);
697                    modifiers.add(Modifiers.B_ECHELON);
698                    modifiers.add(Modifiers.D_TASK_FORCE_INDICATOR);
699                    modifiers.add(Modifiers.F_REINFORCED_REDUCED);
700                    modifiers.add(Modifiers.G_STAFF_COMMENTS);
701                    modifiers.add(Modifiers.H_ADDITIONAL_INFO_1);
702                    modifiers.add(Modifiers.K_COMBAT_EFFECTIVENESS);
703                    modifiers.add(Modifiers.L_SIGNATURE_EQUIP);
704                    modifiers.add(Modifiers.M_HIGHER_FORMATION);
705                    modifiers.add(Modifiers.S_HQ_STAFF_INDICATOR);
706                    modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1);
707                    modifiers.add(Modifiers.V_EQUIP_TYPE);
708                    modifiers.add(Modifiers.W_DTG_1);
709                    modifiers.add(Modifiers.Y_LOCATION);
710                    modifiers.add(Modifiers.AO_ENGAGEMENT_BAR);
711                    modifiers.add(Modifiers.AS_COUNTRY);
712                    break;
713            /*case SymbolID.SymbolSet_SignalsIntelligence_Air:
714            case SymbolID.SymbolSet_SignalsIntelligence_Land:
715            case SymbolID.SymbolSet_SignalsIntelligence_SeaSurface:
716            case SymbolID.SymbolSet_SignalsIntelligence_SeaSubsurface:
717            case SymbolID.SymbolSet_SignalsIntelligence_Space:
718                modifiers.add(Modifiers.A_SYMBOL_ICON);
719                modifiers.add(Modifiers.D_TASK_FORCE_INDICATOR);
720                modifiers.add(Modifiers.G_STAFF_COMMENTS);
721                modifiers.add(Modifiers.H_ADDITIONAL_INFO_1);
722                modifiers.add(Modifiers.J_EVALUATION_RATING);
723                modifiers.add(Modifiers.M_HIGHER_FORMATION);
724                modifiers.add(Modifiers.R2_SIGNIT_MOBILITY_INDICATOR);
725                modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1);
726                modifiers.add(Modifiers.V_EQUIP_TYPE);
727                modifiers.add(Modifiers.W1_DTG_2);
728                modifiers.add(Modifiers.Y_LOCATION);
729                modifiers.add(Modifiers.AD_PLATFORM_TYPE);//like equipment
730                modifiers.add(Modifiers.AE_EQUIPMENT_TEARDOWN_TIME);//like equipment
731                modifiers.add(Modifiers.AF_COMMON_IDENTIFIER);//like equipment
732                break;*/
733
734                case SymbolID.SymbolSet_ControlMeasure:
735                    //values come from files during MSLookup load
736                    break;
737                case SymbolID.SymbolSet_Atmospheric:
738                    //Tropopause low, Tropopause high
739                    if ((ec.equals("110102")) || (ec.equals("110202")) ||
740                            (ec.equals("162200")))
741                        modifiers.add(Modifiers.X_ALTITUDE_DEPTH);
742                    else if (ec.equals("140200"))
743                        modifiers.add(Modifiers.AN_AZIMUTH);
744                    break;
745                case SymbolID.SymbolSet_MineWarfare:
746                case SymbolID.SymbolSet_Oceanographic:
747                case SymbolID.SymbolSet_MeteorologicalSpace:
748                default://no modifiers
749
750            }
751        }
752        else if(version == SymbolID.Version_APP6D)
753        {
754            switch (ss) {
755                case SymbolID.SymbolSet_LandUnit:
756                case SymbolID.SymbolSet_LandCivilianUnit_Organization:
757                    modifiers.add(Modifiers.A_SYMBOL_ICON);
758                    modifiers.add(Modifiers.B_ECHELON);
759                    modifiers.add(Modifiers.C_QUANTITY);
760                    modifiers.add(Modifiers.D_TASK_FORCE_INDICATOR);
761                    modifiers.add(Modifiers.F_REINFORCED_REDUCED);
762                    modifiers.add(Modifiers.G_STAFF_COMMENTS);
763                    modifiers.add(Modifiers.H_ADDITIONAL_INFO_1);
764                    modifiers.add(Modifiers.J_EVALUATION_RATING);
765                    modifiers.add(Modifiers.K_COMBAT_EFFECTIVENESS);
766                    modifiers.add(Modifiers.L_SIGNATURE_EQUIP);
767                    modifiers.add(Modifiers.M_HIGHER_FORMATION);
768                    modifiers.add(Modifiers.P_IFF_SIF_AIS);
769                    modifiers.add(Modifiers.Q_DIRECTION_OF_MOVEMENT);
770                    modifiers.add(Modifiers.S_HQ_STAFF_INDICATOR);
771                    modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1);
772                    modifiers.add(Modifiers.W_DTG_1);
773                    modifiers.add(Modifiers.X_ALTITUDE_DEPTH);
774                    modifiers.add(Modifiers.Y_LOCATION);
775                    modifiers.add(Modifiers.Z_SPEED);
776                    if(ss==SymbolID.SymbolSet_LandUnit && ec.equals("110000"))
777                        modifiers.add(Modifiers.AA_SPECIAL_C2_HQ);
778                    modifiers.add(Modifiers.AB_FEINT_DUMMY_INDICATOR);
779                    modifiers.add(Modifiers.AD_PLATFORM_TYPE);
780                    modifiers.add(Modifiers.AE_EQUIPMENT_TEARDOWN_TIME);
781                    modifiers.add(Modifiers.AF_COMMON_IDENTIFIER);
782                    modifiers.add(Modifiers.AH_AREA_OF_UNCERTAINTY);
783                    modifiers.add(Modifiers.AI_DEAD_RECKONING_TRAILER);
784                    modifiers.add(Modifiers.AK_PAIRING_LINE);
785                    modifiers.add(Modifiers.AL_OPERATIONAL_CONDITION);
786                    modifiers.add(Modifiers.AO_ENGAGEMENT_BAR);
787                    modifiers.add(Modifiers.AS_COUNTRY);
788                    break;
789                case SymbolID.SymbolSet_LandEquipment:
790                case SymbolID.SymbolSet_SignalsIntelligence_Land:
791                    modifiers.add(Modifiers.A_SYMBOL_ICON);
792                    modifiers.add(Modifiers.C_QUANTITY);
793                    modifiers.add(Modifiers.G_STAFF_COMMENTS);
794                    modifiers.add(Modifiers.H_ADDITIONAL_INFO_1);
795                    modifiers.add(Modifiers.J_EVALUATION_RATING);
796                    modifiers.add(Modifiers.K_COMBAT_EFFECTIVENESS);
797                    modifiers.add(Modifiers.L_SIGNATURE_EQUIP);
798                    modifiers.add(Modifiers.M_HIGHER_FORMATION);
799                    modifiers.add(Modifiers.N_HOSTILE);
800                    modifiers.add(Modifiers.P_IFF_SIF_AIS);
801                    modifiers.add(Modifiers.Q_DIRECTION_OF_MOVEMENT);
802                    modifiers.add(Modifiers.R_MOBILITY_INDICATOR);
803                    modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1);
804                    modifiers.add(Modifiers.V_EQUIP_TYPE);
805                    modifiers.add(Modifiers.W_DTG_1);
806                    modifiers.add(Modifiers.X_ALTITUDE_DEPTH);
807                    modifiers.add(Modifiers.Y_LOCATION);
808                    modifiers.add(Modifiers.Z_SPEED);
809                    modifiers.add(Modifiers.AB_FEINT_DUMMY_INDICATOR);
810                    modifiers.add(Modifiers.AD_PLATFORM_TYPE);
811                    modifiers.add(Modifiers.AE_EQUIPMENT_TEARDOWN_TIME);
812                    modifiers.add(Modifiers.AF_COMMON_IDENTIFIER);
813                    modifiers.add(Modifiers.AG_AUX_EQUIP_INDICATOR);
814                    modifiers.add(Modifiers.AH_AREA_OF_UNCERTAINTY);
815                    modifiers.add(Modifiers.AI_DEAD_RECKONING_TRAILER);
816                    modifiers.add(Modifiers.AK_PAIRING_LINE);
817                    modifiers.add(Modifiers.AL_OPERATIONAL_CONDITION);
818                    modifiers.add(Modifiers.AO_ENGAGEMENT_BAR);
819                    modifiers.add(Modifiers.AQ_GUARDED_UNIT);
820                    modifiers.add(Modifiers.AS_COUNTRY);
821                    break;
822                case SymbolID.SymbolSet_LandInstallation:
823                    modifiers.add(Modifiers.A_SYMBOL_ICON);
824                    modifiers.add(Modifiers.C_QUANTITY);
825                    modifiers.add(Modifiers.G_STAFF_COMMENTS);
826                    modifiers.add(Modifiers.H_ADDITIONAL_INFO_1);
827                    modifiers.add(Modifiers.J_EVALUATION_RATING);
828                    modifiers.add(Modifiers.K_COMBAT_EFFECTIVENESS);
829                    modifiers.add(Modifiers.P_IFF_SIF_AIS);
830                    modifiers.add(Modifiers.S_HQ_STAFF_INDICATOR);
831                    modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1);
832                    modifiers.add(Modifiers.W_DTG_1);
833                    modifiers.add(Modifiers.X_ALTITUDE_DEPTH);
834                    modifiers.add(Modifiers.Y_LOCATION);
835                    modifiers.add(Modifiers.AB_FEINT_DUMMY_INDICATOR);
836                    modifiers.add(Modifiers.AE_EQUIPMENT_TEARDOWN_TIME);
837                    modifiers.add(Modifiers.AH_AREA_OF_UNCERTAINTY);
838                    modifiers.add(Modifiers.AI_DEAD_RECKONING_TRAILER);
839                    modifiers.add(Modifiers.AK_PAIRING_LINE);
840                    modifiers.add(Modifiers.AL_OPERATIONAL_CONDITION);
841                    modifiers.add(Modifiers.AS_COUNTRY);
842                    break;
843                case SymbolID.SymbolSet_DismountedIndividuals:
844                    modifiers.add(Modifiers.A_SYMBOL_ICON);
845                    modifiers.add(Modifiers.C_QUANTITY);
846                    modifiers.add(Modifiers.G_STAFF_COMMENTS);
847                    modifiers.add(Modifiers.H_ADDITIONAL_INFO_1);
848                    modifiers.add(Modifiers.J_EVALUATION_RATING);
849                    modifiers.add(Modifiers.K_COMBAT_EFFECTIVENESS);
850                    modifiers.add(Modifiers.M_HIGHER_FORMATION);
851                    modifiers.add(Modifiers.Q_DIRECTION_OF_MOVEMENT);
852                    modifiers.add(Modifiers.P_IFF_SIF_AIS);
853                    modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1);
854                    modifiers.add(Modifiers.V_EQUIP_TYPE);
855                    modifiers.add(Modifiers.W_DTG_1);
856                    modifiers.add(Modifiers.X_ALTITUDE_DEPTH);
857                    modifiers.add(Modifiers.Y_LOCATION);
858                    modifiers.add(Modifiers.AB_FEINT_DUMMY_INDICATOR);
859                    modifiers.add(Modifiers.AF_COMMON_IDENTIFIER);
860                    modifiers.add(Modifiers.AS_COUNTRY);
861                    modifiers.add(Modifiers.AV_LEADERSHIP);
862                    break;
863                case SymbolID.SymbolSet_Space:
864                case SymbolID.SymbolSet_SpaceMissile:
865                    modifiers.add(Modifiers.A_SYMBOL_ICON);
866                    modifiers.add(Modifiers.G_STAFF_COMMENTS);
867                    modifiers.add(Modifiers.H_ADDITIONAL_INFO_1);
868                    modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1);
869                    modifiers.add(Modifiers.V_EQUIP_TYPE);
870                    modifiers.add(Modifiers.X_ALTITUDE_DEPTH);
871                    modifiers.add(Modifiers.Z_SPEED);
872                    modifiers.add(Modifiers.AB_FEINT_DUMMY_INDICATOR);
873                    modifiers.add(Modifiers.AJ_SPEED_LEADER);
874                    modifiers.add(Modifiers.AL_OPERATIONAL_CONDITION);
875                    modifiers.add(Modifiers.AO_ENGAGEMENT_BAR);
876                    modifiers.add(Modifiers.AS_COUNTRY);
877                    break;
878                case SymbolID.SymbolSet_Air:
879                case SymbolID.SymbolSet_AirMissile:
880                    modifiers.add(Modifiers.A_SYMBOL_ICON);
881                    modifiers.add(Modifiers.G_STAFF_COMMENTS);
882                    modifiers.add(Modifiers.H_ADDITIONAL_INFO_1);
883                    modifiers.add(Modifiers.P_IFF_SIF_AIS);//air only
884                    modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1);
885                    modifiers.add(Modifiers.V_EQUIP_TYPE);
886                    modifiers.add(Modifiers.X_ALTITUDE_DEPTH);
887                    modifiers.add(Modifiers.Z_SPEED);
888                    modifiers.add(Modifiers.AB_FEINT_DUMMY_INDICATOR);
889                    modifiers.add(Modifiers.AJ_SPEED_LEADER);
890                    modifiers.add(Modifiers.AL_OPERATIONAL_CONDITION);
891                    modifiers.add(Modifiers.AO_ENGAGEMENT_BAR);
892                    modifiers.add(Modifiers.AS_COUNTRY);
893                    break;
894                case SymbolID.SymbolSet_SeaSurface:
895                    modifiers.add(Modifiers.A_SYMBOL_ICON);
896                    modifiers.add(Modifiers.G_STAFF_COMMENTS);
897                    modifiers.add(Modifiers.H_ADDITIONAL_INFO_1);
898                    modifiers.add(Modifiers.P_IFF_SIF_AIS);
899                    //modifiers.add(Modifiers.Q_DIRECTION_OF_MOVEMENT);
900                    modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1);
901                    modifiers.add(Modifiers.V_EQUIP_TYPE);
902                    modifiers.add(Modifiers.Y_LOCATION);
903                    modifiers.add(Modifiers.Z_SPEED);
904                    modifiers.add(Modifiers.AB_FEINT_DUMMY_INDICATOR);
905                    modifiers.add(Modifiers.AJ_SPEED_LEADER);
906                    modifiers.add(Modifiers.AL_OPERATIONAL_CONDITION);
907                    modifiers.add(Modifiers.AO_ENGAGEMENT_BAR);
908                    modifiers.add(Modifiers.AQ_GUARDED_UNIT);
909                    modifiers.add(Modifiers.AR_SPECIAL_DESIGNATOR);
910                    modifiers.add(Modifiers.AS_COUNTRY);
911                    break;
912                case SymbolID.SymbolSet_SeaSubsurface:
913                    modifiers.add(Modifiers.A_SYMBOL_ICON);
914                    modifiers.add(Modifiers.G_STAFF_COMMENTS);
915                    modifiers.add(Modifiers.H_ADDITIONAL_INFO_1);
916                    //modifiers.add(Modifiers.Q_DIRECTION_OF_MOVEMENT);
917                    modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1);
918                    modifiers.add(Modifiers.V_EQUIP_TYPE);
919                    modifiers.add(Modifiers.X_ALTITUDE_DEPTH);
920                    modifiers.add(Modifiers.Y_LOCATION);
921                    modifiers.add(Modifiers.Z_SPEED);
922                    modifiers.add(Modifiers.AB_FEINT_DUMMY_INDICATOR);
923                    modifiers.add(Modifiers.AJ_SPEED_LEADER);
924                    modifiers.add(Modifiers.AL_OPERATIONAL_CONDITION);
925                    modifiers.add(Modifiers.AO_ENGAGEMENT_BAR);
926                    modifiers.add(Modifiers.AQ_GUARDED_UNIT);
927                    modifiers.add(Modifiers.AR_SPECIAL_DESIGNATOR);
928                    modifiers.add(Modifiers.AS_COUNTRY);
929                    break;
930                case SymbolID.SymbolSet_Activities:
931                    modifiers.add(Modifiers.A_SYMBOL_ICON);
932                    modifiers.add(Modifiers.C_QUANTITY);
933                    modifiers.add(Modifiers.G_STAFF_COMMENTS);
934                    modifiers.add(Modifiers.H_ADDITIONAL_INFO_1);
935                    modifiers.add(Modifiers.J_EVALUATION_RATING);
936                    modifiers.add(Modifiers.Q_DIRECTION_OF_MOVEMENT);
937                    modifiers.add(Modifiers.W_DTG_1);
938                    modifiers.add(Modifiers.Y_LOCATION);
939                    modifiers.add(Modifiers.AB_FEINT_DUMMY_INDICATOR);
940                    modifiers.add(Modifiers.AS_COUNTRY);
941                    break;
942                case SymbolID.SymbolSet_CyberSpace:
943                    modifiers.add(Modifiers.A_SYMBOL_ICON);
944                    modifiers.add(Modifiers.B_ECHELON);
945                    modifiers.add(Modifiers.F_REINFORCED_REDUCED);
946                    modifiers.add(Modifiers.G_STAFF_COMMENTS);
947                    modifiers.add(Modifiers.H_ADDITIONAL_INFO_1);
948                    modifiers.add(Modifiers.K_COMBAT_EFFECTIVENESS);
949                    modifiers.add(Modifiers.L_SIGNATURE_EQUIP);
950                    modifiers.add(Modifiers.M_HIGHER_FORMATION);
951                    modifiers.add(Modifiers.S_HQ_STAFF_INDICATOR);
952                    modifiers.add(Modifiers.T_UNIQUE_DESIGNATION_1);
953                    modifiers.add(Modifiers.V_EQUIP_TYPE);
954                    modifiers.add(Modifiers.W_DTG_1);
955                    modifiers.add(Modifiers.Y_LOCATION);
956                    modifiers.add(Modifiers.AS_COUNTRY);
957                    break;
958
959                case SymbolID.SymbolSet_ControlMeasure:
960                    //values come from files during MSLookup load
961                    break;
962                case SymbolID.SymbolSet_Atmospheric:
963                    //Tropopause low, Tropopause high
964                    if ((ec.equals("110102")) || (ec.equals("110202")) ||
965                            (ec.equals("162200")))
966                        modifiers.add(Modifiers.X_ALTITUDE_DEPTH);
967                    else if (ec.equals("140200"))
968                        modifiers.add(Modifiers.AN_AZIMUTH);
969                    break;
970                case SymbolID.SymbolSet_MineWarfare:
971                case SymbolID.SymbolSet_Oceanographic:
972                case SymbolID.SymbolSet_MeteorologicalSpace:
973                default://no modifiers
974                    break;
975
976            }
977        }
978
979        if(ss == SymbolID.SymbolSet_SignalsIntelligence_Air ||
980                ss == SymbolID.SymbolSet_SignalsIntelligence_Land ||
981                ss == SymbolID.SymbolSet_SignalsIntelligence_SeaSurface ||
982                ss == SymbolID.SymbolSet_SignalsIntelligence_SeaSubsurface ||
983                ss == SymbolID.SymbolSet_SignalsIntelligence_Space)
984            modifiers.add(Modifiers.R2_SIGNIT_MOBILITY_INDICATOR);
985
986        return modifiers;
987    }
988
989    /**
990     *
991     * @param  symbolID Full 20-30 digits from the symbol code
992     * @return
993     */
994    public MSInfo getMSLInfo(String symbolID)
995    {
996        int length = symbolID.length();
997
998        if(length >= 20 && length <= 30)
999        {
1000            int version = SymbolID.getVersion(symbolID);
1001            return getMSLInfo(SymbolUtilities.getBasicSymbolID(symbolID), version);
1002        }
1003        else
1004            return null;
1005    }
1006
1007    /**
1008     *
1009     * @param basicID id SymbolSet + Entity code like 50110100
1010     * @param version like SymbolID.Version_2525Dch1
1011     * @return
1012     */
1013    public MSInfo getMSLInfo(String basicID, int version)
1014    {
1015        int length = basicID.length();
1016        if (length == 8) {
1017            if (version == SymbolID.Version_2525E || version == SymbolID.Version_2525Ech1)
1018                return _MSLookupE.get(basicID);
1019            else if (version == SymbolID.Version_APP6Ech2 || version == SymbolID.Version_APP6Ech1)
1020                return _MSLookup6E.get(basicID);
1021            else if (version == SymbolID.Version_APP6D)
1022                return _MSLookup6D.get(basicID);
1023            else if (version == SymbolID.Version_2525Dch1)
1024                return _MSLookupD.get(basicID);
1025            else
1026                return null;
1027        }
1028        else if (length >= 20 && length <= 30)//probably got a full id instead of a basic ID.
1029        {
1030            return getMSLInfo(SymbolUtilities.getBasicSymbolID(basicID), version);
1031        } else
1032            return null;
1033    }
1034
1035    /**
1036     * returns a list of all the keys in the order they are listed in the MilStd 2525D document.
1037     * @return
1038     */
1039    public List<String> getIDList(int version)
1040    {
1041        if (version == SymbolID.Version_2525E || version == SymbolID.Version_2525Ech1)
1042            return _IDListE;
1043        else if (version == SymbolID.Version_APP6D)
1044            return _IDList6D;
1045        else if (version == SymbolID.Version_2525Dch1)
1046            return _IDListD;
1047        else if (version == SymbolID.Version_APP6Ech1 || version == SymbolID.Version_APP6Ech2)
1048            return _IDList6E;
1049        else//default to 2525Dch1
1050            return _IDListD;
1051    }
1052
1053    /*
1054     * For use only by MilStdIconRenderer.addCustomSymbol()
1055     * @param msInfo
1056     * @return
1057     */
1058    public boolean addCustomSymbol(MSInfo msInfo)
1059    {
1060        boolean success = false;
1061        try
1062        {
1063            if(msInfo != null)
1064                success = addCustomToLookupAndList(msInfo);
1065            else
1066                ErrorLogger.LogMessage("Attempt to add custom msInfo with null object.",Level.INFO,false);
1067            if(msInfo != null && !success)
1068                ErrorLogger.LogMessage("Symbol Set and Entity Code combination already exist: " + msInfo.getBasicSymbolID(),Level.INFO,false);
1069        }
1070        catch(Exception e)
1071        {
1072            ErrorLogger.LogException("MSLookup", "addCustomSymbol",e);
1073        }
1074        return success;
1075    }
1076}