import com.google.common.collect.ImmutableList
import org.opendaylight.yangtools.yang.binding.Augmentation
import java.util.concurrent.ConcurrentHashMap
+import org.opendaylight.yangtools.yang.binding.util.BindingReflections
class InstanceIdentifierCodecImpl implements InstanceIdentifierCodec {
private static val LOG = LoggerFactory.getLogger(InstanceIdentifierCodecImpl);
val CodecRegistry codecRegistry;
- val Map<Class<?>,QName> classToQName = new WeakHashMap;
val Map<Class<?>, Map<List<QName>, Class<?>>> classToPreviousAugment = new WeakHashMap;
public new(CodecRegistry registry) {
previousAugmentation = null;
} else {
- previousQName = resolveQname(baArg.type);
+ previousQName = codecRegistry.getQNameForAugmentation(baArg.type as Class);
previousAugmentation = baArg.type;
}
}
private def dispatch PathArgument serializePathArgument(Item argument, QName previousQname) {
val type = argument.type;
- val qname = resolveQname(type);
+ val qname = BindingReflections.findQName(type);
if(previousQname == null) {
return new NodeIdentifier(qname);
}
val Map<QName,Object> predicates = new HashMap();
val type = argument.type;
val keyCodec = codecRegistry.getIdentifierCodecForIdentifiable(type);
- val qname = resolveQname(type);
+ val qname = BindingReflections.findQName(type);
val combinedInput = new ValueWithQName(previousQname,argument.key)
val compositeOutput = keyCodec.serialize(combinedInput as ValueWithQName);
for(outputValue :compositeOutput.value) {
}
return new NodeIdentifierWithPredicates(QName.create(previousQname,qname.localName),predicates);
}
-
- def resolveQname(Class<?> class1) {
- val qname = classToQName.get(class1);
- if(qname !== null) {
- return qname;
- }
- val qnameField = class1.getField("QNAME");
- val qnameValue = qnameField.get(null) as QName;
- classToQName.put(class1,qnameValue);
- return qnameValue;
- }
}
\ No newline at end of file
import org.opendaylight.yangtools.yang.binding.DataContainer;
import org.opendaylight.yangtools.yang.binding.DataObject;
import org.opendaylight.yangtools.yang.binding.Identifier;
+import org.opendaylight.yangtools.yang.binding.util.BindingReflections;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.data.api.CompositeNode;
import org.opendaylight.yangtools.yang.data.api.Node;
}
return codec;
}
+
+ @Override
+ public QName getQNameForAugmentation(Class<?> cls) {
+ checkArgument(Augmentation.class.isAssignableFrom(cls));
+ return getCodecForAugmentation((Class<? extends Augmentation>)cls).getAugmentationQName();
+ }
private static Class<? extends Augmentable<?>> getAugmentableArgumentFrom(
final Class<? extends Augmentation<?>> augmentation) {
Delegator<BindingCodec> {
private BindingCodec delegate;
+ private QName augmentationQName;
public AugmentationCodecWrapper(BindingCodec<Map<QName, Object>, Object> rawCodec) {
this.delegate = rawCodec;
+ this.augmentationQName = BindingReflections.findQName(rawCodec.getClass());
}
@Override
Object rawCodecValue = getDelegate().deserialize((Map<QName, Object>) input);
return new ValueWithQName<T>(input.getNodeType(), (T) rawCodecValue);
}
+
+ @Override
+ public QName getAugmentationQName() {
+ return augmentationQName;
+ }
}
private class IdentityCompositeCodec implements IdentitityCodec {