/*
* ============LICENSE_START=======================================================
* ONAP
* ================================================================================
* Copyright (C) 2018 Samsung Electronics Co., Ltd. All rights reserved.
* Copyright (C) 2018-2019, 2021 AT&T Intellectual Property. All rights reserved.
* Copyright (C) 2019 Nordix Foundation.
* Copyright (C) 2022 Huawei Canada Limited.
* Copyright (C) 2022 CTC, Inc.
* ================================================================================
* 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.slice.analysis.ms.dmaap;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.apache.commons.lang3.StringUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* Partially copied from Onap Policy
* policy/common/policy-endpoints/src/main/java/org/onap/policy/common/endpoints/event/comm/bus/internal/BusTopicParams.java
* Modified to fit this project.
* Member variables of this Params class are as follows.
*
*
servers DMaaP servers
* topic DMaaP Topic to be monitored
* apiKey DMaaP API Key (optional)
* apiSecret DMaaP API Secret (optional)
* consumerGroup DMaaP Reader Consumer Group
* consumerInstance DMaaP Reader Instance
* fetchTimeout DMaaP fetch timeout
* fetchLimit DMaaP fetch limit
* environment DME2 Environment
* aftEnvironment DME2 AFT Environment
* partner DME2 Partner
* latitude DME2 Latitude
* longitude DME2 Longitude
* additionalProps Additional properties to pass to DME2
* useHttps does connection use HTTPS?
* allowSelfSignedCerts are self-signed certificates allow
*/
@Getter
@Setter
public class MRTopicParams {
private int port;
private List servers;
private Map additionalProps;
private String topic;
private String effectiveTopic;
private String apiKey;
private String apiSecret;
private String consumerGroup;
private String consumerInstance;
private int fetchTimeout;
private int fetchLimit;
private boolean useHttps;
private boolean allowSelfSignedCerts;
private boolean managed;
private String userName;
private String password;
private String environment;
private String aftEnvironment;
private String partner;
private String latitude;
private String longitude;
private String partitionId;
private String clientName;
private String hostname;
private String basePath;
@Getter
private String serializationProvider;
public static TopicParamsBuilder builder() {
return new TopicParamsBuilder();
}
/**
* Methods to Check if the property is INVALID.
*/
public boolean isEnvironmentInvalid() {
return StringUtils.isBlank(environment);
}
public boolean isAftEnvironmentInvalid() {
return StringUtils.isBlank(aftEnvironment);
}
public boolean isLatitudeInvalid() {
return StringUtils.isBlank(latitude);
}
public boolean isLongitudeInvalid() {
return StringUtils.isBlank(longitude);
}
public boolean isConsumerInstanceInvalid() {
return StringUtils.isBlank(consumerInstance);
}
public boolean isConsumerGroupInvalid() {
return StringUtils.isBlank(consumerGroup);
}
public boolean isClientNameInvalid() {
return StringUtils.isBlank(clientName);
}
public boolean isPartnerInvalid() {
return StringUtils.isBlank(partner);
}
public boolean isServersInvalid() {
return (servers == null || servers.isEmpty()
|| (servers.size() == 1 && ("".equals(servers.get(0)))));
}
public boolean isTopicInvalid() {
return StringUtils.isBlank(topic);
}
public boolean isPartitionIdInvalid() {
return StringUtils.isBlank(partitionId);
}
public boolean isHostnameInvalid() {
return StringUtils.isBlank(hostname);
}
public boolean isPortInvalid() {
return (port <= 0 || port >= 65535);
}
/**
* Methods to Check if the property is Valid.
*/
public boolean isApiKeyValid() {
return StringUtils.isNotBlank(apiKey);
}
public boolean isApiSecretValid() {
return StringUtils.isNotBlank(apiSecret);
}
public boolean isUserNameValid() {
return StringUtils.isNotBlank(userName);
}
public boolean isPasswordValid() {
return StringUtils.isNotBlank(password);
}
public boolean isAdditionalPropsValid() {
return additionalProps != null;
}
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public static class TopicParamsBuilder {
final MRTopicParams params = new MRTopicParams();
public TopicParamsBuilder servers(List servers) {
this.params.servers = servers;
return this;
}
public TopicParamsBuilder topic(String topic) {
this.params.topic = topic;
return this;
}
public TopicParamsBuilder effectiveTopic(String effectiveTopic) {
this.params.effectiveTopic = effectiveTopic;
return this;
}
public TopicParamsBuilder apiKey(String apiKey) {
this.params.apiKey = apiKey;
return this;
}
public TopicParamsBuilder apiSecret(String apiSecret) {
this.params.apiSecret = apiSecret;
return this;
}
public TopicParamsBuilder consumerGroup(String consumerGroup) {
this.params.consumerGroup = consumerGroup;
return this;
}
public TopicParamsBuilder consumerInstance(String consumerInstance) {
this.params.consumerInstance = consumerInstance;
return this;
}
public TopicParamsBuilder fetchTimeout(int fetchTimeout) {
this.params.fetchTimeout = fetchTimeout;
return this;
}
public TopicParamsBuilder fetchLimit(int fetchLimit) {
this.params.fetchLimit = fetchLimit;
return this;
}
public TopicParamsBuilder useHttps(boolean useHttps) {
this.params.useHttps = useHttps;
return this;
}
public TopicParamsBuilder allowSelfSignedCerts(boolean allowSelfSignedCerts) {
this.params.allowSelfSignedCerts = allowSelfSignedCerts;
return this;
}
public TopicParamsBuilder userName(String userName) {
this.params.userName = userName;
return this;
}
public TopicParamsBuilder password(String password) {
this.params.password = password;
return this;
}
public TopicParamsBuilder environment(String environment) {
this.params.environment = environment;
return this;
}
public TopicParamsBuilder aftEnvironment(String aftEnvironment) {
this.params.aftEnvironment = aftEnvironment;
return this;
}
public TopicParamsBuilder partner(String partner) {
this.params.partner = partner;
return this;
}
public TopicParamsBuilder latitude(String latitude) {
this.params.latitude = latitude;
return this;
}
public TopicParamsBuilder longitude(String longitude) {
this.params.longitude = longitude;
return this;
}
public TopicParamsBuilder additionalProps(Map additionalProps) {
this.params.additionalProps = additionalProps;
return this;
}
public TopicParamsBuilder partitionId(String partitionId) {
this.params.partitionId = partitionId;
return this;
}
public MRTopicParams build() {
return params;
}
public TopicParamsBuilder buildFromConfigJson(JsonObject jsonObject) {
String consumerGroup = null;
String consumerInstance = null;
String aafUsername = null;
String aafPassword = null;
List servers = new ArrayList<>();
String topic = null;
boolean useHttps = false;
int fetchTimeout = -1;
int fetchLimit = -1;
if (jsonObject.has("consumer_group") && !jsonObject.get("consumer_group").isJsonNull()) {
consumerGroup = jsonObject.get("consumer_group").getAsString();
}
if (jsonObject.has("consumer_instance") && !jsonObject.get("consumer_instance").isJsonNull()) {
consumerInstance = jsonObject.get("consumer_instance").getAsString();
}
if (jsonObject.has("aaf_username") && !jsonObject.get("aaf_username").isJsonNull()) {
aafUsername = jsonObject.get("aaf_username").getAsString();
}
if (jsonObject.has("aaf_password") && !jsonObject.get("aaf_password").isJsonNull()) {
aafPassword = jsonObject.get("aaf_password").getAsString();
}
if (jsonObject.has("fetch_timeout") && !jsonObject.get("fetch_timeout").isJsonNull()) {
fetchTimeout = jsonObject.get("fetch_timeout").getAsInt();
}
if (jsonObject.has("fetch_limit") && !jsonObject.get("fetch_limit").isJsonNull()) {
fetchLimit = jsonObject.get("fetch_limit").getAsInt();
}
if (jsonObject.has("servers") && !jsonObject.get("servers").isJsonNull()) {
JsonArray jsonArray = jsonObject.get("servers").getAsJsonArray();
servers = new ArrayList<>();
for (int i=0, e=jsonArray.size(); i