/* * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) 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. */ package org.wso2.carbon.event.stream.admin; import org.apache.axis2.AxisFault; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.wso2.carbon.core.AbstractAdmin; import org.wso2.carbon.databridge.commons.Attribute; import org.wso2.carbon.databridge.commons.StreamDefinition; import org.wso2.carbon.databridge.commons.exception.MalformedStreamDefinitionException; import org.wso2.carbon.databridge.commons.utils.EventDefinitionConverterUtils; import org.wso2.carbon.event.stream.admin.internal.util.EventAttributeTypeConstants; import org.wso2.carbon.event.stream.admin.internal.ds.EventStreamAdminServiceValueHolder; import org.wso2.carbon.event.stream.admin.internal.util.EventStreamConstants; import org.wso2.carbon.event.stream.core.EventStreamConfiguration; import org.wso2.carbon.event.stream.core.EventStreamService; import org.wso2.carbon.event.stream.core.exception.EventStreamConfigurationException; import org.wso2.carbon.databridge.commons.AttributeType; import com.google.gson.Gson; import java.util.*; public class EventStreamAdminService extends AbstractAdmin { private static Log log = LogFactory.getLog(EventStreamAdminService.class); public boolean addEventStreamDefinitionAsDto(EventStreamDefinitionDto eventStreamDefinitionDto) throws AxisFault { if ((eventStreamDefinitionDto.getName() != null) && (!eventStreamDefinitionDto.getName().isEmpty())) { if ((eventStreamDefinitionDto.getVersion() != null) && (!eventStreamDefinitionDto.getVersion().isEmpty())) { try { StreamDefinition streamDefinition = new StreamDefinition(eventStreamDefinitionDto.getName(), eventStreamDefinitionDto.getVersion()); streamDefinition.setDescription(eventStreamDefinitionDto.getDescription()); streamDefinition.setNickName(eventStreamDefinitionDto.getNickName()); EventStreamAttributeDto[] metaEventStreamAttributeDtos = eventStreamDefinitionDto.getMetaData(); if (eventStreamDefinitionDto.getMetaData() != null) { for (EventStreamAttributeDto eventStreamAttributeDto : metaEventStreamAttributeDtos) { streamDefinition.addMetaData(eventStreamAttributeDto.getAttributeName(), EventAttributeTypeConstants.STRING_ATTRIBUTE_TYPE_MAP.get(eventStreamAttributeDto.getAttributeType())); } } EventStreamAttributeDto[] correlationEventStreamAttributeDtos = eventStreamDefinitionDto.getCorrelationData(); if (correlationEventStreamAttributeDtos != null) { for (EventStreamAttributeDto eventStreamAttributeDto : correlationEventStreamAttributeDtos) { streamDefinition.addCorrelationData(eventStreamAttributeDto.getAttributeName(), EventAttributeTypeConstants.STRING_ATTRIBUTE_TYPE_MAP.get(eventStreamAttributeDto.getAttributeType())); } } EventStreamAttributeDto[] payloadEventStreamAttributeDtos = eventStreamDefinitionDto.getPayloadData(); if (payloadEventStreamAttributeDtos != null) { for (EventStreamAttributeDto eventStreamAttributeDto : payloadEventStreamAttributeDtos) { streamDefinition.addPayloadData(eventStreamAttributeDto.getAttributeName(), EventAttributeTypeConstants.STRING_ATTRIBUTE_TYPE_MAP.get(eventStreamAttributeDto.getAttributeType())); } } EventStreamService eventStreamService = EventStreamAdminServiceValueHolder.getEventStreamService(); eventStreamService.addEventStreamDefinition(streamDefinition); } catch (MalformedStreamDefinitionException e) { throw new AxisFault("Not a valid stream definition " + e.getMessage()); } catch (EventStreamConfigurationException e) { throw new AxisFault(e.getMessage(), e); } } else { throw new AxisFault("Not a valid event stream version"); } } else { throw new AxisFault("Not a valid event stream name"); } return true; } public boolean addEventStreamDefinitionAsString(String streamStringDefinition) throws AxisFault { StreamDefinition streamDefinition = null; try { streamDefinition = EventDefinitionConverterUtils.convertFromJson(streamStringDefinition); if ((streamDefinition.getName().equals("")) || (streamDefinition.getVersion().equals(""))) { throw new AxisFault("Empty inputs fields are not allowed."); } else if (streamDefinition.getCorrelationData() == null && streamDefinition.getMetaData() == null && streamDefinition.getPayloadData() == null) { throw new AxisFault("Mapping parameters cannot be empty."); } else { EventStreamService eventStreamService = EventStreamAdminServiceValueHolder.getEventStreamService(); eventStreamService.addEventStreamDefinition(streamDefinition); } } catch (MalformedStreamDefinitionException e) { throw new AxisFault(e.getMessage(), e); } catch (EventStreamConfigurationException e) { throw new AxisFault(e.getMessage(), e); } return true; } public boolean editEventStreamDefinitionAsString(String streamStringDefinition, String oldStreamId) throws AxisFault { StreamDefinition streamDefinition = null; try { streamDefinition = EventDefinitionConverterUtils.convertFromJson(streamStringDefinition); if ((streamDefinition.getName().equals("")) || (streamDefinition.getVersion().equals(""))) { throw new AxisFault("Empty inputs fields are not allowed."); } else if (streamDefinition.getCorrelationData() == null && streamDefinition.getMetaData() == null && streamDefinition.getPayloadData() == null) { throw new AxisFault("Mapping parameters cannot be empty."); } else { String[] oldStreamProperties = oldStreamId.split(":"); EventStreamService eventStreamService = EventStreamAdminServiceValueHolder.getEventStreamService(); eventStreamService.removeEventStreamDefinition(oldStreamProperties[0], oldStreamProperties[1]); eventStreamService.addEventStreamDefinition(streamDefinition); } } catch (MalformedStreamDefinitionException e) { throw new AxisFault(e.getMessage(), e); } catch (EventStreamConfigurationException e) { throw new AxisFault(e.getMessage(), e); } return true; } public boolean editEventStreamDefinitionAsDto(EventStreamDefinitionDto eventStreamDefinitionDto, String oldStreamId) throws AxisFault { if ((eventStreamDefinitionDto.getName() != null) && (!eventStreamDefinitionDto.getName().isEmpty())) { if ((eventStreamDefinitionDto.getVersion() != null) && (!eventStreamDefinitionDto.getVersion().isEmpty())) { String[] oldStreamProperties = oldStreamId.split(":"); try { StreamDefinition streamDefinition = new StreamDefinition(eventStreamDefinitionDto.getName(), eventStreamDefinitionDto.getVersion()); streamDefinition.setDescription(eventStreamDefinitionDto.getDescription()); streamDefinition.setNickName(eventStreamDefinitionDto.getNickName()); EventStreamAttributeDto[] metaEventStreamAttributeDtos = eventStreamDefinitionDto.getMetaData(); if (metaEventStreamAttributeDtos != null) { for (EventStreamAttributeDto eventStreamAttributeDto : metaEventStreamAttributeDtos) { streamDefinition.addMetaData(eventStreamAttributeDto.getAttributeName(), EventAttributeTypeConstants.STRING_ATTRIBUTE_TYPE_MAP.get(eventStreamAttributeDto.getAttributeType())); } } EventStreamAttributeDto[] correlationEventStreamAttributeDtos = eventStreamDefinitionDto.getCorrelationData(); if (correlationEventStreamAttributeDtos != null) { for (EventStreamAttributeDto eventStreamAttributeDto : correlationEventStreamAttributeDtos) { streamDefinition.addCorrelationData(eventStreamAttributeDto.getAttributeName(), EventAttributeTypeConstants.STRING_ATTRIBUTE_TYPE_MAP.get(eventStreamAttributeDto.getAttributeType())); } } EventStreamAttributeDto[] payloadEventStreamAttributeDtos = eventStreamDefinitionDto.getPayloadData(); if (payloadEventStreamAttributeDtos != null) { for (EventStreamAttributeDto eventStreamAttributeDto : payloadEventStreamAttributeDtos) { streamDefinition.addPayloadData(eventStreamAttributeDto.getAttributeName(), EventAttributeTypeConstants.STRING_ATTRIBUTE_TYPE_MAP.get(eventStreamAttributeDto.getAttributeType())); } } EventStreamService eventStreamService = EventStreamAdminServiceValueHolder.getEventStreamService(); eventStreamService.removeEventStreamDefinition(oldStreamProperties[0], oldStreamProperties[1]); eventStreamService.addEventStreamDefinition(streamDefinition); } catch (MalformedStreamDefinitionException e) { throw new AxisFault("Not a valid stream definition " + e.getMessage()); } catch (EventStreamConfigurationException e) { throw new AxisFault(e.getMessage() + " : " + e); } } else { throw new AxisFault("Not a valid event stream version"); } } else { throw new AxisFault("Not a valid event stream name"); } return true; } public boolean removeEventStreamDefinition(String eventStreamName, String eventStreamVersion) throws AxisFault { if ((eventStreamName != null) && (!eventStreamName.isEmpty())) { if ((eventStreamVersion != null) && (!eventStreamVersion.isEmpty())) { EventStreamService eventStreamService = EventStreamAdminServiceValueHolder.getEventStreamService(); try { eventStreamService.removeEventStreamDefinition(eventStreamName, eventStreamVersion); } catch (EventStreamConfigurationException e) { throw new AxisFault(e.getMessage() + " : " + e.toString()); } } else { throw new AxisFault("Not a valid event stream version"); } } else { throw new AxisFault("Not a valid event stream name"); } return true; } public EventStreamInfoDto[] getAllEventStreamDefinitionDto() throws AxisFault { EventStreamService eventStreamService = EventStreamAdminServiceValueHolder.getEventStreamService(); try { Collection<EventStreamConfiguration> eventStreamDefinitionList = eventStreamService.getAllEventStreamConfigurations(); if (eventStreamDefinitionList != null) { EventStreamInfoDto[] eventStreamInfoDtos = new EventStreamInfoDto[eventStreamDefinitionList.size()]; int index = 0; for (EventStreamConfiguration eventStreamConfiguration : eventStreamDefinitionList) { eventStreamInfoDtos[index] = new EventStreamInfoDto(); eventStreamInfoDtos[index].setStreamName(eventStreamConfiguration.getStreamDefinition().getName()); eventStreamInfoDtos[index].setStreamVersion(eventStreamConfiguration.getStreamDefinition().getVersion()); eventStreamInfoDtos[index].setStreamDefinition(eventStreamConfiguration.getStreamDefinition().toString()); eventStreamInfoDtos[index].setStreamDescription(eventStreamConfiguration.getStreamDefinition().getDescription()); eventStreamInfoDtos[index].setEditable(eventStreamConfiguration.isEditable()); index++; } Arrays.sort(eventStreamInfoDtos, new Comparator() { @Override public int compare(Object o1, Object o2) { return ((EventStreamInfoDto) o1).getStreamName().compareTo(((EventStreamInfoDto) o2).getStreamName()); } }); return eventStreamInfoDtos; } else { return new EventStreamInfoDto[0]; } } catch (EventStreamConfigurationException e) { throw new AxisFault( "Error while retrieving event streams from store : " + e.getMessage(), e); } } public String[] getStreamNames() throws AxisFault { EventStreamService eventStreamService = EventStreamAdminServiceValueHolder.getEventStreamService(); if (eventStreamService != null) { try { List<String> streamIdList = eventStreamService.getStreamIds(); if (streamIdList != null) { String[] streamIdArray = new String[streamIdList.size()]; for (int i = 0; i < streamIdList.size(); i++) { streamIdArray[i] = streamIdList.get(i); } return streamIdArray; } } catch (EventStreamConfigurationException e) { throw new AxisFault("Error while retrieving stream names from store : " + e.getMessage(), e); } } return new String[0]; } public String[] getStreamDetailsForStreamId(String streamId) throws AxisFault { EventStreamService eventStreamService = EventStreamAdminServiceValueHolder.getEventStreamService(); if (eventStreamService != null) { EventStreamConfiguration streamDefinition = null; streamDefinition = eventStreamService.getEventStreamConfiguration(streamId); String[] streamDetails = new String[2]; streamDetails[0] = streamDefinition.getStreamDefinition().toString(); streamDetails[1] = generateSampleEvent(streamId, EventAttributeTypeConstants.xmlEvent); return streamDetails; } return new String[0]; } public String generateSampleEvent(String streamId, String eventType) throws AxisFault { EventStreamService eventStreamService = EventStreamAdminServiceValueHolder.getEventStreamService(); if (eventStreamService != null) { try { return eventStreamService.generateSampleEvent(streamId, eventType); } catch (EventStreamConfigurationException e) { throw new AxisFault("Error while generating sample event"); } } return ""; } public String getStreamDefinitionAsString(String streamId) throws AxisFault { EventStreamService eventStreamService = EventStreamAdminServiceValueHolder.getEventStreamService(); if (eventStreamService != null) { EventStreamConfiguration streamDefinition = eventStreamService.getEventStreamConfiguration(streamId); String definitionString = ""; boolean appendComma = false; if (streamDefinition.getStreamDefinition().getMetaData() != null) { for (Attribute attribute : streamDefinition.getStreamDefinition().getMetaData()) { if (appendComma) { definitionString = definitionString + ", "; } definitionString = definitionString + EventStreamConstants.META + EventStreamConstants.ATTRIBUTE_SEPARATOR + attribute.getName() + " " + attribute.getType().name().toLowerCase(); appendComma = true; } } if (streamDefinition.getStreamDefinition().getCorrelationData() != null) { for (Attribute attribute : streamDefinition.getStreamDefinition().getCorrelationData()) { if (appendComma) { definitionString = definitionString + ", "; } definitionString = definitionString + EventStreamConstants.CORRELATION + EventStreamConstants.ATTRIBUTE_SEPARATOR + attribute.getName() + " " + attribute.getType().name().toLowerCase(); appendComma = true; } } if (streamDefinition.getStreamDefinition().getPayloadData() != null) { for (Attribute attribute : streamDefinition.getStreamDefinition().getPayloadData()) { if (appendComma) { definitionString = definitionString + ", "; } definitionString = definitionString + attribute.getName() + " " + attribute.getType().name().toLowerCase(); appendComma = true; } } return definitionString; } return null; } public EventStreamDefinitionDto getStreamDefinitionDto(String streamId) throws AxisFault { EventStreamService eventStreamService = EventStreamAdminServiceValueHolder.getEventStreamService(); if (eventStreamService != null) { EventStreamConfiguration eventStreamConfiguration = eventStreamService.getEventStreamConfiguration(streamId); if (eventStreamConfiguration != null) { EventStreamDefinitionDto dto = new EventStreamDefinitionDto(); dto.setName(eventStreamConfiguration.getStreamDefinition().getName()); dto.setVersion(eventStreamConfiguration.getStreamDefinition().getVersion()); dto.setDescription(eventStreamConfiguration.getStreamDefinition().getDescription()); dto.setNickName(eventStreamConfiguration.getStreamDefinition().getNickName()); dto.setMetaData(convertAttributeList(eventStreamConfiguration.getStreamDefinition().getMetaData())); dto.setCorrelationData(convertAttributeList(eventStreamConfiguration.getStreamDefinition().getCorrelationData())); dto.setPayloadData(convertAttributeList(eventStreamConfiguration.getStreamDefinition().getPayloadData())); dto.setEditable(eventStreamConfiguration.isEditable()); return dto; } else { return null; } } return null; } public String convertEventStreamDefinitionDtoToString( EventStreamDefinitionDto eventStreamDefinitionDto) throws AxisFault { StreamDefinition streamDefinition = null; try { streamDefinition = new StreamDefinition(eventStreamDefinitionDto.getName(), eventStreamDefinitionDto.getVersion()); } catch (MalformedStreamDefinitionException e) { log.error(e.getMessage(), e); throw new AxisFault("Error while converting Dto"); } streamDefinition.setDescription(eventStreamDefinitionDto.getDescription()); streamDefinition.setNickName(eventStreamDefinitionDto.getNickName()); streamDefinition.setCorrelationData(convertEventStreamAttributeDto(eventStreamDefinitionDto.getCorrelationData())); streamDefinition.setMetaData(convertEventStreamAttributeDto(eventStreamDefinitionDto.getMetaData())); streamDefinition.setPayloadData(convertEventStreamAttributeDto(eventStreamDefinitionDto.getPayloadData())); return EventDefinitionConverterUtils.convertToJson(streamDefinition); } public EventStreamDefinitionDto convertStringToEventStreamDefinitionDto(String streamStringDefinition) throws AxisFault { StreamDefinition streamDefinition = null; try { streamDefinition = EventDefinitionConverterUtils.convertFromJson(streamStringDefinition); } catch (MalformedStreamDefinitionException e) { log.error(e.getMessage(), e); throw new AxisFault(e.getMessage(), e); } EventStreamDefinitionDto eventStreamDefinitionDto = new EventStreamDefinitionDto(); eventStreamDefinitionDto.setName(streamDefinition.getName()); eventStreamDefinitionDto.setVersion(streamDefinition.getVersion()); eventStreamDefinitionDto.setDescription(streamDefinition.getDescription()); eventStreamDefinitionDto.setNickName(streamDefinition.getNickName()); eventStreamDefinitionDto.setMetaData(convertAttributeList(streamDefinition.getMetaData())); eventStreamDefinitionDto.setCorrelationData(convertAttributeList(streamDefinition.getCorrelationData())); eventStreamDefinitionDto.setPayloadData(convertAttributeList(streamDefinition.getPayloadData())); eventStreamDefinitionDto.setStreamDefinitionString(new Gson().toJson(eventStreamDefinitionDto)); return eventStreamDefinitionDto; } private EventStreamAttributeDto[] convertAttributeList( List<org.wso2.carbon.databridge.commons.Attribute> attributeList) { if (attributeList != null) { EventStreamAttributeDto[] convertedAttributes = new EventStreamAttributeDto[attributeList .size()]; int i = 0; for (org.wso2.carbon.databridge.commons.Attribute attribute : attributeList) { convertedAttributes[i] = new EventStreamAttributeDto(); convertedAttributes[i].setAttributeName(attribute.getName()); convertedAttributes[i].setAttributeType(attribute.getType() .toString().toLowerCase()); i++; } return convertedAttributes; } return new EventStreamAttributeDto[0]; } private List<Attribute> convertEventStreamAttributeDto(EventStreamAttributeDto[] eventStreamAttributeDto) throws AxisFault { List<Attribute> corelationdata = new ArrayList<Attribute>(); if (eventStreamAttributeDto != null) { for (int i = 0; i < eventStreamAttributeDto.length; i++) { AttributeType attributeType = null; if (eventStreamAttributeDto[i].getAttributeType().equals("int")) { attributeType = AttributeType.INT; } else if (eventStreamAttributeDto[i].getAttributeType() .equals("long")) { attributeType = AttributeType.LONG; } else if (eventStreamAttributeDto[i].getAttributeType() .equals("double")) { attributeType = AttributeType.DOUBLE; } else if (eventStreamAttributeDto[i].getAttributeType() .equals("float")) { attributeType = AttributeType.FLOAT; } else if (eventStreamAttributeDto[i].getAttributeType() .equals("string")) { attributeType = AttributeType.STRING; } else if (eventStreamAttributeDto[i].getAttributeType() .equals("bool")) { attributeType = AttributeType.BOOL; } Attribute attribute = new Attribute(eventStreamAttributeDto[i].getAttributeName(), attributeType); corelationdata.add(attribute); } } return corelationdata; } }