public Map<String, GridParameter> getParameters() { if (parameters == null) readParameterTable(); return parameters; }
/** * Looks for the parameter table which matches the center, subcenter and table version from the * tables array. If this is the first time asking for this table, then the parameters for this * table have not been read in yet, so this is done as well. * * @param center - integer from PDS octet 5, representing Center. * @param subcenter - integer from PDS octet 26, representing Subcenter * @param number - integer from PDS octet 4, representing Parameter Table Version * @param firstTry - Is this the first call or are we trying the wild cards * @return GribPDSParamTable matching center, subcenter, and number */ private static GribPDSParamTable readParameterTable( int center, int subcenter, int number, boolean firstTry) { if (firstTry) wmoTable = number; GribPDSParamTable[] localCopy = paramTables; // thread safe for (GribPDSParamTable table : localCopy) { if (center == table.center_id) { if ((table.subcenter_id == -1) || (subcenter == table.subcenter_id)) { if (number == table.table_number) { // now that this table is being used, check to see if the // parameters for this table have been read in yet. // If not, initialize table and read them in now. if (table.parameters == null) { if (!firstTry) { logger.warn( "GribPDSParamTable: Using default table:" + table.path + " (" + table.center_id + ":" + table.subcenter_id + ":" + table.table_number + ")"); } table.readParameterTable(); if (table.parameters == null) // failed - maybe theres another entry table in paramTables continue; // success - initialize other tables parameters with the same name for (int j = 0; j < paramTables.length; j++) { GribPDSParamTable tab = paramTables[j]; if (tab.path.equals(table.path)) { tab.parameters = table.parameters; } } } return table; } } } } // Try with the wild cards if (number != -1) { return readParameterTable(center, subcenter, -1, false); } else if (subcenter != -1) { logger.warn( "GribPDSParamTable: Could not find table for center:" + center + " subcenter:" + subcenter + " number:" + wmoTable); return readParameterTable(center, -1, -1, false); } else if (center != -1) { // return readParameterTable(-1, -1, -1, false); return readParameterTable(-1, -1, wmoTable, false); } return null; }