Modify code to limit garbage collectible objects and create method to deploy adapters without custom mapping

Removed creation of ArrayLists when a service is been called and added null validation to those lists in service layer. Developed code to deploy adapters when custom mapping is false and updated exception handling.
cherry-pick-b7435168
Yohan Avishke 5 years ago
parent d885707046
commit 51b7f8b206

@ -27,7 +27,7 @@ import java.util.List;
*/ */
public class AdapterConfiguration { public class AdapterConfiguration {
@ApiModelProperty(value = "Adapter properties list") @ApiModelProperty(value = "Adapter properties list")
private List<AdapterProperty> adapterProperties = new ArrayList<>(); private List<AdapterProperty> adapterProperties;
@ApiModelProperty(value = "Custom-mapping flag") @ApiModelProperty(value = "Custom-mapping flag")
private boolean isCustomMappingEnabled; private boolean isCustomMappingEnabled;
@ApiModelProperty(value = "Mapping configurations") @ApiModelProperty(value = "Mapping configurations")

@ -32,15 +32,15 @@ public class AdapterMappingConfiguration {
@ApiModelProperty(value = "Input mapping for json,text and xml mappings") @ApiModelProperty(value = "Input mapping for json,text and xml mappings")
private String inputMappingString; private String inputMappingString;
@ApiModelProperty(value = "Input mapping for json,map and xml mappings") @ApiModelProperty(value = "Input mapping for json,map and xml mappings")
private List<MappingProperty> inputMappingProperties = new ArrayList<>(); private List<MappingProperty> inputMappingProperties;
@ApiModelProperty(value = "Name-scape mapping for xml mapping") @ApiModelProperty(value = "Name-scape mapping for xml mapping")
private List<MappingProperty> namespaceMappingProperties = new ArrayList<>(); private List<MappingProperty> namespaceMappingProperties;
@ApiModelProperty(value = "Correlation mapping for wso2 mapping") @ApiModelProperty(value = "Correlation mapping for wso2 mapping")
private List<MappingProperty> correlationMappingProperties = new ArrayList<>(); private List<MappingProperty> correlationMappingProperties;
@ApiModelProperty(value = "Payload mapping for wso2 mapping") @ApiModelProperty(value = "Payload mapping for wso2 mapping")
private List<MappingProperty> payloadMappingProperties = new ArrayList<>(); private List<MappingProperty> payloadMappingProperties;
@ApiModelProperty(value = "Meta mapping for wso2 mapping") @ApiModelProperty(value = "Meta mapping for wso2 mapping")
private List<MappingProperty> metaMappingProperties = new ArrayList<>(); private List<MappingProperty> metaMappingProperties;
public MessageFormat getMessageFormat() { public MessageFormat getMessageFormat() {
return messageFormat; return messageFormat;

@ -36,11 +36,11 @@ public class EventStream {
@ApiModelProperty(value = "Stream description") @ApiModelProperty(value = "Stream description")
private String description; private String description;
@ApiModelProperty(value = "Meta attribute list") @ApiModelProperty(value = "Meta attribute list")
private List<Attribute> metaData = new ArrayList<>(); private List<Attribute> metaData;
@ApiModelProperty(value = "Correlation attribute list") @ApiModelProperty(value = "Correlation attribute list")
private List<Attribute> correlationData = new ArrayList<>(); private List<Attribute> correlationData;
@ApiModelProperty(value = "Payload attribute list") @ApiModelProperty(value = "Payload attribute list")
private List<Attribute> payloadData = new ArrayList<>(); private List<Attribute> payloadData;
@ApiModelProperty(value = "Stream definition" , notes = "use only when creating stream as a String") @ApiModelProperty(value = "Stream definition" , notes = "use only when creating stream as a String")
private String definition; private String definition;

@ -19,6 +19,7 @@
package org.wso2.carbon.device.mgt.jaxrs.exception; package org.wso2.carbon.device.mgt.jaxrs.exception;
import org.wso2.carbon.device.mgt.jaxrs.beans.ErrorResponse; import org.wso2.carbon.device.mgt.jaxrs.beans.ErrorResponse;
import org.wso2.carbon.device.mgt.jaxrs.util.Constants;
import javax.ws.rs.WebApplicationException; import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.Response; import javax.ws.rs.core.Response;
@ -27,8 +28,26 @@ import javax.ws.rs.core.Response;
* Custom exception class for wrapping BadRequest related exceptions. * Custom exception class for wrapping BadRequest related exceptions.
*/ */
public class BadRequestException extends WebApplicationException { public class BadRequestException extends WebApplicationException {
private String message;
private static final long serialVersionUID = -24991723711391192L;
public BadRequestException(ErrorResponse error) { public BadRequestException(ErrorResponse error) {
super(Response.status(Response.Status.BAD_REQUEST).entity(error).build()); super(Response.status(Response.Status.BAD_REQUEST).entity(error).build());
} }
public BadRequestException(ErrorDTO errorDTO) {
super(Response.status(Response.Status.INTERNAL_SERVER_ERROR)
.entity(errorDTO)
.header(Constants.DeviceConstants.HEADER_CONTENT_TYPE, Constants.DeviceConstants.APPLICATION_JSON)
.build());
message = errorDTO.getMessage();
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
} }

@ -36,7 +36,7 @@ public class InvalidExecutionPlanException extends WebApplicationException {
.entity(errorDTO) .entity(errorDTO)
.header(Constants.DeviceConstants.HEADER_CONTENT_TYPE, Constants.DeviceConstants.APPLICATION_JSON) .header(Constants.DeviceConstants.HEADER_CONTENT_TYPE, Constants.DeviceConstants.APPLICATION_JSON)
.build()); .build());
message = errorDTO.getDescription(); message = errorDTO.getMessage();
} }
@Override @Override

@ -18,7 +18,6 @@
package org.wso2.carbon.device.mgt.jaxrs.service.impl; package org.wso2.carbon.device.mgt.jaxrs.service.impl;
import org.wso2.carbon.context.PrivilegedCarbonContext; import org.wso2.carbon.context.PrivilegedCarbonContext;
import org.wso2.carbon.device.mgt.jaxrs.beans.ErrorResponse;
import org.wso2.carbon.device.mgt.jaxrs.beans.analytics.Attribute; import org.wso2.carbon.device.mgt.jaxrs.beans.analytics.Attribute;
import org.wso2.carbon.device.mgt.jaxrs.beans.analytics.AdapterMappingConfiguration; import org.wso2.carbon.device.mgt.jaxrs.beans.analytics.AdapterMappingConfiguration;
import org.wso2.carbon.device.mgt.jaxrs.beans.analytics.MappingProperty; import org.wso2.carbon.device.mgt.jaxrs.beans.analytics.MappingProperty;
@ -116,8 +115,12 @@ public class AnalyticsArtifactsManagementServiceImpl
public Response deployEventDefinitionAsDto(@Valid EventStream stream) { public Response deployEventDefinitionAsDto(@Valid EventStream stream) {
String tenantDomain = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantDomain(); String tenantDomain = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantDomain();
try { try {
validateStreamProperties(stream);
deployStream(stream); deployStream(stream);
return Response.ok().build(); return Response.ok().build();
} catch (BadRequestException e) {
log.error(e.getMessage(), e);
return e.getResponse();
} catch (AxisFault e) { } catch (AxisFault e) {
String errMsg = "Failed to create event definitions for tenant " + tenantDomain; String errMsg = "Failed to create event definitions for tenant " + tenantDomain;
log.error(errMsg, e); log.error(errMsg, e);
@ -187,6 +190,9 @@ public class AnalyticsArtifactsManagementServiceImpl
} }
deployReceiver(receiver, customMapping, adapterConfiguration); deployReceiver(receiver, customMapping, adapterConfiguration);
return Response.ok().build(); return Response.ok().build();
} catch (BadRequestException e) {
log.error(e.getMessage(), e);
return e.getResponse();
} catch (AxisFault e) { } catch (AxisFault e) {
String errMsg = "Failed to create event definitions for tenantDomain: " + tenantDomain; String errMsg = "Failed to create event definitions for tenantDomain: " + tenantDomain;
log.error(errMsg, e); log.error(errMsg, e);
@ -256,6 +262,9 @@ public class AnalyticsArtifactsManagementServiceImpl
} }
deployPublisher(publisher, customMapping, adapterConfiguration); deployPublisher(publisher, customMapping, adapterConfiguration);
return Response.ok().build(); return Response.ok().build();
} catch (BadRequestException e) {
log.error(e.getMessage(), e);
return e.getResponse();
} catch (AxisFault e) { } catch (AxisFault e) {
String errMsg = "Failed to create event definitions for tenantDomain: " + tenantDomain; String errMsg = "Failed to create event definitions for tenantDomain: " + tenantDomain;
log.error(errMsg, e); log.error(errMsg, e);
@ -283,8 +292,11 @@ public class AnalyticsArtifactsManagementServiceImpl
@Valid SiddhiExecutionPlan plan) { @Valid SiddhiExecutionPlan plan) {
String tenantDomain = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantDomain(); String tenantDomain = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantDomain();
try { try {
publishSiddhiExecutionPlan(name, isEdited, plan.getDefinition()); deploySiddhiExecutionPlan(name, isEdited, plan.getDefinition());
return Response.ok().build(); return Response.ok().build();
} catch (InvalidExecutionPlanException e) {
log.error(e.getMessage(), e);
return e.getResponse();
} catch (AxisFault e) { } catch (AxisFault e) {
String errMsg = "Failed to create event definitions for tenantDomain: " + tenantDomain; String errMsg = "Failed to create event definitions for tenantDomain: " + tenantDomain;
log.error(errMsg, e); log.error(errMsg, e);
@ -315,14 +327,6 @@ public class AnalyticsArtifactsManagementServiceImpl
List<Attribute> metaData = stream.getMetaData(); List<Attribute> metaData = stream.getMetaData();
List<Attribute> payloadData = stream.getPayloadData(); List<Attribute> payloadData = stream.getPayloadData();
List<Attribute> correlationData = stream.getCorrelationData(); List<Attribute> correlationData = stream.getCorrelationData();
if (metaData.isEmpty() && correlationData.isEmpty() && payloadData.isEmpty()) {
String errMsg = String.format("Failed to validate Stream property attributes of %s:%s",
stream.getName(), stream.getVersion());
ErrorResponse errorResponse = new ErrorResponse();
errorResponse.setMessage(errMsg);
log.error(errMsg);
throw new BadRequestException(errorResponse);
}
try { try {
eventStreamAdminServiceStub = DeviceMgtAPIUtils.getEventStreamAdminServiceStub(); eventStreamAdminServiceStub = DeviceMgtAPIUtils.getEventStreamAdminServiceStub();
@ -331,10 +335,15 @@ public class AnalyticsArtifactsManagementServiceImpl
eventStreamDefinitionDto.setVersion(stream.getVersion()); eventStreamDefinitionDto.setVersion(stream.getVersion());
eventStreamDefinitionDto.setNickName(stream.getNickName()); eventStreamDefinitionDto.setNickName(stream.getNickName());
eventStreamDefinitionDto.setDescription(stream.getDescription()); eventStreamDefinitionDto.setDescription(stream.getDescription());
eventStreamDefinitionDto.setMetaData(addEventAttributesToDto(metaData)); if (metaData != null) {
eventStreamDefinitionDto.setPayloadData(addEventAttributesToDto(payloadData)); eventStreamDefinitionDto.setMetaData(addEventAttributesToDto(metaData));
eventStreamDefinitionDto.setCorrelationData(addEventAttributesToDto(correlationData)); }
if (payloadData != null) {
eventStreamDefinitionDto.setPayloadData(addEventAttributesToDto(payloadData));
}
if (correlationData != null) {
eventStreamDefinitionDto.setCorrelationData(addEventAttributesToDto(correlationData));
}
String streamId = stream.getName() + ":" + stream.getVersion(); String streamId = stream.getName() + ":" + stream.getVersion();
if (eventStreamAdminServiceStub.getStreamDefinitionDto(streamId) != null) { if (eventStreamAdminServiceStub.getStreamDefinitionDto(streamId) != null) {
eventStreamAdminServiceStub.editEventStreamDefinitionAsDto(eventStreamDefinitionDto, streamId); eventStreamAdminServiceStub.editEventStreamDefinitionAsDto(eventStreamDefinitionDto, streamId);
@ -344,7 +353,6 @@ public class AnalyticsArtifactsManagementServiceImpl
} finally { } finally {
cleanup(eventStreamAdminServiceStub); cleanup(eventStreamAdminServiceStub);
} }
} }
/** /**
@ -360,8 +368,8 @@ public class AnalyticsArtifactsManagementServiceImpl
private void deployReceiver(Adapter receiver, boolean customMapping, private void deployReceiver(Adapter receiver, boolean customMapping,
AdapterConfiguration adapterConfiguration) AdapterConfiguration adapterConfiguration)
throws RemoteException, UserStoreException, JWTClientException { throws RemoteException, UserStoreException, JWTClientException {
EventReceiverAdminServiceStub eventReceiverAdminServiceStub = DeviceMgtAPIUtils.getEventReceiverAdminServiceStub(); EventReceiverAdminServiceStub eventReceiverAdminServiceStub = DeviceMgtAPIUtils
.getEventReceiverAdminServiceStub();
try { try {
String receiverName = receiver.getAdapterName(); String receiverName = receiver.getAdapterName();
String adapterType = receiver.getAdapterType().toStringFormatted(); String adapterType = receiver.getAdapterType().toStringFormatted();
@ -374,55 +382,95 @@ public class AnalyticsArtifactsManagementServiceImpl
} }
BasicInputAdapterPropertyDto[] basicInputAdapterPropertyDtos = addReceiverConfigToDto(adapterProperties); BasicInputAdapterPropertyDto[] basicInputAdapterPropertyDtos = addReceiverConfigToDto(adapterProperties);
AdapterMappingConfiguration adapterMappingConfiguration = adapterConfiguration.getAdapterMappingConfiguration(); if (customMapping) {
MessageFormat messageFormat = adapterMappingConfiguration.getMessageFormat(); AdapterMappingConfiguration adapterMappingConfiguration = adapterConfiguration
if (!messageFormat.toString().equals("wso2event")) { .getAdapterMappingConfiguration();
EventMappingPropertyDto[] inputMappingPropertyDtos = MessageFormat messageFormat = adapterMappingConfiguration.getMessageFormat();
addReceiverMappingToDto(adapterMappingConfiguration.getInputMappingProperties()); if (!messageFormat.toString().equals("wso2event")) {
if (messageFormat.toString().equals("xml")) { EventMappingPropertyDto[] inputMappingPropertyDtos =
EventMappingPropertyDto[] namespaceMappingPropertyDtos = addReceiverMappingToDto(adapterMappingConfiguration.getInputMappingProperties());
addReceiverMappingToDto(adapterMappingConfiguration.getNamespaceMappingProperties()); if (messageFormat.toString().equals("xml")) {
eventReceiverAdminServiceStub.deployXmlEventReceiverConfiguration(receiverName EventMappingPropertyDto[] namespaceMappingPropertyDtos =
, eventStreamWithVersion, adapterType, null addReceiverMappingToDto(adapterMappingConfiguration.getNamespaceMappingProperties());
, namespaceMappingPropertyDtos, inputMappingPropertyDtos eventReceiverAdminServiceStub.deployXmlEventReceiverConfiguration(receiverName
, basicInputAdapterPropertyDtos, customMapping); , eventStreamWithVersion, adapterType, null
} else { , namespaceMappingPropertyDtos, inputMappingPropertyDtos
if (messageFormat.toString().equals("map")) { , basicInputAdapterPropertyDtos, true);
eventReceiverAdminServiceStub.deployMapEventReceiverConfiguration(receiverName
, eventStreamWithVersion, adapterType, inputMappingPropertyDtos
, basicInputAdapterPropertyDtos, customMapping);
} else if (messageFormat.toString().equals("text")) {
eventReceiverAdminServiceStub.deployTextEventReceiverConfiguration(receiverName
, eventStreamWithVersion, adapterType, inputMappingPropertyDtos
, basicInputAdapterPropertyDtos, customMapping);
} else { } else {
eventReceiverAdminServiceStub.deployJsonEventReceiverConfiguration(receiverName if (messageFormat.toString().equals("map")) {
, eventStreamWithVersion, adapterType, inputMappingPropertyDtos eventReceiverAdminServiceStub.deployMapEventReceiverConfiguration(receiverName
, basicInputAdapterPropertyDtos, customMapping); , eventStreamWithVersion, adapterType, inputMappingPropertyDtos
, basicInputAdapterPropertyDtos, true);
} else if (messageFormat.toString().equals("text")) {
eventReceiverAdminServiceStub.deployTextEventReceiverConfiguration(receiverName
, eventStreamWithVersion, adapterType, inputMappingPropertyDtos
, basicInputAdapterPropertyDtos, true);
} else {
eventReceiverAdminServiceStub.deployJsonEventReceiverConfiguration(receiverName
, eventStreamWithVersion, adapterType, inputMappingPropertyDtos
, basicInputAdapterPropertyDtos, true);
}
} }
} else {
EventMappingPropertyDto[] correlationMappingPropertyDtos = addReceiverMappingToDto(
adapterMappingConfiguration.getCorrelationMappingProperties()
);
EventMappingPropertyDto[] metaMappingPropertyDtos = addReceiverMappingToDto(
adapterMappingConfiguration.getInputMappingProperties()
);
EventMappingPropertyDto[] payloadMappingPropertyDtos = addReceiverMappingToDto(
adapterMappingConfiguration.getPayloadMappingProperties()
);
eventReceiverAdminServiceStub.deployWso2EventReceiverConfiguration(receiverName
, eventStreamWithVersion, adapterType, metaMappingPropertyDtos
, correlationMappingPropertyDtos, payloadMappingPropertyDtos
, basicInputAdapterPropertyDtos, true
, eventStreamWithVersion);
} }
} else { } else {
EventMappingPropertyDto[] correlationMappingPropertyDtos = addReceiverMappingToDto( deployReceiverWithoutMapping(receiverName, eventStreamWithVersion, adapterType,
adapterMappingConfiguration.getCorrelationMappingProperties() eventReceiverAdminServiceStub, basicInputAdapterPropertyDtos);
);
EventMappingPropertyDto[] metaMappingPropertyDtos = addReceiverMappingToDto(
adapterMappingConfiguration.getInputMappingProperties()
);
EventMappingPropertyDto[] payloadMappingPropertyDtos = addReceiverMappingToDto(
adapterMappingConfiguration.getPayloadMappingProperties()
);
eventReceiverAdminServiceStub.deployWso2EventReceiverConfiguration(receiverName
, eventStreamWithVersion, adapterType, metaMappingPropertyDtos
, correlationMappingPropertyDtos, payloadMappingPropertyDtos
, basicInputAdapterPropertyDtos, customMapping
, eventStreamWithVersion);
} }
} finally { } finally {
cleanup(eventReceiverAdminServiceStub); cleanup(eventReceiverAdminServiceStub);
} }
} }
/**
* To deploy receiver if custom mapping is false
*
* @param receiverName Name of the receiver
* @param eventStreamWithVersion Attached event stream of the receiver
* @param adapterType Adapter type name
* @param eventReceiverAdminServiceStub Stub to deploy receiver
* @param basicInputAdapterPropertyDtos DTO to attach receiver data
* @throws RemoteException Exception that may occur during a remote method call
*/
private void deployReceiverWithoutMapping(String receiverName, String eventStreamWithVersion
, String adapterType, EventReceiverAdminServiceStub eventReceiverAdminServiceStub
, BasicInputAdapterPropertyDto[] basicInputAdapterPropertyDtos)
throws RemoteException {
switch (adapterType) {
case "iot-event":
case "wso2event":
eventReceiverAdminServiceStub.deployWso2EventReceiverConfiguration(receiverName
, eventStreamWithVersion, adapterType, null, null
, null, basicInputAdapterPropertyDtos, false
, eventStreamWithVersion);
break;
case "soap":
eventReceiverAdminServiceStub.deployXmlEventReceiverConfiguration(receiverName
, eventStreamWithVersion, adapterType, null, null
, null, basicInputAdapterPropertyDtos, false);
break;
default:
eventReceiverAdminServiceStub.deployTextEventReceiverConfiguration(receiverName
, eventStreamWithVersion, adapterType, null
, basicInputAdapterPropertyDtos, false);
}
}
/** /**
* Set data to a publisher dto and deploy dto through a stub * Set data to a publisher dto and deploy dto through a stub
* *
@ -436,7 +484,8 @@ public class AnalyticsArtifactsManagementServiceImpl
private void deployPublisher(Adapter publisher, boolean customMapping, private void deployPublisher(Adapter publisher, boolean customMapping,
AdapterConfiguration adapterConfiguration) AdapterConfiguration adapterConfiguration)
throws RemoteException, UserStoreException, JWTClientException { throws RemoteException, UserStoreException, JWTClientException {
EventPublisherAdminServiceStub eventPublisherAdminServiceStub = DeviceMgtAPIUtils.getEventPublisherAdminServiceStub(); EventPublisherAdminServiceStub eventPublisherAdminServiceStub = DeviceMgtAPIUtils
.getEventPublisherAdminServiceStub();
try { try {
String publisherName = publisher.getAdapterName(); String publisherName = publisher.getAdapterName();
String adapterType = publisher.getAdapterType().toStringFormatted(); String adapterType = publisher.getAdapterType().toStringFormatted();
@ -451,53 +500,65 @@ public class AnalyticsArtifactsManagementServiceImpl
BasicOutputAdapterPropertyDto[] basicOutputAdapterPropertyDtos = BasicOutputAdapterPropertyDto[] basicOutputAdapterPropertyDtos =
addPublisherConfigToDto(adapterProperties); addPublisherConfigToDto(adapterProperties);
AdapterMappingConfiguration adapterMappingConfiguration = adapterConfiguration.getAdapterMappingConfiguration(); if (customMapping) {
MessageFormat messageFormat = adapterMappingConfiguration.getMessageFormat(); AdapterMappingConfiguration adapterMappingConfiguration = adapterConfiguration
if (!messageFormat.toString().equals("wso2event")) { .getAdapterMappingConfiguration();
if (!messageFormat.toString().equals("map")) { MessageFormat messageFormat = adapterMappingConfiguration.getMessageFormat();
if (messageFormat.toString().equals("xml")) { if (!messageFormat.toString().equals("wso2event")) {
eventPublisherAdminServiceStub.deployXmlEventPublisherConfiguration(publisherName if (!messageFormat.toString().equals("map")) {
, eventStreamWithVersion, adapterType, adapterMappingConfiguration.getInputMappingString() if (messageFormat.toString().equals("xml")) {
, basicOutputAdapterPropertyDtos, eventStreamWithVersion eventPublisherAdminServiceStub.deployXmlEventPublisherConfiguration(
, customMapping); publisherName, eventStreamWithVersion, adapterType
} else if (messageFormat.toString().equals("text")) { , adapterMappingConfiguration.getInputMappingString()
eventPublisherAdminServiceStub.deployTextEventPublisherConfiguration(publisherName , basicOutputAdapterPropertyDtos, eventStreamWithVersion
, eventStreamWithVersion, adapterType, adapterMappingConfiguration.getInputMappingString() , true);
, basicOutputAdapterPropertyDtos, eventStreamWithVersion } else if (messageFormat.toString().equals("text")) {
, customMapping); eventPublisherAdminServiceStub.deployTextEventPublisherConfiguration(
publisherName, eventStreamWithVersion, adapterType
, adapterMappingConfiguration.getInputMappingString()
, basicOutputAdapterPropertyDtos, eventStreamWithVersion
, true);
} else {
eventPublisherAdminServiceStub.deployJsonEventPublisherConfiguration(
publisherName, eventStreamWithVersion, adapterType
, adapterMappingConfiguration.getInputMappingString()
, basicOutputAdapterPropertyDtos, eventStreamWithVersion
, true);
}
} else { } else {
eventPublisherAdminServiceStub.deployJsonEventPublisherConfiguration(publisherName org.wso2.carbon.event.publisher.stub.types.EventMappingPropertyDto[] inputMappingPropertyDtos =
, eventStreamWithVersion, adapterType, adapterMappingConfiguration.getInputMappingString() addPublisherMappingToDto(
, basicOutputAdapterPropertyDtos, eventStreamWithVersion adapterMappingConfiguration.getInputMappingProperties()
, customMapping); );
eventPublisherAdminServiceStub.deployMapEventPublisherConfiguration(publisherName
, eventStreamWithVersion, adapterType, inputMappingPropertyDtos
, basicOutputAdapterPropertyDtos, true);
} }
} else { } else {
org.wso2.carbon.event.publisher.stub.types.EventMappingPropertyDto[] inputMappingPropertyDtos = org.wso2.carbon.event.publisher.stub.types.EventMappingPropertyDto[]
addPublisherMappingToDto( correlationMappingPropertyDtos = addPublisherMappingToDto
adapterMappingConfiguration.getInputMappingProperties() (
adapterMappingConfiguration.getCorrelationMappingProperties()
);
org.wso2.carbon.event.publisher.stub.types.EventMappingPropertyDto[]
metaMappingPropertyDtos = addPublisherMappingToDto
(
adapterMappingConfiguration.getMetaMappingProperties()
); );
eventPublisherAdminServiceStub.deployMapEventPublisherConfiguration(publisherName org.wso2.carbon.event.publisher.stub.types.EventMappingPropertyDto[]
, eventStreamWithVersion, adapterType, inputMappingPropertyDtos payloadMappingPropertyDtos = addPublisherMappingToDto
, basicOutputAdapterPropertyDtos, customMapping); (
adapterMappingConfiguration.getPayloadMappingProperties()
);
eventPublisherAdminServiceStub.deployWSO2EventPublisherConfiguration(
publisherName, eventStreamWithVersion, adapterType, metaMappingPropertyDtos
, correlationMappingPropertyDtos, payloadMappingPropertyDtos
, basicOutputAdapterPropertyDtos, true
, eventStreamWithVersion);
} }
} else { } else {
org.wso2.carbon.event.publisher.stub.types.EventMappingPropertyDto[] correlationMappingPropertyDtos = deployPublisherWithoutMapping(publisherName, eventStreamWithVersion, adapterType
addPublisherMappingToDto( , eventPublisherAdminServiceStub, basicOutputAdapterPropertyDtos);
adapterMappingConfiguration.getCorrelationMappingProperties()
);
org.wso2.carbon.event.publisher.stub.types.EventMappingPropertyDto[] metaMappingPropertyDtos =
addPublisherMappingToDto(
adapterMappingConfiguration.getMetaMappingProperties()
);
org.wso2.carbon.event.publisher.stub.types.EventMappingPropertyDto[] payloadMappingPropertyDtos =
addPublisherMappingToDto(
adapterMappingConfiguration.getPayloadMappingProperties()
);
eventPublisherAdminServiceStub.deployWSO2EventPublisherConfiguration(publisherName
, eventStreamWithVersion, adapterType, metaMappingPropertyDtos
, correlationMappingPropertyDtos, payloadMappingPropertyDtos
, basicOutputAdapterPropertyDtos, customMapping
, eventStreamWithVersion);
} }
} finally { } finally {
@ -505,6 +566,49 @@ public class AnalyticsArtifactsManagementServiceImpl
} }
} }
/**
* To deploy publisher if custom mapping is false
*
* @param publisherName Name of the publisher
* @param eventStreamWithVersion Attached event stream of the publisher
* @param adapterType Adapter type name
* @param eventPublisherAdminServiceStub Stub to deploy publisher
* @param basicOutputAdapterPropertyDtos DTO to attach publisher data
* @throws RemoteException Exception that may occur during a remote method call
*/
private void deployPublisherWithoutMapping(String publisherName, String eventStreamWithVersion
, String adapterType, EventPublisherAdminServiceStub eventPublisherAdminServiceStub
, BasicOutputAdapterPropertyDto[] basicOutputAdapterPropertyDtos)
throws RemoteException {
switch (adapterType) {
case "wso2event":
case "ui":
case "secured-websocket":
eventPublisherAdminServiceStub.deployWSO2EventPublisherConfiguration(publisherName
, eventStreamWithVersion, adapterType, null
, null, null, basicOutputAdapterPropertyDtos
, false, eventStreamWithVersion);
break;
case "soap":
eventPublisherAdminServiceStub.deployXmlEventPublisherConfiguration(publisherName
, eventStreamWithVersion, adapterType, null
, basicOutputAdapterPropertyDtos, eventStreamWithVersion
, false);
break;
case "cassandra":
case "rdbms":
eventPublisherAdminServiceStub.deployMapEventPublisherConfiguration(publisherName
, eventStreamWithVersion, adapterType, null
, basicOutputAdapterPropertyDtos, false);
break;
default:
eventPublisherAdminServiceStub.deployTextEventPublisherConfiguration(publisherName
, eventStreamWithVersion, adapterType, null
, basicOutputAdapterPropertyDtos, eventStreamWithVersion
, false);
}
}
/** /**
* Publish a siddhi execution plan using a stub * Publish a siddhi execution plan using a stub
* *
@ -516,9 +620,9 @@ public class AnalyticsArtifactsManagementServiceImpl
* @throws JWTClientException Exception that may occur during connecting to client store * @throws JWTClientException Exception that may occur during connecting to client store
* @throws InvalidExecutionPlanException Exception that may occur if execution plan validation fails * @throws InvalidExecutionPlanException Exception that may occur if execution plan validation fails
*/ */
private void publishSiddhiExecutionPlan(String name, boolean isEdited, private void deploySiddhiExecutionPlan(String name, boolean isEdited, String plan)
String plan) throws RemoteException, UserStoreException, JWTClientException,
throws RemoteException, UserStoreException, JWTClientException { InvalidExecutionPlanException {
EventProcessorAdminServiceStub eventProcessorAdminServiceStub = null; EventProcessorAdminServiceStub eventProcessorAdminServiceStub = null;
try { try {
eventProcessorAdminServiceStub = DeviceMgtAPIUtils.getEventProcessorAdminServiceStub(); eventProcessorAdminServiceStub = DeviceMgtAPIUtils.getEventProcessorAdminServiceStub();
@ -532,7 +636,6 @@ public class AnalyticsArtifactsManagementServiceImpl
} else { } else {
ErrorDTO errorDTO = new ErrorDTO(); ErrorDTO errorDTO = new ErrorDTO();
errorDTO.setMessage(validationResponse); errorDTO.setMessage(validationResponse);
log.error(validationResponse);
throw new InvalidExecutionPlanException(errorDTO); throw new InvalidExecutionPlanException(errorDTO);
} }
} finally { } finally {
@ -541,20 +644,21 @@ public class AnalyticsArtifactsManagementServiceImpl
} }
/** /**
* This will set payload of event attribute's mapping to the DTO * Validate stream properties
* *
* @param attributes list of event attributes * @param stream EventStream object
* @return DTO with all the event attributes
*/ */
private EventStreamAttributeDto[] addEventAttributesToDto(List<Attribute> attributes) { private void validateStreamProperties(EventStream stream) throws BadRequestException {
EventStreamAttributeDto[] eventStreamAttributeDtos = new EventStreamAttributeDto[attributes.size()]; if ((stream.getMetaData() == null || stream.getMetaData().isEmpty()) &&
for (Attribute attribute : attributes) { (stream.getCorrelationData() == null || stream.getCorrelationData().isEmpty()) &&
EventStreamAttributeDto eventStreamAttributeDto = new EventStreamAttributeDto(); (stream.getPayloadData() == null || stream.getPayloadData().isEmpty())) {
eventStreamAttributeDto.setAttributeName(attribute.getName()); String errMsg = String.format("Failed to validate Stream property attributes of %s:%s. " +
eventStreamAttributeDto.setAttributeType(attribute.getType().toString()); "Stream mapping can't be null or empty",
stream.getName(), stream.getVersion());
ErrorDTO errorDTO = new ErrorDTO();
errorDTO.setMessage(errMsg);
throw new BadRequestException(errorDTO);
} }
return eventStreamAttributeDtos;
} }
/** /**
@ -562,13 +666,13 @@ public class AnalyticsArtifactsManagementServiceImpl
* *
* @param adapterProperties Adapter payload attributes * @param adapterProperties Adapter payload attributes
*/ */
private void validateAdapterProperties(List<AdapterProperty> adapterProperties) { private void validateAdapterProperties(List<AdapterProperty> adapterProperties)
if (adapterProperties.isEmpty()) { throws BadRequestException {
String errMsg = "Invalid payload: event property attributes invalid!!!"; if (adapterProperties == null) {
ErrorResponse errorResponse = new ErrorResponse(); String errMsg = "Failed to validate adapter attributes. Adapter attributes can't be null";
errorResponse.setMessage(errMsg); ErrorDTO errorDTO = new ErrorDTO();
log.error(errMsg); errorDTO.setMessage(errMsg);
throw new BadRequestException(errorResponse); throw new BadRequestException(errorDTO);
} }
} }
@ -583,25 +687,53 @@ public class AnalyticsArtifactsManagementServiceImpl
* *
* @param adapterMappingConfiguration Adapter mapping attributes * @param adapterMappingConfiguration Adapter mapping attributes
*/ */
private void validateAdapterMapping(AdapterMappingConfiguration adapterMappingConfiguration) { private void validateAdapterMapping(AdapterMappingConfiguration adapterMappingConfiguration)
throws BadRequestException {
if (adapterMappingConfiguration.getInputMappingString() == null && if (adapterMappingConfiguration == null) {
(adapterMappingConfiguration.getInputMappingProperties().isEmpty() && String errMsg = "Failed to validate adapter mapping attributes. " +
adapterMappingConfiguration.getNamespaceMappingProperties().isEmpty()) && "Adapter mapping configuration can't be null";
( ErrorDTO errorDTO = new ErrorDTO();
adapterMappingConfiguration.getCorrelationMappingProperties().isEmpty() && errorDTO.setMessage(errMsg);
adapterMappingConfiguration.getPayloadMappingProperties().isEmpty() && throw new BadRequestException(errorDTO);
adapterMappingConfiguration.getMetaMappingProperties().isEmpty() } else if (adapterMappingConfiguration.getMessageFormat() == null ||
) ((adapterMappingConfiguration.getInputMappingString() == null)
|| adapterMappingConfiguration.getMessageFormat() == null) { && (adapterMappingConfiguration.getInputMappingProperties() == null ||
String errMsg = "Invalid payload: event mapping attributes invalid!!!"; adapterMappingConfiguration.getInputMappingProperties().isEmpty())
ErrorResponse errorResponse = new ErrorResponse(); && (adapterMappingConfiguration.getNamespaceMappingProperties() == null ||
errorResponse.setMessage(errMsg); adapterMappingConfiguration.getNamespaceMappingProperties().isEmpty()))
log.error(errMsg); &&
throw new BadRequestException(errorResponse); ((adapterMappingConfiguration.getCorrelationMappingProperties() == null ||
adapterMappingConfiguration.getCorrelationMappingProperties().isEmpty())
&& (adapterMappingConfiguration.getPayloadMappingProperties() == null ||
adapterMappingConfiguration.getPayloadMappingProperties().isEmpty())
&& (adapterMappingConfiguration.getMetaMappingProperties() == null ||
adapterMappingConfiguration.getMetaMappingProperties().isEmpty()))
) {
String errMsg = "Failed to validate adapter mapping attributes. " +
"Adapter mapping configuration invalid";
ErrorDTO errorDTO = new ErrorDTO();
errorDTO.setMessage(errMsg);
throw new BadRequestException(errorDTO);
} }
} }
/**
* This will set payload of event attribute's mapping to the DTO
*
* @param attributes list of event attributes
* @return DTO with all the event attributes
*/
private EventStreamAttributeDto[] addEventAttributesToDto(List<Attribute> attributes) {
EventStreamAttributeDto[] eventStreamAttributeDtos = new EventStreamAttributeDto[attributes.size()];
for (int i = 0; i < attributes.size(); i++) {
EventStreamAttributeDto eventStreamAttributeDto = new EventStreamAttributeDto();
eventStreamAttributeDto.setAttributeName(attributes.get(i).getName());
eventStreamAttributeDto.setAttributeType(attributes.get(i).getType().toString());
eventStreamAttributeDtos[i] = eventStreamAttributeDto;
}
return eventStreamAttributeDtos;
}
/** /**
* This will set payload of receiver attributes to the DTO * This will set payload of receiver attributes to the DTO
* *

Loading…
Cancel
Save