+ public BindingToNormalizedNodeCodec(final ClassLoadingStrategy classLoadingStrategy,
+ final BindingNormalizedNodeCodecRegistry codecRegistry) {
+ this(classLoadingStrategy,codecRegistry,false);
+
+ }
+
+ public BindingToNormalizedNodeCodec(final ClassLoadingStrategy classLoadingStrategy,
+ final BindingNormalizedNodeCodecRegistry codecRegistry,final boolean waitForSchema) {
+ this.classLoadingStrategy = Preconditions.checkNotNull(classLoadingStrategy,"classLoadingStrategy");
+ this.codecRegistry = Preconditions.checkNotNull(codecRegistry,"codecRegistry");
+ this.futureSchema = new FutureSchema(WAIT_DURATION_SEC, TimeUnit.SECONDS, waitForSchema);
+ }
+
+ YangInstanceIdentifier toYangInstanceIdentifierBlocking(final InstanceIdentifier<? extends DataObject> binding) {
+ try {
+ return this.codecRegistry.toYangInstanceIdentifier(binding);
+ } catch (final MissingSchemaException e) {
+ waitForSchema(decompose(binding),e);
+ return this.codecRegistry.toYangInstanceIdentifier(binding);
+ }
+ }
+
+ /**
+ * Translates supplied Binding Instance Identifier into NormalizedNode
+ * instance identifier.
+ *
+ * @param binding
+ * Binding Instance Identifier
+ * @return DOM Instance Identifier
+ * @throws IllegalArgumentException
+ * If supplied Instance Identifier is not valid.
+ */
+ public YangInstanceIdentifier toNormalized(final InstanceIdentifier<? extends DataObject> binding) {
+ return this.codecRegistry.toYangInstanceIdentifier(binding);
+ }
+
+ @Override
+ public YangInstanceIdentifier toYangInstanceIdentifier(final InstanceIdentifier<?> binding) {
+ return this.codecRegistry.toYangInstanceIdentifier(binding);
+ }
+
+
+ YangInstanceIdentifier toYangInstanceIdentifierCached(final InstanceIdentifier<?> binding) {
+ return this.iiCache .getUnchecked(binding);
+ }
+
+ @Override
+ public <T extends DataObject> Entry<YangInstanceIdentifier, NormalizedNode<?, ?>> toNormalizedNode(
+ final InstanceIdentifier<T> path, final T data) {
+ return this.codecRegistry.toNormalizedNode(path, data);
+ }
+
+ /**
+ * Converts Binding Map.Entry to DOM Map.Entry
+ *
+ * Same as {@link #toNormalizedNode(InstanceIdentifier, DataObject)}.
+ *
+ * @param binding Map Entry with InstanceIdentifier as key and DataObject as value.
+ * @return DOM Map Entry with {@link YangInstanceIdentifier} as key and {@link NormalizedNode}
+ * as value.
+ */
+ @SuppressWarnings({"unchecked", "rawtypes"})
+ public Entry<YangInstanceIdentifier, NormalizedNode<?, ?>> toNormalizedNode(
+ final Entry<InstanceIdentifier<? extends DataObject>, DataObject> binding) {
+ return toNormalizedNode((InstanceIdentifier) binding.getKey(),binding.getValue());
+ }
+
+ @Override
+ public Entry<InstanceIdentifier<?>, DataObject> fromNormalizedNode(final YangInstanceIdentifier path,
+ final NormalizedNode<?, ?> data) {
+ return this.codecRegistry.fromNormalizedNode(path, data);
+ }
+
+ @Override
+ public Notification fromNormalizedNodeNotification(final SchemaPath path, final ContainerNode data) {
+ return this.codecRegistry.fromNormalizedNodeNotification(path, data);
+ }
+
+ @Override
+ public DataObject fromNormalizedNodeRpcData(final SchemaPath path, final ContainerNode data) {
+ return this.codecRegistry.fromNormalizedNodeRpcData(path, data);
+ }
+
+ @Override
+ public InstanceIdentifier<?> fromYangInstanceIdentifier(final YangInstanceIdentifier dom) {
+ return this.codecRegistry.fromYangInstanceIdentifier(dom);
+ }
+
+ @Override
+ public ContainerNode toNormalizedNodeNotification(final Notification data) {
+ return this.codecRegistry.toNormalizedNodeNotification(data);
+ }
+
+ @Override
+ public ContainerNode toNormalizedNodeRpcData(final DataContainer data) {
+ return this.codecRegistry.toNormalizedNodeRpcData(data);
+ }
+
+ /**
+ *
+ * Returns a Binding-Aware instance identifier from normalized
+ * instance-identifier if it is possible to create representation.
+ *
+ * Returns Optional.absent for cases where target is mixin node except
+ * augmentation.
+ *
+ */
+ public Optional<InstanceIdentifier<? extends DataObject>> toBinding(final YangInstanceIdentifier normalized)
+ throws DeserializationException {
+ try {
+ return Optional.<InstanceIdentifier<? extends DataObject>>fromNullable(this.codecRegistry.fromYangInstanceIdentifier(normalized));
+ } catch (final IllegalArgumentException e) {
+ return Optional.absent();
+ }