141 lines
3.4 KiB
Java
141 lines
3.4 KiB
Java
package org.apache.commons.beanutils;
|
|
|
|
import java.io.IOException;
|
|
import java.io.ObjectInputStream;
|
|
import java.io.ObjectOutputStream;
|
|
import java.io.Serializable;
|
|
import java.io.StreamCorruptedException;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
|
|
public class DynaProperty implements Serializable {
|
|
private static final int BOOLEAN_TYPE = 1;
|
|
|
|
private static final int BYTE_TYPE = 2;
|
|
|
|
private static final int CHAR_TYPE = 3;
|
|
|
|
private static final int DOUBLE_TYPE = 4;
|
|
|
|
private static final int FLOAT_TYPE = 5;
|
|
|
|
private static final int INT_TYPE = 6;
|
|
|
|
private static final int LONG_TYPE = 7;
|
|
|
|
private static final int SHORT_TYPE = 8;
|
|
|
|
protected String name;
|
|
|
|
protected transient Class type;
|
|
|
|
public DynaProperty(String name) {
|
|
this(name, Object.class);
|
|
}
|
|
|
|
public DynaProperty(String name, Class type) {
|
|
this.name = null;
|
|
this.type = null;
|
|
this.name = name;
|
|
this.type = type;
|
|
}
|
|
|
|
public String getName() {
|
|
return this.name;
|
|
}
|
|
|
|
public Class getType() {
|
|
return this.type;
|
|
}
|
|
|
|
public boolean isIndexed() {
|
|
if (this.type == null)
|
|
return false;
|
|
if (this.type.isArray())
|
|
return true;
|
|
if (List.class.isAssignableFrom(this.type))
|
|
return true;
|
|
return false;
|
|
}
|
|
|
|
public boolean isMapped() {
|
|
if (this.type == null)
|
|
return false;
|
|
return Map.class.isAssignableFrom(this.type);
|
|
}
|
|
|
|
public String toString() {
|
|
StringBuffer sb = new StringBuffer("DynaProperty[name=");
|
|
sb.append(this.name);
|
|
sb.append(",type=");
|
|
sb.append(this.type);
|
|
sb.append("]");
|
|
return sb.toString();
|
|
}
|
|
|
|
private void writeObject(ObjectOutputStream out) throws IOException {
|
|
int primitiveType = 0;
|
|
if (boolean.class.equals(this.type)) {
|
|
primitiveType = 1;
|
|
} else if (byte.class.equals(this.type)) {
|
|
primitiveType = 2;
|
|
} else if (char.class.equals(this.type)) {
|
|
primitiveType = 3;
|
|
} else if (double.class.equals(this.type)) {
|
|
primitiveType = 4;
|
|
} else if (float.class.equals(this.type)) {
|
|
primitiveType = 5;
|
|
} else if (int.class.equals(this.type)) {
|
|
primitiveType = 6;
|
|
} else if (long.class.equals(this.type)) {
|
|
primitiveType = 7;
|
|
} else if (short.class.equals(this.type)) {
|
|
primitiveType = 8;
|
|
}
|
|
if (primitiveType == 0) {
|
|
out.writeBoolean(false);
|
|
out.writeObject(this.type);
|
|
} else {
|
|
out.writeBoolean(true);
|
|
out.writeInt(primitiveType);
|
|
}
|
|
out.defaultWriteObject();
|
|
}
|
|
|
|
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
|
|
if (in.readBoolean()) {
|
|
switch (in.readInt()) {
|
|
case 1:
|
|
this.type = boolean.class;
|
|
break;
|
|
case 2:
|
|
this.type = byte.class;
|
|
break;
|
|
case 3:
|
|
this.type = char.class;
|
|
break;
|
|
case 4:
|
|
this.type = double.class;
|
|
break;
|
|
case 5:
|
|
this.type = float.class;
|
|
break;
|
|
case 6:
|
|
this.type = int.class;
|
|
break;
|
|
case 7:
|
|
this.type = long.class;
|
|
break;
|
|
case 8:
|
|
this.type = short.class;
|
|
break;
|
|
default:
|
|
throw new StreamCorruptedException("Invalid primitive type. Check version of beanutils used to serialize is compatible.");
|
|
}
|
|
} else {
|
|
this.type = (Class)in.readObject();
|
|
}
|
|
in.defaultReadObject();
|
|
}
|
|
}
|