Allow pre-setting component config via REST API

Change-Id: Ice1710c81a6356affee5987ff1f7f6fc5aa6406e
diff --git a/web/api/src/main/java/org/onosproject/rest/resources/ComponentConfigWebResource.java b/web/api/src/main/java/org/onosproject/rest/resources/ComponentConfigWebResource.java
index d1a8ff7..5751e35 100644
--- a/web/api/src/main/java/org/onosproject/rest/resources/ComponentConfigWebResource.java
+++ b/web/api/src/main/java/org/onosproject/rest/resources/ComponentConfigWebResource.java
@@ -22,11 +22,13 @@
 
 import javax.ws.rs.Consumes;
 import javax.ws.rs.DELETE;
+import javax.ws.rs.DefaultValue;
 import javax.ws.rs.GET;
 import javax.ws.rs.POST;
 import javax.ws.rs.Path;
 import javax.ws.rs.PathParam;
 import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 import java.io.IOException;
@@ -87,6 +89,7 @@
      * Sets only the properties present in the JSON request.
      *
      * @param component component name
+     * @param preset preset the property if true
      * @param request   JSON configuration
      * @return 200 OK
      * @throws IOException to signify bad request
@@ -95,11 +98,17 @@
     @Consumes(MediaType.APPLICATION_JSON)
     @Path("{component}")
     public Response setConfigs(@PathParam("component") String component,
+                               @DefaultValue("false") @QueryParam("preset") boolean preset,
                                InputStream request) throws IOException {
         ComponentConfigService service = get(ComponentConfigService.class);
         ObjectNode props = (ObjectNode) mapper().readTree(request);
-        props.fieldNames().forEachRemaining(k -> service.setProperty(component, k,
-                                                                     props.path(k).asText()));
+        if (preset) {
+            props.fieldNames().forEachRemaining(k ->
+                    service.preSetProperty(component, k, props.path(k).asText()));
+        } else {
+            props.fieldNames().forEachRemaining(k ->
+                    service.setProperty(component, k, props.path(k).asText()));
+        }
         return Response.ok().build();
     }