VPP composite reader APIs
authorMaros Marsalek <[email protected]>
Thu, 17 Mar 2016 08:55:18 +0000 (09:55 +0100)
committerMaros Marsalek <[email protected]>
Tue, 22 Mar 2016 09:44:33 +0000 (09:44 +0000)
Base APIs for composite and extensible VPP readers

Change-Id: Ic3d7c697fbffe40ab0d0ce3fea0a21cf89c652d0
Signed-off-by: Maros Marsalek <[email protected]>
v3po/impl/src/main/java/io/fd/honeycomb/v3po/impl/trans/ChildVppReader.java [new file with mode: 0644]
v3po/impl/src/main/java/io/fd/honeycomb/v3po/impl/trans/ReaderRegistry.java [new file with mode: 0644]
v3po/impl/src/main/java/io/fd/honeycomb/v3po/impl/trans/VppReader.java [new file with mode: 0644]

diff --git a/v3po/impl/src/main/java/io/fd/honeycomb/v3po/impl/trans/ChildVppReader.java b/v3po/impl/src/main/java/io/fd/honeycomb/v3po/impl/trans/ChildVppReader.java
new file mode 100644 (file)
index 0000000..5d57c60
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2016 Cisco and/or its affiliates.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.fd.honeycomb.v3po.impl.trans;
+
+import com.google.common.annotations.Beta;
+import javax.annotation.Nonnull;
+import org.opendaylight.yangtools.concepts.Builder;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+
+/**
+ * Child VPP reader allowing its parent to pass the builder object
+ */
+@Beta
+public interface ChildVppReader<C extends DataObject> extends VppReader<C> {
+
+    /**
+     * Read subtree starting from node managed by this reader and place the subtree within parent builder object if
+     * the data exists.
+     *
+     * @param id Unique identifier pointing to the node managed by this reader. Useful when necessary to determine
+     *           the exact position within more complex subtrees.
+     */
+    void read(@Nonnull final InstanceIdentifier<? extends DataObject> id,
+              @Nonnull final Builder<? extends DataObject> parentBuilder);
+
+}
+
diff --git a/v3po/impl/src/main/java/io/fd/honeycomb/v3po/impl/trans/ReaderRegistry.java b/v3po/impl/src/main/java/io/fd/honeycomb/v3po/impl/trans/ReaderRegistry.java
new file mode 100644 (file)
index 0000000..cea5c81
--- /dev/null
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2016 Cisco and/or its affiliates.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.fd.honeycomb.v3po.impl.trans;
+
+import java.util.List;
+import javax.annotation.Nonnull;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+
+/**
+ * Simple delegating reader suitable as a holder for all other root readers, providing readAll feature
+ */
+public interface ReaderRegistry extends VppReader<DataObject> {
+
+    @Nonnull List<? extends DataObject> readAll();
+}
diff --git a/v3po/impl/src/main/java/io/fd/honeycomb/v3po/impl/trans/VppReader.java b/v3po/impl/src/main/java/io/fd/honeycomb/v3po/impl/trans/VppReader.java
new file mode 100644 (file)
index 0000000..0033cfc
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2016 Cisco and/or its affiliates.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.fd.honeycomb.v3po.impl.trans;
+
+import com.google.common.annotations.Beta;
+import java.util.List;
+import javax.annotation.Nonnull;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+
+/**
+ * Base VPP reader, responsible for translation between DataObjects and VPP apis
+ */
+@Beta
+public interface VppReader<D extends DataObject> {
+
+    // TODO add vpp read context that will be shared by all readers during a single read to keep useful information
+    // preventing possible duplicate reads from VPP
+    // TODO make async
+
+    /**
+     * Reads from VPP data identified by id
+     *
+     * @param id unique identifier of subtree to be read.
+     *           The subtree must contain managed data object type enforcing it to point
+     *           to the node type managed by this reader or below. For identifiers pointing below
+     *           node managed by this reader, its reader's responsibility to filter out the right
+     *           node or to delegate the read to a child reader.
+     *
+     * @return  List of DataObjects identified by id. If the ID points to a single node, it will be wrapped in a list
+     */
+    @Nonnull List<? extends DataObject> read(@Nonnull final InstanceIdentifier<? extends DataObject> id);
+
+
+    /**
+     * Get the type of node managed by this reader
+     *
+     * @return Class object for node managed by this reader
+     */
+    @Nonnull InstanceIdentifier<D> getManagedDataObjectType();
+}