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.
4.x.x
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