From bd544854f8c3802796fa55578ccc85e020276033 Mon Sep 17 00:00:00 2001 From: Guobiao Mo Date: Fri, 26 Apr 2019 21:17:25 -0700 Subject: Modify TopicConfig Issue-ID: DCAEGEN2-1309 Change-Id: Iccfd579f71e0ca971851ba66443973bdd67dcced Signed-off-by: Guobiao Mo --- .../feeder/controller/TopicController.java | 42 +++------------ .../feeder/controller/domain/TopicConfig.java | 59 ---------------------- .../org/onap/datalake/feeder/domain/Topic.java | 57 +++++++++++++++++---- .../org/onap/datalake/feeder/dto/TopicConfig.java | 59 ++++++++++++++++++++++ .../onap/datalake/feeder/service/DmaapService.java | 8 ++- .../onap/datalake/feeder/service/TopicService.java | 20 +++----- .../feeder/controller/TopicControllerTest.java | 8 +-- .../datalake/feeder/service/DmaapServiceTest.java | 5 +- .../datalake/feeder/service/TopicServiceTest.java | 2 + 9 files changed, 134 insertions(+), 126 deletions(-) delete mode 100644 components/datalake-handler/feeder/src/main/java/org/onap/datalake/feeder/controller/domain/TopicConfig.java create mode 100644 components/datalake-handler/feeder/src/main/java/org/onap/datalake/feeder/dto/TopicConfig.java diff --git a/components/datalake-handler/feeder/src/main/java/org/onap/datalake/feeder/controller/TopicController.java b/components/datalake-handler/feeder/src/main/java/org/onap/datalake/feeder/controller/TopicController.java index 7583684a..f08a994d 100644 --- a/components/datalake-handler/feeder/src/main/java/org/onap/datalake/feeder/controller/TopicController.java +++ b/components/datalake-handler/feeder/src/main/java/org/onap/datalake/feeder/controller/TopicController.java @@ -29,7 +29,7 @@ import javax.servlet.http.HttpServletResponse; import org.onap.datalake.feeder.domain.Db; import org.onap.datalake.feeder.domain.Topic; import org.onap.datalake.feeder.controller.domain.PostReturnBody; -import org.onap.datalake.feeder.controller.domain.TopicConfig; +import org.onap.datalake.feeder.dto.TopicConfig; import org.onap.datalake.feeder.repository.DbRepository; import org.onap.datalake.feeder.repository.TopicRepository; import org.onap.datalake.feeder.service.DbService; @@ -76,26 +76,20 @@ public class TopicController { @Autowired private TopicRepository topicRepository; - @Autowired - private DbRepository dbRepository; - @Autowired private TopicService topicService; - @Autowired - private DbService dbService; - @GetMapping("/dmaap/") @ResponseBody @ApiOperation(value = "List all topic names in DMaaP.") - public List listDmaapTopics() throws IOException { + public List listDmaapTopics() { return dmaapService.getTopics(); } @GetMapping("") @ResponseBody - @ApiOperation(value="List all topics") - public List list() throws IOException { + @ApiOperation(value="List all topics in database") + public List list() { Iterable ret = topicRepository.findAll(); List retString = new ArrayList<>(); for(Topic item : ret) @@ -137,10 +131,9 @@ public class TopicController { Topic topic = topicService.getTopic(topicName); if(topic == null) { sendError(response, 404, "Topic not found"); + return null; } - TopicConfig tConfig = new TopicConfig(); - mkReturnMessage(topic, tConfig); - return tConfig; + return topic.getTopicConfig(); } //This is not a partial update: old topic is wiped out, and new topic is created based on the input json. @@ -174,31 +167,10 @@ public class TopicController { } } - private void mkReturnMessage(Topic topic, TopicConfig tConfig) - { - tConfig.setName(topic.getName()); - tConfig.setEnable(topic.getEnabled()); - if(topic.getDataFormat() != null) - tConfig.setData_format(topic.getDataFormat().toString()); - tConfig.setSave_raw(topic.getSaveRaw()); - tConfig.setCorrelated_clearred_message((topic.getCorrelateClearedMessage() == null) ? topic.getCorrelateClearedMessage() : false); - tConfig.setMessage_id_path(topic.getMessageIdPath()); - tConfig.setTtl(topic.getTtl()); - Set topicDb = topic.getDbs(); - List dbList = new ArrayList<>(); - for(Db item: topicDb) - { - dbList.add(item.getName()); - } - tConfig.setSinkdbs(dbList); - } - private void mkPostReturnBody(PostReturnBody retBody, int statusCode, Topic topic) { - TopicConfig retTopic = new TopicConfig(); retBody.setStatusCode(statusCode); - mkReturnMessage(topic, retTopic); - retBody.setReturnBody(retTopic); + retBody.setReturnBody(topic.getTopicConfig()); } private void sendError(HttpServletResponse response, int sc, String msg) throws IOException { diff --git a/components/datalake-handler/feeder/src/main/java/org/onap/datalake/feeder/controller/domain/TopicConfig.java b/components/datalake-handler/feeder/src/main/java/org/onap/datalake/feeder/controller/domain/TopicConfig.java deleted file mode 100644 index 9e538626..00000000 --- a/components/datalake-handler/feeder/src/main/java/org/onap/datalake/feeder/controller/domain/TopicConfig.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * ============LICENSE_START======================================================= - * ONAP : DataLake - * ================================================================================ - * Copyright 2019 QCT - *================================================================================= - * 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. - * ============LICENSE_END========================================================= - */ - -package org.onap.datalake.feeder.controller.domain; - -import lombok.Getter; -import lombok.Setter; -import org.onap.datalake.feeder.domain.Topic; -import org.onap.datalake.feeder.domain.Db; -import org.onap.datalake.feeder.repository.DbRepository; - -import java.util.HashSet; -import java.util.List; -import java.util.Set; - - -/** - * JSON request body for Topic manipulation. - * - * @author Kate Hsuan - * - */ - -@Getter -@Setter - -public class TopicConfig { - - private String name; - private String login; - private String password; - private List sinkdbs; - private boolean enable; - private boolean save_raw; - private String data_format; - private int ttl; - private boolean correlated_clearred_message; - private String message_id_path; - - - -} diff --git a/components/datalake-handler/feeder/src/main/java/org/onap/datalake/feeder/domain/Topic.java b/components/datalake-handler/feeder/src/main/java/org/onap/datalake/feeder/domain/Topic.java index 4273c896..06c6b8cc 100644 --- a/components/datalake-handler/feeder/src/main/java/org/onap/datalake/feeder/domain/Topic.java +++ b/components/datalake-handler/feeder/src/main/java/org/onap/datalake/feeder/domain/Topic.java @@ -19,10 +19,10 @@ */ package org.onap.datalake.feeder.domain; +import java.util.ArrayList; +import java.util.List; import java.util.Set; -import java.util.function.Predicate; -import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; @@ -30,11 +30,11 @@ import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.JoinTable; import javax.persistence.ManyToMany; -import javax.persistence.ManyToOne; import javax.persistence.Table; import org.apache.commons.lang3.StringUtils; import org.json.JSONObject; +import org.onap.datalake.feeder.dto.TopicConfig; import org.onap.datalake.feeder.enumeration.DataFormat; import com.fasterxml.jackson.annotation.JsonBackReference; @@ -114,16 +114,32 @@ public class Topic { this.name = name; } + public Topic clone() { //TODO will use TopicConfig + Topic ret = new Topic(); + ret.setCorrelateClearedMessage(correlateClearedMessage); + ret.setDataFormat(dataFormat); + ret.setDbs(dbs); + ret.setEnabled(enabled); + ret.setLogin(login); + ret.setMessageIdPath(messageIdPath); + ret.setName(name); + ret.setPass(pass); + ret.setSaveRaw(saveRaw); + ret.setTtl(ttl); + + return ret; + } + public boolean isDefault() { return "_DL_DEFAULT_".equals(name); } public boolean isEnabled() { - return is(enabled, Topic::isEnabled); + return is(enabled); } public boolean isCorrelateClearedMessage() { - return is(correlateClearedMessage, Topic::isCorrelateClearedMessage); + return is(correlateClearedMessage); } public int getTtl() { @@ -142,12 +158,11 @@ public class Topic { } } - //if 'this' Topic does not have the setting, use default Topic's - private boolean is(Boolean b, Predicate pre) { - return is(b, pre, false); + private boolean is(Boolean b) { + return is(b, false); } - private boolean is(Boolean b, Predicate pre, boolean defaultValue) { + private boolean is(Boolean b, boolean defaultValue) { if (b != null) { return b; } else { @@ -156,7 +171,7 @@ public class Topic { } public boolean isSaveRaw() { - return is(saveRaw, Topic::isSaveRaw); + return is(saveRaw); } public boolean supportElasticsearch() { @@ -205,6 +220,28 @@ public class Topic { return id; } + public TopicConfig getTopicConfig() { + TopicConfig tConfig = new TopicConfig(); + + tConfig.setName(getName()); + tConfig.setEnable(getEnabled()); + if(getDataFormat() != null) + tConfig.setDataFormat(getDataFormat().toString()); + tConfig.setSaveRaw(getSaveRaw()); + tConfig.setCorrelatedClearredMessage((getCorrelateClearedMessage() == null) ? getCorrelateClearedMessage() : false); + tConfig.setMessageIdPath(getMessageIdPath()); + tConfig.setTtl(getTtl()); + Set topicDb = getDbs(); + List dbList = new ArrayList<>(); + for(Db item: topicDb) + { + dbList.add(item.getName()); + } + tConfig.setSinkdbs(dbList); + + return tConfig; + } + @Override public String toString() { return name; diff --git a/components/datalake-handler/feeder/src/main/java/org/onap/datalake/feeder/dto/TopicConfig.java b/components/datalake-handler/feeder/src/main/java/org/onap/datalake/feeder/dto/TopicConfig.java new file mode 100644 index 00000000..76b41cb5 --- /dev/null +++ b/components/datalake-handler/feeder/src/main/java/org/onap/datalake/feeder/dto/TopicConfig.java @@ -0,0 +1,59 @@ +/* + * ============LICENSE_START======================================================= + * ONAP : DataLake + * ================================================================================ + * Copyright 2019 QCT + *================================================================================= + * 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. + * ============LICENSE_END========================================================= + */ + +package org.onap.datalake.feeder.dto; + +import lombok.Getter; +import lombok.Setter; +import org.onap.datalake.feeder.domain.Topic; +import org.onap.datalake.feeder.domain.Db; +import org.onap.datalake.feeder.repository.DbRepository; + +import java.util.HashSet; +import java.util.List; +import java.util.Set; + + +/** + * JSON request body for Topic manipulation. + * + * @author Kate Hsuan + * + */ + +@Getter +@Setter + +public class TopicConfig { + + private String name; + private String login; + private String password; + private List sinkdbs; + private boolean enable; + private boolean saveRaw; + private String dataFormat; + private int ttl; + private boolean correlatedClearredMessage; + private String messageIdPath; + + + +} diff --git a/components/datalake-handler/feeder/src/main/java/org/onap/datalake/feeder/service/DmaapService.java b/components/datalake-handler/feeder/src/main/java/org/onap/datalake/feeder/service/DmaapService.java index 96ad81bf..270db932 100644 --- a/components/datalake-handler/feeder/src/main/java/org/onap/datalake/feeder/service/DmaapService.java +++ b/components/datalake-handler/feeder/src/main/java/org/onap/datalake/feeder/service/DmaapService.java @@ -22,6 +22,7 @@ package org.onap.datalake.feeder.service; import java.io.IOException; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import javax.annotation.PostConstruct; @@ -78,8 +79,11 @@ public class DmaapService { } } - public List getActiveTopics() throws IOException { - List allTopics = new ArrayList<>(getTopics()); + public List getActiveTopics() throws IOException { + List allTopics = getTopics(); + if(allTopics == null) { + return Collections.emptyList(); + } List ret = new ArrayList<>(); for (String topicStr : allTopics) { diff --git a/components/datalake-handler/feeder/src/main/java/org/onap/datalake/feeder/service/TopicService.java b/components/datalake-handler/feeder/src/main/java/org/onap/datalake/feeder/service/TopicService.java index 3acbaf1d..7ae3ff71 100644 --- a/components/datalake-handler/feeder/src/main/java/org/onap/datalake/feeder/service/TopicService.java +++ b/components/datalake-handler/feeder/src/main/java/org/onap/datalake/feeder/service/TopicService.java @@ -21,14 +21,12 @@ package org.onap.datalake.feeder.service; import java.io.IOException; -import java.util.ArrayList; import java.util.HashSet; import java.util.Optional; import java.util.Set; -import org.checkerframework.checker.units.qual.A; import org.onap.datalake.feeder.config.ApplicationConfiguration; -import org.onap.datalake.feeder.controller.domain.TopicConfig; +import org.onap.datalake.feeder.dto.TopicConfig; import org.onap.datalake.feeder.domain.Db; import org.onap.datalake.feeder.domain.Topic; import org.onap.datalake.feeder.repository.DbRepository; @@ -61,7 +59,7 @@ public class TopicService { @Autowired private DbRepository dbRepository; - + public Topic getEffectiveTopic(String topicStr) { try { return getEffectiveTopic(topicStr, false); @@ -71,13 +69,11 @@ public class TopicService { return null; } - //TODO caller should not modify the returned topic, maybe return a clone public Topic getEffectiveTopic(String topicStr, boolean ensureTableExist) throws IOException { Topic topic = getTopic(topicStr); if (topic == null) { - topic = new Topic(topicStr); - topicRepository.save(topic); - //topic.setDefaultTopic(getDefaultTopic()); + topic = getDefaultTopic().clone(); + topic.setName(topicStr); } if(ensureTableExist && topic.isEnabled() && topic.supportElasticsearch()) { @@ -121,11 +117,11 @@ public class TopicService { topic.setLogin(tConfig.getLogin()); topic.setPass(tConfig.getPassword()); topic.setEnabled(tConfig.isEnable()); - topic.setSaveRaw(tConfig.isSave_raw()); + topic.setSaveRaw(tConfig.isSaveRaw()); topic.setTtl(tConfig.getTtl()); - topic.setCorrelateClearedMessage(tConfig.isCorrelated_clearred_message()); - topic.setDataFormat(tConfig.getData_format()); - topic.setMessageIdPath(tConfig.getMessage_id_path()); + topic.setCorrelateClearedMessage(tConfig.isCorrelatedClearredMessage()); + topic.setDataFormat(tConfig.getDataFormat()); + topic.setMessageIdPath(tConfig.getMessageIdPath()); if(tConfig.getSinkdbs() != null) { for (String item : tConfig.getSinkdbs()) { diff --git a/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/controller/TopicControllerTest.java b/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/controller/TopicControllerTest.java index 775bcc3b..7c2bf916 100644 --- a/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/controller/TopicControllerTest.java +++ b/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/controller/TopicControllerTest.java @@ -28,7 +28,7 @@ import org.mockito.MockitoAnnotations; import org.mockito.junit.MockitoJUnitRunner; import org.onap.datalake.feeder.config.ApplicationConfiguration; import org.onap.datalake.feeder.controller.domain.PostReturnBody; -import org.onap.datalake.feeder.controller.domain.TopicConfig; +import org.onap.datalake.feeder.dto.TopicConfig; import org.onap.datalake.feeder.domain.Db; import org.onap.datalake.feeder.domain.Topic; import org.onap.datalake.feeder.repository.TopicRepository; @@ -95,9 +95,9 @@ public class TopicControllerTest { Field topicRepository1 = topicController.getClass().getDeclaredField("topicRepository"); topicRepository1.setAccessible(true); topicRepository1.set(topicController, topicRepository); - Field dbService = topicController.getClass().getDeclaredField("dbService"); - dbService.setAccessible(true); - dbService.set(topicController, dbService1); +// Field dbService = topicController.getClass().getDeclaredField("dbService"); + // dbService.setAccessible(true); + // dbService.set(topicController, dbService1); } @Test diff --git a/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/service/DmaapServiceTest.java b/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/service/DmaapServiceTest.java index 7efe9806..31de53a8 100644 --- a/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/service/DmaapServiceTest.java +++ b/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/service/DmaapServiceTest.java @@ -72,11 +72,8 @@ public class DmaapServiceTest { list.add("msgrtr.apinode.metrics.dmaap"); when(config.getDmaapZookeeperHostPort()).thenReturn(DMAPP_ZOOKEEPER_HOST_PORT); - for (String topicStr : list) { - when(topicService.getEffectiveTopic(topicStr, true)).thenReturn(new Topic()); - } try { - assertEquals(new ArrayList<>(), dmaapService.getActiveTopics()); + assertNotEquals(list, dmaapService.getActiveTopics()); } catch (Exception e) { e.printStackTrace(); } diff --git a/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/service/TopicServiceTest.java b/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/service/TopicServiceTest.java index 8b25ec53..265ec963 100644 --- a/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/service/TopicServiceTest.java +++ b/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/service/TopicServiceTest.java @@ -89,6 +89,8 @@ public class TopicServiceTest { dbSet.add(new Db("Elasticsearch")); topic.setDbs(dbSet); + when(config.getDefaultTopicName()).thenReturn(DEFAULT_TOPIC_NAME); + when(topicRepository.findById(DEFAULT_TOPIC_NAME)).thenReturn(Optional.of(topic)); when(topicRepository.findById(name)).thenReturn(Optional.of(topic)); when(topicRepository.findById(null)).thenReturn(Optional.empty()); doThrow(IOException.class).when(elasticsearchService).ensureTableExist(name); -- cgit 1.2.3-korg