HONEYCOMB-360 - Utility for conditional initialization of HC guice modules 61/7361/7
authorMarek Gradzki <mgradzki@cisco.com>
Fri, 30 Jun 2017 19:53:23 +0000 (21:53 +0200)
committerMarek Gradzki <mgradzki@cisco.com>
Fri, 30 Jun 2017 20:06:27 +0000 (22:06 +0200)
Change-Id: Ia1a3f44c7dae0b4b0be99f96abb017e1b022ec32
Signed-off-by: Marek Gradzki <mgradzki@cisco.com>
Signed-off-by: Jan Srnicek <jsrnicek@cisco.com>
infra/northbound/common/pom.xml [new file with mode: 0644]
infra/northbound/common/src/main/java/io/fd/honeycomb/northbound/ConfigurationSupplier.java [new file with mode: 0644]
infra/northbound/common/src/main/java/io/fd/honeycomb/northbound/NorthboundAbstractModule.java [new file with mode: 0644]
infra/northbound/common/src/main/java/io/fd/honeycomb/northbound/NorthboundPrivateModule.java [new file with mode: 0644]
infra/northbound/pom.xml [new file with mode: 0644]
infra/pom.xml

diff --git a/infra/northbound/common/pom.xml b/infra/northbound/common/pom.xml
new file mode 100644 (file)
index 0000000..37381a3
--- /dev/null
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Copyright (c) 2017 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.
+  -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>impl-parent</artifactId>
+        <groupId>io.fd.honeycomb.common</groupId>
+        <version>1.17.07-SNAPSHOT</version>
+        <relativePath>../../../common/impl-parent</relativePath>
+    </parent>
+
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>io.fd.honeycomb.northbound</groupId>
+    <artifactId>common</artifactId>
+    <version>1.17.07-SNAPSHOT</version>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.google.inject</groupId>
+            <artifactId>guice</artifactId>
+        </dependency>
+    </dependencies>
+</project>
\ No newline at end of file
diff --git a/infra/northbound/common/src/main/java/io/fd/honeycomb/northbound/ConfigurationSupplier.java b/infra/northbound/common/src/main/java/io/fd/honeycomb/northbound/ConfigurationSupplier.java
new file mode 100644 (file)
index 0000000..0002d43
--- /dev/null
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2017 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.northbound;
+
+import com.google.inject.Module;
+
+/**
+ * Supplies configuration class of type T and module used for its initialization.
+ *
+ * @param <T> module configuration type
+ */
+public interface ConfigurationSupplier<T> {
+    Module getConfigurationModule();
+
+    T getConfiguration();
+}
diff --git a/infra/northbound/common/src/main/java/io/fd/honeycomb/northbound/NorthboundAbstractModule.java b/infra/northbound/common/src/main/java/io/fd/honeycomb/northbound/NorthboundAbstractModule.java
new file mode 100644 (file)
index 0000000..b3d31d7
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2017 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.northbound;
+
+import com.google.inject.AbstractModule;
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+import com.google.inject.Module;
+
+/**
+ * Base class for Honeycomb's AbstractModules, that are initialized conditionally based on specific configuration.
+ *
+ * @param <T> module configuration type
+ */
+public abstract class NorthboundAbstractModule<T> extends AbstractModule implements ConfigurationSupplier<T> {
+
+    private final Class<T> configClass;
+    private final Module configurationModule;
+    private final Injector injector;
+
+    protected NorthboundAbstractModule(final Module configurationModule, final Class<T> configClass) {
+        this.configurationModule = configurationModule;
+        this.configClass = configClass;
+        this.injector = Guice.createInjector(configurationModule);
+    }
+
+    @Override
+    public final Module getConfigurationModule() {
+        return configurationModule;
+    }
+
+    @Override
+    public final T getConfiguration() {
+        return injector.getInstance(configClass);
+    }
+}
diff --git a/infra/northbound/common/src/main/java/io/fd/honeycomb/northbound/NorthboundPrivateModule.java b/infra/northbound/common/src/main/java/io/fd/honeycomb/northbound/NorthboundPrivateModule.java
new file mode 100644 (file)
index 0000000..da471a0
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2017 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.northbound;
+
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+import com.google.inject.Module;
+import com.google.inject.PrivateModule;
+
+/**
+ * Base class for Honeycomb's PrivateModules, that are initialized conditionally based on specific configuration.
+ *
+ * @param <T> module configuration type
+ */
+public abstract class NorthboundPrivateModule<T> extends PrivateModule implements ConfigurationSupplier<T> {
+
+    private final Class<T> configClass;
+    private final Module configurationModule;
+    private final Injector injector;
+
+    protected NorthboundPrivateModule(final Module configurationModule, final Class<T> configClass) {
+        this.configurationModule = configurationModule;
+        this.configClass = configClass;
+        this.injector = Guice.createInjector(configurationModule);
+    }
+
+    @Override
+    public final Module getConfigurationModule() {
+        return configurationModule;
+    }
+
+    @Override
+    public final T getConfiguration() {
+        return injector.getInstance(configClass);
+    }
+}
diff --git a/infra/northbound/pom.xml b/infra/northbound/pom.xml
new file mode 100644 (file)
index 0000000..a768b32
--- /dev/null
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Copyright (c) 2017 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.
+  -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>honeycomb-parent</artifactId>
+        <groupId>io.fd.honeycomb.common</groupId>
+        <version>1.17.07-SNAPSHOT</version>
+        <relativePath>../../common/honeycomb-parent</relativePath>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>io.fd.honeycomb.northbound</groupId>
+    <artifactId>northbound-aggegator</artifactId>
+    <packaging>pom</packaging>
+
+    <modules>
+        <module>common</module>
+    </modules>
+
+</project>
\ No newline at end of file
index 0d25de5..4540520 100644 (file)
@@ -50,6 +50,7 @@
     <module>minimal-distribution-test</module>
     <module>bgp-distribution-test</module>
     <module>minimal-distribution-core</module>
+    <module>northbound</module>
   </modules>
 
   <!-- DO NOT install or deploy the repo root pom as it's only needed to initiate a build -->