/// <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(""); }
/// <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; } }
/// <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)); } } } }
/// <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(""); }