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

📄 jco$metadata.java

📁 SAP这个系统的一个转换器
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
// Decompiled by Jad v1.5.8e2. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://kpdus.tripod.com/jad.html
// Decompiler options: packimports(3) 
// Source File Name:   JCO.java

package com.sap.mw.jco;

import java.io.*;
import java.util.Hashtable;

// Referenced classes of package com.sap.mw.jco:
//            IMetaData, IExtendedFieldMetaData, JCO

public static class JCO$MetaData
    implements IMetaData, Cloneable, Serializable
{
    protected class Type1Data
        implements Cloneable, Serializable
    {

        public Object clone()
        {
            try
            {
                Type1Data obj = (Type1Data)super.clone();
                obj.copy(this);
                return obj;
            }
            catch(CloneNotSupportedException ex)
            {
                return null;
            }
        }

        protected void copy(Type1Data type1Data)
        {
            if(type1Data == null)
            {
                return;
            } else
            {
                ensureCapacity(type1Data.num_fields);
                num_fields = type1Data.num_fields;
                System.arraycopy(type1Data.name, 0, name, 0, num_fields);
                System.arraycopy(type1Data.offset, 0, offset, 0, num_fields);
                System.arraycopy(type1Data.boffset, 0, boffset, 0, num_fields);
                System.arraycopy(type1Data.length, 0, length, 0, num_fields);
                System.arraycopy(type1Data.blength, 0, blength, 0, num_fields);
                System.arraycopy(type1Data.type, 0, type, 0, num_fields);
                System.arraycopy(type1Data.decimals, 0, decimals, 0, num_fields);
                System.arraycopy(type1Data.flags, 0, flags, 0, num_fields);
                return;
            }
        }

        private void ensureCapacity(int capacity)
        {
            if(name.length < capacity)
            {
                String old_name[] = name;
                name = new String[capacity];
                System.arraycopy(old_name, 0, name, 0, old_name.length);
                int old_offset[] = offset;
                offset = new int[capacity];
                System.arraycopy(old_offset, 0, offset, 0, old_offset.length);
                int old_boffset[] = boffset;
                boffset = new int[capacity];
                System.arraycopy(old_boffset, 0, boffset, 0, old_boffset.length);
                int old_length[] = length;
                length = new int[capacity];
                System.arraycopy(old_length, 0, length, 0, old_length.length);
                int old_blength[] = blength;
                blength = new int[capacity];
                System.arraycopy(old_blength, 0, blength, 0, old_blength.length);
                byte old_type[] = type;
                type = new byte[capacity];
                System.arraycopy(old_type, 0, type, 0, old_type.length);
                byte old_decimals[] = decimals;
                decimals = new byte[capacity];
                System.arraycopy(old_decimals, 0, decimals, 0, old_decimals.length);
                byte old_flags[] = flags;
                flags = new byte[capacity];
                System.arraycopy(old_flags, 0, flags, 0, old_flags.length);
            }
        }

        private int countNumFields(JCO.MetaData metaData, int fieldCount)
        {
            for(int i = 0; i < metaData.getNumFields(); i++)
                if(metaData.getType(i) == 17)
                    fieldCount = countNumFields((JCO.MetaData)metaData.getMetaData(i), fieldCount);
                else
                    fieldCount++;

            return fieldCount;
        }

        protected void constructMetaData()
        {
            num_fields = countNumFields(JCO.MetaData.this, 0);
            ensureCapacity(num_fields);
            constructMetaData(JCO.MetaData.this, 0, "", 0);
            boffset[0] = 0;
            for(int i = 0; i < num_fields - 1; i++)
                boffset[i + 1] = boffset[i] + blength[i];

        }

        private final int constructMetaData(JCO.MetaData metaData, int pos, String prefix, int structOffset)
        {
            for(int i = 0; i < metaData.getNumFields(); i++)
                if(metaData.getType(i) == 17)
                {
                    pos = constructMetaData((JCO.MetaData)metaData.getMetaData(i), pos, prefix + metaData.name[i] + '-', structOffset + metaData.offset[i]);
                } else
                {
                    name[pos] = prefix + metaData.name[i];
                    offset[pos] = structOffset + metaData.offset[i];
                    length[pos] = metaData.length[i];
                    blength[pos] = metaData.blength[i];
                    type[pos] = metaData.type[i];
                    decimals[pos] = metaData.decimals[i];
                    flags[pos] = metaData.flags[i];
                    pos++;
                }

            return pos;
        }

        protected void internalSize(JCO.DataSize size)
        {
            for(int i = name.length; --i >= 0;)
                size.addMetaDataBytes(name[i].length() * 2);

            size.addMetaDataBytes(num_fields * 4 * 4);
            size.addMetaDataBytes(num_fields * 1 * 3);
        }

        private static final long serialVersionUID = 0x199d2b6fe1L;
        protected String name[];
        protected int offset[];
        protected int length[];
        protected int boffset[];
        protected int blength[];
        protected byte type[];
        protected byte decimals[];
        protected byte flags[];
        protected int num_fields;

        protected Type1Data()
        {
            name = new String[0];
            offset = new int[0];
            length = new int[0];
            boffset = new int[0];
            blength = new int[0];
            type = new byte[0];
            decimals = new byte[0];
            flags = new byte[0];
            num_fields = 0;
        }
    }


    protected void internalSize(JCO$DataSize size)
    {
        if(isNestedType1Structure() && type1_data != null)
            type1_data.internalSize(size);
        for(int i = name.length; --i >= 0;)
            size.addMetaDataBytes(name[i].length() * 2);

        size.addMetaDataBytes(num_fields * 4 * 4);
        size.addMetaDataBytes(num_fields * 1 * 3);
    }

    protected int getObjectId()
    {
        return super.hashCode();
    }

    protected String getUnicodeTypeAsString()
    {
        switch(getUnicodeType())
        {
        case 0: // '\0'
            return "nuc/uc compatible";

        case 1: // '\001'
            return "nuc";

        case 2: // '\002'
            return "uc";

        case 3: // '\003'
            return "mixed";
        }
        return "error";
    }

    protected byte getUnicodeType()
    {
        if(unicode_type == 4)
        {
            unicode_type = 0;
            for(int i = 0; i < num_fields; i++)
                switch(type[i])
                {
                default:
                    break;

                case 0: // '\0'
                case 1: // '\001'
                case 3: // '\003'
                case 6: // '\006'
                    if(length[i] == blength[i])
                    {
                        unicode_type |= 1;
                        break;
                    }
                    if(length[i] == blength[i] * 2)
                        unicode_type |= 2;
                    else
                        unicode_type |= 3;
                    break;

                case 17: // '\021'
                case 99: // 'c'
                    try
                    {
                        if(tab_meta[i] != null)
                            unicode_type |= ((JCO$MetaData)tab_meta[i]).getUnicodeType();
                        else
                            unicode_type |= ((JCO$MetaData)((JCO$Record)this).ata[oindex[i]]).getUnicodeType();
                    }
                    catch(ClassCastException ex) { }
                    catch(NullPointerException ex)
                    {
                        JCO.fireTrace(1, "null in tab_meta/odata [" + rec_name + " at field " + i + " type " + getTypeAsString(i) + "]");
                    }
                    break;
                }

        }
        return unicode_type;
    }

    public boolean equals(Object obj)
    {
        if(obj == null || !(obj instanceof IMetaData))
            return false;
        IMetaData m = (IMetaData)obj;
        if(num_fields != m.getFieldCount())
            return false;
        for(int i = 0; i < num_fields; i++)
        {
            if(type[i] != m.getType(i))
                return false;
            if(length[i] != m.getInternalLength(i))
                return false;
            if(!name[i].equals(m.getName(i)))
                return false;
            if(decimals[i] != m.getDecimals(i))
                return false;
            if(type[i] == 17 || type[i] == 99)
            {
                Object o1 = getTabName(i);
                Object o2 = m.getTabName(i);
                if(o1 != null && o2 != null && !o1.equals(o2))
                    return false;
                if(o1 != null && o2 == null)
                    return false;
                if(o1 == null && o2 != null)
                    return false;
            }
        }

        return true;
    }

    public int hashCode()
    {
        int hashcode = 1;
        for(int i = 0; i < num_fields; i++)
        {
            hashcode = 31 * hashcode + type[i];
            hashcode = 31 * hashcode + length[i];
            hashcode = 31 * hashcode + name[i].hashCode();
            hashcode = 31 * hashcode + decimals[i];
            if(type[i] == 17 || type[i] == 99)
            {
                Object o = getTabName(i);
                hashcode = 31 * hashcode + (o != null ? o.hashCode() : 0);
            }
        }

        return hashcode;
    }

    public Object clone()
    {
        try
        {
            JCO$MetaData obj = (JCO$MetaData)super.clone();
            obj.copy(this);
            obj.flags = (byte[])flags.clone();
            return obj;
        }
        catch(CloneNotSupportedException ex)
        {
            return null;
        }
    }

    protected void copy(IMetaData obj)
    {
        if(obj == null)
            return;
        ensureCapacity(obj.getFieldCount());
        setTabLength(obj.getTabLength());
        rec_name = obj.getName();
        if(obj instanceof JCO$MetaData)
        {
            JCO$MetaData meta = (JCO$MetaData)obj;
            num_fields = meta.num_fields;
            num_odata = meta.num_odata;
            type_handle = meta.type_handle;
            System.arraycopy(meta.name, 0, name, 0, num_fields);
            System.arraycopy(((Object) (meta.tab_meta)), 0, ((Object) (tab_meta)), 0, num_fields);
            System.arraycopy(meta.offset, 0, offset, 0, num_fields);
            System.arraycopy(meta.boffset, 0, boffset, 0, num_fields);
            System.arraycopy(meta.length, 0, length, 0, num_fields);
            System.arraycopy(meta.blength, 0, blength, 0, num_fields);
            System.arraycopy(meta.type, 0, type, 0, num_fields);
            System.arraycopy(meta.decimals, 0, decimals, 0, num_fields);
            System.arraycopy(meta.oindex, 0, oindex, 0, num_fields);
            System.arraycopy(meta.flags, 0, this.flags, 0, num_fields);
            if(meta.defaults != null)
                defaults = (String[])meta.defaults.clone();
            if(meta.description != null)
                description = (String[])meta.description.clone();
            if(meta.extended_field_meta_data != null)
                extended_field_meta_data = (IExtendedFieldMetaData[])meta.extended_field_meta_data.clone();
            if(meta.type1_data != null)
                type1_data = (Type1Data)meta.type1_data.clone();
            type_name = meta.type_name;
        } else
        {
            int n = obj.getFieldCount();
            for(int i = 0; i < n; i++)
            {
                int flags = (obj.isOptional(i) ? 4 : 0) | (obj.isExport(i) ? 2 : 0) | (obj.isImport(i) ? 1 : 0) | (obj.isNestedType1Structure(i) ? 0x80 : 0);
                addInfo(obj.getName(i), obj.getType(i), obj.getLength(i), obj.getInternalLength(i), obj.getOffset(i), obj.getDecimals(i), obj.getDefault(i), obj.getDescription(i), flags, obj.getTabName(i), obj.getExtendedFieldMetaData(i));
            }

            if(obj.isNestedType1Structure())
            {
                type1_data = new Type1Data();
                type1_data.constructMetaData();
            }
        }
    }

    private void ensureCapacity(int capacity)
    {
        if(defaults != null && defaults.length < capacity)
        {
            String old_defaults[] = defaults;
            defaults = new String[capacity];
            System.arraycopy(old_defaults, 0, defaults, 0, num_fields);
        }
        if(description != null && description.length < capacity)
        {
            String old_description[] = description;
            description = new String[capacity];
            System.arraycopy(old_description, 0, description, 0, num_fields);
        }
        if(extended_field_meta_data != null && extended_field_meta_data.length < capacity)
        {
            IExtendedFieldMetaData old_extended_field_meta_data[] = extended_field_meta_data;
            extended_field_meta_data = new IExtendedFieldMetaData[capacity];
            System.arraycopy(old_extended_field_meta_data, 0, extended_field_meta_data, 0, num_fields);
        }
        if(name.length >= capacity)
        {
            return;
        } else
        {
            String old_name[] = name;
            name = new String[capacity];
            System.arraycopy(old_name, 0, name, 0, num_fields);
            Object old_tab_meta[] = tab_meta;
            tab_meta = new Object[capacity];
            System.arraycopy(((Object) (old_tab_meta)), 0, ((Object) (tab_meta)), 0, num_fields);
            int old_offset[] = offset;
            offset = new int[capacity];
            System.arraycopy(old_offset, 0, offset, 0, num_fields);
            int old_boffset[] = boffset;
            boffset = new int[capacity];
            System.arraycopy(old_boffset, 0, boffset, 0, num_fields);
            int old_length[] = length;
            length = new int[capacity];
            System.arraycopy(old_length, 0, length, 0, num_fields);
            int old_blength[] = blength;
            blength = new int[capacity];
            System.arraycopy(old_blength, 0, blength, 0, num_fields);
            byte old_type[] = type;
            type = new byte[capacity];
            System.arraycopy(old_type, 0, type, 0, num_fields);
            byte old_decimals[] = decimals;
            decimals = new byte[capacity];
            System.arraycopy(old_decimals, 0, decimals, 0, num_fields);
            byte old_oindex[] = oindex;
            oindex = new byte[capacity];
            System.arraycopy(old_oindex, 0, oindex, 0, num_fields);
            byte old_flags[] = flags;
            flags = new byte[capacity];
            System.arraycopy(old_flags, 0, flags, 0, num_fields);
            return;
        }
    }

    public final int indexOf(String field_name)
    {
        if(hash_of_indices == null || name != null && hash_of_indices.size() < name.length)
        {
            hash_of_indices = new Hashtable(name.length);
            for(int i = 0; i < name.length; i++)
                hash_of_indices.put(name[i], new Integer(i));

        }
        Integer hindex = (Integer)hash_of_indices.get(field_name);
        if(hindex != null)
            return hindex.intValue();
        else
            throw new (127, "JCO_ERROR_FIELD_NOT_FOUND", "Field " + field_name + " not a member of " + rec_name);
    }

    public final boolean hasField(String field_name)
    {
        if(field_name == null)
            return false;
        if(hash_of_indices == null || name != null && hash_of_indices.size() < name.length)
        {
            hash_of_indices = new Hashtable(name.length);
            for(int i = 0; i < name.length; i++)
                hash_of_indices.put(name[i], new Integer(i));

⌨️ 快捷键说明

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