/** * Copyright (c) <2013> <Radware Ltd.> and others. All rights reserved. * * This program and the accompanying materials are made available under the terms of the Eclipse Public License * v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html * @author Gera Goft * @version 0.1 */ package org.opendaylight.defense4all.framework.core; import java.nio.ByteBuffer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import me.prettyprint.cassandra.serializers.AbstractSerializer; import me.prettyprint.cassandra.serializers.StringSerializer; import me.prettyprint.hector.api.Serializer; import me.prettyprint.hom.PropertyMappingDefinition; import me.prettyprint.hom.converters.Converter; public class SerializersSerializer extends AbstractSerializer<Serializer<?>> implements Converter<Serializer<?>> { private static SerializersSerializer instance = new SerializersSerializer(); public static SerializersSerializer getInstance() {return instance;} Logger log = LoggerFactory.getLogger(this.getClass()); /* For AbstractSerializer */ @Override public ByteBuffer toByteBuffer(Serializer<?> serializer) { try { String serializerName = serializer.getClass().getCanonicalName(); return StringSerializer.get().toByteBuffer(serializerName); } catch (Throwable e) { log.error("Failed to convert." + e.getLocalizedMessage()); return null; } } @Override public Serializer<?> fromByteBuffer(ByteBuffer byteBuffer) { try { String serializerName = StringSerializer.get().fromByteBuffer(byteBuffer); return (Serializer<?>) Class.forName(serializerName).newInstance(); } catch (Throwable e) { log.error("Failed to convert." + e.getLocalizedMessage()); return null; } } /* For Converter */ public Serializer<?> convertCassTypeToObjType(PropertyMappingDefinition md, byte[] serializedSerializer) { try { String serializerName = StringSerializer.get().fromBytes(serializedSerializer); return (Serializer<?>) Class.forName(serializerName).newInstance(); } catch (Throwable e) { log.error("Failed to convert." + e.getLocalizedMessage()); return null; } } public byte[] convertObjTypeToCassType(Serializer<?> serializer) { try { String serializerName = serializer.getClass().getCanonicalName(); return StringSerializer.get().toBytes(serializerName); } catch (Throwable e) { log.error("Failed to convert." + e.getLocalizedMessage()); return null; } } /* For serialization to/from UTF strings */ public String toString(Serializer<?> serializer) { return serializer.getClass().getCanonicalName(); } public Serializer<?> fromString(String serializerName) { try { return (Serializer<?>) Class.forName(serializerName).newInstance(); } catch (Throwable e) { log.error("Failed to convert." + e.getLocalizedMessage()); return null; } } }