⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 record.java

📁 Sequoia ERP是一个真正的企业级开源ERP解决方案。它提供的模块包括:电子商务应用(e-commerce), POS系统(point of sales),知识管理,存货与仓库管理
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* * $Id: Record.java 5462 2005-08-05 18:35:48Z jonesde $ * * Copyright (c) 2001-2003 The Open For Business Project - www.ofbiz.org * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT * OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * */package org.ofbiz.datafile;import java.io.Serializable;import java.text.NumberFormat;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.StringTokenizer;import java.util.NoSuchElementException;/** * Record * * @author     <a href="mailto:jonesde@ofbiz.org">David E. Jones</a> * @version    $Rev: 5462 $ * @since      2.0 */public class Record implements Serializable {    /** Contains a map with field data by name */    protected Map fields;    /** Contains the name of the record definition */    protected String recordName;    /** Contains the definition for the record */    protected transient ModelRecord modelRecord;    protected Record parentRecord = null;    protected List childRecords = new ArrayList();    /** 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();    }    /** Creates new Record from existing Map */    protected Record(ModelRecord modelRecord, Map 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() : new HashMap(fields));    }    public String getRecordName() {        return recordName;    }    public ModelRecord getModelRecord() {        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);    }    public String getString(String name) {        Object object = get(name);        if (object == null)            return null;        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);    }    public java.sql.Time getTime(String name) {        return (java.sql.Time) get(name);    }    public java.sql.Date getDate(String name) {        return (java.sql.Date) get(name);    }    public Integer getInteger(String name) {        return (Integer) get(name);    }    public Long getLong(String name) {        return (Long) get(name);    }    public Float getFloat(String name) {        return (Float) get(name);    }    public Double getDouble(String name) {        return (Double) get(name);    }    /** Sets the named field to the passed value, even if the value is null     * @param name The field name to set     * @param value The value to set     */    public void set(String name, Object value) {        set(name, value, true);    }    /** Sets the named field to the passed value. If value is null, it is only     *  set if the setIfNull parameter is true.     * @param name The field name to set     * @param value The value to set     * @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);        }    }    /**     * little endian reader for 2 byte short.     */    public final short readLEShort(byte[] byteArray) {        return  (short)(               (byteArray[1]&0xff) << 8 |               (byteArray[0]&0xff));    }    /**     * 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);    }    /**    * 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);    }    /** Sets the named field to the passed value, converting the value from a String to the corrent type using <code>Type.valueOf()</code>     * @param name The field name to set     * @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, new Double(number));        } // standard types        else if (fieldType.equals("java.lang.String") || fieldType.equals("String"))            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, new Short(readLEShort(value.getBytes())));

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -