package org.infinispan.query.distributed;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
import org.infinispan.commons.marshall.Externalizer;
import org.infinispan.commons.marshall.SerializeWith;
import org.infinispan.query.Transformable;
import org.infinispan.query.Transformer;
/**
* @author Sanne Grinovero <sanne@hibernate.org> (C) 2012 Red Hat Inc.
*/
@SerializeWith(NonSerializableKeyType.CustomExternalizer.class)
@Transformable(transformer = NonSerializableKeyType.CustomTransformer.class)
public class NonSerializableKeyType {
public final String keyValue;
public NonSerializableKeyType(final String keyValue) {
this.keyValue = keyValue;
}
@Override
public int hashCode() {
return keyValue.hashCode();
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
NonSerializableKeyType other = (NonSerializableKeyType) obj;
if (keyValue == null) {
if (other.keyValue != null)
return false;
} else if (!keyValue.equals(other.keyValue))
return false;
return true;
}
public static class CustomExternalizer implements Externalizer<NonSerializableKeyType> {
@Override
public void writeObject(ObjectOutput output, NonSerializableKeyType object) throws IOException {
output.writeUTF(object.keyValue);
}
@Override
public NonSerializableKeyType readObject(ObjectInput input) throws IOException, ClassNotFoundException {
return new NonSerializableKeyType(input.readUTF());
}
}
public static class CustomTransformer implements Transformer {
@Override
public Object fromString(String s) {
return new NonSerializableKeyType(s);
}
@Override
public String toString(Object customType) {
return ((NonSerializableKeyType)customType).keyValue;
}
}
}