com.thoughtworks.xstream.mapper.LocalConversionMapper Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of org.apache.servicemix.bundles.xstream
Show all versions of org.apache.servicemix.bundles.xstream
This OSGi bundle wraps ${pkgArtifactId} ${pkgVersion} jar file.
/*
* Copyright (C) 2007, 2008 XStream Committers.
* All rights reserved.
*
* The software in this package is published under the terms of the BSD
* style license a copy of which has been included with this distribution in
* the LICENSE.txt file.
*
* Created on 06. November 2007 by Joerg Schaible
*/
package com.thoughtworks.xstream.mapper;
import com.thoughtworks.xstream.converters.Converter;
import com.thoughtworks.xstream.converters.SingleValueConverter;
import com.thoughtworks.xstream.core.util.FastField;
import java.util.HashMap;
import java.util.Map;
/**
* A Mapper for locally defined converters for a member field.
*
* @author Jörg Schaible
* @since 1.3
*/
public class LocalConversionMapper extends MapperWrapper {
private final Map localConverters = new HashMap();
private transient AttributeMapper attributeMapper;
/**
* Constructs a LocalConversionMapper.
*
* @param wrapped
* @since 1.3
*/
public LocalConversionMapper(Mapper wrapped) {
super(wrapped);
readResolve();
}
public void registerLocalConverter(Class definedIn, String fieldName, Converter converter) {
localConverters.put(new FastField(definedIn, fieldName), converter);
}
public Converter getLocalConverter(Class definedIn, String fieldName) {
return (Converter)localConverters.get(new FastField(definedIn, fieldName));
}
public SingleValueConverter getConverterFromAttribute(Class definedIn, String attribute,
Class type) {
SingleValueConverter converter = getLocalSingleValueConverter(
definedIn, attribute, type);
return converter == null
? super.getConverterFromAttribute(definedIn, attribute, type)
: converter;
}
public SingleValueConverter getConverterFromItemType(String fieldName, Class type,
Class definedIn) {
SingleValueConverter converter = getLocalSingleValueConverter(
definedIn, fieldName, type);
return converter == null
? super.getConverterFromItemType(fieldName, type, definedIn)
: converter;
}
private SingleValueConverter getLocalSingleValueConverter(Class definedIn,
String fieldName, Class type) {
if (attributeMapper != null
&& attributeMapper.shouldLookForSingleValueConverter(fieldName, type, definedIn)) {
Converter converter = getLocalConverter(definedIn, fieldName);
if (converter != null && converter instanceof SingleValueConverter) {
return (SingleValueConverter)converter;
}
}
return null;
}
private Object readResolve() {
this.attributeMapper = (AttributeMapper)lookupMapperOfType(AttributeMapper.class);
return this;
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy