Add DMaaP Configuration APIs for Testing 87/18887/2
authorGuangrong Fu <fu.guangrong@zte.com.cn>
Sat, 14 Oct 2017 08:38:26 +0000 (16:38 +0800)
committerGuangrong Fu <fu.guangrong@zte.com.cn>
Sat, 14 Oct 2017 09:38:54 +0000 (17:38 +0800)
Change-Id: I4f2d75ba8148f3118a731d0b2d68f13c6b941bb0
Issue-ID: HOLMES-59
Signed-off-by: Guangrong Fu <fu.guangrong@zte.com.cn>
engine-d/src/main/java/org/onap/holmes/engine/db/CorrelationRuleDao.java
engine-d/src/main/java/org/onap/holmes/engine/db/mapper/CorrelationRuleMapper.java [deleted file]
engine-d/src/main/java/org/onap/holmes/engine/dmaappolling/SubscriberAction.java
engine-d/src/main/java/org/onap/holmes/engine/request/DmaapConfigRequest.java [new file with mode: 0644]
engine-d/src/main/java/org/onap/holmes/engine/resources/DmaapConfigurationService.java [new file with mode: 0644]
engine-d/src/main/java/org/onap/holmes/engine/resources/EngineResources.java
engine-d/src/main/resources/swagger.json
engine-d/src/test/java/org/onap/holmes/engine/EngineDActiveAppTest.java
engine-d/src/test/java/org/onap/holmes/engine/db/mapper/CorrelationRuleMapperTest.java [deleted file]

index 4e01778..8cd61ef 100644 (file)
@@ -17,8 +17,8 @@ package org.onap.holmes.engine.db;
 
 
 import java.util.List;
-import org.onap.holmes.engine.db.mapper.CorrelationRuleMapper;
 import org.onap.holmes.common.api.entity.CorrelationRule;
+import org.onap.holmes.common.utils.CorrelationRuleMapper;
 import org.skife.jdbi.v2.sqlobject.Bind;
 import org.skife.jdbi.v2.sqlobject.SqlQuery;
 import org.skife.jdbi.v2.sqlobject.customizers.RegisterMapper;
diff --git a/engine-d/src/main/java/org/onap/holmes/engine/db/mapper/CorrelationRuleMapper.java b/engine-d/src/main/java/org/onap/holmes/engine/db/mapper/CorrelationRuleMapper.java
deleted file mode 100644 (file)
index a682824..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * Copyright 2017 ZTE Corporation.
- *
- * 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.onap.holmes.engine.db.mapper;
-
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.Properties;
-import org.onap.holmes.common.api.entity.CorrelationRule;
-import org.skife.jdbi.v2.StatementContext;
-import org.skife.jdbi.v2.tweak.ResultSetMapper;
-
-public class CorrelationRuleMapper implements ResultSetMapper<CorrelationRule> {
-
-    public CorrelationRule map(int i, ResultSet resultSet, StatementContext statementContext)
-        throws SQLException {
-        CorrelationRule correlationRule = new CorrelationRule();
-        correlationRule.setName(resultSet.getString("name"));
-        correlationRule.setRid(resultSet.getString("rid"));
-        correlationRule.setDescription(resultSet.getString("description"));
-        correlationRule.setEnabled(resultSet.getInt("enable"));
-        correlationRule.setTemplateID(resultSet.getInt("templateID"));
-        correlationRule.setEngineID(resultSet.getString("engineID"));
-        correlationRule.setEngineType(resultSet.getString("engineType"));
-        correlationRule.setCreator(resultSet.getString("creator"));
-        correlationRule.setCreateTime(resultSet.getDate("createTime"));
-        correlationRule.setModifier(resultSet.getString("updator"));
-        correlationRule.setUpdateTime(resultSet.getDate("updateTime"));
-        correlationRule.setParams((Properties) resultSet.getObject("params"));
-        correlationRule.setContent(resultSet.getString("content"));
-        correlationRule.setVendor(resultSet.getString("vendor"));
-        correlationRule.setPackageName(resultSet.getString("package"));
-        return correlationRule;
-    }
-
-}
index ef585d5..da83683 100644 (file)
@@ -35,19 +35,19 @@ public class SubscriberAction {
     private ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
 
     public void addSubscriber(Subscriber subscriber) {
-        if (!pollingRequests.containsKey(subscriber.getUrl())) {
+        if (!pollingRequests.containsKey(subscriber.getTopic())) {
             DMaaPPollingRequest pollingTask = new DMaaPPollingRequest(subscriber, droolsEngine);
             ScheduledFuture future = service
                     .scheduleAtFixedRate(pollingTask, 0, subscriber.getPeriod(), TimeUnit.MILLISECONDS);
-            pollingRequests.put(subscriber.getUrl(), future);
+            pollingRequests.put(subscriber.getTopic(), future);
         }
     }
 
     public void removeSubscriber(Subscriber subscriber) {
-        ScheduledFuture future = pollingRequests.get(subscriber.getUrl());
+        ScheduledFuture future = pollingRequests.get(subscriber.getTopic());
         if (future != null) {
             future.cancel(true);
         }
-        pollingRequests.remove(subscriber.getUrl());
+        pollingRequests.remove(subscriber.getTopic());
     }
 }
diff --git a/engine-d/src/main/java/org/onap/holmes/engine/request/DmaapConfigRequest.java b/engine-d/src/main/java/org/onap/holmes/engine/request/DmaapConfigRequest.java
new file mode 100644 (file)
index 0000000..6fa1928
--- /dev/null
@@ -0,0 +1,31 @@
+/*
+ * Copyright 2017 ZTE Corporation.
+ *
+ * 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.onap.holmes.engine.request;
+
+import javax.validation.constraints.NotNull;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class DmaapConfigRequest {
+    @NotNull
+    private String name;
+
+    @NotNull
+    private String url;
+}
diff --git a/engine-d/src/main/java/org/onap/holmes/engine/resources/DmaapConfigurationService.java b/engine-d/src/main/java/org/onap/holmes/engine/resources/DmaapConfigurationService.java
new file mode 100644 (file)
index 0000000..9fa1874
--- /dev/null
@@ -0,0 +1,106 @@
+/*
+ * Copyright 2017 ZTE Corporation.
+ *
+ * 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.onap.holmes.engine.resources;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.MediaType;
+import lombok.extern.slf4j.Slf4j;
+import org.jvnet.hk2.annotations.Service;
+import org.onap.holmes.common.dcae.DcaeConfigurationsCache;
+import org.onap.holmes.common.dcae.entity.SecurityInfo;
+import org.onap.holmes.common.dropwizard.ioc.utils.ServiceLocatorHolder;
+import org.onap.holmes.dsa.dmaappolling.Subscriber;
+import org.onap.holmes.engine.dmaappolling.SubscriberAction;
+import org.onap.holmes.engine.request.DmaapConfigRequest;
+
+@Service
+@Slf4j
+//@Api(tags = {"DMaaP Configurations"})
+@Path("/dmaap")
+public class DmaapConfigurationService {
+    @PUT
+    @Produces(MediaType.APPLICATION_JSON)
+    @ApiOperation(value = "Subscribe to a new topic. "
+            + "If the topic already exists, it is replaced with the new configuration.")
+    @Path("/sub")
+    public String addSubInfo(
+            @ApiParam (value = "A JSON object with the fields named <b>name</b>"
+                    + " and <b>url</b>. Both fields are required.") DmaapConfigRequest config,
+            @Context HttpServletRequest request){
+        String url = config.getUrl();
+        if (url.startsWith("http://")) {
+            Subscriber subscriber = new Subscriber();
+            subscriber.setTopic(config.getName());
+            subscriber.setUrl(url);
+
+            SubscriberAction subscriberAction = ServiceLocatorHolder.getLocator()
+                    .getService(SubscriberAction.class);
+            subscriberAction.removeSubscriber(subscriber);
+            subscriberAction.addSubscriber(subscriber);
+
+            log.info("New configurations applied. Topic Name: " + config.getName() + ", URL: " + url + ".");
+
+            return "{\"message\": \"Succeeded!\", \"topic\": \"" + config.getName() + "\"}";
+        }
+        return "{\"message\": \"Only the HTTP protocol is supported!\"}";
+    }
+
+    @DELETE
+    @Path("/sub/{topic}")
+    @ApiOperation(value = "Unsubscribe a topic from DMaaP.")
+    @Produces(MediaType.APPLICATION_JSON)
+    public String removeSubInfo(@PathParam("topic") String topic){
+        Subscriber subscriber = new Subscriber();
+        subscriber.setTopic(topic);
+
+        SubscriberAction subscriberAction = ServiceLocatorHolder.getLocator()
+                .getService(SubscriberAction.class);
+        subscriberAction.removeSubscriber(subscriber);
+
+        return "{\"message\": \"Topic unsubscribed.\"}";
+    }
+
+    @PUT
+    @Produces(MediaType.APPLICATION_JSON)
+    @Path("/pub")
+    @ApiOperation(value = "Add/Update a publishing topic. "
+            + "If the topic already exists, it is replaced with the new configuration.")
+    public String updatePubInfo(
+            @ApiParam (value = "A JSON object with the fields named <b>name</b>"
+                + " and <b>url</b>. Both fields are required.") DmaapConfigRequest config,
+            @Context HttpServletRequest request){
+        String url = config.getUrl();
+        if (url.startsWith("http://")) {
+            SecurityInfo securityInfo = new SecurityInfo();
+            SecurityInfo.DmaapInfo dmaapInfo = new SecurityInfo().new DmaapInfo();
+            dmaapInfo.setTopicUrl(config.getUrl());
+            securityInfo.setDmaapInfo(dmaapInfo);
+            DcaeConfigurationsCache.addPubSecInfo(config.getName(), securityInfo);
+            return "{\"message\": \"Succeeded!\", \"topic\": \"" + config.getName() + "\"}";
+        }
+        return "{\"message\": \"Only the HTTP protocol is supported!\"}";
+    }
+}
index 45754e2..9724355 100644 (file)
@@ -57,8 +57,8 @@ public class EngineResources {
     @Produces(MediaType.APPLICATION_JSON)
     @Timed
     public CorrelationRuleResponse deployRule(
-            @ApiParam(value = "The request entity of the HTTP call, which comprises two "
-                    + "fields: \"content\" and \"engineid\". "
+            @ApiParam(value = "The request entity of the HTTP call, which comprises three "
+                    + "fields: \"content\" , \"loopcontrolname\" and \"engineid\". "
                     + "The \"content\" should be a valid Drools rule string and the \"engineid\" "
                     + "has to be \"engine-d\" in the Amsterdam release.", required = true) DeployRuleRequest deployRuleRequest,
             @Context HttpServletRequest httpRequest) {
index 4dd3f6d..7d227fd 100644 (file)
@@ -63,7 +63,7 @@
         "parameters" : [ {
           "in" : "body",
           "name" : "body",
-          "description" : "The request entity of the HTTP call, which comprises two fields: \"content\" and \"engineid\". The \"content\" should be a valid Drools rule string and the \"engineid\" has to be \"engine-d\" in the Amsterdam release.",
+          "description" : "The request entity of the HTTP call, which comprises three fields: \"content\" , \"loopcontrolname\" and \"engineid\". The \"content\" should be a valid Drools rule string and the \"engineid\" has to be \"engine-d\" in the Amsterdam release.",
           "required" : true,
           "schema" : {
             "$ref" : "#/definitions/DeployRuleRequest"
         },
         "engineid" : {
           "type" : "string"
+        },
+        "loopcontrolname" : {
+          "type" : "string"
         }
       }
     }
index 362211b..2c6cdb7 100644 (file)
  */\r
 package org.onap.holmes.engine;\r
 \r
-/**\r
- * Created by Administrator on 2017/2/20.\r
- */\r
-\r
 public class EngineDActiveAppTest {\r
     public static void main(String[] args) throws Exception {\r
-        String filePath = "C:\\correlation-engine.yml";\r
+        String filePath = "C:\\engine-d.yml";\r
         new EngineDActiveApp().run(new String[]{"server", filePath});\r
     }\r
 }\r
diff --git a/engine-d/src/test/java/org/onap/holmes/engine/db/mapper/CorrelationRuleMapperTest.java b/engine-d/src/test/java/org/onap/holmes/engine/db/mapper/CorrelationRuleMapperTest.java
deleted file mode 100644 (file)
index acf62c6..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/**\r
- * Copyright 2017 ZTE Corporation.\r
- *\r
- * Licensed under the Apache License, Version 2.0 (the "License");\r
- * you may not use this file except in compliance with the License.\r
- * You may obtain a copy of the License at\r
- *\r
- * http://www.apache.org/licenses/LICENSE-2.0\r
- *\r
- * Unless required by applicable law or agreed to in writing, software\r
- * distributed under the License is distributed on an "AS IS" BASIS,\r
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
- * See the License for the specific language governing permissions and\r
- * limitations under the License.\r
- */\r
-\r
-package org.onap.holmes.engine.db.mapper;\r
-\r
-import org.junit.Test;\r
-import org.powermock.api.easymock.PowerMock;\r
-\r
-import java.sql.Date;\r
-import java.sql.ResultSet;\r
-import java.util.Properties;\r
-\r
-import static org.easymock.EasyMock.expect;\r
-\r
-public class CorrelationRuleMapperTest {\r
-\r
-    @Test\r
-    public void map() throws Exception {\r
-        CorrelationRuleMapper mapper = new CorrelationRuleMapper();\r
-        ResultSet resultSet = PowerMock.createMock(ResultSet.class);\r
-\r
-        expect(resultSet.getString("name")).andReturn("");\r
-        expect(resultSet.getString("rid")).andReturn("");\r
-        expect(resultSet.getString("description")).andReturn("");\r
-        expect(resultSet.getInt("enable")).andReturn(0);\r
-        expect(resultSet.getInt("templateID")).andReturn(0);\r
-        expect(resultSet.getString("engineID")).andReturn("");\r
-        expect(resultSet.getString("engineType")).andReturn("");\r
-        expect(resultSet.getString("creator")).andReturn("");\r
-        expect(resultSet.getDate("createTime")).andReturn(new Date(System.currentTimeMillis()));\r
-        expect(resultSet.getString("updator")).andReturn("");\r
-        expect(resultSet.getDate("updateTime")).andReturn(new Date(System.currentTimeMillis()));\r
-        expect(resultSet.getObject("params")).andReturn(new Properties());\r
-        expect(resultSet.getString("content")).andReturn("");\r
-        expect(resultSet.getString("vendor")).andReturn("");\r
-        expect(resultSet.getString("package")).andReturn("");\r
-\r
-        PowerMock.replayAll();\r
-\r
-        mapper.map(0, resultSet, null);\r
-\r
-        PowerMock.verify();\r
-    }\r
-}\r