Ejemplo n.º 1
0
        //UPGRADE_TODO: Class 'java.util.HashMap' was converted to 'System.Collections.Hashtable' which has a different behavior. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1073_javautilHashMap'"
        private String getGDSkey(Grib1GridDefinitionSection gds, System.Collections.Hashtable gdsCounter)
        {
            String key = gds.CheckSum;

            // only Lat/Lon grids can have > 1 GDSs
            if (gds.GridType == 0 || gds.GridType == 4)
            {
                if (!gdsHM.ContainsKey(key))
                {
                    // check if gds is already saved
                    gdsHM[key] = gds;
                }
            }
            else if (!gdsHM.ContainsKey(key))
            {
                // check if gds is already saved
                gdsHM[key]      = gds;
                gdsCounter[key] = "1";
            }
            else
            {
                // increment the counter for this GDS
                //UPGRADE_TODO: Method 'java.util.HashMap.get' was converted to 'System.Collections.Hashtable.Item' which has a different behavior. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1073_javautilHashMapget_javalangObject'"
                int count = Int32.Parse((String)gdsCounter[key]);
                gdsCounter[key] = Convert.ToString(++count);
            }

            return(key);
        }         // end getGDSkey
Ejemplo n.º 2
0
        }         // end getGDSkey

        //UPGRADE_TODO: Class 'java.util.HashMap' was converted to 'System.Collections.Hashtable' which has a different behavior. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1073_javautilHashMap'"
        private void checkGDSkeys(Grib1GridDefinitionSection gds, System.Collections.Hashtable gdsCounter)
        {
            // lat/lon grids can have > 1 GDSs
            if (gds.GridType == 0 || gds.GridType == 4)
            {
                return;
            }

            String bestKey = "";
            int    count   = 0;

            // find bestKey with the most counts
            //UPGRADE_TODO: Method 'java.util.HashMap.keySet' was converted to 'SupportClass.HashSetSupport' which has a different behavior. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1073_javautilHashMapkeySet'"
            //UPGRADE_TODO: Method 'java.util.Iterator.hasNext' was converted to 'System.Collections.IEnumerator.MoveNext' which has a different behavior. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1073_javautilIteratorhasNext'"
            for (System.Collections.IEnumerator it = new SupportClass.HashSetSupport(gdsCounter.Keys).GetEnumerator(); it.MoveNext();)
            {
                //UPGRADE_TODO: Method 'java.util.Iterator.next' was converted to 'System.Collections.IEnumerator.Current' which has a different behavior. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1073_javautilIteratornext'"
                String key = (String)it.Current;
                //UPGRADE_TODO: Method 'java.util.HashMap.get' was converted to 'System.Collections.Hashtable.Item' which has a different behavior. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1073_javautilHashMapget_javalangObject'"
                int gdsCount = Int32.Parse((String)gdsCounter[key]);
                if (gdsCount > count)
                {
                    count   = gdsCount;
                    bestKey = key;
                }
            }

            // remove best key from gdsCounter, others will be removed from gdsHM
            gdsCounter.Remove(bestKey);
            // remove all GDSs using the gdsCounter
            //UPGRADE_TODO: Method 'java.util.HashMap.keySet' was converted to 'SupportClass.HashSetSupport' which has a different behavior. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1073_javautilHashMapkeySet'"
            //UPGRADE_TODO: Method 'java.util.Iterator.hasNext' was converted to 'System.Collections.IEnumerator.MoveNext' which has a different behavior. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1073_javautilIteratorhasNext'"
            for (System.Collections.IEnumerator it = new SupportClass.HashSetSupport(gdsCounter.Keys).GetEnumerator(); it.MoveNext();)
            {
                //UPGRADE_TODO: Method 'java.util.Iterator.next' was converted to 'System.Collections.IEnumerator.Current' which has a different behavior. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1073_javautilIteratornext'"
                String key = (String)it.Current;
                gdsHM.Remove(key);
            }

            // reset GDS keys in products too
            for (int i = 0; i < products.Count; i++)
            {
                Grib1Product g1p = (Grib1Product)products[i];
                g1p.GDSkey = bestKey;
            }

            return;
        }         // end checkGDSkeys
Ejemplo n.º 3
0
        }         // end scan

        /// <summary> scans a Grib file to gather information that could be used to
        /// create an index or dump the metadata contents.
        ///
        /// </summary>
        /// <param name="getProducts">products have enough information for data extractions
        /// </param>
        /// <param name="oneRecord">returns after processing one record in the Grib file
        /// </param>
        /// <throws>  NotSupportedException </throws>
        public IEnumerable <Grib1Record> scanRecords()
        {
            InputStream.Seek(0, SeekOrigin.Begin);

            // stores the number of times a particular GDS is used
            //UPGRADE_TODO: Class 'java.util.HashMap' was converted to 'System.Collections.Hashtable' which has a different behavior. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1073_javautilHashMap'"
            System.Collections.Hashtable  gdsCounter = new System.Collections.Hashtable();
            Grib1ProductDefinitionSection pds        = null;
            Grib1GridDefinitionSection    gds        = null;
            long startOffset = -1;


            while (InputStream.Position < InputStream.Length)
            {
                if (seekHeader(InputStream, InputStream.Length, out startOffset))
                {
                    // Read Section 0 Indicator Section
                    Grib1IndicatorSection is_Renamed = new Grib1IndicatorSection(InputStream);

                    // EOR (EndOfRecord) calculated so skipping data sections is faster
                    long EOR = InputStream.Position + is_Renamed.GribLength - is_Renamed.Length;

                    // Read Section 1 Product Definition Section PDS
                    pds = new Grib1ProductDefinitionSection(InputStream);
                    if (pds.LengthErr)
                    {
                        continue;
                    }

                    if (pds.gdsExists())
                    {
                        // Read Section 2 Grid Definition Section GDS
                        gds = new Grib1GridDefinitionSection(InputStream);
                    }
                    else
                    {
                        // GDS doesn't exist so make one



                        gds = (Grib1GridDefinitionSection) new Grib1Grid(pds);
                    }

                    // obtain BMS or BDS offset in the file for this product
                    long dataOffset;
                    if (pds.Center == 98)
                    {
                        // check for ecmwf offset by 1 bug
                        int length = (int)GribNumbers.uint3(InputStream);                         // should be length of BMS
                        if ((length + InputStream.Position) < EOR)
                        {
                            dataOffset = InputStream.Position - 3;                             // ok
                        }
                        else
                        {
                            dataOffset = InputStream.Position - 2;
                        }
                    }
                    else
                    {
                        dataOffset = InputStream.Position;
                    }

                    // position filePointer to EndOfRecord
                    InputStream.Seek(EOR, System.IO.SeekOrigin.Begin);


                    // assume scan ok
                    Grib1Record gr = new Grib1Record(header, is_Renamed, pds, gds, dataOffset, InputStream.Position, startOffset);

                    var currentPosition = InputStream.Position;
                    yield return(gr);

                    InputStream.Position = currentPosition;

                    // early return because ending "7777" missing
                    if (InputStream.Position > InputStream.Length)
                    {
                        InputStream.Seek(0, System.IO.SeekOrigin.Begin);
                        checkGDSkeys(gds, gdsCounter);
                        throw new BadGribFormatException("Grib1Input: GRIB ending missing. Possible file corruption");
                    }
                }         // end if seekHeader
            }             // end while raf.Position < raf.Length

            checkGDSkeys(gds, gdsCounter);
        }         // end scan
Ejemplo n.º 4
0
        /// <summary> scans a Grib file to gather information that could be used to
        /// create an index or dump the metadata contents.
        ///
        /// </summary>
        /// <param name="getProducts">products have enough information for data extractions
        /// </param>
        /// <param name="oneRecord">returns after processing one record in the Grib file
        /// </param>
        /// <throws>  NotSupportedException </throws>
        public void scan(bool getProducts, bool oneRecord)
        {
            long start = (DateTime.Now.Ticks - 621355968000000000) / 10000;

            // stores the number of times a particular GDS is used
            //UPGRADE_TODO: Class 'java.util.HashMap' was converted to 'System.Collections.Hashtable' which has a different behavior. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1073_javautilHashMap'"
            System.Collections.Hashtable  gdsCounter = new System.Collections.Hashtable();
            Grib1ProductDefinitionSection pds        = null;
            Grib1GridDefinitionSection    gds        = null;
            long startOffset = -1;


            while (InputStream.Position < InputStream.Length)
            {
                if (seekHeader(InputStream, InputStream.Length, out startOffset))
                {
                    // Read Section 0 Indicator Section
                    Grib1IndicatorSection is_Renamed = new Grib1IndicatorSection(InputStream);

                    // EOR (EndOfRecord) calculated so skipping data sections is faster
                    long EOR = InputStream.Position + is_Renamed.GribLength - is_Renamed.Length;

                    // Read Section 1 Product Definition Section PDS
                    pds = new Grib1ProductDefinitionSection(InputStream);
                    if (pds.LengthErr)
                    {
                        continue;
                    }

                    if (pds.gdsExists())
                    {
                        // Read Section 2 Grid Definition Section GDS
                        gds = new Grib1GridDefinitionSection(InputStream);
                    }
                    else
                    {
                        // GDS doesn't exist so make one



                        gds = (Grib1GridDefinitionSection) new Grib1Grid(pds);
                    }

                    // obtain BMS or BDS offset in the file for this product
                    long dataOffset = 0;
                    if (pds.Center == 98)
                    {
                        // check for ecmwf offset by 1 bug
                        int length = (int)GribNumbers.uint3(InputStream);                          // should be length of BMS
                        if ((length + InputStream.Position) < EOR)
                        {
                            dataOffset = InputStream.Position - 3;                             // ok
                        }
                        else
                        {
                            dataOffset = InputStream.Position - 2;
                        }
                    }
                    else
                    {
                        dataOffset = InputStream.Position;
                    }

                    // position filePointer to EndOfRecord
                    InputStream.Seek(EOR, System.IO.SeekOrigin.Begin);


                    // assume scan ok
                    if (getProducts)
                    {
                        Grib1Product gp = new Grib1Product(header, pds, getGDSkey(gds, gdsCounter), dataOffset, InputStream.Position);
                        products.Add(gp);
                    }
                    else
                    {
                        Grib1Record gr = new Grib1Record(header, is_Renamed, pds, gds, dataOffset, InputStream.Position, startOffset);
                        records.Add(gr);
                    }

                    if (oneRecord)
                    {
                        return;
                    }

                    // early return because ending "7777" missing
                    if (InputStream.Position > InputStream.Length)
                    {
                        InputStream.Seek(0, System.IO.SeekOrigin.Begin);
                        Console.Error.WriteLine("Grib1Input: possible file corruption");
                        checkGDSkeys(gds, gdsCounter);
                        return;
                    }
                }         // end if seekHeader
            }             // end while raf.Position < raf.Length


            //   (System.currentTimeMillis()- start) + " milliseconds");
            checkGDSkeys(gds, gdsCounter);
            return;
        }         // end scan