From 25952d26001a7ef4a04f713312f864b8af397f69 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Wed, 27 Mar 2019 16:31:07 +0100 Subject: [PATCH] Add Opaque{Data,Object} interfaces This adds the baseline interfaces needed for generating manifestations of anydata and anyxml node sin Binding world. Since they are conceptually the same and cannot have the same identifier, we can support them with a single BindingObject sub-interface. JIRA: MDSAL-428 Change-Id: I7d7e0ff6c7bcd7d2375d50c4e976bf68d4e47143 Signed-off-by: Robert Varga --- .../yangtools/yang/binding/OpaqueData.java | 35 +++++++++++++++++++ .../yangtools/yang/binding/OpaqueObject.java | 30 ++++++++++++++++ 2 files changed, 65 insertions(+) create mode 100644 binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/OpaqueData.java create mode 100644 binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/OpaqueObject.java diff --git a/binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/OpaqueData.java b/binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/OpaqueData.java new file mode 100644 index 0000000000..6825b83ccf --- /dev/null +++ b/binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/OpaqueData.java @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2019 PANTHEON.tech, s.r.o. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.yangtools.yang.binding; + +import com.google.common.annotations.Beta; +import org.eclipse.jdt.annotation.NonNull; +import org.opendaylight.yangtools.concepts.Immutable; + +/** + * An immutable view of data. Data representation identity is available through {@link #getObjectModel()} and the actual + * data is available through {@link #getData()}. + * + * @param Data object model type + */ +@Beta +public interface OpaqueData extends Immutable { + /** + * Return the object model class, which identifies it. + * + * @return Object model class + */ + @NonNull Class getObjectModel(); + + /** + * Return the data in associated object model. + * + * @return Data held in this object. + */ + @NonNull T getData(); +} diff --git a/binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/OpaqueObject.java b/binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/OpaqueObject.java new file mode 100644 index 0000000000..e136586098 --- /dev/null +++ b/binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/OpaqueObject.java @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2019 PANTHEON.tech, s.r.o. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.yangtools.yang.binding; + +import com.google.common.annotations.Beta; + +/** + * An opaque object. This interface supports code generation for both {@code anyxml} and {@code anydata}. Both of these + * statements essentially share the same characteristic of storing data whose actual schema and representation is not + * known at compile-time. Schema may be unknown even at runtime, and furthermore the representation may vary during + * run-time, based on source of the data. + * + *

+ * The code generation is therefore limited to a single interface, which only provides the default implementation + * of {@link #implementedInterface()} bound to itself. The value is communicated through {@link #getValue()}, which + * is only an encapsulation holding information about the object model and the data in that object model. + * + * @param Generated interface + */ +@Beta +public interface OpaqueObject> extends BindingObject, DataContainer, + ValueAware> { + @Override + Class implementedInterface(); +} -- 2.36.6