AbstractYangModelRegistrator updated to allow apps to attach end-points to the service models
Change-Id: I2f893d0f77730cecae961bb9233aefe3c49cf4b1
diff --git a/apps/yang/src/main/java/org/onosproject/yang/AbstractYangModelRegistrator.java b/apps/yang/src/main/java/org/onosproject/yang/AbstractYangModelRegistrator.java
index 55e2a06..9180e16 100644
--- a/apps/yang/src/main/java/org/onosproject/yang/AbstractYangModelRegistrator.java
+++ b/apps/yang/src/main/java/org/onosproject/yang/AbstractYangModelRegistrator.java
@@ -22,12 +22,17 @@
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.ReferenceCardinality;
import org.onosproject.yang.model.YangModel;
+import org.onosproject.yang.model.YangModuleId;
+import org.onosproject.yang.runtime.AppModuleInfo;
import org.onosproject.yang.runtime.DefaultModelRegistrationParam;
import org.onosproject.yang.runtime.ModelRegistrationParam;
+import org.onosproject.yang.runtime.ModelRegistrationParam.Builder;
import org.onosproject.yang.runtime.YangModelRegistry;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.util.Map;
+
import static org.onosproject.yang.runtime.helperutils.YangApacheUtils.getYangModel;
/**
@@ -38,10 +43,9 @@
private final Logger log = LoggerFactory.getLogger(getClass());
private final Class<?> loaderClass;
-
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
protected YangModelRegistry modelRegistry;
-
+ private Map<YangModuleId, AppModuleInfo> appInfo;
private YangModel model;
private ModelRegistrationParam registrationParam;
@@ -49,21 +53,46 @@
* Creates a model registrator primed with the class-loader of the specified
* class.
*
- * @param loaderClass class whose class loader is to be used for locating schema data
+ * @param loaderClass class whose class loader is to be used for locating
+ * schema data
*/
protected AbstractYangModelRegistrator(Class<?> loaderClass) {
this.loaderClass = loaderClass;
}
+ /**
+ * Creates a model registrator primed with the class-loader of the specified
+ * class and application info.
+ *
+ * @param loaderClass class whose class loader is to be used for locating
+ * schema data
+ * @param appInfo application information
+ */
+ protected AbstractYangModelRegistrator(Class<?> loaderClass,
+ Map<YangModuleId, AppModuleInfo> appInfo) {
+ this.loaderClass = loaderClass;
+ this.appInfo = appInfo;
+ }
+
@Activate
protected void activate() {
model = getYangModel(loaderClass);
- registrationParam = DefaultModelRegistrationParam.builder()
- .setYangModel(model).build();
+ ModelRegistrationParam.Builder b =
+ DefaultModelRegistrationParam.builder().setYangModel(model);
+ registrationParam = getAppInfo(b).setYangModel(model).build();
modelRegistry.registerModel(registrationParam);
log.info("Started");
}
+ private ModelRegistrationParam.Builder getAppInfo(Builder b) {
+ if (appInfo != null) {
+ appInfo.entrySet().stream().filter(
+ entry -> model.getYangModule(entry.getKey()) != null).forEach(
+ entry -> b.addAppModuleInfo(entry.getKey(), entry.getValue()));
+ }
+ return b;
+ }
+
@Deactivate
protected void deactivate() {
modelRegistry.unregisterModel(registrationParam);