package com.webobjects.eocontrol;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.ObjectStreamField;
import com.webobjects.foundation._NSUtilities;
/**
* Better hashing for long values
*
* @author ak
*
*/
public class _EOIntegralKeyGlobalID extends EOKeyGlobalID {
public static final Class _CLASS = _NSUtilities._classWithFullySpecifiedName("com.webobjects.eocontrol._EOIntegralKeyGlobalID");
static final long serialVersionUID = 8168566851552998142L;
private Number keyValue;
private static final String SerializationKeyValueFieldKey = "keyValue";
private static final ObjectStreamField serialPersistentFields[];
static {
serialPersistentFields = (new ObjectStreamField[] { new ObjectStreamField("keyValue", _NSUtilities._NumberClass) });
}
public _EOIntegralKeyGlobalID(String entityName, Number value) {
super(entityName, _hashCode(entityName, value));
keyValue = value;
}
public _EOIntegralKeyGlobalID(String entityName, Object values[]) {
this(entityName, (Number) values[0]);
}
@Override
public Object clone() {
_EOIntegralKeyGlobalID result = new _EOIntegralKeyGlobalID(_literalEntityName(), keyValue);
_prepClone(result);
return result;
}
@Override
public Object[] keyValues() {
return (new Object[] { keyValue });
}
@Override
public Object[] _keyValuesNoCopy() {
return keyValues();
}
@Override
public int keyCount() {
return 1;
}
@Override
public String toString() {
StringBuilder result = new StringBuilder(_NSUtilities.shortClassName(this));
result.append('[');
result.append(entityName());
result.append(" (");
result.append(keyValue.getClass().getName());
result.append(')');
result.append(keyValue);
result.append(']');
return result.toString();
}
@Override
public boolean equals(Object obj) {
if (obj == this)
return true;
if (!(obj instanceof _EOIntegralKeyGlobalID))
return false;
_EOIntegralKeyGlobalID other = (_EOIntegralKeyGlobalID) obj;
String entityName = _literalEntityName();
String otherEntityName = other._literalEntityName();
if (entityName == otherEntityName && keyValue == other.keyValue)
return true;
if (!keyValue.equals(other.keyValue))
return false;
if (hashCode() != other.hashCode())
return false;
return entityName.equals(otherEntityName);
}
private static int _hashCode(String entityName, Number value) {
int hashCode = entityName.hashCode();
if (value != null) {
long longValue = value.longValue();
hashCode ^= longValue;
hashCode ^= (longValue >> 16L);
hashCode ^= (longValue >> 32L);
hashCode ^= (longValue >> 48L);
}
return hashCode == 0 ? 42 : hashCode;
}
private void writeObject(ObjectOutputStream s) throws IOException {
java.io.ObjectOutputStream.PutField fields = s.putFields();
fields.put("keyValue", keyValue);
s.writeFields();
}
private void readObject(ObjectInputStream s) throws IOException, ClassNotFoundException {
java.io.ObjectInputStream.GetField fields = null;
fields = s.readFields();
keyValue = (Number) fields.get("keyValue", null);
if (keyValue == null)
throw new IOException("key value must not be a null reference.");
}
}