Пример #1
0
        /// <summary>
        /// From AbstractTableMode.  Returns the data that should be placed in the JTable
        /// at the given row and column. </summary>
        /// <param name="row"> the row for which to return data. </param>
        /// <param name="col"> the column for which to return data. </param>
        /// <returns> the data that should be placed in the JTable at the given row and col. </returns>
        public virtual object getValueAt(int row, int col)
        {
            // make sure the row numbers are never sorted ...
            if (_sortOrder != null)
            {
                row = _sortOrder[row];
            }

            int dataPos = lookupVectorPositionForRow(row);

            StateCU_BlaneyCriddle bc = (StateCU_BlaneyCriddle)_data.get(dataPos);

            int num = row - __firstRows[dataPos];

            switch (col)
            {
            case __COL_CROP_NAME:
                return(bc.getName());

            case __COL_DAY_PCT:
                if (__day[dataPos])
                {
                    return(new int?(bc.getNckcp(num)));
                }
                else
                {
                    return(new int?(bc.getNckca(num)));
                }

            case __COL_COEFF:
                if (__day[dataPos])
                {
                    return(new double?(bc.getCkcp(num)));
                }
                else
                {
                    return(new double?(bc.getCkca(num)));
                }

            case __COL_BCM:
                return(new int?(bc.getKtsw()));
            }
            return("");
        }
