import java.util.List;
import java.util.Set;
-import org.opendaylight.yangtools.concepts.Codec;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter;
import org.opendaylight.yangtools.yang.data.codec.gson.helpers.IdentityValuesDTO;
inputValue = value;
}
- // FIXME: extract this as a cacheable context?
- final Codec<Object, Object> codec = codecs.codecFor(typeDefinition);
- if (codec == null) {
- return null;
- }
- return codec.deserialize(inputValue);
+ return codecs.codecFor(typeDefinition).deserialize(inputValue);
}
private static TypeDefinition<? extends Object> typeDefinition(final DataSchemaNode node) {
import com.google.common.annotations.Beta;
import com.google.common.base.Preconditions;
+import com.google.common.cache.CacheBuilder;
+import com.google.common.cache.CacheLoader;
+import com.google.common.cache.LoadingCache;
import org.opendaylight.yangtools.concepts.Codec;
import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
*/
@Beta
public final class RestCodecFactory {
+ private final LoadingCache<TypeDefinition<?>, Codec<Object, Object>> codecs =
+ CacheBuilder.newBuilder().softValues().build(new CacheLoader<TypeDefinition<?>, Codec<Object, Object>>() {
+ @Override
+ public Codec<Object, Object> load(final TypeDefinition<?> key) throws Exception {
+ return new ObjectCodec(utils, key);
+ }
+ });
private final SchemaContextUtils utils;
private RestCodecFactory(final SchemaContextUtils utils) {
}
public final Codec<Object, Object> codecFor(final TypeDefinition<?> typeDefinition) {
- // FIXME: implement loadingcache
- return new ObjectCodec(utils, typeDefinition);
+ return codecs.getUnchecked(typeDefinition);
}
}