OSGi property annotations for dhcp relay app

Change-Id: I5859f28d087e907548923e9526a8c1c0624f3cb0
diff --git a/apps/dhcprelay/app/src/main/java/org/onosproject/dhcprelay/Dhcp4HandlerImpl.java b/apps/dhcprelay/app/src/main/java/org/onosproject/dhcprelay/Dhcp4HandlerImpl.java
index e70be90..8decb7f 100644
--- a/apps/dhcprelay/app/src/main/java/org/onosproject/dhcprelay/Dhcp4HandlerImpl.java
+++ b/apps/dhcprelay/app/src/main/java/org/onosproject/dhcprelay/Dhcp4HandlerImpl.java
@@ -115,20 +115,25 @@
 import static org.onlab.packet.MacAddress.valueOf;
 import static org.onlab.packet.dhcp.DhcpRelayAgentOption.RelayAgentInfoOptions.CIRCUIT_ID;
 import static org.onlab.util.Tools.groupedThreads;
+import static org.onosproject.dhcprelay.OsgiPropertyConstants.LEARN_ROUTE_FROM_LEASE_QUERY;
+import static org.onosproject.dhcprelay.OsgiPropertyConstants.LEARN_ROUTE_FROM_LEASE_QUERY_DEFAULT;
 import static org.onosproject.net.flowobjective.Objective.Operation.ADD;
 import static org.onosproject.net.flowobjective.Objective.Operation.REMOVE;
 
 