Пример #2
0
        /// <summary>
        /// Writes a list of StateCU_BlaneyCriddle objects to a list file.  A header is
        /// printed to the top of the file, containing the commands used to generate the
        /// file.  Any strings in the body of the file that contain the field delimiter will be wrapped in "...". </summary>
        /// <param name="filename"> the name of the file to which the data will be written. </param>
        /// <param name="delimiter"> the delimiter to use for separating field values. </param>
        /// <param name="update"> whether to update an existing file, retaining the current
        /// header (true) or to create a new file with a new header. </param>
        /// <param name="data"> the Vector of objects to write. </param>
        /// <exception cref="Exception"> if an error occurs. </exception>
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in .NET:
//ORIGINAL LINE: public static void writeListFile(String filename, String delimiter, boolean update, java.util.List<StateCU_BlaneyCriddle> data, java.util.List<String> outputComments) throws Exception
        public static void writeListFile(string filename, string delimiter, bool update, IList <StateCU_BlaneyCriddle> data, IList <string> outputComments)
        {
            string routine = "StateCU_BlaneyCriddle.writeListFile";
            int    size    = 0;

            if (data != null)
            {
                size = data.Count;
            }

            IList <string> fields = new List <string>();

            fields.Add("Name");
            fields.Add("CurveType");
            fields.Add("DayPercent");
            fields.Add("Coefficient");
            int fieldCount = fields.Count;

            string[] names   = new string[fieldCount];
            string[] formats = new string[fieldCount];
            int      comp    = StateCU_DataSet.COMP_BLANEY_CRIDDLE;
            string   s       = null;

            for (int i = 0; i < fieldCount; i++)
            {
                s          = (string)fields[i];
                names[i]   = StateCU_Util.lookupPropValue(comp, "FieldName", s);
                formats[i] = StateCU_Util.lookupPropValue(comp, "Format", s);
            }

            string oldFile = null;

            if (update)
            {
                oldFile = IOUtil.getPathUsingWorkingDir(filename);
            }

            int                   j             = 0;
            int                   k             = 0;
            PrintWriter           @out          = null;
            StateCU_BlaneyCriddle bc            = null;
            IList <string>        commentString = new List <string>(1);

            commentString.Add("#");
            IList <string> ignoreCommentString = new List <string>(1);

            ignoreCommentString.Add("#>");
            string[]      line   = new string[fieldCount];
            string        flag   = null;
            StringBuilder buffer = new StringBuilder();

            try
            {
                // Add some basic comments at the top of the file.  However, do this to a copy of the
                // incoming comments so that they are not modified in the calling code.
                IList <string> newComments2 = null;
                if (outputComments == null)
                {
                    newComments2 = new List <string>();
                }
                else
                {
                    newComments2 = new List <string>(outputComments);
                }
                newComments2.Insert(0, "");
                newComments2.Insert(1, "StateCU Blaney-Criddle crop coefficients as a delimited list file.");
                newComments2.Insert(2, "");
                @out = IOUtil.processFileHeaders(oldFile, IOUtil.getPathUsingWorkingDir(filename), newComments2, commentString, ignoreCommentString, 0);

                for (int i = 0; i < fieldCount; i++)
                {
                    if (i > 0)
                    {
                        buffer.Append(delimiter);
                    }
                    buffer.Append("\"" + names[i] + "\"");
                }

                @out.println(buffer.ToString());

                for (int i = 0; i < size; i++)
                {
                    bc   = (StateCU_BlaneyCriddle)data[i];
                    flag = bc.getFlag();
                    if (flag.Equals("Percent", StringComparison.OrdinalIgnoreCase))
                    {
                        for (j = 0; j < 21; j++)
                        {
                            line[0] = StringUtil.formatString(bc.getName(), formats[0]).Trim();
                            line[1] = StringUtil.formatString(bc.getFlag(), formats[1]).Trim();
                            line[2] = StringUtil.formatString(bc.getNckca(j), formats[2]).Trim();
                            line[3] = StringUtil.formatString(bc.getCkca(j), formats[3]).Trim();

                            buffer = new StringBuilder();
                            for (k = 0; k < fieldCount; k++)
                            {
                                if (k > 0)
                                {
                                    buffer.Append(delimiter);
                                }
                                if (line[k].IndexOf(delimiter, StringComparison.Ordinal) > -1)
                                {
                                    line[k] = "\"" + line[k] + "\"";
                                }
                                buffer.Append(line[k]);
                            }
                            @out.println(buffer.ToString());
                        }
                    }
                    else
                    {
                        for (j = 0; j < 25; j++)
                        {
                            line[0] = StringUtil.formatString(bc.getName(), formats[0]).Trim();
                            line[1] = StringUtil.formatString(bc.getFlag(), formats[1]).Trim();
                            line[2] = StringUtil.formatString(bc.getNckcp(j), formats[2]).Trim();
                            line[3] = StringUtil.formatString(bc.getCkcp(j), formats[3]).Trim();

                            buffer = new StringBuilder();
                            for (k = 0; k < fieldCount; k++)
                            {
                                if (k > 0)
                                {
                                    buffer.Append(delimiter);
                                }
                                if (line[k].IndexOf(delimiter, StringComparison.Ordinal) > -1)
                                {
                                    line[k] = "\"" + line[k] + "\"";
                                }
                                buffer.Append(line[k]);
                            }
                            @out.println(buffer.ToString());
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Message.printWarning(3, routine, e);
                throw e;
            }
            finally
            {
                if (@out != null)
                {
                    @out.flush();
                    @out.close();
                }
                @out = null;
            }
        }
Пример #3
0
        /// <summary>
        /// Write a list of StateCU_BlaneyCriddle to an opened file. </summary>
        /// <param name="data_Vector"> A Vector of StateCU_BlaneyCriddle to write. </param>
        /// <param name="out"> output PrintWriter. </param>
        /// <param name="props"> Properties to control the output.  Currently only the
        /// optional Precision property can be set, indicating how many digits after the
        /// decimal should be printed (default is 3). </param>
        /// <exception cref="IOException"> if an error occurs. </exception>
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in .NET:
//ORIGINAL LINE: private static void writeVector(java.util.List<StateCU_BlaneyCriddle> data_Vector, java.io.PrintWriter out, RTi.Util.IO.PropList props) throws java.io.IOException
        private static void writeVector(IList <StateCU_BlaneyCriddle> data_Vector, PrintWriter @out, PropList props)
        {
            int    i, j;
            string cmnt = "#>";
            // Missing data are handled by formatting all as strings (blank if necessary).
            bool version10 = false;     // Indicate if old Version 10 format is written

            if (props == null)
            {
                props = new PropList("StateCU_BlaneyCriddle");
            }
            string Precision = props.getValue("Precision");
            string Version   = props.getValue("Version");

            if (!string.ReferenceEquals(Version, null) && Version.Equals("10"))
            {
                // Version 10 is an older version.
                version10 = true;
            }

            int Precision_int = 3;

            if ((!string.ReferenceEquals(Precision, null)) && StringUtil.isInteger(Precision))
            {
                Precision_int = StringUtil.atoi(Precision);
            }

            @out.println(cmnt);
            @out.println(cmnt + "  StateCU Blaney-Criddle Crop Coefficient (KBC) File");
            @out.println(cmnt);
            @out.println(cmnt + "  Record 1 format (a80)");
            @out.println(cmnt);
            @out.println(cmnt + "  Title     remark:  Title");
            @out.println(cmnt);
            @out.println(cmnt + "  Record 2 format (free format)");
            @out.println(cmnt);
            @out.println(cmnt + "  NumCurves     nc:  Number of crop coefficient curves");
            @out.println(cmnt);
            @out.println(cmnt + "  Record 3 format (free format)");
            @out.println(cmnt);
            @out.println(cmnt + "  ID            id:  Crop number (not used by StateCU)");
            @out.println(cmnt + "  CropName   cropn:  Crop name (e.g., ALFALFA)");
            @out.println(cmnt + "  CurveType   flag:  Growth curve type");
            @out.println(cmnt + "                     Day = perennial; specify 25 values");
            @out.println(cmnt + "                           for start, middle, end of month");
            @out.println(cmnt + "                     Percent = annual; specify 21 values");
            @out.println(cmnt + "                           for 0, 5, ..., 100% of season");
            @out.println(cmnt);
            if (!version10)
            {
                // Include newer format information...
                @out.println(cmnt + "  BCMethod    ktsw:  Blaney-Criddle Method");
                @out.println(cmnt + "                     0 = SCS Modified Blaney-Criddle");
                @out.println(cmnt + "                     1 = Original Blaney-Criddle");
                @out.println(cmnt + "                     2 = Modifed Blaney-Criddle w/ Elev. Adj.");
                @out.println(cmnt + "                     3 = Original Blaney-Criddle w/ Elev. Adj.");
                @out.println(cmnt + "                     4 = Pochop");
                @out.println(cmnt);
            }
            @out.println(cmnt + "  Record 4 format (free format)");
            @out.println(cmnt);
            @out.println(cmnt + "Position     nckca:  Percent (0 to 100) of growing season for annual crop");
            @out.println(cmnt + "             nckcp:  Day of year (1 to 366) for perennial crop");
            @out.println(cmnt + "Coeff         ckca:  Crop coefficient for annual crop");
            @out.println(cmnt + "         OR   ckcp:  Crop coefficient for perennial crop");
            @out.println(cmnt);
            @out.println(cmnt + "Title...");
            @out.println(cmnt + "NumCurves");
            @out.println(cmnt + "ID CropName CurveType");
            @out.println(cmnt + "Position Coeff");
            @out.println(cmnt + "----------------------------");
            @out.println(cmnt + "EndHeader");
            @out.println("Crop Coefficient Curves for Blaney-Criddle");

            int num = 0;

            if (data_Vector != null)
            {
                num = data_Vector.Count;
            }
            @out.println(num);
            StateCU_BlaneyCriddle kbc = null;

            int[]    nckca        = null;
            int[]    nckcp        = null;
            double[] ckca         = null;
            double[] ckcp         = null;
            int      size         = 0;
            string   value_format = "%9." + Precision_int + "f";

            for (i = 0; i < num; i++)
            {
                kbc = (StateCU_BlaneyCriddle)data_Vector[i];
                if (kbc == null)
                {
                    continue;
                }

                // Just get all the data.  Null arrays are used as a check
                // below to know what data to output...
                nckca = kbc.getNckca();
                nckcp = kbc.getNckcp();
                ckca  = kbc.getCkca();
                ckcp  = kbc.getCkcp();

                // Do not truncate the name to 20 characters if version 10 because
                // doing so may result in arbitrary cut of the current crop names and
                // result in different output from old anyhow.
                string name = kbc.getName();
                // Since free format, the ID must always have something.  If
                // we don't know, put -999...
                string id = "" + (i + 1);         // Default to sequential number
                if (version10)
                {
                    // Previously used -999
                    id = "-999";
                }
                if (!StateCU_Util.isMissing(kbc.getID()))
                {
                    // Changes elsewhere impact this so also use -999 unless it is a number
                    if (StringUtil.isInteger(kbc.getID()))
                    {
                        id = "" + kbc.getID();
                    }
                    else
                    {
                        id = "-999";
                    }
                    // Can't use the crop name because StateCU expects a number (?)
                    //id = kbc.getID();
                }
                // Output based on the version because file comparisons may be done when verifying files.
                if (version10)
                {
                    // No ktsw...
                    @out.println(id + " " + name + " " + kbc.getFlag());
                }
                else
                {
                    // With ktsw, but OK if blank.
                    @out.println(id + " " + name + " " + kbc.getFlag() + " " + kbc.getKtsw());
                }

                if (nckca != null)
                {
                    size = nckca.Length;
                }
                else
                {
                    size = nckcp.Length;
                }
                for (j = 0; j < size; j++)
                {
                    if (nckca != null)
                    {
                        // Print annual curve (Percent)...
                        @out.println(StringUtil.formatString(nckca[j], "%-3d") + StringUtil.formatString(ckca[j], value_format));
                    }
                    else
                    {
                        // Print perennial curve (Day)...
                        @out.println(StringUtil.formatString((int)nckcp[j], "%-3d") + StringUtil.formatString(ckcp[j], value_format));
                    }
                }
            }
        }
Пример #4
0
        /// <summary>
        /// Read the StateCU KBC file and return as a Vector of StateCU_BlaneyCriddle. </summary>
        /// <param name="filename"> filename containing KBC records. </param>
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in .NET:
//ORIGINAL LINE: public static java.util.List<StateCU_BlaneyCriddle> readStateCUFile(String filename) throws java.io.IOException
        public static IList <StateCU_BlaneyCriddle> readStateCUFile(string filename)
        {
            string rtn   = "StateCU_BlaneyCriddle.readKBCFile";
            string iline = null;
            StateCU_BlaneyCriddle         kbc        = null;
            IList <StateCU_BlaneyCriddle> kbc_Vector = new List <StateCU_BlaneyCriddle>(25);
            StreamReader @in       = null;
            bool         version10 = isVersion_10(filename); // Is version 10 (old) format?

            Message.printStatus(1, rtn, "Reading StateCU KBC file: " + filename);
            // The following throws an IOException if the file cannot be opened...
            @in = new StreamReader(filename);
            int    nc    = -1;
            string title = null;     // The title is currently read but not stored since it is never really used for anything.

            while (!string.ReferenceEquals((iline = @in.ReadLine()), null))
            {
                // check for comments
                if (iline.StartsWith("#", StringComparison.Ordinal) || iline.Trim().Length == 0)
                {
                    continue;
                }
                if (string.ReferenceEquals(title, null))
                {
                    title = iline;
                }
                else if (nc < 0)
                {
                    // Assume that the line contains the number of crops
                    nc = StringUtil.atoi(iline.Trim());
                    break;
                }
            }

            // Now loop through the number of curves...

            // TODO SAM 2007-02-18 Evaluate if needed
            //String id;
            string cropn, flag;
            int    npts;

            int[]          nckca = null;
            int[]          nckcp = null;
            double[]       ckc   = null;
            string         ktsw  = null;
            IList <string> tokens;
            int            j = 0;

            for (int i = 0; i < nc; i++)
            {
                nckca = null;         // use to check whether annual or perennial below.
                // Read a free format line...

                iline = @in.ReadLine();

                tokens = StringUtil.breakStringList(iline.Trim(), " \t", StringUtil.DELIM_SKIP_BLANKS);
                // TODO SAM 2007-02-18 Evaluate if needed
                //id = (String)tokens.elementAt(0);
                cropn = (string)tokens[1];
                flag  = (string)tokens[2];

                if (version10)
                {
                    ktsw = "";
                }
                else
                {
                    ktsw = (string)tokens[3];
                }
                // Allocate new StateCU_BlaneyCriddle instance...

                kbc = new StateCU_BlaneyCriddle(flag);
                kbc.setName(cropn);
                // TODO SAM 2005-05-22 Ignore the old ID and use the crop name - this facilitates
                // sorting and other standard StateCU_Data features.
                //kbc.setID ( id );
                kbc.setID(cropn);

                if (StringUtil.isInteger(ktsw))
                {
                    kbc.setKtsw(StringUtil.atoi(ktsw));
                }

                // Read the coefficients...
                if (flag.Equals("Day", StringComparison.OrdinalIgnoreCase))
                {
                    ckc   = kbc.getCkcp();
                    nckcp = kbc.getNckcp();
                }
                else
                {
                    ckc   = kbc.getCkca();
                    nckca = kbc.getNckca();
                }
                npts = ckc.Length;

                for (j = 0; j < npts; j++)
                {
                    iline = @in.ReadLine();

                    tokens = StringUtil.breakStringList(iline.Trim(), " \t", StringUtil.DELIM_SKIP_BLANKS);
                    if (nckca == null)
                    {
                        // Processing perennial crop...
                        nckcp[j] = StringUtil.atoi((string)tokens[0]);
                        ckc[j]   = StringUtil.atod((string)tokens[1]);
                    }
                    else
                    {
                        // Processing annual crop...
                        nckca[j] = StringUtil.atoi((string)tokens[0]);
                        ckc[j]   = StringUtil.atod((string)tokens[1]);
                    }
                }

                // add the StateCU_BlaneyCriddle to the vector...
                kbc_Vector.Add(kbc);
            }
            if (@in != null)
            {
                @in.Close();
            }
            return(kbc_Vector);
        }
        /// <summary>
        /// Returns the data that should be placed in the JTable
        /// at the given row and column. </summary>
        /// <param name="row"> the row for which to return data. </param>
        /// <param name="col"> the column for which to return data. </param>
        /// <returns> the data that should be placed in the JTable at the given row and col. </returns>
        public virtual object getValueAt(int row, int col)
        {
            if (_sortOrder != null)
            {
                row = _sortOrder[row];
            }

            StateCU_CropCharacteristics crop = (StateCU_CropCharacteristics)_data.get(row);

            if (__singleCrop)
            {
                switch (col)
                {
                case __COL_NAME:
                    return(crop.getName());

                case __COL_DAY_PCT:
                    if (__blaneyCriddle == null)
                    {
                        return(new int?(0));
                    }
                    if (__dayNotPercent)
                    {
                        return(new int?(__blaneyCriddle.getNckcp(row)));
                    }
                    else
                    {
                        return(new int?(__blaneyCriddle.getNckca(row)));
                    }

                case __COL_VALUE:
                    if (__blaneyCriddle == null)
                    {
                        return(new double?(0));
                    }

                    if (__dayNotPercent)
                    {
                        return(new double?(__blaneyCriddle.getCkcp(row)));
                    }
                    else
                    {
                        return(new double?(__blaneyCriddle.getCkca(row)));
                    }
                }
            }
            else
            {
                switch (col)
                {
                case __COL_NAME:
                    return(crop.getName());

                case __COL_GDATE1:
                    return(new int?(crop.getGdate1()));

                case __COL_GDATE2:
                    return(new int?(crop.getGdate2()));

                case __COL_GDATE3:
                    return(new int?(crop.getGdate3()));

                case __COL_GDATE4:
                    return(new int?(crop.getGdate4()));

                case __COL_GDATE5:
                    return(new int?(crop.getGdate5()));

                case __COL_GDATES:
                    return(new int?(crop.getGdates()));

                case __COL_TMOIS1:
                    return(new double?(crop.getTmois1()));

                case __COL_TMOIS2:
                    return(new double?(crop.getTmois2()));

                case __COL_MAD:
                    return(new double?(crop.getMad()));

                case __COL_IRX:
                    return(new double?(crop.getIrx()));

                case __COL_FRX:
                    return(new double?(crop.getFrx()));

                case __COL_AWC:
                    return(new double?(crop.getAwc()));

                case __COL_APD:
                    return(new double?(crop.getApd()));

                case __COL_TFLAG1:
                    return(new int?(crop.getTflg1()));

                case __COL_TFLAG2:
                    return(new int?(crop.getTflg2()));

                case __COL_CUT2:
                    return(new int?(crop.getCut2()));

                case __COL_CUT3:
                    return(new int?(crop.getCut3()));
                }
            }
            return("");
        }