Migrate users of Builders/ImmutableNodes
[mdsal.git] / binding / mdsal-binding-dom-codec / src / main / java / org / opendaylight / mdsal / binding / dom / codec / impl / AnyxmlCodecContext.java
1 /*
2  * Copyright (c) 2019 PANTHEON.tech, s.r.o. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.mdsal.binding.dom.codec.impl;
9
10 import static com.google.common.base.Verify.verify;
11
12 import javax.xml.transform.dom.DOMSource;
13 import org.opendaylight.mdsal.binding.loader.BindingClassLoader;
14 import org.opendaylight.yangtools.yang.binding.OpaqueData;
15 import org.opendaylight.yangtools.yang.binding.OpaqueObject;
16 import org.opendaylight.yangtools.yang.data.api.schema.AnyxmlNode;
17 import org.opendaylight.yangtools.yang.data.api.schema.DOMSourceAnyxmlNode;
18 import org.opendaylight.yangtools.yang.data.api.schema.ForeignDataNode;
19 import org.opendaylight.yangtools.yang.data.spi.node.ImmutableNodes;
20 import org.opendaylight.yangtools.yang.model.api.AnyxmlSchemaNode;
21
22 final class AnyxmlCodecContext<T extends OpaqueObject<T>> extends AbstractOpaqueCodecContext<T> {
23     AnyxmlCodecContext(final AnyxmlSchemaNode schema, final String getterName, final Class<T> bindingClass,
24             final BindingClassLoader loader) {
25         super(schema, getterName, bindingClass, loader);
26     }
27
28     @Override
29     AnyxmlNode<?> serializedData(final OpaqueData<?> opaqueData) {
30         final var model = opaqueData.getObjectModel();
31         verify(DOMSource.class.isAssignableFrom(model), "Cannot just yet support object model %s", model);
32         return ImmutableNodes.newAnyxmlBuilder(DOMSource.class)
33             .withNodeIdentifier(getDomPathArgument())
34             .withValue((DOMSource) opaqueData.getData())
35             .build();
36     }
37
38     @Override
39     T deserialize(final ForeignDataNode<?> foreignData) {
40         // Streaming cannot support anything but DOMSource-based AnyxmlNodes.
41         verify(foreignData instanceof DOMSourceAnyxmlNode, "Variable node %s not supported yet", foreignData);
42         return super.deserialize(foreignData);
43     }
44 }