[ONOS-5088] YANG SBI Broker Implementation.
Change-Id: Ibe87e095a4c209c54e3e90aceca0ec9097c5ede0
diff --git a/apps/yms/app/src/main/java/org/onosproject/yms/app/ych/defaultcodecs/CodecHandlerFactory.java b/apps/yms/app/src/main/java/org/onosproject/yms/app/ych/defaultcodecs/CodecHandlerFactory.java
new file mode 100644
index 0000000..b734239
--- /dev/null
+++ b/apps/yms/app/src/main/java/org/onosproject/yms/app/ych/defaultcodecs/CodecHandlerFactory.java
@@ -0,0 +1,109 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * 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 org.onosproject.yms.app.ych.defaultcodecs;
+
+
+import org.onosproject.yms.app.ych.YchException;
+import org.onosproject.yms.app.ych.defaultcodecs.xml.XmlCodecHandler;
+import org.onosproject.yms.app.ych.defaultcodecs.xml.XmlCodecMultiInstanceHandler;
+import org.onosproject.yms.app.ych.defaultcodecs.xml.XmlCodecMultiInstanceLeafHandler;
+import org.onosproject.yms.app.ych.defaultcodecs.xml.XmlCodecSingleInstanceHandler;
+import org.onosproject.yms.app.ych.defaultcodecs.xml.XmlCodecSingleInstanceLeafHandler;
+import org.onosproject.yms.ych.YangProtocolEncodingFormat;
+import org.onosproject.yms.ydt.YdtContext;
+import org.onosproject.yms.ydt.YdtType;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import static org.onosproject.yms.ych.YangProtocolEncodingFormat.XML;
+import static org.onosproject.yms.ydt.YdtType.MULTI_INSTANCE_LEAF_VALUE_NODE;
+import static org.onosproject.yms.ydt.YdtType.MULTI_INSTANCE_NODE;
+import static org.onosproject.yms.ydt.YdtType.SINGLE_INSTANCE_LEAF_VALUE_NODE;
+import static org.onosproject.yms.ydt.YdtType.SINGLE_INSTANCE_NODE;
+
+/**
+ * Represents an YCH handle factory to create different types of YANG data tree
+ * node.
+ */
+public final class CodecHandlerFactory {
+
+ private static final Logger log =
+ LoggerFactory.getLogger(CodecHandlerFactory.class);
+ private static final String YDT_TYPE_ERROR = "YDT type is not supported.";
+
+ /**
+ * Map of xml codec handler.
+ */
+ private final Map<YdtType, XmlCodecHandler> handlerMap;
+
+ /**
+ * Creates a new codec handler factory.
+ */
+ private CodecHandlerFactory() {
+ handlerMap = new HashMap<>();
+ handlerMap.put(SINGLE_INSTANCE_NODE,
+ new XmlCodecSingleInstanceHandler());
+ handlerMap.put(MULTI_INSTANCE_NODE,
+ new XmlCodecMultiInstanceHandler());
+ handlerMap.put(SINGLE_INSTANCE_LEAF_VALUE_NODE,
+ new XmlCodecSingleInstanceLeafHandler());
+ handlerMap.put(MULTI_INSTANCE_LEAF_VALUE_NODE,
+ new XmlCodecMultiInstanceLeafHandler());
+ }
+
+ /**
+ * Returns YCH instance handler node instance.
+ *
+ * @param node YDT context node
+ * @param format data format type expected from driver
+ * @return returns YCH handler node instance
+ */
+ public XmlCodecHandler getCodecHandlerForContext(
+ YdtContext node,
+ YangProtocolEncodingFormat format) {
+ if (format == XML) {
+ XmlCodecHandler handler = handlerMap.get(node.getYdtType());
+ if (handler == null) {
+ throw new YchException(YDT_TYPE_ERROR + node.getYdtType());
+ }
+ return handler;
+ }
+ log.error("{} data format is not supported.", format);
+ return null;
+ }
+
+ /*
+ * Bill Pugh Singleton pattern. INSTANCE won't be instantiated until the
+ * LazyHolder class is loaded via a call to the instance() method below.
+ */
+ private static class LazyHolder {
+ private static final CodecHandlerFactory INSTANCE =
+ new CodecHandlerFactory();
+ }
+
+ /**
+ * Returns a reference to the Singleton Codec Handler factory.
+ *
+ * @return the singleton codec handler factory
+ */
+ public static CodecHandlerFactory instance() {
+ return LazyHolder.INSTANCE;
+ }
+}