📄 jco$metadata.java
字号:
// 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 + -