/* This file is part of the db4o object database http://www.db4o.com
Copyright (C) 2004 - 2011 Versant Corporation http://www.versant.com
db4o is free software; you can redistribute it and/or modify it under
the terms of version 3 of the GNU General Public License as published
by the Free Software Foundation.
db4o is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License along
with this program. If not, see http://www.gnu.org/licenses/. */
package com.db4o.internal.handlers.net;
import com.db4o.foundation.*;
import com.db4o.internal.handlers.*;
import com.db4o.reflect.*;
import com.db4o.reflect.generic.*;
/**
* @exclude
* @sharpen.ignore
*/
@decaf.Ignore(decaf.Platform.JDK11)
public abstract class NetSimpleTypeHandler extends NetTypeHandler implements GenericConverter{
private final Reflector _reflector;
private final String _name;
private final int _typeID;
private final int _byteCount;
public NetSimpleTypeHandler(Reflector reflector, int typeID, int byteCount) {
super();
_name = dotNetClassName();
_typeID = typeID;
_byteCount = byteCount;
_reflector = reflector;
}
public ReflectClass classReflector(){
if(_classReflector == null){
_classReflector = _reflector.forName(_name);
}
return _classReflector;
}
public Object defaultValue() {
return new byte[_byteCount];
}
public Object primitiveNull() {
return defaultValue();
}
public String getName() {
return _name;
}
public int typeID() {
return _typeID;
}
public void write(Object obj, byte[] bytes, int offset) {
byte[] objBytes = bytesFor(obj);
System.arraycopy(objBytes, 0, bytes, offset, objBytes.length);
}
public Object read(byte[] bytes, int offset) {
byte[] ret = new byte[_byteCount];
System.arraycopy(bytes, offset, ret, 0, ret.length);
GenericObject go = new GenericObject((GenericClass)classReflector());
go.set(0, ret);
return go;
}
GenericObject genericObject(Object obj) {
if(obj != null) {
return (GenericObject)obj;
}
GenericObject go = new GenericObject((GenericClass)classReflector());
go.set(0, defaultValue());
return go;
}
byte[] genericObjectBytes(Object obj) {
GenericObject go = genericObject(obj);
return (byte[])go.get(0);
}
byte[] bytesFor(Object obj) {
if(obj instanceof byte[]) {
return (byte[])obj;
}
return genericObjectBytes(obj);
}
public String toString(GenericObject obj) {
return toString((byte[])obj.get(0));
}
public String toString(GenericArray array) {
return Iterators.toString(array.iterator());
}
/** @param bytes */
public String toString(byte[] bytes) {
return ""; //$NON-NLS-1$
}
}