/* * Copyright 2013 Guidewire Software, Inc. */ package gw.internal.xml.xsd.typeprovider.simplevaluefactory; import gw.internal.xml.XmlDeserializationContext; import gw.internal.xml.XmlSerializationContext; import gw.internal.xml.XmlSimpleValueBase; import gw.lang.reflect.IType; import gw.lang.reflect.TypeSystem; import gw.util.Base64Util; import gw.util.concurrent.LockingLazyVar; import gw.xml.BinaryData; import gw.xml.XmlSimpleValue; import gw.xml.XmlSimpleValueException; import java.io.IOException; import java.util.Collections; import java.util.List; import javax.xml.namespace.QName; public class Base64BinarySimpleValueFactory extends XmlSimpleValueFactory { private static final LockingLazyVar<IType> TYPE = new LockingLazyVar<IType>() { @Override protected IType init() { return TypeSystem.get( BinaryData.class ); } }; @Override public IType getGosuValueType() { return TYPE.get(); } @Override protected XmlSimpleValue _gosuValueToStorageValue( Object gosuValue ) { return new Value( (BinaryData) gosuValue ); } @Override protected XmlSimpleValue _deserialize( XmlDeserializationContext context, String stringValue, boolean isDefault ) { BinaryData provider = new BinaryData(); provider.setBytes( Base64Util.decode( stringValue ) ); return new Value( provider ); } private class Value extends XmlSimpleValueBase { private BinaryData _value; public Value( BinaryData value ) { _value = value; } @Override public IType getGosuValueType() { return TYPE.get(); } @Override public Object _getGosuValue() { return _value; } @Override public String _getStringValue( boolean isEnumCode ) { try { return Base64Util.encode( _value.getBytes() ); } catch ( IOException e ) { throw new XmlSimpleValueException( "Unable to serialize Base64 value", e ); } } @Override public String _serialize( XmlSerializationContext context ) { return getStringValue(); } @Override public List<QName> _getQNames() { return Collections.emptyList(); } } }