/* * Copyright (C) 2014 Intel Corporation * All rights reserved. */ package com.intel.mtwilson.jooq.util; import com.intel.dcsg.cpg.io.UUID; import org.jooq.Converter; /** * * @author jbuhacoff */ public class UUIDConverter implements Converter<Object,UUID> { private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(UUIDConverter.class); @Override public UUID from(Object t) { if( t == null ) { return null; } log.debug("field class {}", t.getClass().getName()); log.debug("field value {}", t); if( t instanceof String ) { log.debug("field string bytes length {}", ((String)t).getBytes().length); // return UUID.valueOf((String)t); if( ((String)t).getBytes().length == 16 ) { log.debug("converting from 16-bytes uuid string {}", ((String)t).getBytes()); return UUID.valueOf(((String)t).getBytes()); } if( ((String)t).getBytes().length == 36 || ((String)t).getBytes().length == 32 ) { log.debug("converting from 36-char uuid string {}", ((String)t)); return UUID.valueOf((String)t); } throw new UnsupportedOperationException("Unrecognized UUID string format"); } if( t instanceof byte[] ) { log.debug("field byte array length {}", ((byte[])t).length); if( ((byte[])t).length == 16 ) { return UUID.valueOf((byte[])t); } if( ((byte[])t).length == 36 || ((byte[])t).length == 32 ) { return UUID.valueOf(new String((byte[])t)); } } if( t instanceof java.util.UUID ) { return UUID.valueOf( (java.util.UUID)t); } if( t instanceof java.math.BigInteger ) { return UUID.valueOf( (java.math.BigInteger)t); } throw new UnsupportedOperationException("Unsupported type for UUID: "+t.getClass().getName()); } @Override public Object to(UUID u) { return u.toString(); } @Override public Class<Object> fromType() { return Object.class; } @Override public Class<UUID> toType() { return UUID.class; } }