-@Component(service = { DhcpHandler.class, HostProvider.class })
-//@Property(name = "version", value = "4")
+@Component(
+    service = { DhcpHandler.class, HostProvider.class },
+    property = {
+        "version:Integer = 4",
+        LEARN_ROUTE_FROM_LEASE_QUERY + ":Boolean=" + LEARN_ROUTE_FROM_LEASE_QUERY_DEFAULT
+    }
+)
 public class Dhcp4HandlerImpl implements DhcpHandler, HostProvider {
     public static final String DHCP_V4_RELAY_APP = "org.onosproject.Dhcp4HandlerImpl";
     public static final ProviderId PROVIDER_ID = new ProviderId("dhcp4", DHCP_V4_RELAY_APP);
     private static final String BROADCAST_IP = "255.255.255.255";
     private static final int IGNORE_CONTROL_PRIORITY = PacketPriority.CONTROL.priorityValue() + 1000;
 
-    private static final String LQ_ROUTE_PROPERTY_NAME = "learnRouteFromLeasequery";
-
     private static final TrafficSelector CLIENT_SERVER_SELECTOR = DefaultTrafficSelector.builder()
             .matchEthType(Ethernet.TYPE_IPV4)
             .matchIPProtocol(IPv4.PROTOCOL_UDP)
@@ -187,9 +192,8 @@
     private List<DhcpServerInfo> defaultServerInfoList = new CopyOnWriteArrayList<>();
     private List<DhcpServerInfo> indirectServerInfoList = new CopyOnWriteArrayList<>();
 
-    //@Property(name = Dhcp4HandlerImpl.LQ_ROUTE_PROPERTY_NAME, boolValue = false,
-    //        label = "Enable learning routing information from LQ")
-    private Boolean learnRouteFromLeasequery = Boolean.TRUE;
+    /** Enable learning routing information from LQ. */
+    private Boolean learnRouteFromLeasequery = LEARN_ROUTE_FROM_LEASE_QUERY_DEFAULT;
 
     private Executor hostEventExecutor = newSingleThreadExecutor(
         groupedThreads("dhcp4-event-host", "%d", log));
@@ -220,7 +224,7 @@
     protected void modified(ComponentContext context) {
         Dictionary<?, ?> properties = context.getProperties();
         Boolean flag;
-        flag = Tools.isPropertyEnabled(properties, Dhcp4HandlerImpl.LQ_ROUTE_PROPERTY_NAME);
+        flag = Tools.isPropertyEnabled(properties, LEARN_ROUTE_FROM_LEASE_QUERY);
         if (flag != null) {
             learnRouteFromLeasequery = flag;
             log.info("Learning routes from DHCP leasequery is {}",
diff --git a/apps/dhcprelay/app/src/main/java/org/onosproject/dhcprelay/Dhcp6HandlerImpl.java b/apps/dhcprelay/app/src/main/java/org/onosproject/dhcprelay/Dhcp6HandlerImpl.java
index d42cc09..a30d685 100644
--- a/apps/dhcprelay/app/src/main/java/org/onosproject/dhcprelay/Dhcp6HandlerImpl.java
+++ b/apps/dhcprelay/app/src/main/java/org/onosproject/dhcprelay/Dhcp6HandlerImpl.java
@@ -120,18 +120,25 @@
 import static com.google.common.base.Preconditions.checkState;
 import static java.util.concurrent.Executors.newSingleThreadExecutor;
 import static org.onlab.util.Tools.groupedThreads;
+import static org.onosproject.dhcprelay.OsgiPropertyConstants.LEARN_ROUTE_FROM_LEASE_QUERY;
+import static org.onosproject.dhcprelay.OsgiPropertyConstants.LEARN_ROUTE_FROM_LEASE_QUERY_DEFAULT;
 import static org.onosproject.net.flowobjective.Objective.Operation.ADD;
 import static org.onosproject.net.flowobjective.Objective.Operation.REMOVE;
 import java.util.concurrent.Semaphore;
 
-@Component(service = { DhcpHandler.class, HostProvider.class })
-//@Property(name = "version", value = "6")
+@Component(
+    service = { DhcpHandler.class, HostProvider.class },
+    property = {
+        "version:Integer=6",
+        LEARN_ROUTE_FROM_LEASE_QUERY + ":Boolean=" + LEARN_ROUTE_FROM_LEASE_QUERY_DEFAULT
+    }
+)
+
 public class Dhcp6HandlerImpl implements DhcpHandler, HostProvider {
     public static final String DHCP_V6_RELAY_APP = "org.onosproject.Dhcp6HandlerImpl";
     public static final ProviderId PROVIDER_ID = new ProviderId("dhcp6", DHCP_V6_RELAY_APP);
     private static final int IGNORE_CONTROL_PRIORITY = PacketPriority.CONTROL.priorityValue() + 1000;
     private String gCount = "global";
-    private static final String LQ_ROUTE_PROPERTY_NAME = "learnRouteFromLeasequery";
     private static final TrafficSelector CLIENT_SERVER_SELECTOR = DefaultTrafficSelector.builder()
             .matchEthType(Ethernet.TYPE_IPV6)
             .matchIPProtocol(IPv6.PROTOCOL_UDP)
@@ -197,9 +204,8 @@
     @Reference(cardinality = ReferenceCardinality.MANDATORY)
     protected ComponentConfigService cfgService;
 
-    //@Property(name = Dhcp6HandlerImpl.LQ_ROUTE_PROPERTY_NAME, boolValue = false,
-    //        label = "Enable learning routing information from LQ")
-    private Boolean learnRouteFromLeasequery = Boolean.TRUE;
+    /** Enable learning routing information from LQ. */
+    private Boolean learnRouteFromLeasequery = LEARN_ROUTE_FROM_LEASE_QUERY_DEFAULT;
 
     protected HostProviderService providerService;
     protected ApplicationId appId;
@@ -267,7 +273,7 @@
     protected void modified(ComponentContext context) {
         Dictionary<?, ?> properties = context.getProperties();
         Boolean flag;
-        flag = Tools.isPropertyEnabled(properties, Dhcp6HandlerImpl.LQ_ROUTE_PROPERTY_NAME);
+        flag = Tools.isPropertyEnabled(properties, LEARN_ROUTE_FROM_LEASE_QUERY);
         if (flag != null) {
             learnRouteFromLeasequery = flag;
             log.info("Learning routes from DHCP leasequery is {}",
diff --git a/apps/dhcprelay/app/src/main/java/org/onosproject/dhcprelay/DhcpRelayManager.java b/apps/dhcprelay/app/src/main/java/org/onosproject/dhcprelay/DhcpRelayManager.java
index 3bb7f4e..bb5a794 100644
--- a/apps/dhcprelay/app/src/main/java/org/onosproject/dhcprelay/DhcpRelayManager.java
+++ b/apps/dhcprelay/app/src/main/java/org/onosproject/dhcprelay/DhcpRelayManager.java
@@ -96,12 +96,26 @@
 import java.util.stream.Stream;
 
 import static org.onlab.util.Tools.groupedThreads;
+import static org.onosproject.dhcprelay.OsgiPropertyConstants.ARP_ENABLED;
+import static org.onosproject.dhcprelay.OsgiPropertyConstants.ARP_ENABLED_DEFAULT;
+import static org.onosproject.dhcprelay.OsgiPropertyConstants.DHCP_FPM_ENABLED;
+import static org.onosproject.dhcprelay.OsgiPropertyConstants.DHCP_FPM_ENABLED_DEFAULT;
+import static org.onosproject.dhcprelay.OsgiPropertyConstants.DHCP_POLL_INTERVAL;
+import static org.onosproject.dhcprelay.OsgiPropertyConstants.DHCP_POLL_INTERVAL_DEFAULT;
 import static org.onosproject.net.config.basics.SubjectFactories.APP_SUBJECT_FACTORY;
 
 /**
  * DHCP Relay Agent Application Component.
  */
-@Component(immediate = true, service = DhcpRelayService.class)
+@Component(
+    immediate = true,
+    service = DhcpRelayService.class,
+    property = {
+        ARP_ENABLED + ":Boolean=" + ARP_ENABLED_DEFAULT,
+        DHCP_POLL_INTERVAL + ":Integer=" + DHCP_POLL_INTERVAL_DEFAULT,
+        DHCP_FPM_ENABLED + ":Boolean=" + DHCP_FPM_ENABLED_DEFAULT
+    }
+)
 public class DhcpRelayManager implements DhcpRelayService {
     public static final String DHCP_RELAY_APP = "org.onosproject.dhcprelay";
     public static final String ROUTE_STORE_IMPL =
@@ -188,17 +202,14 @@
             target = "(version=6)")
     protected DhcpHandler v6Handler;
 
-    //@Property(name = "arpEnabled", boolValue = true,
-    //        label = "Enable Address resolution protocol")
-    protected boolean arpEnabled = true;
+    /** Enable Address resolution protocol. */
+    protected boolean arpEnabled = ARP_ENABLED_DEFAULT;
 
-    //@Property(name = "dhcpPollInterval", intValue = 24 * 3600,
-    //        label = "dhcp relay poll interval")
-    protected int dhcpPollInterval = 24 * 3600;
+    /** dhcp relay poll interval. */
+    protected int dhcpPollInterval = DHCP_POLL_INTERVAL_DEFAULT;
 
-    //@Property(name = "dhcpFpmEnabled", boolValue = false,
-    //        label = "Enable DhcpRelay Fpm")
-    protected boolean dhcpFpmEnabled = false;
+    /** Enable DhcpRelay Fpm. */
+    protected boolean dhcpFpmEnabled = DHCP_FPM_ENABLED_DEFAULT;
 
     private ScheduledExecutorService timerExecutor;
 
@@ -269,7 +280,7 @@
         Dictionary<?, ?> properties = context.getProperties();
         Boolean flag;
 
-        flag = Tools.isPropertyEnabled(properties, "arpEnabled");
+        flag = Tools.isPropertyEnabled(properties, ARP_ENABLED);
         if (flag != null) {
             arpEnabled = flag;
             log.info("Address resolution protocol is {}",
@@ -282,7 +293,7 @@
             cancelArpPackets();
         }
 
-        int intervalVal = Tools.getIntegerProperty(properties, "dhcpPollInterval");
+        int intervalVal = Tools.getIntegerProperty(properties, DHCP_POLL_INTERVAL);
         log.info("DhcpRelay poll interval new {} old {}", intervalVal, dhcpPollInterval);
         if (intervalVal !=  dhcpPollInterval) {
             timerExecutor.shutdown();
@@ -297,7 +308,7 @@
             v6Handler.setDhcp6PollInterval(dhcpPollInterval);
         }
 
-        flag = Tools.isPropertyEnabled(properties, "dhcpFpmEnabled");
+        flag = Tools.isPropertyEnabled(properties, DHCP_FPM_ENABLED);
         if (flag != null) {
             boolean oldValue = dhcpFpmEnabled;
             dhcpFpmEnabled = flag;
diff --git a/apps/dhcprelay/app/src/main/java/org/onosproject/dhcprelay/OsgiPropertyConstants.java b/apps/dhcprelay/app/src/main/java/org/onosproject/dhcprelay/OsgiPropertyConstants.java
new file mode 100644
index 0000000..7e794fe
--- /dev/null
+++ b/apps/dhcprelay/app/src/main/java/org/onosproject/dhcprelay/OsgiPropertyConstants.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2018-present Open Networking Foundation
+ *
+ * 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.dhcprelay;
+
+public final class OsgiPropertyConstants {
+    private OsgiPropertyConstants() {
+    }
+
+    static final String ARP_ENABLED = "arpEnabled";
+    static final boolean ARP_ENABLED_DEFAULT = true;
+
+    static final String DHCP_POLL_INTERVAL = "dhcpPollInterval";
+    static final int DHCP_POLL_INTERVAL_DEFAULT = 86400;
+
+    static final String DHCP_FPM_ENABLED = "dhcpFpmEnabled";
+    static final boolean DHCP_FPM_ENABLED_DEFAULT = false;
+
+    static final String LEARN_ROUTE_FROM_LEASE_QUERY = "learnRouteFromLeasequery";
+    static final boolean LEARN_ROUTE_FROM_LEASE_QUERY_DEFAULT = false;
+}
diff --git a/apps/dhcprelay/app/src/main/java/org/onosproject/dhcprelay/store/DistributedFpmPrefixStore.java b/apps/dhcprelay/app/src/main/java/org/onosproject/dhcprelay/store/DistributedFpmPrefixStore.java
index f199671..bec99e1 100644
--- a/apps/dhcprelay/app/src/main/java/org/onosproject/dhcprelay/store/DistributedFpmPrefixStore.java
+++ b/apps/dhcprelay/app/src/main/java/org/onosproject/dhcprelay/store/DistributedFpmPrefixStore.java
@@ -43,8 +43,13 @@
 /**
  * Persistent Fpm Prefix Store with Listener.
  */
-@Component(immediate = true, service = DhcpFpmPrefixStore.class)
-//@Property(name = "fpm_type", value = "DHCP")
+@Component(
+    immediate = true,
+    service = DhcpFpmPrefixStore.class,
+    property = {
+        "fpm_type=DHCP"
+    }
+)
 public class DistributedFpmPrefixStore implements DhcpFpmPrefixStore {
 
     private static final KryoNamespace APP_KRYO = KryoNamespace.newBuilder()