Administrator
|
Oops, much more changes than what Eclipse showed me.
I 1st did only one change by hand, then used Ctrl+I and still saw this one change. I have certainly checked to not show white spaces changes somewhere. Anyway it's ok in file, enough of this. Jacques From: <[hidden email]> > Author: jleroux > Date: Wed Mar 17 10:33:35 2010 > New Revision: 924211 > > URL: http://svn.apache.org/viewvc?rev=924211&view=rev > Log: > Reformatted and cleaned following best practices > > Modified: > ofbiz/trunk/framework/datafile/src/org/ofbiz/datafile/Record.java > > Modified: ofbiz/trunk/framework/datafile/src/org/ofbiz/datafile/Record.java > URL: > http://svn.apache.org/viewvc/ofbiz/trunk/framework/datafile/src/org/ofbiz/datafile/Record.java?rev=924211&r1=924210&r2=924211&view=diff > ============================================================================== > --- ofbiz/trunk/framework/datafile/src/org/ofbiz/datafile/Record.java (original) > +++ ofbiz/trunk/framework/datafile/src/org/ofbiz/datafile/Record.java Wed Mar 17 10:33:35 2010 > @@ -54,89 +54,89 @@ public class Record implements Serializa > > /** Creates new Record */ > protected Record(ModelRecord modelRecord) { > - if (modelRecord == null) > - throw new IllegalArgumentException("Cannont create a Record with a null modelRecord parameter"); > - this.recordName = modelRecord.name; > - this.modelRecord = modelRecord; > - this.fields = new HashMap<String, Object>(); > + if (modelRecord == null) > + throw new IllegalArgumentException("Cannont create a Record with a null modelRecord parameter"); > + this.recordName = modelRecord.name; > + this.modelRecord = modelRecord; > + this.fields = new HashMap<String, Object>(); > } > > /** Creates new Record from existing Map */ > protected Record(ModelRecord modelRecord, Map<String, Object> fields) { > - if (modelRecord == null) > - throw new IllegalArgumentException("Cannont create a Record with a null modelRecord parameter"); > - this.recordName = modelRecord.name; > - this.modelRecord = modelRecord; > - this.fields = (fields == null ? new HashMap<String, Object>() : new HashMap<String, Object>(fields)); > + if (modelRecord == null) > + throw new IllegalArgumentException("Cannont create a Record with a null modelRecord parameter"); > + this.recordName = modelRecord.name; > + this.modelRecord = modelRecord; > + this.fields = (fields == null ? new HashMap<String, Object>() : new HashMap<String, Object>(fields)); > } > > public String getRecordName() { > - return recordName; > + return recordName; > } > > public ModelRecord getModelRecord() { > - if (modelRecord == null) { > - throw new IllegalStateException("[Record.getModelRecord] could not find modelRecord for recordName " + recordName); > - } > - return modelRecord; > + if (modelRecord == null) { > + throw new IllegalStateException("[Record.getModelRecord] could not find modelRecord for recordName " + recordName); > + } > + return modelRecord; > } > > public Object get(String name) { > - if (getModelRecord().getModelField(name) == null) { > - throw new IllegalArgumentException("[Record.get] \"" + name + "\" is not a field of " + recordName); > - // Debug.logWarning("[GenericRecord.get] \"" + name + "\" is not a field of " + recordName + ", but getting > anyway...", module); > - } > - return fields.get(name); > + if (getModelRecord().getModelField(name) == null) { > + throw new IllegalArgumentException("[Record.get] \"" + name + "\" is not a field of " + recordName); > + // Debug.logWarning("[GenericRecord.get] \"" + name + "\" is not a field of " + recordName + ", but getting anyway...", > module); > + } > + return fields.get(name); > } > > public String getString(String name) { > - Object object = get(name); > + Object object = get(name); > > - if (object == null) > - return null; > - if (object instanceof java.lang.String) > - return (String) object; > - else > - return object.toString(); > + if (object == null) > + return null; > + if (object instanceof java.lang.String) > + return (String) object; > + else > + return object.toString(); > } > > public String getStringAndEmpty(String name) { > - Object object = get(name); > + Object object = get(name); > > - if (object == null) > - return ""; > - if (object instanceof java.lang.String) > - return (String) object; > - else > - return object.toString(); > + if (object == null) > + return ""; > + if (object instanceof java.lang.String) > + return (String) object; > + else > + return object.toString(); > } > > public java.sql.Timestamp getTimestamp(String name) { > - return (java.sql.Timestamp) get(name); > + return (java.sql.Timestamp) get(name); > } > > public java.sql.Time getTime(String name) { > - return (java.sql.Time) get(name); > + return (java.sql.Time) get(name); > } > > public java.sql.Date getDate(String name) { > - return (java.sql.Date) get(name); > + return (java.sql.Date) get(name); > } > > public Integer getInteger(String name) { > - return (Integer) get(name); > + return (Integer) get(name); > } > > public Long getLong(String name) { > - return (Long) get(name); > + return (Long) get(name); > } > > public Float getFloat(String name) { > - return (Float) get(name); > + return (Float) get(name); > } > > public Double getDouble(String name) { > - return (Double) get(name); > + return (Double) get(name); > } > > /** Sets the named field to the passed value, even if the value is null > @@ -144,7 +144,7 @@ public class Record implements Serializa > * @param value The value to set > */ > public void set(String name, Object value) { > - set(name, value, true); > + set(name, value, true); > } > > /** Sets the named field to the passed value. If value is null, it is only > @@ -154,25 +154,25 @@ public class Record implements Serializa > * @param setIfNull Specifies whether or not to set the value if it is null > */ > public synchronized void set(String name, Object value, boolean setIfNull) { > - if (getModelRecord().getModelField(name) == null) { > - throw new IllegalArgumentException("[Record.set] \"" + name + "\" is not a field of " + recordName); > - // Debug.logWarning("[GenericRecord.set] \"" + name + "\" is not a field of " + recordName + ", but setting > anyway...", module); > - } > - if (value != null || setIfNull) { > - if (value instanceof Boolean) { > - value = ((Boolean) value).booleanValue() ? "Y" : "N"; > - } > - fields.put(name, value); > - } > + if (getModelRecord().getModelField(name) == null) { > + throw new IllegalArgumentException("[Record.set] \"" + name + "\" is not a field of " + recordName); > + // Debug.logWarning("[GenericRecord.set] \"" + name + "\" is not a field of " + recordName + ", but setting anyway...", > module); > + } > + if (value != null || setIfNull) { > + if (value instanceof Boolean) { > + value = ((Boolean) value).booleanValue() ? "Y" : "N"; > + } > + fields.put(name, value); > + } > } > > /** > * little endian reader for 2 byte short. > */ > public final short readLEShort(byte[] byteArray) { > - return (short)( > - (byteArray[1]&0xff) << 8 | > - (byteArray[0]&0xff)); > + return (short)( > + (byteArray[1]&0xff) << 8 | > + (byteArray[0]&0xff)); > > } > > @@ -180,26 +180,26 @@ public class Record implements Serializa > * little endian reader for 4 byte int. > */ > public final int readLEInt(byte []byteArray) { > - return > - (byteArray[3]) << 24 | > - (byteArray[2]&0xff) << 16 | > - (byteArray[1]&0xff) << 8 | > - (byteArray[0]&0xff); > + return > + (byteArray[3]) << 24 | > + (byteArray[2]&0xff) << 16 | > + (byteArray[1]&0xff) << 8 | > + (byteArray[0]&0xff); > } > > /** > - * little endian reader for 8 byte long. > - */ > + * little endian reader for 8 byte long. > + */ > public final long readLELong(byte []byteArray) { > - return > - (long)(byteArray[7]) << 56 | /* long cast needed or shift done modulo 32 */ > - (long)(byteArray[6]&0xff) << 48 | > - (long)(byteArray[5]&0xff) << 40 | > - (long)(byteArray[4]&0xff) << 32 | > - (long)(byteArray[3]&0xff) << 24 | > - (long)(byteArray[2]&0xff) << 16 | > - (long)(byteArray[1]&0xff) << 8 | > - (long)(byteArray[0]&0xff); > + return > + (long)(byteArray[7]) << 56 | /* long cast needed or shift done modulo 32 */ > + (long)(byteArray[6]&0xff) << 48 | > + (long)(byteArray[5]&0xff) << 40 | > + (long)(byteArray[4]&0xff) << 32 | > + (long)(byteArray[3]&0xff) << 24 | > + (long)(byteArray[2]&0xff) << 16 | > + (long)(byteArray[1]&0xff) << 8 | > + (long)(byteArray[0]&0xff); > } > > /** Sets the named field to the passed value, converting the value from a String to the current type using > <code>Type.valueOf()</code> > @@ -207,272 +207,272 @@ public class Record implements Serializa > * @param value The String value to convert and set > */ > public void setString(String name, String value) throws ParseException { > - if (name == null || value == null || value.equals("")) > - return; > - ModelField field = getModelRecord().getModelField(name); > - > - if (field == null) > - set(name, value); // this will get an error in the set() method... > - > - // if the string is all spaces ignore > - boolean nonSpace = false; > - > - for (int i = 0; i < value.length(); i++) { > - if (value.charAt(i) != ' ') { > - nonSpace = true; > - break; > - } > - } > - if (!nonSpace) > - return; > - > - // if (Debug.verboseOn()) Debug.logVerbose("Value: " + value, module); > - > - String fieldType = field.type; > - > - // first the custom types that need to be parsed > - if (fieldType.equals("CustomTimestamp")) { > - // this custom type will take a string a parse according to date formatting > - // string then put the result in a java.sql.Timestamp > - // a common timestamp format for flat files is with no separators: yyyyMMddHHmmss > - SimpleDateFormat sdf = new SimpleDateFormat(field.format); > - java.util.Date tempDate = sdf.parse(value); > - java.sql.Timestamp timestamp = new java.sql.Timestamp(tempDate.getTime()); > - > - set(name, timestamp); > - } else if (fieldType.equals("CustomDate")) { > - // a common date only format for flat files is with no separators: yyyyMMdd or MMddyyyy > - SimpleDateFormat sdf = new SimpleDateFormat(field.format); > - java.util.Date tempDate = sdf.parse(value); > - java.sql.Date date = new java.sql.Date(tempDate.getTime()); > - > - set(name, date); > - } else if (fieldType.equals("CustomTime")) { > - // a common time only format for flat files is with no separators: HHmmss > - SimpleDateFormat sdf = new SimpleDateFormat(field.format); > - java.util.Date tempDate = sdf.parse(value); > - java.sql.Time time = new java.sql.Time(tempDate.getTime()); > - > - set(name, time); > - } else if (fieldType.equals("FixedPointDouble")) { > - // this custom type will parse a fixed point number according to the number > - // of decimal places in the formatting string then place it in a Double > - NumberFormat nf = NumberFormat.getNumberInstance(); > - Number tempNum = nf.parse(value); > - double number = tempNum.doubleValue(); > - double decimalPlaces = Double.parseDouble(field.format); > - double divisor = Math.pow(10.0, decimalPlaces); > - > - number = number / divisor; > - set(name, Double.valueOf(number)); > - } // standard types > - else if (fieldType.equals("java.lang.String") || fieldType.equals("String")) > - if (field.format.equals("EncryptedString")) { > - String hashType = LoginServices.getHashType(); > - set(name, HashCrypt.getDigestHash(value, hashType)); > - } else { > - set(name, value); > - } > - else if (fieldType.equals("NullTerminatedString")) { > - int terminate = value.indexOf(0x0); > - set(name, terminate>0?value.substring(0,terminate):value); > - } else if (fieldType.equals("java.sql.Timestamp") || fieldType.equals("Timestamp")) > - set(name, java.sql.Timestamp.valueOf(value)); > - else if (fieldType.equals("java.sql.Time") || fieldType.equals("Time")) > - set(name, java.sql.Time.valueOf(value)); > - else if (fieldType.equals("java.sql.Date") || fieldType.equals("Date")) > - set(name, java.sql.Date.valueOf(value)); > - else if (fieldType.equals("java.lang.Integer") || fieldType.equals("Integer")) > - set(name, Integer.valueOf(value)); > - else if (fieldType.equals("java.lang.Long") || fieldType.equals("Long")) > - set(name, Long.valueOf(value)); > - else if (fieldType.equals("java.lang.Float") || fieldType.equals("Float")) > - set(name, Float.valueOf(value)); > - else if (fieldType.equals("java.lang.Double") || fieldType.equals("Double")) > - set(name, Double.valueOf(value)); > - else if (fieldType.equals("LEShort")) > - set(name, Short.valueOf(readLEShort(value.getBytes()))); > - else if (fieldType.equals("LEInteger")) > - set(name, Integer.valueOf(readLEInt(value.getBytes()))); > - else if (fieldType.equals("LELong")) > - set(name, Long.valueOf(readLELong(value.getBytes()))); > - else { > - throw new IllegalArgumentException("Field type " + fieldType + " not currently supported. Sorry."); > - } > + if (name == null || value == null || value.equals("")) > + return; > + ModelField field = getModelRecord().getModelField(name); > + > + if (field == null) > + set(name, value); // this will get an error in the set() method... > + > + // if the string is all spaces ignore > + boolean nonSpace = false; > + > + for (int i = 0; i < value.length(); i++) { > + if (value.charAt(i) != ' ') { > + nonSpace = true; > + break; > + } > + } > + if (!nonSpace) > + return; > + > + // if (Debug.verboseOn()) Debug.logVerbose("Value: " + value, module); > + > + String fieldType = field.type; > + > + // first the custom types that need to be parsed > + if (fieldType.equals("CustomTimestamp")) { > + // this custom type will take a string a parse according to date formatting > + // string then put the result in a java.sql.Timestamp > + // a common timestamp format for flat files is with no separators: yyyyMMddHHmmss > + SimpleDateFormat sdf = new SimpleDateFormat(field.format); > + java.util.Date tempDate = sdf.parse(value); > + java.sql.Timestamp timestamp = new java.sql.Timestamp(tempDate.getTime()); > + > + set(name, timestamp); > + } else if (fieldType.equals("CustomDate")) { > + // a common date only format for flat files is with no separators: yyyyMMdd or MMddyyyy > + SimpleDateFormat sdf = new SimpleDateFormat(field.format); > + java.util.Date tempDate = sdf.parse(value); > + java.sql.Date date = new java.sql.Date(tempDate.getTime()); > + > + set(name, date); > + } else if (fieldType.equals("CustomTime")) { > + // a common time only format for flat files is with no separators: HHmmss > + SimpleDateFormat sdf = new SimpleDateFormat(field.format); > + java.util.Date tempDate = sdf.parse(value); > + java.sql.Time time = new java.sql.Time(tempDate.getTime()); > + > + set(name, time); > + } else if (fieldType.equals("FixedPointDouble")) { > + // this custom type will parse a fixed point number according to the number > + // of decimal places in the formatting string then place it in a Double > + NumberFormat nf = NumberFormat.getNumberInstance(); > + Number tempNum = nf.parse(value); > + double number = tempNum.doubleValue(); > + double decimalPlaces = Double.parseDouble(field.format); > + double divisor = Math.pow(10.0, decimalPlaces); > + > + number = number / divisor; > + set(name, Double.valueOf(number)); > + } // standard types > + else if (fieldType.equals("java.lang.String") || fieldType.equals("String")) > + if (field.format.equals("EncryptedString")) { > + String hashType = LoginServices.getHashType(); > + set(name, HashCrypt.getDigestHash(value, hashType)); > + } else { > + set(name, value); > + } > + else if (fieldType.equals("NullTerminatedString")) { > + int terminate = value.indexOf(0x0); > + set(name, terminate>0?value.substring(0,terminate):value); > + } else if (fieldType.equals("java.sql.Timestamp") || fieldType.equals("Timestamp")) > + set(name, java.sql.Timestamp.valueOf(value)); > + else if (fieldType.equals("java.sql.Time") || fieldType.equals("Time")) > + set(name, java.sql.Time.valueOf(value)); > + else if (fieldType.equals("java.sql.Date") || fieldType.equals("Date")) > + set(name, java.sql.Date.valueOf(value)); > + else if (fieldType.equals("java.lang.Integer") || fieldType.equals("Integer")) > + set(name, Integer.valueOf(value)); > + else if (fieldType.equals("java.lang.Long") || fieldType.equals("Long")) > + set(name, Long.valueOf(value)); > + else if (fieldType.equals("java.lang.Float") || fieldType.equals("Float")) > + set(name, Float.valueOf(value)); > + else if (fieldType.equals("java.lang.Double") || fieldType.equals("Double")) > + set(name, Double.valueOf(value)); > + else if (fieldType.equals("LEShort")) > + set(name, Short.valueOf(readLEShort(value.getBytes()))); > + else if (fieldType.equals("LEInteger")) > + set(name, Integer.valueOf(readLEInt(value.getBytes()))); > + else if (fieldType.equals("LELong")) > + set(name, Long.valueOf(readLELong(value.getBytes()))); > + else { > + throw new IllegalArgumentException("Field type " + fieldType + " not currently supported. Sorry."); > + } > } > > public String getFixedString(String name) { > - if (name == null) > - return null; > - if (getModelRecord() == null) > - throw new IllegalArgumentException("Could not find modelrecord for field named \"" + name + "\""); > - ModelField field = getModelRecord().getModelField(name); > - > - if (field == null) > - throw new IllegalArgumentException("Could not find model for field named \"" + name + "\""); > - > - Object value = get(name); > - > - if (value == null) { > - return null; > - } > - > - String fieldType = field.type; > - String str = null; > - > - // first the custom types that need to be parsed > - if (fieldType.equals("CustomTimestamp")) { > - // a common timestamp format for flat files is with no separators: yyyyMMddHHmmss > - SimpleDateFormat sdf = new SimpleDateFormat(field.format); > - java.sql.Timestamp timestamp = (java.sql.Timestamp) value; > - > - str = sdf.format(new Date(timestamp.getTime())); > - } else if (fieldType.equals("CustomDate")) { > - // a common date only format for flat files is with no separators: yyyyMMdd or MMddyyyy > - SimpleDateFormat sdf = new SimpleDateFormat(field.format); > - java.sql.Date date = (java.sql.Date) value; > - > - str = sdf.format(new Date(date.getTime())); > - } else if (fieldType.equals("CustomTime")) { > - // a common time only format for flat files is with no separators: HHmmss > - SimpleDateFormat sdf = new SimpleDateFormat(field.format); > - java.sql.Time time = (java.sql.Time) value; > - > - str = sdf.format(new Date(time.getTime())); > - } else if (fieldType.equals("FixedPointDouble")) { > - // this custom type will parse a fixed point number according to the number > - // of decimal places in the formatting string then place it in a Double > - double decimalPlaces = Double.parseDouble(field.format); > - double multiplier = Math.pow(10.0, decimalPlaces); > - double dnum = multiplier * ((Double) value).doubleValue(); > - long number = Math.round(dnum); > - > - str = padFrontZeros(Long.toString(number), field.length); > - // if (Debug.infoOn()) Debug.logInfo("[Record.getFixedString] FixedPointDouble: multiplier=" + multiplier + ", > value=" + value + ", dnum=" + dnum + ", number=" + number + ", str=" + str, module); > - } // standard types > - else if (fieldType.equals("java.lang.String") || fieldType.equals("String")) > - str = value.toString(); > - else if (fieldType.equals("java.sql.Timestamp") || fieldType.equals("Timestamp")) > - str = value.toString(); > - else if (fieldType.equals("java.sql.Time") || fieldType.equals("Time")) > - str = value.toString(); > - else if (fieldType.equals("java.sql.Date") || fieldType.equals("Date")) > - str = value.toString(); > - // for all numbers, pad front with zeros if field length is specified > - else if (fieldType.equals("java.lang.Integer") || fieldType.equals("Integer")) > - str = padFrontZeros(value.toString(), field.length); > - else if (fieldType.equals("java.lang.Long") || fieldType.equals("Long")) > - str = padFrontZeros(value.toString(), field.length); > - else if (fieldType.equals("java.lang.Float") || fieldType.equals("Float")) > - str = padFrontZeros(value.toString(), field.length); > - else if (fieldType.equals("java.lang.Double") || fieldType.equals("Double")) > - str = padFrontZeros(value.toString(), field.length); > - else { > - throw new IllegalArgumentException("Field type " + fieldType + " not currently supported. Sorry."); > - } > - > - if (str != null && field.length > 0 && str.length() < field.length) { > - // pad the end with spaces > - StringBuilder strBuf = new StringBuilder(str); > - > - while (strBuf.length() < field.length) > - strBuf.append(' '); > - str = strBuf.toString(); > - } > - return str; > + if (name == null) > + return null; > + if (getModelRecord() == null) > + throw new IllegalArgumentException("Could not find modelrecord for field named \"" + name + "\""); > + ModelField field = getModelRecord().getModelField(name); > + > + if (field == null) > + throw new IllegalArgumentException("Could not find model for field named \"" + name + "\""); > + > + Object value = get(name); > + > + if (value == null) { > + return null; > + } > + > + String fieldType = field.type; > + String str = null; > + > + // first the custom types that need to be parsed > + if (fieldType.equals("CustomTimestamp")) { > + // a common timestamp format for flat files is with no separators: yyyyMMddHHmmss > + SimpleDateFormat sdf = new SimpleDateFormat(field.format); > + java.sql.Timestamp timestamp = (java.sql.Timestamp) value; > + > + str = sdf.format(new Date(timestamp.getTime())); > + } else if (fieldType.equals("CustomDate")) { > + // a common date only format for flat files is with no separators: yyyyMMdd or MMddyyyy > + SimpleDateFormat sdf = new SimpleDateFormat(field.format); > + java.sql.Date date = (java.sql.Date) value; > + > + str = sdf.format(new Date(date.getTime())); > + } else if (fieldType.equals("CustomTime")) { > + // a common time only format for flat files is with no separators: HHmmss > + SimpleDateFormat sdf = new SimpleDateFormat(field.format); > + java.sql.Time time = (java.sql.Time) value; > + > + str = sdf.format(new Date(time.getTime())); > + } else if (fieldType.equals("FixedPointDouble")) { > + // this custom type will parse a fixed point number according to the number > + // of decimal places in the formatting string then place it in a Double > + double decimalPlaces = Double.parseDouble(field.format); > + double multiplier = Math.pow(10.0, decimalPlaces); > + double dnum = multiplier * ((Double) value).doubleValue(); > + long number = Math.round(dnum); > + > + str = padFrontZeros(Long.toString(number), field.length); > + // if (Debug.infoOn()) Debug.logInfo("[Record.getFixedString] FixedPointDouble: multiplier=" + multiplier + ", value=" + > value + ", dnum=" + dnum + ", number=" + number + ", str=" + str, module); > + } // standard types > + else if (fieldType.equals("java.lang.String") || fieldType.equals("String")) > + str = value.toString(); > + else if (fieldType.equals("java.sql.Timestamp") || fieldType.equals("Timestamp")) > + str = value.toString(); > + else if (fieldType.equals("java.sql.Time") || fieldType.equals("Time")) > + str = value.toString(); > + else if (fieldType.equals("java.sql.Date") || fieldType.equals("Date")) > + str = value.toString(); > + // for all numbers, pad front with zeros if field length is specified > + else if (fieldType.equals("java.lang.Integer") || fieldType.equals("Integer")) > + str = padFrontZeros(value.toString(), field.length); > + else if (fieldType.equals("java.lang.Long") || fieldType.equals("Long")) > + str = padFrontZeros(value.toString(), field.length); > + else if (fieldType.equals("java.lang.Float") || fieldType.equals("Float")) > + str = padFrontZeros(value.toString(), field.length); > + else if (fieldType.equals("java.lang.Double") || fieldType.equals("Double")) > + str = padFrontZeros(value.toString(), field.length); > + else { > + throw new IllegalArgumentException("Field type " + fieldType + " not currently supported. Sorry."); > + } > + > + if (str != null && field.length > 0 && str.length() < field.length) { > + // pad the end with spaces > + StringBuilder strBuf = new StringBuilder(str); > + > + while (strBuf.length() < field.length) > + strBuf.append(' '); > + str = strBuf.toString(); > + } > + return str; > } > > public String writeLineString(ModelDataFile modelDataFile) throws DataFileException { > - ModelRecord modelRecord = getModelRecord(); > - boolean isFixedRecord = ModelDataFile.SEP_FIXED_RECORD.equals(modelDataFile.separatorStyle); > - boolean isFixedLength = ModelDataFile.SEP_FIXED_LENGTH.equals(modelDataFile.separatorStyle); > - boolean isDelimited = ModelDataFile.SEP_DELIMITED.equals(modelDataFile.separatorStyle); > - > - StringBuilder lineBuf = new StringBuilder(); > - > - for (ModelField modelField: modelRecord.fields) { > - String data = this.getFixedString(modelField.name); > - > - if (isDelimited && null != modelDataFile.textDelimiter) { > - lineBuf.append(modelDataFile.textDelimiter); > - } > - > - // if field is null (not set) then assume we want to pad the field > - char PAD_CHAR = ' '; > - > - if (data == null) { > - StringBuilder sb = new StringBuilder(""); > - > - for (int i = 0; i < modelField.length; i++) > - sb.append(PAD_CHAR); > - data = sb.toString(); > - } > - > - // Pad the record > - if (isFixedRecord) { > - while (modelField.position > lineBuf.length()) > - lineBuf.append(" "); > - } > - // if (Debug.infoOn()) Debug.logInfo("Field: " + modelField.name + " Position: " + modelField.position + " BufLen: " > + lineBuf.length(), module); > - > - // if (Debug.infoOn()) Debug.logInfo("Got data \"" + data + "\" for field " + modelField.name + " in record " + > modelRecord.name, module); > - if (modelField.length > 0 && data.length() != modelField.length) > - throw new DataFileException("Got field length " + data.length() + " but expected field length is " + > modelField.length + " for field \"" + > - modelField.name + "\" of record \"" + modelRecord.name + "\" data is: \"" + data + "\""); > - > - lineBuf.append(data); > - if (isDelimited) { > - if (null != modelDataFile.textDelimiter) { > - lineBuf.append(modelDataFile.textDelimiter); > - } > - lineBuf.append(modelDataFile.delimiter); > - } > - } > - > - if (isDelimited) { > - // just remove the last delimiter to finish clean, otherwise shows as extra column > - lineBuf.setLength(lineBuf.length() - 1); > - } > - > - if ((isFixedRecord || isFixedLength) && modelDataFile.recordLength > 0 && lineBuf.length() != modelDataFile.recordLength) > - throw new DataFileException("Got record length " + lineBuf.length() + " but expected record length is " + > modelDataFile.recordLength + > - " for record \"" + modelRecord.name + "\" data line is: \"" + lineBuf + "\""); > - > - // for convenience, insert the type-code in where it is looked for, if exists > - if (modelRecord.tcPosition > 0 && modelRecord.typeCode.length() > 0) { > - lineBuf.replace(modelRecord.tcPosition, modelRecord.tcPosition + modelRecord.tcLength, modelRecord.typeCode); > - } > + ModelRecord modelRecord = getModelRecord(); > + boolean isFixedRecord = ModelDataFile.SEP_FIXED_RECORD.equals(modelDataFile.separatorStyle); > + boolean isFixedLength = ModelDataFile.SEP_FIXED_LENGTH.equals(modelDataFile.separatorStyle); > + boolean isDelimited = ModelDataFile.SEP_DELIMITED.equals(modelDataFile.separatorStyle); > + > + StringBuilder lineBuf = new StringBuilder(); > + > + for (ModelField modelField: modelRecord.fields) { > + String data = this.getFixedString(modelField.name); > + > + if (isDelimited && null != modelDataFile.textDelimiter) { > + lineBuf.append(modelDataFile.textDelimiter); > + } > + > + // if field is null (not set) then assume we want to pad the field > + char PAD_CHAR = ' '; > + > + if (data == null) { > + StringBuilder sb = new StringBuilder(""); > + > + for (int i = 0; i < modelField.length; i++) > + sb.append(PAD_CHAR); > + data = sb.toString(); > + } > + > + // Pad the record > + if (isFixedRecord) { > + while (modelField.position > lineBuf.length()) > + lineBuf.append(" "); > + } > + // if (Debug.infoOn()) Debug.logInfo("Field: " + modelField.name + " Position: " + modelField.position + " BufLen: " + > lineBuf.length(), module); > + > + // if (Debug.infoOn()) Debug.logInfo("Got data \"" + data + "\" for field " + modelField.name + " in record " + > modelRecord.name, module); > + if (modelField.length > 0 && data.length() != modelField.length) > + throw new DataFileException("Got field length " + data.length() + " but expected field length is " + modelField.length + " for > field \"" + > + modelField.name + "\" of record \"" + modelRecord.name + "\" data is: \"" + data + "\""); > + > + lineBuf.append(data); > + if (isDelimited) { > + if (null != modelDataFile.textDelimiter) { > + lineBuf.append(modelDataFile.textDelimiter); > + } > + lineBuf.append(modelDataFile.delimiter); > + } > + } > + > + if (isDelimited) { > + // just remove the last delimiter to finish clean, otherwise shows as extra column > + lineBuf.setLength(lineBuf.length() - 1); > + } > + > + if ((isFixedRecord || isFixedLength) && modelDataFile.recordLength > 0 && lineBuf.length() != modelDataFile.recordLength) > + throw new DataFileException("Got record length " + lineBuf.length() + " but expected record length is " + > modelDataFile.recordLength + > + " for record \"" + modelRecord.name + "\" data line is: \"" + lineBuf + "\""); > + > + // for convenience, insert the type-code in where it is looked for, if exists > + if (modelRecord.tcPosition > 0 && modelRecord.typeCode.length() > 0) { > + lineBuf.replace(modelRecord.tcPosition, modelRecord.tcPosition + modelRecord.tcLength, modelRecord.typeCode); > + } > > - if (isFixedLength || isDelimited) > - lineBuf.append('\n'); > + if (isFixedLength || isDelimited) > + lineBuf.append('\n'); > > - return lineBuf.toString(); > + return lineBuf.toString(); > } > > String padFrontZeros(String str, int totalLength) { > - if (totalLength > 0 && str.length() < totalLength) { > - // pad the front with zeros > - StringBuilder zeros = new StringBuilder(); > - int numZeros = totalLength - str.length(); > - > - for (int i = 0; i < numZeros; i++) > - zeros.append('0'); > - zeros.append(str); > - return zeros.toString(); > - } else > - return str; > + if (totalLength > 0 && str.length() < totalLength) { > + // pad the front with zeros > + StringBuilder zeros = new StringBuilder(); > + int numZeros = totalLength - str.length(); > + > + for (int i = 0; i < numZeros; i++) > + zeros.append('0'); > + zeros.append(str); > + return zeros.toString(); > + } else > + return str; > } > > public Record getParentRecord() { > - return parentRecord; > + return parentRecord; > } > > public List<Record> getChildRecords() { > - return childRecords; > + return childRecords; > } > > public void addChildRecord(Record record) { > - childRecords.add(record); > + childRecords.add(record); > } > > /** Creates new Record > @@ -481,9 +481,9 @@ public class Record implements Serializa > * @return > */ > public static Record createRecord(ModelRecord modelRecord) throws DataFileException { > - Record record = new Record(modelRecord); > + Record record = new Record(modelRecord); > > - return record; > + return record; > } > > /** Creates new Record from existing fields Map > @@ -493,9 +493,9 @@ public class Record implements Serializa > * @return > */ > public static Record createRecord(ModelRecord modelRecord, Map<String, Object> fields) throws DataFileException { > - Record record = new Record(modelRecord, fields); > + Record record = new Record(modelRecord, fields); > > - return record; > + return record; > } > > /** > @@ -506,30 +506,30 @@ public class Record implements Serializa > * @return > */ > public static Record createRecord(String line, int lineNum, ModelRecord modelRecord) throws DataFileException { > - Record record = new Record(modelRecord); > + Record record = new Record(modelRecord); > > - for (ModelField modelField: modelRecord.fields) { > - String strVal = null; > + for (ModelField modelField: modelRecord.fields) { > + String strVal = null; > > > - try { > - strVal = line.substring(modelField.position, modelField.position + modelField.length); > - } catch (IndexOutOfBoundsException ioobe) { > - throw new DataFileException("Field " + modelField.name + " from " + modelField.position + > - " for " + modelField.length + " chars could not be read from a line (" + lineNum + ") with only " + > - line.length() + " chars.", ioobe); > - } > - try { > - record.setString(modelField.name, strVal); > - } catch (java.text.ParseException e) { > - throw new DataFileException("Could not parse field " + modelField.name + ", format string \"" + modelField.format > + "\" with value " + strVal + > - " on line " + lineNum, e); > - } catch (java.lang.NumberFormatException e) { > - throw new DataFileException("Number not valid for field " + modelField.name + ", format string \"" + > modelField.format + "\" with value " + > - strVal + " on line " + lineNum, e); > - } > - } > - return record; > + try { > + strVal = line.substring(modelField.position, modelField.position + modelField.length); > + } catch (IndexOutOfBoundsException ioobe) { > + throw new DataFileException("Field " + modelField.name + " from " + modelField.position + > + " for " + modelField.length + " chars could not be read from a line (" + lineNum + ") with only " + > + line.length() + " chars.", ioobe); > + } > + try { > + record.setString(modelField.name, strVal); > + } catch (java.text.ParseException e) { > + throw new DataFileException("Could not parse field " + modelField.name + ", format string \"" + modelField.format + "\" with > value " + strVal + > + " on line " + lineNum, e); > + } catch (java.lang.NumberFormatException e) { > + throw new DataFileException("Number not valid for field " + modelField.name + ", format string \"" + modelField.format + "\" > with value " + > + strVal + " on line " + lineNum, e); > + } > + } > + return record; > } > > /** > @@ -541,60 +541,58 @@ public class Record implements Serializa > * @return > */ > public static Record createDelimitedRecord(String line, int lineNum, ModelRecord modelRecord, char delimiter, String > textDelimiter) throws DataFileException { > - Record record = new Record(modelRecord); > + Record record = new Record(modelRecord); > > - StringTokenizer st = null; > - if (line.endsWith(String.valueOf(delimiter))) { > - st = new StringTokenizer(line + " ", "" + delimiter, true); > - } > - else { > - st = new StringTokenizer(line, "" + delimiter, true); > - } > - for (ModelField modelField: modelRecord.fields) { > - String strVal = null; > - > - if (modelField.expression) { > - if (UtilValidate.isNotEmpty(modelField.refField)) { > - strVal = record.getString(modelField.refField); > - } > - if (strVal == null) { > - strVal = (String)modelField.defaultValue; > - } > - } else { > - //some input lines may be less than the header model. > - if (st.hasMoreTokens()) { > - try { > - strVal = st.nextToken(); > - if (strVal.equals("" + delimiter)) { > - strVal = null; > - } else { > - if (st.hasMoreTokens()) { > - st.nextToken(); > - } > - } > - } catch (NoSuchElementException nsee) { > - throw new DataFileException("Field " + modelField.name + " could not be read from a line (" + lineNum + > ") with only " + > - line.length() + " chars.", nsee); > - } > - } > - else { //if input line is less than the header model then pad with null > - strVal = null; > - } > - } > - try { > - if (textDelimiter != null && (strVal.startsWith(textDelimiter) && strVal.endsWith(textDelimiter))) { > - strVal = strVal.substring(textDelimiter.length(), strVal.length() - textDelimiter.length()); > - } > - record.setString(modelField.name, strVal); > - } catch (java.text.ParseException e) { > - throw new DataFileException("Could not parse field " + modelField.name + ", format string \"" + modelField.format > + "\" with value " + strVal + > - " on line " + lineNum, e); > - } catch (java.lang.NumberFormatException e) { > - throw new DataFileException("Number not valid for field " + modelField.name + ", format string \"" + > modelField.format + "\" with value " + > - strVal + " on line " + lineNum, e); > - } > - } > - return record; > + StringTokenizer st = null; > + if (line.endsWith(String.valueOf(delimiter))) { > + st = new StringTokenizer(line + " ", "" + delimiter, true); > + } > + else { > + st = new StringTokenizer(line, "" + delimiter, true); > + } > + for (ModelField modelField: modelRecord.fields) { > + String strVal = null; > + > + if (modelField.expression) { > + if (UtilValidate.isNotEmpty(modelField.refField)) { > + strVal = record.getString(modelField.refField); > + } > + if (strVal == null) { > + strVal = (String)modelField.defaultValue; > + } > + } else { > + //some input lines may be less than the header model. > + if (st.hasMoreTokens()) { > + try { > + strVal = st.nextToken(); > + if (strVal.equals("" + delimiter)) { > + strVal = null; > + } else if (st.hasMoreTokens()) { > + st.nextToken(); > + } > + } catch (NoSuchElementException nsee) { > + throw new DataFileException("Field " + modelField.name + " could not be read from a line (" + lineNum + ") with only " + > + line.length() + " chars.", nsee); > + } > + } > + else { //if input line is less than the header model then pad with null > + strVal = null; > + } > + } > + try { > + if (textDelimiter != null && (strVal.startsWith(textDelimiter) && strVal.endsWith(textDelimiter))) { > + strVal = strVal.substring(textDelimiter.length(), strVal.length() - textDelimiter.length()); > + } > + record.setString(modelField.name, strVal); > + } catch (java.text.ParseException e) { > + throw new DataFileException("Could not parse field " + modelField.name + ", format string \"" + modelField.format + "\" with > value " + strVal + > + " on line " + lineNum, e); > + } catch (java.lang.NumberFormatException e) { > + throw new DataFileException("Number not valid for field " + modelField.name + ", format string \"" + modelField.format + "\" > with value " + > + strVal + " on line " + lineNum, e); > + } > + } > + return record; > } > > } > > |
Jacques Le Roux wrote:
> Oops, much more changes than what Eclipse showed me. > I 1st did only one change by hand, then used Ctrl+I and still saw this > one change. > I have certainly checked to not show white spaces changes somewhere. > Anyway it's ok in file, enough of this. > > Jacques Yeah, that's bad, thanks for self-discovering it. The following is a general purpose message, not directed at anyone in particular. == And, here is the real reason why I complain so much about formatting changes intermingled with real code changes. Yes, it's true, when you look at the file, as it stands *right now*, the formatting doesn't matter. Most good programmers can read a full file, and see the algorithm, with the formatting blurring into the background. However, that's simple. There's an adage somewhere that says 90% of the time is spent debugging. This includes just reading other people's code. As part of this process, you have to look at the *history* of the code. Part of looking at history is tracking down when a line *changed*. When looking in revision control history, you'll get a log message describing the change. Useful changelogs are very nice for doing future debugging of past work. If I'm trying to track down a reason for something, and I discover a changelog on the file that describes the reason, then I very happy. My work is done. However, generally I don't even know why my bug exists. I just know what line it's on. So, then I have to fall back on reading diffs of the various changes. Revision control can tell me when a line has changed(some better than others). When a line actually *has* changed, however, revision control doesn't know if it is spacing, or algorithmic. And, when you look at the diff, you don't see the whole algorithm, just the individual line, with maybe 3 lines of context before and after. That is not enough to see what is actually occuring. Having spacing changes and algorithmic changes intermingled means I have to spend extra effort understanding, and, in some cases, even checkout the whole previous version. This slows down the debugging process. This is why I harp so much on space changes. |
In reply to this post by Jacques Le Roux
so would a best practices be to do a CTRL A then CTRL I
on a file as a patch then make changes to the code. Pardon me I have seen the regex way but have not figure how to use it. ========================= BJ Freeman http://bjfreeman.elance.com Strategic Power Office with Supplier Automation <http://www.businessesnetwork.com/automation/viewforum.php?f=93> Specialtymarket.com <http://www.specialtymarket.com/> Systems Integrator-- Glad to Assist Chat Y! messenger: bjfr33man <http://www.linkedin.com/profile?viewProfile=&key=1237480&locale=en_US&trk=tab_pro> Adam Heath sent the following on 3/17/2010 10:51 AM: > Jacques Le Roux wrote: >> Oops, much more changes than what Eclipse showed me. >> I 1st did only one change by hand, then used Ctrl+I and still saw this >> one change. >> I have certainly checked to not show white spaces changes somewhere. >> Anyway it's ok in file, enough of this. >> >> Jacques > > Yeah, that's bad, thanks for self-discovering it. > > The following is a general purpose message, not directed at anyone in > particular. > > == > > And, here is the real reason why I complain so much about formatting > changes intermingled with real code changes. > > Yes, it's true, when you look at the file, as it stands *right now*, > the formatting doesn't matter. Most good programmers can read a full > file, and see the algorithm, with the formatting blurring into the > background. > > However, that's simple. > > There's an adage somewhere that says 90% of the time is spent > debugging. This includes just reading other people's code. As part > of this process, you have to look at the *history* of the code. Part > of looking at history is tracking down when a line *changed*. > > When looking in revision control history, you'll get a log message > describing the change. Useful changelogs are very nice for doing > future debugging of past work. If I'm trying to track down a reason > for something, and I discover a changelog on the file that describes > the reason, then I very happy. My work is done. > > However, generally I don't even know why my bug exists. I just know > what line it's on. So, then I have to fall back on reading diffs of > the various changes. > > Revision control can tell me when a line has changed(some better than > others). When a line actually *has* changed, however, revision > control doesn't know if it is spacing, or algorithmic. And, when you > look at the diff, you don't see the whole algorithm, just the > individual line, with maybe 3 lines of context before and after. That > is not enough to see what is actually occuring. > > Having spacing changes and algorithmic changes intermingled means I > have to spend extra effort understanding, and, in some cases, even > checkout the whole previous version. This slows down the debugging > process. > > This is why I harp so much on space changes. > |
Administrator
|
The best with Ctlr+I is to use it on snippets where it's really needed. Actually I don't use it much since I follow the conventions.
Sometimes it's useful though. Jacques From: "BJ Freeman" <[hidden email]> > so would a best practices be to do a CTRL A then CTRL I > on a file as a patch then make changes to the code. > > Pardon me I have seen the regex way but have not figure how to use it. > > ========================= > BJ Freeman > http://bjfreeman.elance.com > Strategic Power Office with Supplier Automation <http://www.businessesnetwork.com/automation/viewforum.php?f=93> > Specialtymarket.com <http://www.specialtymarket.com/> > > Systems Integrator-- Glad to Assist > > Chat Y! messenger: bjfr33man > <http://www.linkedin.com/profile?viewProfile=&key=1237480&locale=en_US&trk=tab_pro> > > > Adam Heath sent the following on 3/17/2010 10:51 AM: >> Jacques Le Roux wrote: >>> Oops, much more changes than what Eclipse showed me. >>> I 1st did only one change by hand, then used Ctrl+I and still saw this >>> one change. >>> I have certainly checked to not show white spaces changes somewhere. >>> Anyway it's ok in file, enough of this. >>> >>> Jacques >> >> Yeah, that's bad, thanks for self-discovering it. >> >> The following is a general purpose message, not directed at anyone in >> particular. >> >> == >> >> And, here is the real reason why I complain so much about formatting >> changes intermingled with real code changes. >> >> Yes, it's true, when you look at the file, as it stands *right now*, >> the formatting doesn't matter. Most good programmers can read a full >> file, and see the algorithm, with the formatting blurring into the >> background. >> >> However, that's simple. >> >> There's an adage somewhere that says 90% of the time is spent >> debugging. This includes just reading other people's code. As part >> of this process, you have to look at the *history* of the code. Part >> of looking at history is tracking down when a line *changed*. >> >> When looking in revision control history, you'll get a log message >> describing the change. Useful changelogs are very nice for doing >> future debugging of past work. If I'm trying to track down a reason >> for something, and I discover a changelog on the file that describes >> the reason, then I very happy. My work is done. >> >> However, generally I don't even know why my bug exists. I just know >> what line it's on. So, then I have to fall back on reading diffs of >> the various changes. >> >> Revision control can tell me when a line has changed(some better than >> others). When a line actually *has* changed, however, revision >> control doesn't know if it is spacing, or algorithmic. And, when you >> look at the diff, you don't see the whole algorithm, just the >> individual line, with maybe 3 lines of context before and after. That >> is not enough to see what is actually occuring. >> >> Having spacing changes and algorithmic changes intermingled means I >> have to spend extra effort understanding, and, in some cases, even >> checkout the whole previous version. This slows down the debugging >> process. >> >> This is why I harp so much on space changes. >> > > |
In reply to this post by BJ Freeman
thanks I have been on committer end in other projects.
so don't want to take up more of your time you so graciously donate. ========================= BJ Freeman http://bjfreeman.elance.com Strategic Power Office with Supplier Automation <http://www.businessesnetwork.com/automation/viewforum.php?f=93> Specialtymarket.com <http://www.specialtymarket.com/> Systems Integrator-- Glad to Assist Chat Y! messenger: bjfr33man <http://www.linkedin.com/profile?viewProfile=&key=1237480&locale=en_US&trk=tab_pro> Jacques Le Roux sent the following on 3/17/2010 2:08 PM: > The best with Ctlr+I is to use it on snippets where it's really needed. > Actually I don't use it much since I follow the conventions. Sometimes > it's useful though. > > Jacques > > From: "BJ Freeman" <[hidden email]> >> so would a best practices be to do a CTRL A then CTRL I >> on a file as a patch then make changes to the code. >> >> Pardon me I have seen the regex way but have not figure how to use it. >> >> ========================= >> BJ Freeman >> http://bjfreeman.elance.com >> Strategic Power Office with Supplier Automation >> <http://www.businessesnetwork.com/automation/viewforum.php?f=93> >> Specialtymarket.com <http://www.specialtymarket.com/> >> >> Systems Integrator-- Glad to Assist >> >> Chat Y! messenger: bjfr33man >> <http://www.linkedin.com/profile?viewProfile=&key=1237480&locale=en_US&trk=tab_pro> >> >> >> >> Adam Heath sent the following on 3/17/2010 10:51 AM: >>> Jacques Le Roux wrote: >>>> Oops, much more changes than what Eclipse showed me. >>>> I 1st did only one change by hand, then used Ctrl+I and still saw this >>>> one change. >>>> I have certainly checked to not show white spaces changes somewhere. >>>> Anyway it's ok in file, enough of this. >>>> >>>> Jacques >>> >>> Yeah, that's bad, thanks for self-discovering it. >>> >>> The following is a general purpose message, not directed at anyone in >>> particular. >>> >>> == >>> >>> And, here is the real reason why I complain so much about formatting >>> changes intermingled with real code changes. >>> >>> Yes, it's true, when you look at the file, as it stands *right now*, >>> the formatting doesn't matter. Most good programmers can read a full >>> file, and see the algorithm, with the formatting blurring into the >>> background. >>> >>> However, that's simple. >>> >>> There's an adage somewhere that says 90% of the time is spent >>> debugging. This includes just reading other people's code. As part >>> of this process, you have to look at the *history* of the code. Part >>> of looking at history is tracking down when a line *changed*. >>> >>> When looking in revision control history, you'll get a log message >>> describing the change. Useful changelogs are very nice for doing >>> future debugging of past work. If I'm trying to track down a reason >>> for something, and I discover a changelog on the file that describes >>> the reason, then I very happy. My work is done. >>> >>> However, generally I don't even know why my bug exists. I just know >>> what line it's on. So, then I have to fall back on reading diffs of >>> the various changes. >>> >>> Revision control can tell me when a line has changed(some better than >>> others). When a line actually *has* changed, however, revision >>> control doesn't know if it is spacing, or algorithmic. And, when you >>> look at the diff, you don't see the whole algorithm, just the >>> individual line, with maybe 3 lines of context before and after. That >>> is not enough to see what is actually occuring. >>> >>> Having spacing changes and algorithmic changes intermingled means I >>> have to spend extra effort understanding, and, in some cases, even >>> checkout the whole previous version. This slows down the debugging >>> process. >>> >>> This is why I harp so much on space changes. >>> >> >> > > > |
Administrator
|
You are welcome BJ!
Jacques From: "BJ Freeman" <[hidden email]> > thanks I have been on committer end in other projects. > so don't want to take up more of your time you so graciously donate. > > ========================= > BJ Freeman > http://bjfreeman.elance.com > Strategic Power Office with Supplier Automation <http://www.businessesnetwork.com/automation/viewforum.php?f=93> > Specialtymarket.com <http://www.specialtymarket.com/> > > Systems Integrator-- Glad to Assist > > Chat Y! messenger: bjfr33man > <http://www.linkedin.com/profile?viewProfile=&key=1237480&locale=en_US&trk=tab_pro> > > > Jacques Le Roux sent the following on 3/17/2010 2:08 PM: >> The best with Ctlr+I is to use it on snippets where it's really needed. >> Actually I don't use it much since I follow the conventions. Sometimes >> it's useful though. >> >> Jacques >> >> From: "BJ Freeman" <[hidden email]> >>> so would a best practices be to do a CTRL A then CTRL I >>> on a file as a patch then make changes to the code. >>> >>> Pardon me I have seen the regex way but have not figure how to use it. >>> >>> ========================= >>> BJ Freeman >>> http://bjfreeman.elance.com >>> Strategic Power Office with Supplier Automation >>> <http://www.businessesnetwork.com/automation/viewforum.php?f=93> >>> Specialtymarket.com <http://www.specialtymarket.com/> >>> >>> Systems Integrator-- Glad to Assist >>> >>> Chat Y! messenger: bjfr33man >>> <http://www.linkedin.com/profile?viewProfile=&key=1237480&locale=en_US&trk=tab_pro> >>> >>> >>> >>> Adam Heath sent the following on 3/17/2010 10:51 AM: >>>> Jacques Le Roux wrote: >>>>> Oops, much more changes than what Eclipse showed me. >>>>> I 1st did only one change by hand, then used Ctrl+I and still saw this >>>>> one change. >>>>> I have certainly checked to not show white spaces changes somewhere. >>>>> Anyway it's ok in file, enough of this. >>>>> >>>>> Jacques >>>> >>>> Yeah, that's bad, thanks for self-discovering it. >>>> >>>> The following is a general purpose message, not directed at anyone in >>>> particular. >>>> >>>> == >>>> >>>> And, here is the real reason why I complain so much about formatting >>>> changes intermingled with real code changes. >>>> >>>> Yes, it's true, when you look at the file, as it stands *right now*, >>>> the formatting doesn't matter. Most good programmers can read a full >>>> file, and see the algorithm, with the formatting blurring into the >>>> background. >>>> >>>> However, that's simple. >>>> >>>> There's an adage somewhere that says 90% of the time is spent >>>> debugging. This includes just reading other people's code. As part >>>> of this process, you have to look at the *history* of the code. Part >>>> of looking at history is tracking down when a line *changed*. >>>> >>>> When looking in revision control history, you'll get a log message >>>> describing the change. Useful changelogs are very nice for doing >>>> future debugging of past work. If I'm trying to track down a reason >>>> for something, and I discover a changelog on the file that describes >>>> the reason, then I very happy. My work is done. >>>> >>>> However, generally I don't even know why my bug exists. I just know >>>> what line it's on. So, then I have to fall back on reading diffs of >>>> the various changes. >>>> >>>> Revision control can tell me when a line has changed(some better than >>>> others). When a line actually *has* changed, however, revision >>>> control doesn't know if it is spacing, or algorithmic. And, when you >>>> look at the diff, you don't see the whole algorithm, just the >>>> individual line, with maybe 3 lines of context before and after. That >>>> is not enough to see what is actually occuring. >>>> >>>> Having spacing changes and algorithmic changes intermingled means I >>>> have to spend extra effort understanding, and, in some cases, even >>>> checkout the whole previous version. This slows down the debugging >>>> process. >>>> >>>> This is why I harp so much on space changes. >>>> >>> >>> >> >> >> > > |
Free forum by Nabble | Edit this page |