Fixed SubjectFactories to support app subject properly.
Change-Id: Ib9de2c0f4af815c54f18954d83f4259089274e91
diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/config/basics/SubjectFactories.java b/incubator/api/src/main/java/org/onosproject/incubator/net/config/basics/SubjectFactories.java
index fe548df..a91a352 100644
--- a/incubator/api/src/main/java/org/onosproject/incubator/net/config/basics/SubjectFactories.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/config/basics/SubjectFactories.java
@@ -16,6 +16,7 @@
package org.onosproject.incubator.net.config.basics;
import org.onosproject.core.ApplicationId;
+import org.onosproject.core.CoreService;
import org.onosproject.incubator.net.config.SubjectFactory;
import org.onosproject.net.ConnectPoint;
import org.onosproject.net.DeviceId;
@@ -33,12 +34,14 @@
private SubjectFactories() {
}
+ // Required for resolving application identifiers
+ private static CoreService coreService;
+
public static final SubjectFactory<ApplicationId> APP_SUBJECT_FACTORY =
new SubjectFactory<ApplicationId>(ApplicationId.class, "apps") {
@Override
public ApplicationId createSubject(String key) {
- // FIXME: figure out how to safely create sanctioned app ids
- return null;
+ return coreService.registerApplication(key);
}
};
@@ -77,4 +80,14 @@
}
};
+ /**
+ * Provides reference to the core service, which is required for
+ * application subject factory.
+ *
+ * @param service core service reference
+ */
+ public static void setCoreService(CoreService service) {
+ coreService = service;
+ }
+
}
diff --git a/incubator/net/src/main/java/org/onosproject/incubator/net/config/impl/BasicNetworkConfigs.java b/incubator/net/src/main/java/org/onosproject/incubator/net/config/impl/BasicNetworkConfigs.java
index 9356d34..4196aa8 100644
--- a/incubator/net/src/main/java/org/onosproject/incubator/net/config/impl/BasicNetworkConfigs.java
+++ b/incubator/net/src/main/java/org/onosproject/incubator/net/config/impl/BasicNetworkConfigs.java
@@ -21,12 +21,14 @@
import org.apache.felix.scr.annotations.Deactivate;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.ReferenceCardinality;
+import org.onosproject.core.CoreService;
import org.onosproject.incubator.net.config.ConfigFactory;
import org.onosproject.incubator.net.config.NetworkConfigRegistry;
import org.onosproject.incubator.net.config.basics.BasicDeviceConfig;
import org.onosproject.incubator.net.config.basics.BasicHostConfig;
import org.onosproject.incubator.net.config.basics.BasicLinkConfig;
import org.onosproject.incubator.net.config.basics.BasicPortConfig;
+import org.onosproject.incubator.net.config.basics.SubjectFactories;
import org.onosproject.net.ConnectPoint;
import org.onosproject.net.DeviceId;
import org.onosproject.net.HostId;
@@ -36,10 +38,7 @@
import java.util.Set;
-import static org.onosproject.incubator.net.config.basics.SubjectFactories.CONNECT_POINT_SUBJECT_FACTORY;
-import static org.onosproject.incubator.net.config.basics.SubjectFactories.DEVICE_SUBJECT_FACTORY;
-import static org.onosproject.incubator.net.config.basics.SubjectFactories.HOST_SUBJECT_FACTORY;
-import static org.onosproject.incubator.net.config.basics.SubjectFactories.LINK_SUBJECT_FACTORY;
+import static org.onosproject.incubator.net.config.basics.SubjectFactories.*;
/**
* Component for registration of builtin basic network configurations.
@@ -59,8 +58,8 @@
}
},
new ConfigFactory<ConnectPoint, BasicPortConfig>(CONNECT_POINT_SUBJECT_FACTORY,
- BasicPortConfig.class,
- "basic") {
+ BasicPortConfig.class,
+ "basic") {
@Override
public BasicPortConfig createConfig() {
return new BasicPortConfig();
@@ -85,10 +84,14 @@
);
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+ protected CoreService coreService;
+
+ @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
protected NetworkConfigRegistry registry;
@Activate
public void activate() {
+ SubjectFactories.setCoreService(coreService);
factories.forEach(registry::registerConfigFactory);
log.info("Started");
}