summaryrefslogtreecommitdiffstats
path: root/sdc-distribution-client/src/main/java/org/openecomp/sdc/impl
diff options
context:
space:
mode:
Diffstat (limited to 'sdc-distribution-client/src/main/java/org/openecomp/sdc/impl')
-rw-r--r--sdc-distribution-client/src/main/java/org/openecomp/sdc/impl/Configuration.java62
-rw-r--r--sdc-distribution-client/src/main/java/org/openecomp/sdc/impl/DistributionClientImpl.java212
-rw-r--r--sdc-distribution-client/src/main/java/org/openecomp/sdc/impl/DistributionStatusMessageImpl.java70
-rw-r--r--sdc-distribution-client/src/main/java/org/openecomp/sdc/impl/DistributionStatusMessageJsonBuilderFactory.java31
-rw-r--r--sdc-distribution-client/src/main/java/org/openecomp/sdc/impl/StatusConsumer.java66
-rw-r--r--sdc-distribution-client/src/main/java/org/openecomp/sdc/impl/StatusDataImpl.java95
-rw-r--r--sdc-distribution-client/src/main/java/org/openecomp/sdc/impl/mock/DistributionClientStubImpl.java40
7 files changed, 483 insertions, 93 deletions
diff --git a/sdc-distribution-client/src/main/java/org/openecomp/sdc/impl/Configuration.java b/sdc-distribution-client/src/main/java/org/openecomp/sdc/impl/Configuration.java
index dff8a3b..851a198 100644
--- a/sdc-distribution-client/src/main/java/org/openecomp/sdc/impl/Configuration.java
+++ b/sdc-distribution-client/src/main/java/org/openecomp/sdc/impl/Configuration.java
@@ -22,12 +22,15 @@ package org.openecomp.sdc.impl;
import java.util.List;
+import fj.data.Either;
import org.openecomp.sdc.api.consumer.IConfiguration;
+import org.openecomp.sdc.api.results.IDistributionClientResult;
+import org.openecomp.sdc.utils.DistributionActionResultEnum;
import org.openecomp.sdc.utils.DistributionClientConstants;
-public class Configuration implements IConfiguration{
+public class Configuration implements IConfiguration {
-
+ private List<String> msgBusAddressList;
private String asdcAddress;
private String user;
private String password;
@@ -39,12 +42,14 @@ public class Configuration implements IConfiguration{
private String comsumerID;
private String keyStorePath;
private String keyStorePassword;
- private boolean activateServerTLSAuth;
+ private boolean activateServerTLSAuth;
private boolean filterInEmptyResources;
private Boolean useHttpsWithDmaap;
+ private boolean consumeProduceStatusTopic;
public Configuration(IConfiguration other) {
this.asdcAddress = other.getAsdcAddress();
+ this.msgBusAddressList = other.getMsgBusAddress();
this.comsumerID = other.getConsumerID();
this.consumerGroup = other.getConsumerGroup();
this.environmentName = other.getEnvironmentName();
@@ -58,6 +63,7 @@ public class Configuration implements IConfiguration{
this.activateServerTLSAuth = other.activateServerTLSAuth();
this.filterInEmptyResources = other.isFilterInEmptyResources();
this.useHttpsWithDmaap = other.isUseHttpsWithDmaap();
+ this.consumeProduceStatusTopic = other.isConsumeProduceStatusTopic();
}
@Override
@@ -66,6 +72,11 @@ public class Configuration implements IConfiguration{
}
@Override
+ public List<String> getMsgBusAddress() {
+ return msgBusAddressList;
+ }
+
+ @Override
public String getUser() {
return user;
}
@@ -104,11 +115,11 @@ public class Configuration implements IConfiguration{
public String getConsumerID() {
return comsumerID;
}
-
+
@Override
public String getKeyStorePath() {
return keyStorePath;
- }
+ }
@Override
public String getKeyStorePassword() {
@@ -154,7 +165,7 @@ public class Configuration implements IConfiguration{
public void setEnvironmentName(String environmentName) {
this.environmentName = environmentName;
}
-
+
public void setKeyStorePath(String keyStorePath) {
this.keyStorePath = keyStorePath;
}
@@ -163,7 +174,6 @@ public class Configuration implements IConfiguration{
this.keyStorePassword = keyStorePassword;
}
-
public void setactivateServerTLSAuth(boolean activateServerTLSAuth) {
this.activateServerTLSAuth = activateServerTLSAuth;
}
@@ -172,7 +182,7 @@ public class Configuration implements IConfiguration{
public boolean activateServerTLSAuth() {
return this.activateServerTLSAuth;
}
-
+
@Override
public boolean isFilterInEmptyResources() {
return this.filterInEmptyResources;
@@ -182,19 +192,37 @@ public class Configuration implements IConfiguration{
public Boolean isUseHttpsWithDmaap() {
return this.useHttpsWithDmaap;
}
-
- public void setUseHttpsWithDmaap(boolean useHttpsWithDmaap){
+
+ public void setUseHttpsWithDmaap(boolean useHttpsWithDmaap) {
this.useHttpsWithDmaap = useHttpsWithDmaap;
}
@Override
+ public boolean isConsumeProduceStatusTopic() {
+ return this.consumeProduceStatusTopic;
+ }
+
+ @Override
public String toString() {
- return "Configuration [asdcAddress=" + asdcAddress + ", user=" + user + ", password=" + password
- + ", pollingInterval=" + pollingInterval + ", pollingTimeout=" + pollingTimeout
- + ", relevantArtifactTypes=" + relevantArtifactTypes + ", consumerGroup=" + consumerGroup
- + ", environmentName=" + environmentName + ", comsumerID=" + comsumerID + ", keyStorePath="
- + keyStorePath + ", keyStorePassword=" + keyStorePassword + ", activateServerTLSAuth="
- + activateServerTLSAuth + ", filterInEmptyResources=" + filterInEmptyResources + ", useHttpsWithDmaap="
- + useHttpsWithDmaap + "]";
+ //@formatter:off
+ return "Configuration ["+
+ "asdcAddress=" + asdcAddress +
+ ", user=" + user +
+ ", password=" + password +
+ ", pollingInterval=" + pollingInterval +
+ ", pollingTimeout=" + pollingTimeout +
+ ", relevantArtifactTypes=" + relevantArtifactTypes +
+ ", consumerGroup=" + consumerGroup +
+ ", environmentName=" + environmentName +
+ ", comsumerID=" + comsumerID +
+ ", keyStorePath=" + keyStorePath +
+ ", keyStorePassword=" + keyStorePassword +
+ ", activateServerTLSAuth=" + activateServerTLSAuth +
+ ", filterInEmptyResources=" + filterInEmptyResources +
+ ", useHttpsWithDmaap=" + useHttpsWithDmaap +
+ ", consumeProduceStatusTopic=" + consumeProduceStatusTopic +
+ "]";
+ //@formatter:on
}
+
}
diff --git a/sdc-distribution-client/src/main/java/org/openecomp/sdc/impl/DistributionClientImpl.java b/sdc-distribution-client/src/main/java/org/openecomp/sdc/impl/DistributionClientImpl.java
index 1543256..a8778e5 100644
--- a/sdc-distribution-client/src/main/java/org/openecomp/sdc/impl/DistributionClientImpl.java
+++ b/sdc-distribution-client/src/main/java/org/openecomp/sdc/impl/DistributionClientImpl.java
@@ -20,6 +20,8 @@
package org.openecomp.sdc.impl;
+import static java.util.Objects.isNull;
+
import java.io.IOException;
import java.lang.reflect.Type;
import java.net.MalformedURLException;
@@ -27,6 +29,7 @@ import java.nio.charset.StandardCharsets;
import java.security.GeneralSecurityException;
import java.util.ArrayList;
import java.util.List;
+import java.util.Objects;
import java.util.UUID;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
@@ -35,17 +38,16 @@ import java.util.regex.Matcher;
import org.openecomp.sdc.api.IDistributionClient;
import org.openecomp.sdc.api.IDistributionStatusMessageJsonBuilder;
-import org.openecomp.sdc.api.consumer.IConfiguration;
-import org.openecomp.sdc.api.consumer.IDistributionStatusMessage;
-import org.openecomp.sdc.api.consumer.INotificationCallback;
+import org.openecomp.sdc.api.consumer.*;
import org.openecomp.sdc.api.notification.IArtifactInfo;
import org.openecomp.sdc.api.notification.IVfModuleMetadata;
import org.openecomp.sdc.api.results.IDistributionClientDownloadResult;
import org.openecomp.sdc.api.results.IDistributionClientResult;
-import org.openecomp.sdc.http.AsdcConnectorClient;
+import org.openecomp.sdc.http.SdcConnectorClient;
import org.openecomp.sdc.http.TopicRegistrationResponse;
import org.openecomp.sdc.utils.DistributionActionResultEnum;
import org.openecomp.sdc.utils.DistributionClientConstants;
+import org.openecomp.sdc.utils.GeneralUtils;
import org.openecomp.sdc.utils.Wrapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -71,13 +73,14 @@ public class DistributionClientImpl implements IDistributionClient {
private static Logger log = LoggerFactory.getLogger(DistributionClientImpl.class.getName());
- protected AsdcConnectorClient asdcConnector = new AsdcConnectorClient();
+ protected SdcConnectorClient asdcConnector = new SdcConnectorClient();
private ScheduledExecutorService executorPool = null;
protected CambriaIdentityManager cambriaIdentityManager = null;
private List<String> brokerServers;
protected ApiCredential credential;
protected Configuration configuration;
private INotificationCallback callback;
+ private IStatusCallback statusCallback;
private String notificationTopic;
private String statusTopic;
private boolean isConsumerGroupGenerated = false;
@@ -139,7 +142,8 @@ public class DistributionClientImpl implements IDistributionClient {
public synchronized IDistributionClientResult start() {
log.info("start DistributionClient");
- CambriaConsumer cambriaConsumer = null;
+ IDistributionClientResult startResult;
+ CambriaConsumer cambriaNotificationConsumer = null;
Wrapper<IDistributionClientResult> errorWrapper = new Wrapper<>();
validateRunReady(errorWrapper);
if (errorWrapper.isEmpty()) {
@@ -147,30 +151,49 @@ public class DistributionClientImpl implements IDistributionClient {
}
if (errorWrapper.isEmpty()) {
try {
- cambriaConsumer = new ConsumerBuilder().authenticatedBy(credential.getApiKey(), credential.getApiSecret()).knownAs(configuration.getConsumerGroup(), configuration.getConsumerID()).onTopic(notificationTopic).usingHttps(configuration.isUseHttpsWithDmaap()).usingHosts(brokerServers)
+ cambriaNotificationConsumer = new ConsumerBuilder().authenticatedBy(credential.getApiKey(), credential.getApiSecret()).knownAs(configuration.getConsumerGroup(), configuration.getConsumerID()).onTopic(notificationTopic).usingHttps(configuration.isUseHttpsWithDmaap()).usingHosts(brokerServers)
.withSocketTimeout(configuration.getPollingTimeout() * 1000).build();
+
} catch (MalformedURLException | GeneralSecurityException e) {
handleCambriaInitFailure(errorWrapper, e);
}
}
-
+ if (errorWrapper.isEmpty()) {
+
+ List<String> relevantArtifactTypes = configuration.getRelevantArtifactTypes();
+ // Remove nulls from list - workaround for how configuration is built
+ while (relevantArtifactTypes.remove(null));
+
+ NotificationConsumer consumer = new NotificationConsumer(cambriaNotificationConsumer, callback, relevantArtifactTypes, this);
+ executorPool = Executors.newScheduledThreadPool(DistributionClientConstants.POOL_SIZE);
+ executorPool.scheduleAtFixedRate(consumer, 0, configuration.getPollingInterval(), TimeUnit.SECONDS);
+
+ handleStatusConsumer(errorWrapper, executorPool);
+ }
if (!errorWrapper.isEmpty()) {
- return errorWrapper.getInnerElement();
+ startResult = errorWrapper.getInnerElement();
+ }
+ else{
+ startResult = new DistributionClientResultImpl(DistributionActionResultEnum.SUCCESS, "distribution client started successfuly");
+ isStarted = true;
}
-
- List<String> relevantArtifactTypes = configuration.getRelevantArtifactTypes();
- // Remove nulls from list - workaround for how configuration is built
- while (relevantArtifactTypes.remove(null));
-
- NotificationConsumer consumer = new NotificationConsumer(cambriaConsumer, callback, relevantArtifactTypes, this);
- executorPool = Executors.newScheduledThreadPool(DistributionClientConstants.POOL_SIZE);
- executorPool.scheduleAtFixedRate(consumer, 0, configuration.getPollingInterval(), TimeUnit.SECONDS);
-
- DistributionClientResultImpl startResult = new DistributionClientResultImpl(DistributionActionResultEnum.SUCCESS, "distribution client started successfuly");
- isStarted = true;
return startResult;
}
+ private void handleStatusConsumer(Wrapper<IDistributionClientResult> errorWrapper, ScheduledExecutorService executorPool) {
+ if( configuration.isConsumeProduceStatusTopic()){
+ CambriaConsumer cambriaStatusConsumer = null;
+ try {
+ cambriaStatusConsumer = new ConsumerBuilder().authenticatedBy(credential.getApiKey(), credential.getApiSecret()).knownAs(configuration.getConsumerGroup(), configuration.getConsumerID()).onTopic(statusTopic).usingHttps(configuration.isUseHttpsWithDmaap()).usingHosts(brokerServers)
+ .withSocketTimeout(configuration.getPollingTimeout() * 1000).build();
+ StatusConsumer statusConsumer = new StatusConsumer(cambriaStatusConsumer, statusCallback);
+ executorPool.scheduleAtFixedRate(statusConsumer, 0, configuration.getPollingInterval(), TimeUnit.SECONDS);
+ } catch (MalformedURLException | GeneralSecurityException e) {
+ handleCambriaInitFailure(errorWrapper, e);
+ }
+ }
+ }
+
@Override
/* see javadoc */
public synchronized IDistributionClientResult stop() {
@@ -219,7 +242,24 @@ public class DistributionClientImpl implements IDistributionClient {
}
return asdcConnector.dowloadArtifact(artifactInfo);
}
+ @Override
+ public synchronized IDistributionClientResult init(IConfiguration conf, INotificationCallback notificationCallback,
+ IStatusCallback statusCallback) {
+ IDistributionClientResult initResult;
+ if( !conf.isConsumeProduceStatusTopic() ){
+ initResult = new DistributionClientResultImpl(DistributionActionResultEnum.CONF_INVALID_CONSUME_PRODUCE_STATUS_TOPIC_FALG, "configuration is invalid: isConsumeProduceStatusTopic() should be set to 'true'" );
+ }
+ else if( isNull(statusCallback) ){
+ initResult = new DistributionClientResultImpl(DistributionActionResultEnum.CONF_INVALID_CONSUME_PRODUCE_STATUS_TOPIC_FALG, "configuration is invalid: statusCallback is not defined" );
+ }
+ else{
+ this.statusCallback = statusCallback;
+ initResult = init(conf, notificationCallback);
+ }
+ return initResult;
+ }
+
@Override
/*
* see javadoc
@@ -236,7 +276,7 @@ public class DistributionClientImpl implements IDistributionClient {
if (errorWrapper.isEmpty()) {
validateAndInitConfiguration(errorWrapper, conf);
}
- // 1. get servers list from ASDC
+ // 1. get ueb server list from configuration
if (errorWrapper.isEmpty()) {
initUebServerList(errorWrapper);
}
@@ -295,6 +335,7 @@ public class DistributionClientImpl implements IDistributionClient {
}
private void validateArtifactTypesWithAsdcServer(IConfiguration conf, Wrapper<IDistributionClientResult> errorWrapper) {
+ asdcConnector.init(configuration);
Either<List<String>, IDistributionClientResult> eitherValidArtifactTypesList = asdcConnector.getValidArtifactTypesList();
if (eitherValidArtifactTypesList.isRight()) {
DistributionActionResultEnum errorType = eitherValidArtifactTypesList.right().value().getDistributionActionResult();
@@ -319,15 +360,16 @@ public class DistributionClientImpl implements IDistributionClient {
}
private void initUebServerList(Wrapper<IDistributionClientResult> errorWrapper) {
- log.debug("get cluster server list from ASDC");
- asdcConnector.init(configuration);
+ log.debug("get ueb cluster server list from component(configuration file)");
- Either<List<String>, IDistributionClientResult> serverListResponse = asdcConnector.getServerList();
+ Either<List<String>, IDistributionClientResult> serverListResponse = getUEBServerList();
if (serverListResponse.isRight()) {
errorWrapper.setInnerElement(serverListResponse.right().value());
} else {
+
brokerServers = serverListResponse.left().value();
}
+
}
private void validateNotInitilized(Wrapper<IDistributionClientResult> errorWrapper) {
@@ -457,32 +499,25 @@ public class DistributionClientImpl implements IDistributionClient {
result = DistributionActionResultEnum.CONF_MISSING_USERNAME;
} else if (conf.getPassword() == null || conf.getPassword().isEmpty()) {
result = DistributionActionResultEnum.CONF_MISSING_PASSWORD;
+ } else if (conf.getMsgBusAddress() == null || conf.getMsgBusAddress().isEmpty()) {
+ result = DistributionActionResultEnum.CONF_MISSING_MSG_BUS_ADDRESS;
} else if (conf.getAsdcAddress() == null || conf.getAsdcAddress().isEmpty()) {
result = DistributionActionResultEnum.CONF_MISSING_ASDC_FQDN;
} else if (!isValidFqdn(conf.getAsdcAddress())) {
result = DistributionActionResultEnum.CONF_INVALID_ASDC_FQDN;
+ } else if (!isValidFqdns(conf.getMsgBusAddress())){
+ result = DistributionActionResultEnum.CONF_INVALID_MSG_BUS_ADDRESS;
} else if (conf.getEnvironmentName() == null || conf.getEnvironmentName().isEmpty()) {
result = DistributionActionResultEnum.CONF_MISSING_ENVIRONMENT_NAME;
} else if (conf.getRelevantArtifactTypes() == null || conf.getRelevantArtifactTypes().isEmpty()) {
result = DistributionActionResultEnum.CONF_MISSING_ARTIFACT_TYPES;
}
+ else if( conf.isConsumeProduceStatusTopic() && Objects.isNull(statusCallback) ){
+ result = DistributionActionResultEnum.CONF_INVALID_CONSUME_PRODUCE_STATUS_TOPIC_FALG;
+ }
// DistributionActionResultEnum.SUCCESS
else {
- this.configuration = new Configuration(conf);
- if (!isPollingIntervalValid(conf.getPollingInterval())) {
- configuration.setPollingInterval(DistributionClientConstants.MIN_POLLING_INTERVAL_SEC);
- }
- if (!isPollingTimeoutValid(conf.getPollingTimeout())) {
- configuration.setPollingTimeout(DistributionClientConstants.POLLING_TIMEOUT_SEC);
- }
- if (conf.getConsumerGroup() == null) {
- generateConsumerGroup();
- }
-
- //Default use HTTPS with DMAAP
- if (conf.isUseHttpsWithDmaap() == null){
- configuration.setUseHttpsWithDmaap(true);
- }
+ handleValidConf(conf);
}
if (result != DistributionActionResultEnum.SUCCESS) {
@@ -495,6 +530,24 @@ public class DistributionClientImpl implements IDistributionClient {
return result;
}
+ private void handleValidConf(IConfiguration conf) {
+ this.configuration = new Configuration(conf);
+ if (!isPollingIntervalValid(conf.getPollingInterval())) {
+ configuration.setPollingInterval(DistributionClientConstants.MIN_POLLING_INTERVAL_SEC);
+ }
+ if (!isPollingTimeoutValid(conf.getPollingTimeout())) {
+ configuration.setPollingTimeout(DistributionClientConstants.POLLING_TIMEOUT_SEC);
+ }
+ if (conf.getConsumerGroup() == null) {
+ generateConsumerGroup();
+ }
+
+ //Default use HTTPS with DMAAP
+ if (conf.isUseHttpsWithDmaap() == null){
+ configuration.setUseHttpsWithDmaap(true);
+ }
+ }
+
private void generateConsumerGroup() {
String generatedConsumerGroup = UUID.randomUUID().toString();
configuration.setConsumerGroup(generatedConsumerGroup);
@@ -509,6 +562,19 @@ public class DistributionClientImpl implements IDistributionClient {
}
return false;
}
+ protected boolean isValidFqdns(List<String> fqdns) {
+ if (fqdns != null && !fqdns.isEmpty()) {
+ for (String fqdn : fqdns) {
+ if (isValidFqdn(fqdn)) {
+ continue;
+ } else {
+ return false;
+ }
+ }
+ return true;
+ }
+ return false;
+ }
private void shutdownExecutor() {
if (executorPool == null)
@@ -633,6 +699,31 @@ public class DistributionClientImpl implements IDistributionClient {
}
@Override
+ public IDistributionClientResult sendComponentDoneStatus(IComponentDoneStatusMessage statusMessage) {
+ log.info("DistributionClient - sendComponentDone status");
+ Wrapper<IDistributionClientResult> errorWrapper = new Wrapper<>();
+ validateRunReady(errorWrapper);
+ if (!errorWrapper.isEmpty()) {
+ return errorWrapper.getInnerElement();
+ }
+ return sendStatus(DistributionStatusMessageJsonBuilderFactory.getSimpleBuilder(statusMessage));
+
+ }
+
+ @Override
+ public IDistributionClientResult sendComponentDoneStatus(IComponentDoneStatusMessage statusMessage,
+ String errorReason) {
+ log.info("DistributionClient - sendComponentDone status with errorReason");
+ Wrapper<IDistributionClientResult> errorWrapper = new Wrapper<>();
+ validateRunReady(errorWrapper);
+ if (!errorWrapper.isEmpty()) {
+ return errorWrapper.getInnerElement();
+ }
+ return sendStatus(DistributionStatusMessageJsonBuilderFactory.getErrorReasonBuilder(statusMessage, errorReason));
+ }
+
+
+ @Override
public List<IVfModuleMetadata> decodeVfModuleArtifact(byte[] artifactPayload) {
Gson gson = new GsonBuilder().setPrettyPrinting().create();
String vfModuleJsonString = new String(artifactPayload, StandardCharsets.UTF_8);
@@ -641,4 +732,47 @@ public class DistributionClientImpl implements IDistributionClient {
List<IVfModuleMetadata> vfModules = gson.fromJson(vfModuleJsonString, type);
return vfModules;
}
+
+
+ public IDistributionClientResult sendFinalDistrStatus(IFinalDistrStatusMessage statusMessage) {
+ log.info("DistributionClient - sendFinalDistributionStatus status");
+ Wrapper<IDistributionClientResult> errorWrapper = new Wrapper<>();
+ validateRunReady(errorWrapper);
+ if (!errorWrapper.isEmpty()) {
+ return errorWrapper.getInnerElement();
+ }
+ return sendStatus(DistributionStatusMessageJsonBuilderFactory.getSimpleBuilder(statusMessage));
+
+ }
+
+
+ @Override
+ public IDistributionClientResult sendFinalDistrStatus(IFinalDistrStatusMessage statusMessage,
+ String errorReason) {
+ log.info("DistributionClient - sendFinalDistributionStatus status with errorReason");
+ Wrapper<IDistributionClientResult> errorWrapper = new Wrapper<>();
+ validateRunReady(errorWrapper);
+ if (!errorWrapper.isEmpty()) {
+ return errorWrapper.getInnerElement();
+ }
+ return sendStatus(DistributionStatusMessageJsonBuilderFactory.getErrorReasonBuilder(statusMessage, errorReason));
+
+
+ }
+
+ public Either<List<String>,IDistributionClientResult> getUEBServerList() {
+ List<String> msgBusAddresses = configuration.getMsgBusAddress();
+ if(msgBusAddresses.isEmpty()){
+ return Either.right(new DistributionClientResultImpl(DistributionActionResultEnum.CONF_MISSING_MSG_BUS_ADDRESS, "Message bus address was not found in the config file"));
+ }
+ else{
+ return GeneralUtils.convertToValidHostName(msgBusAddresses);
+ }
+ }
+
+
+
+
+
+
}
diff --git a/sdc-distribution-client/src/main/java/org/openecomp/sdc/impl/DistributionStatusMessageImpl.java b/sdc-distribution-client/src/main/java/org/openecomp/sdc/impl/DistributionStatusMessageImpl.java
index d570142..d9ed654 100644
--- a/sdc-distribution-client/src/main/java/org/openecomp/sdc/impl/DistributionStatusMessageImpl.java
+++ b/sdc-distribution-client/src/main/java/org/openecomp/sdc/impl/DistributionStatusMessageImpl.java
@@ -20,78 +20,80 @@
package org.openecomp.sdc.impl;
+import org.openecomp.sdc.api.consumer.IComponentDoneStatusMessage;
import org.openecomp.sdc.api.consumer.IDistributionStatusMessage;
+import org.openecomp.sdc.api.consumer.IFinalDistrStatusMessage;
import org.openecomp.sdc.utils.DistributionStatusEnum;
class DistributionStatusMessageImpl implements IDistributionStatusMessage {
-
-
+
String distributionID;
String consumerID;
long timestamp;
String artifactURL;
DistributionStatusEnum status;
String errorReason;
-
-
- public DistributionStatusMessageImpl(IDistributionStatusMessage message){
+ private String componentName;
+
+ public DistributionStatusMessageImpl(IDistributionStatusMessage message) {
super();
distributionID = message.getDistributionID();
consumerID = message.getConsumerID();
timestamp = message.getTimestamp();
artifactURL = message.getArtifactURL();
status = message.getStatus();
-
+
+ }
+
+ public DistributionStatusMessageImpl(IComponentDoneStatusMessage message) {
+ super();
+ distributionID = message.getDistributionID();
+ consumerID = message.getConsumerID();
+ timestamp = message.getTimestamp();
+ artifactURL = message.getArtifactURL();
+ status = message.getStatus();
+ componentName = message.getComponentName();
+ }
+
+ public DistributionStatusMessageImpl(IFinalDistrStatusMessage message) {
+ super();
+ distributionID = message.getDistributionID();
+ consumerID = message.getConsumerID();
+ timestamp = message.getTimestamp();
+
+ artifactURL = "";
+ status = message.getStatus();
+ componentName = message.getComponentName();
}
@Override
public String getDistributionID() {
-
+
return distributionID;
}
@Override
public String getConsumerID() {
-
+
return consumerID;
}
@Override
public long getTimestamp() {
-
+
return timestamp;
}
@Override
public String getArtifactURL() {
-
+
return artifactURL;
}
@Override
public DistributionStatusEnum getStatus() {
-
- return status;
- }
-
- public void setDistributionID(String distributionID) {
- this.distributionID = distributionID;
- }
-
- public void setConsumerID(String consumerID) {
- this.consumerID = consumerID;
- }
-
- public void setTimestamp(long timestamp) {
- this.timestamp = timestamp;
- }
-
- public void setArtifactURL(String artifactURL) {
- this.artifactURL = artifactURL;
- }
- public void setStatus(DistributionStatusEnum status) {
- this.status = status;
+ return status;
}
public String getErrorReason() {
@@ -102,4 +104,10 @@ class DistributionStatusMessageImpl implements IDistributionStatusMessage {
this.errorReason = errorReason;
}
+ public String getComponentName() {
+ return componentName;
+ }
+
+
+
}
diff --git a/sdc-distribution-client/src/main/java/org/openecomp/sdc/impl/DistributionStatusMessageJsonBuilderFactory.java b/sdc-distribution-client/src/main/java/org/openecomp/sdc/impl/DistributionStatusMessageJsonBuilderFactory.java
index 9d97805..e2f9f89 100644
--- a/sdc-distribution-client/src/main/java/org/openecomp/sdc/impl/DistributionStatusMessageJsonBuilderFactory.java
+++ b/sdc-distribution-client/src/main/java/org/openecomp/sdc/impl/DistributionStatusMessageJsonBuilderFactory.java
@@ -21,7 +21,9 @@
package org.openecomp.sdc.impl;
import org.openecomp.sdc.api.IDistributionStatusMessageJsonBuilder;
+import org.openecomp.sdc.api.consumer.IComponentDoneStatusMessage;
import org.openecomp.sdc.api.consumer.IDistributionStatusMessage;
+import org.openecomp.sdc.api.consumer.IFinalDistrStatusMessage;
import org.openecomp.sdc.utils.DistributionStatusEnum;
import com.google.gson.Gson;
@@ -35,6 +37,18 @@ public class DistributionStatusMessageJsonBuilderFactory {
return prepareBuilderFromImpl(message);
}
+
+ public static IDistributionStatusMessageJsonBuilder getSimpleBuilder(IComponentDoneStatusMessage statusMessage){
+ DistributionStatusMessageImpl message = new DistributionStatusMessageImpl(statusMessage);
+
+ return prepareBuilderFromImpl(message);
+ }
+
+ public static IDistributionStatusMessageJsonBuilder getSimpleBuilder(IFinalDistrStatusMessage statusMessage){
+ DistributionStatusMessageImpl message = new DistributionStatusMessageImpl(statusMessage);
+
+ return prepareBuilderFromImpl(message);
+ }
public static IDistributionStatusMessageJsonBuilder getErrorReasonBuilder(IDistributionStatusMessage statusMessage, String errorReason){
DistributionStatusMessageImpl message = new DistributionStatusMessageImpl(statusMessage);
@@ -42,6 +56,20 @@ public class DistributionStatusMessageJsonBuilderFactory {
return prepareBuilderFromImpl(message);
}
+
+ public static IDistributionStatusMessageJsonBuilder getErrorReasonBuilder(IComponentDoneStatusMessage statusMessage,
+ String errorReason) {
+ DistributionStatusMessageImpl message = new DistributionStatusMessageImpl(statusMessage);
+ message.setErrorReason(errorReason);
+ return prepareBuilderFromImpl(message);
+ }
+
+ public static IDistributionStatusMessageJsonBuilder getErrorReasonBuilder(IFinalDistrStatusMessage statusMessage,
+ String errorReason) {
+ DistributionStatusMessageImpl message = new DistributionStatusMessageImpl(statusMessage);
+ message.setErrorReason(errorReason);
+ return prepareBuilderFromImpl(message);
+ }
static IDistributionStatusMessageJsonBuilder prepareBuilderForNotificationStatus(final String consumerId, final long currentTimeMillis, final String distributionId,
final ArtifactInfoImpl artifactInfo, boolean isNotified){
@@ -112,6 +140,9 @@ public class DistributionStatusMessageJsonBuilderFactory {
private enum DistributionStatusNotificationEnum {
NOTIFIED, NOT_NOTIFIED
}
+
+
+
}
diff --git a/sdc-distribution-client/src/main/java/org/openecomp/sdc/impl/StatusConsumer.java b/sdc-distribution-client/src/main/java/org/openecomp/sdc/impl/StatusConsumer.java
new file mode 100644
index 0000000..34d85ec
--- /dev/null
+++ b/sdc-distribution-client/src/main/java/org/openecomp/sdc/impl/StatusConsumer.java
@@ -0,0 +1,66 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * sdc-distribution-client
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.openecomp.sdc.impl;
+
+import org.openecomp.sdc.api.consumer.IStatusCallback;
+import org.openecomp.sdc.api.notification.IStatusData;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.att.nsa.cambria.client.CambriaConsumer;
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+
+class StatusConsumer implements Runnable {
+
+ private static Logger log = LoggerFactory.getLogger(StatusConsumer.class.getName());
+
+ private CambriaConsumer cambriaConsumer;
+ private IStatusCallback clientCallback;
+
+ public StatusConsumer(CambriaConsumer cambriaConsumer, IStatusCallback clientCallback) {
+ this.cambriaConsumer = cambriaConsumer;
+ this.clientCallback = clientCallback;
+ }
+
+ @Override
+ public void run() {
+
+ try {
+ Gson gson = new GsonBuilder().setPrettyPrinting().create();
+ for (String statusMsg : cambriaConsumer.fetch()) {
+ log.debug("received message from topic");
+ log.debug("recieved notification from broker: {}", statusMsg);
+ IStatusData statusData = gson.fromJson(statusMsg, StatusDataImpl.class);
+ clientCallback.activateCallback(statusData);
+
+
+ }
+
+ } catch (Exception e) {
+ log.error("Error exception occured when fetching with Cambria Client:{}", e.getMessage());
+ log.debug("Error exception occured when fetching with Cambria Client:{}", e.getMessage(), e);
+ }
+ }
+
+
+
+}
diff --git a/sdc-distribution-client/src/main/java/org/openecomp/sdc/impl/StatusDataImpl.java b/sdc-distribution-client/src/main/java/org/openecomp/sdc/impl/StatusDataImpl.java
new file mode 100644
index 0000000..119a7f3
--- /dev/null
+++ b/sdc-distribution-client/src/main/java/org/openecomp/sdc/impl/StatusDataImpl.java
@@ -0,0 +1,95 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.openecomp.sdc.impl;
+
+import org.openecomp.sdc.api.notification.IStatusData;
+import org.openecomp.sdc.utils.DistributionStatusEnum;
+
+public class StatusDataImpl implements IStatusData{
+
+ String distributionID;
+ String consumerID;
+ long timestamp;
+ String artifactURL;
+ DistributionStatusEnum status;
+ String componentName;
+ String errorReason;
+
+ @Override
+ public String getDistributionID() {
+ return distributionID;
+ }
+
+ public void setDistributionID(String distributionId) {
+ this.distributionID = distributionId;
+ }
+ @Override
+ public String getConsumerID() {
+ return consumerID;
+ }
+
+ public void setConsumerID(String consumerId) {
+ this.consumerID = consumerId;
+ }
+ @Override
+ public Long getTimestamp() {
+ return timestamp;
+ }
+
+ public void setTimestamp(long timestamp) {
+ this.timestamp = timestamp;
+ }
+ @Override
+ public String getArtifactURL() {
+ return artifactURL;
+ }
+
+ public void setArtifactURL(String artifactURL) {
+ this.artifactURL = artifactURL;
+ }
+ @Override
+ public DistributionStatusEnum getStatus() {
+ return status;
+ }
+
+ public void setStatus(DistributionStatusEnum status) {
+ this.status = status;
+ }
+
+
+ @Override
+ public String toString() {
+ return "StatusDataImpl [distributionId=" + distributionID + ", consumerId=" + consumerID + ", timestamp=" + timestamp + ", artifactURL=" + artifactURL + ", status=" + status +", errorReason=" + errorReason+ "]";
+ }
+ @Override
+ public String getComponentName() {
+ return componentName;
+ }
+
+ @Override
+ public String getErrorReason() {
+ return errorReason;
+ }
+
+
+
+
+}
diff --git a/sdc-distribution-client/src/main/java/org/openecomp/sdc/impl/mock/DistributionClientStubImpl.java b/sdc-distribution-client/src/main/java/org/openecomp/sdc/impl/mock/DistributionClientStubImpl.java
index b8044cd..1730290 100644
--- a/sdc-distribution-client/src/main/java/org/openecomp/sdc/impl/mock/DistributionClientStubImpl.java
+++ b/sdc-distribution-client/src/main/java/org/openecomp/sdc/impl/mock/DistributionClientStubImpl.java
@@ -23,18 +23,14 @@ package org.openecomp.sdc.impl.mock;
import java.util.List;
import org.openecomp.sdc.api.IDistributionClient;
-import org.openecomp.sdc.api.consumer.IConfiguration;
-import org.openecomp.sdc.api.consumer.IDistributionStatusMessage;
-import org.openecomp.sdc.api.consumer.INotificationCallback;
+import org.openecomp.sdc.api.consumer.*;
import org.openecomp.sdc.api.notification.IArtifactInfo;
import org.openecomp.sdc.api.notification.IVfModuleMetadata;
import org.openecomp.sdc.api.results.IDistributionClientDownloadResult;
import org.openecomp.sdc.api.results.IDistributionClientResult;
/** Mock Implementation */
public class DistributionClientStubImpl implements IDistributionClient{
- public DistributionClientStubImpl(){
-
- }
+
public IDistributionClientResult updateConfiguration(IConfiguration newConf) {
return new DistributionClientResultStubImpl();
@@ -67,6 +63,12 @@ public class DistributionClientStubImpl implements IDistributionClient{
}
@Override
+ public IDistributionClientResult init(IConfiguration conf, INotificationCallback notificationCallback,
+ IStatusCallback statusCallback) {
+ return new DistributionClientResultStubImpl();
+ }
+
+ @Override
public IConfiguration getConfiguration() {
// TODO Auto-generated method stub
return null;
@@ -87,10 +89,36 @@ public class DistributionClientStubImpl implements IDistributionClient{
}
@Override
+ public IDistributionClientResult sendComponentDoneStatus(IComponentDoneStatusMessage statusMessage) {
+ return null;
+ }
+
+ @Override
+ public IDistributionClientResult sendFinalDistrStatus(IFinalDistrStatusMessage statusMessage) {
+ return null;
+ }
+
+ @Override
public List<IVfModuleMetadata> decodeVfModuleArtifact(byte[] artifactPayload) {
// TODO Auto-generated method stub
return null;
}
+
+ @Override
+ public IDistributionClientResult sendComponentDoneStatus(IComponentDoneStatusMessage statusMessage,
+ String errorReason) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public IDistributionClientResult sendFinalDistrStatus(IFinalDistrStatusMessage statusMessage, String errorReason) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+
+