private void processFullDictionary(OMMMsg msg, Handle handle)
    {
        String dictName = msg.getAttribInfo().getName();
        System.out.println(_className + ".processFullDictionary: Receive full dictionary of "
                + dictName);
        if (msg.getDataType() != OMMTypes.SERIES)
        {
            System.out.println("ERROR: " + _className
                    + ".processEvent() incorrect data type, payload data must be OMMSeries");
            return;
        }
        OMMSeries series = (OMMSeries)msg.getPayload();
        int dictionaryType;
        Integer dictType = (Integer)_dictHandles.get(handle);
        if (dictType == null)
        {
            // Means don't know the type yet
            dictionaryType = getDictionaryType(series);
            _dictHandles.put(handle, new Integer(dictionaryType));
        }
        else
        {
            dictionaryType = dictType.intValue();
        }

        if (dictionaryType == RDMDictionary.Type.FIELD_DEFINITIONS)
        {
            FieldDictionary.decodeRDMFldDictionary(_downloadedDictionary, series);
            if (msg.isSet(OMMMsg.Indication.REFRESH_COMPLETE))
            {
                _fieldDictName = dictName;
                _fullDict |= RDM_COMPLETE;
                System.out.println(_className
                        + ".processFullDictionary: Field Dictionary Refresh is complete");
            }
        }
        else if (dictionaryType == RDMDictionary.Type.ENUM_TABLES)
        {
            FieldDictionary.decodeRDMEnumDictionary(_downloadedDictionary, series);
            if (msg.isSet(OMMMsg.Indication.REFRESH_COMPLETE))
            {
                _enumDictName = dictName;
                _fullDict |= ENUM_COMPLETE;
                System.out.println(_className
                        + ".processFullDictionary: EnumTable Dictionary Refresh is complete");
            }
        }

        if (_fullDict == (RDM_COMPLETE | ENUM_COMPLETE))
        {
            if (CommandLine.booleanVariable("dumpFiles"))
            {
                try
                {

                    // Field Dictionary
                    File file1 = new File(_fieldDictName + "_network");
                    PrintStream ps1 = new PrintStream(new FileOutputStream(file1));
                    System.out.println(_className
                            + ".processFullDictionary: dump Field Dictionary in "
                            + file1.getAbsolutePath());
                    DictionaryUtil.printFieldDictionary(_downloadedDictionary, ps1);
                    ps1.close();

                    // EnumTable Dictionary
                    File file2 = new File(_enumDictName + "_network");
                    PrintStream ps2 = new PrintStream(new FileOutputStream(file2));
                    System.out.println(_className + ".processFullDictionary: dump EnumTable in "
                            + file2.getAbsolutePath());
                    DictionaryUtil.printEnumDictionary(_downloadedDictionary, ps2);
                    ps2.close();
                }
                catch (IOException ex)
                {
                    System.out.println("ERROR : " + _className
                            + ".processFullDictionary, cannot print the dictionaries to files");
                    System.out.println(ex.getMessage());
                }
            }
            else
            {
                System.out.println(_className + ".processFullDictionary: Printing Field Dictionary");
                DictionaryUtil.printFieldDictionary(_downloadedDictionary);

                System.out.println(_className + ".processFullDictionary: Printing Enum Dictionary");
                DictionaryUtil.printEnumDictionary(_downloadedDictionary);
            }

            // Finish data dictionary display, exit the program.
            System.out.println(_className + ": Finishing data dictionary display, prepare to clean up and exit");
            _mainApp.cleanup(0);
        }
    }