/** * Read the table list contained in the input stream * * @param is The input stream * @param aTableList The name of the table list file * @param aTables The list to add the tables into * @return Was successful * @throws IOException On badness */ private static boolean readTableEntries( InputStream is, String aTableList, ArrayList<GribPDSParamTable> aTables) throws IOException { if (is == null) return false; InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); String line; while ((line = br.readLine()) != null) { line = line.trim(); if ((line.length() == 0) || line.startsWith("#")) { continue; } GribPDSParamTable table = new GribPDSParamTable(); String[] tableDefArr = line.split(":"); table.center_id = Integer.parseInt(tableDefArr[0].trim()); table.subcenter_id = Integer.parseInt(tableDefArr[1].trim()); table.table_number = Integer.parseInt(tableDefArr[2].trim()); table.filename = tableDefArr[3].trim(); if (table.filename.startsWith("/") || table.filename.startsWith("\\") || table.filename.startsWith("file:") || table.filename.startsWith("http://")) { table.path = table.filename; } else if (aTableList != null) { table.path = GribResourceReader.getFileRoot(aTableList); if (table.path.equals(aTableList)) { table.path = table.filename; } else { table.path = table.path + "/" + table.filename; } table.path = table.path.replace('\\', '/'); } aTables.add(table); } is.close(); return true; }
/** * 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; }