/* * 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.receiver.core.internal; import org.apache.axiom.om.OMElement; import org.apache.axiom.om.util.AXIOMUtil; import org.apache.axis2.engine.AxisConfiguration; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.wso2.carbon.context.PrivilegedCarbonContext; import org.wso2.carbon.databridge.commons.StreamDefinition; import org.wso2.carbon.event.input.adapter.core.EventAdapterUtil; import org.wso2.carbon.event.input.adapter.core.InputEventAdapterSchema; import org.wso2.carbon.event.input.adapter.core.InputEventAdapterService; import org.wso2.carbon.event.input.adapter.core.Property; import org.wso2.carbon.event.receiver.core.EventReceiverService; import org.wso2.carbon.event.receiver.core.config.EventReceiverConfiguration; import org.wso2.carbon.event.receiver.core.config.EventReceiverConfigurationFile; import org.wso2.carbon.event.receiver.core.config.EventReceiverConstants; import org.wso2.carbon.event.receiver.core.exception.EventReceiverConfigurationException; import org.wso2.carbon.event.receiver.core.exception.EventReceiverStreamValidationException; import org.wso2.carbon.event.receiver.core.internal.ds.EventReceiverServiceValueHolder; import org.wso2.carbon.event.receiver.core.internal.util.EventReceiverConfigurationBuilder; import org.wso2.carbon.event.receiver.core.internal.util.EventReceiverUtil; import org.wso2.carbon.event.receiver.core.internal.util.helper.EventReceiverConfigurationFileSystemInvoker; import org.wso2.carbon.event.receiver.core.internal.util.helper.EventReceiverConfigurationHelper; import org.wso2.carbon.event.stream.core.EventStreamService; import org.wso2.carbon.event.stream.core.exception.EventStreamConfigurationException; import javax.xml.stream.XMLStreamException; import java.io.File; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.CopyOnWriteArrayList; public class CarbonEventReceiverService implements EventReceiverService { private static final Log log = LogFactory.getLog(CarbonEventReceiverService.class); private Map<Integer, Map<String, EventReceiver>> tenantSpecificEventReceiverConfigurationMap; private Map<Integer, List<EventReceiverConfigurationFile>> tenantSpecificEventReceiverConfigurationFileMap; public CarbonEventReceiverService() { tenantSpecificEventReceiverConfigurationMap = new ConcurrentHashMap<Integer, Map<String, EventReceiver>>(); tenantSpecificEventReceiverConfigurationFileMap = new ConcurrentHashMap<Integer, List<EventReceiverConfigurationFile>>(); } @Override public void deployEventReceiverConfiguration(EventReceiverConfiguration eventReceiverConfiguration) throws EventReceiverConfigurationException { String eventReceiverName = eventReceiverConfiguration.getEventReceiverName(); OMElement omElement = EventReceiverConfigurationBuilder.eventReceiverConfigurationToOM(eventReceiverConfiguration); EventReceiverConfigurationHelper.validateEventReceiverConfiguration(omElement); String mappingType = EventReceiverConfigurationHelper.getInputMappingType(omElement); if (mappingType != null) { String repoPath = EventAdapterUtil.getAxisConfiguration().getRepository().getPath(); EventReceiverUtil.generateFilePath(eventReceiverName, repoPath); validateToRemoveInactiveEventReceiverConfiguration(eventReceiverConfiguration.getEventReceiverName()); EventReceiverConfigurationFileSystemInvoker.encryptAndSave(omElement, eventReceiverName + EventReceiverConstants.ER_CONFIG_FILE_EXTENSION_WITH_DOT); } else { throw new EventReceiverConfigurationException("Mapping type of the Event Receiver " + eventReceiverConfiguration.getEventReceiverName() + " cannot be null"); } } @Override public void deployEventReceiverConfiguration(String eventReceiverConfigXml) throws EventReceiverConfigurationException { OMElement omElement; try { omElement = AXIOMUtil.stringToOM(eventReceiverConfigXml); } catch (XMLStreamException e) { throw new EventReceiverConfigurationException("Error parsing XML configuration of event receiver.", e); } EventReceiverConfigurationHelper.validateEventReceiverConfiguration(omElement); String eventReceiverName = EventReceiverConfigurationHelper.getEventReceiverName(omElement); String mappingType = EventReceiverConfigurationHelper.getInputMappingType(omElement); if (mappingType != null) { String repoPath = EventAdapterUtil.getAxisConfiguration().getRepository().getPath(); EventReceiverUtil.generateFilePath(eventReceiverName, repoPath); validateToRemoveInactiveEventReceiverConfiguration(eventReceiverName); EventReceiverConfigurationFileSystemInvoker.encryptAndSave(omElement, eventReceiverName + EventReceiverConstants.ER_CONFIG_FILE_EXTENSION_WITH_DOT); } else { throw new EventReceiverConfigurationException("Mapping type of the Event Receiver " + eventReceiverName + " cannot be null"); } } @Override public String getEventReceiverName(String eventReceiverConfigXml) throws EventReceiverConfigurationException { OMElement omElement; try { omElement = AXIOMUtil.stringToOM(eventReceiverConfigXml); } catch (XMLStreamException e) { throw new EventReceiverConfigurationException("Error parsing XML configuration of event receiver.", e); } EventReceiverConfigurationHelper.validateEventReceiverConfiguration(omElement); return EventReceiverConfigurationHelper.getEventReceiverName(omElement); } @Override public void undeployActiveEventReceiverConfiguration(String eventReceiverName) throws EventReceiverConfigurationException { int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(); String fileName = getFileName(eventReceiverName); if (fileName != null) { EventReceiverConfigurationFileSystemInvoker.delete(fileName); } else { throw new EventReceiverConfigurationException("Couldn't undeploy the Event Receiver configuration: " + eventReceiverName); } } @Override public void undeployInactiveEventReceiverConfiguration(String filename) throws EventReceiverConfigurationException { EventReceiverConfigurationFileSystemInvoker.delete(filename); } @Override public void editInactiveEventReceiverConfiguration( String eventReceiverConfiguration, String filename) throws EventReceiverConfigurationException { editEventReceiverConfiguration(filename, eventReceiverConfiguration, null); } @Override public void editActiveEventReceiverConfiguration(String eventReceiverConfiguration, String eventReceiverName) throws EventReceiverConfigurationException { int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(); String fileName = getFileName(eventReceiverName); if (fileName == null) { fileName = eventReceiverName + EventReceiverConstants.ER_CONFIG_FILE_EXTENSION_WITH_DOT; } editEventReceiverConfiguration(fileName, eventReceiverConfiguration, eventReceiverName); } @Override public EventReceiverConfiguration getActiveEventReceiverConfiguration(String eventReceiverName) { int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(); EventReceiverConfiguration eventReceiverConfiguration = null; Map<String, EventReceiver> tenantSpecificEventReceiverMap = this.tenantSpecificEventReceiverConfigurationMap.get(tenantId); if (tenantSpecificEventReceiverMap != null && tenantSpecificEventReceiverMap.size() > 0) { EventReceiver eventReceiver = tenantSpecificEventReceiverMap.get(eventReceiverName); if (eventReceiver != null) { eventReceiverConfiguration = eventReceiver.getEventReceiverConfiguration(); } } return eventReceiverConfiguration; } @Override public List<EventReceiverConfiguration> getAllActiveEventReceiverConfigurations() { int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(); List<EventReceiverConfiguration> eventReceiverConfigurations = new ArrayList<EventReceiverConfiguration>(); Map<String, EventReceiver> tenantSpecificEventReceiverMap = this.tenantSpecificEventReceiverConfigurationMap.get(tenantId); if (tenantSpecificEventReceiverMap != null) { for (EventReceiver eventReceiver : tenantSpecificEventReceiverMap.values()) { eventReceiverConfigurations.add(eventReceiver.getEventReceiverConfiguration()); } } return eventReceiverConfigurations; } @Override public List<EventReceiverConfiguration> getAllActiveEventReceiverConfigurations( String streamId) { int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(); List<EventReceiverConfiguration> eventReceiverConfigurations = new ArrayList<EventReceiverConfiguration>(); Map<String, EventReceiver> tenantSpecificEventReceiverMap = this.tenantSpecificEventReceiverConfigurationMap.get(tenantId); if (tenantSpecificEventReceiverMap != null) { for (EventReceiver eventReceiver : tenantSpecificEventReceiverMap.values()) { String streamWithVersion = eventReceiver.getExportedStreamDefinition().getStreamId(); if (streamWithVersion.equals(streamId)) { eventReceiverConfigurations.add(eventReceiver.getEventReceiverConfiguration()); } } } return eventReceiverConfigurations; } @Override public List<EventReceiverConfigurationFile> getAllInactiveEventReceiverConfigurations() { List<EventReceiverConfigurationFile> undeployedEventReceiverConfigurationFileList = new ArrayList<EventReceiverConfigurationFile>(); int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(); List<EventReceiverConfigurationFile> eventReceiverConfigurationFiles = this.tenantSpecificEventReceiverConfigurationFileMap.get(tenantId); if (eventReceiverConfigurationFiles != null) { for (EventReceiverConfigurationFile eventReceiverConfigurationFile : eventReceiverConfigurationFiles) { if (eventReceiverConfigurationFile.getStatus() != EventReceiverConfigurationFile.Status.DEPLOYED) { undeployedEventReceiverConfigurationFileList.add(eventReceiverConfigurationFile); } } } return undeployedEventReceiverConfigurationFileList; } @Override public String getInactiveEventReceiverConfigurationContent(String fileName) throws EventReceiverConfigurationException { return EventReceiverConfigurationFileSystemInvoker.readEventReceiverConfigurationFile(fileName); } @Override public String getActiveEventReceiverConfigurationContent(String eventReceiverName) throws EventReceiverConfigurationException { int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(); String fileName = getFileName(eventReceiverName); return EventReceiverConfigurationFileSystemInvoker.readEventReceiverConfigurationFile(fileName); } public List<String> getAllEventStreams(AxisConfiguration axisConfiguration) throws EventReceiverConfigurationException { List<String> streamList = new ArrayList<String>(); EventStreamService eventStreamService = EventReceiverServiceValueHolder.getEventStreamService(); Collection<StreamDefinition> eventStreamDefinitionList; try { eventStreamDefinitionList = eventStreamService.getAllStreamDefinitions(); if (eventStreamDefinitionList != null) { for (StreamDefinition streamDefinition : eventStreamDefinitionList) { streamList.add(streamDefinition.getStreamId()); } } } catch (EventStreamConfigurationException e) { throw new EventReceiverConfigurationException("Error while retrieving stream definition from store", e); } return streamList; } @Override public void setStatisticsEnabled(String eventReceiverName, boolean statisticsEnabled) throws EventReceiverConfigurationException { EventReceiverConfiguration eventReceiverConfiguration = getActiveEventReceiverConfiguration(eventReceiverName); eventReceiverConfiguration.setStatisticsEnabled(statisticsEnabled); editTracingStatistics(eventReceiverConfiguration, eventReceiverName); } @Override public void setTraceEnabled(String eventReceiverName, boolean traceEnabled) throws EventReceiverConfigurationException { EventReceiverConfiguration eventReceiverConfiguration = getActiveEventReceiverConfiguration(eventReceiverName); eventReceiverConfiguration.setTraceEnabled(traceEnabled); editTracingStatistics(eventReceiverConfiguration, eventReceiverName); } @Override public String getEventReceiverStatusAsString(String filename) { int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(); List<EventReceiverConfigurationFile> eventReceiverConfigurationFileList = tenantSpecificEventReceiverConfigurationFileMap.get(tenantId); if (eventReceiverConfigurationFileList != null) { for (EventReceiverConfigurationFile eventReceiverConfigurationFile : eventReceiverConfigurationFileList) { if (filename != null && filename.equals(eventReceiverConfigurationFile.getFileName())) { String statusMsg = eventReceiverConfigurationFile.getDeploymentStatusMessage(); if (eventReceiverConfigurationFile.getDependency() != null) { statusMsg = statusMsg + " [Dependency: " + eventReceiverConfigurationFile.getDependency() + "]"; } return statusMsg; } } } return EventReceiverConstants.NO_DEPENDENCY_INFO_MSG; } //Non-Interface public methods public void addEventReceiverConfigurationFile(EventReceiverConfigurationFile eventReceiverConfigurationFile, int tenantId) { List<EventReceiverConfigurationFile> eventReceiverConfigurationFiles = tenantSpecificEventReceiverConfigurationFileMap.get(tenantId); if (eventReceiverConfigurationFiles == null) { eventReceiverConfigurationFiles = new CopyOnWriteArrayList<>(); } else { for (EventReceiverConfigurationFile anEventReceiverConfigurationFileList : eventReceiverConfigurationFiles) { if (anEventReceiverConfigurationFileList.getFileName().equals(eventReceiverConfigurationFile.getFileName())) { return; } } } eventReceiverConfigurationFiles.add(eventReceiverConfigurationFile); tenantSpecificEventReceiverConfigurationFileMap.put(tenantId, eventReceiverConfigurationFiles); } public void addEventReceiverConfiguration(EventReceiverConfiguration eventReceiverConfiguration) throws EventReceiverConfigurationException { int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(); // Start: Checking preconditions to add the event receiver StreamDefinition exportedStreamDefinition = null; try { exportedStreamDefinition = EventReceiverServiceValueHolder.getEventStreamService().getStreamDefinition( eventReceiverConfiguration.getToStreamName(), eventReceiverConfiguration.getToStreamVersion()); } catch (EventStreamConfigurationException e) { throw new EventReceiverConfigurationException("Error while retrieving stream definition for stream " + eventReceiverConfiguration.getToStreamName() + ":" + eventReceiverConfiguration.getToStreamVersion() + " from store", e); } if (exportedStreamDefinition == null) { throw new EventReceiverStreamValidationException("Stream " + eventReceiverConfiguration.getToStreamName() + ":" + eventReceiverConfiguration.getToStreamVersion() + " does not exist", eventReceiverConfiguration.getToStreamName() + ":" + eventReceiverConfiguration.getToStreamVersion() ); } Map<String, EventReceiver> eventReceiverConfigurationMap = tenantSpecificEventReceiverConfigurationMap.get(tenantId); if (eventReceiverConfigurationMap == null) { eventReceiverConfigurationMap = new ConcurrentHashMap<String, EventReceiver>(); } // End; Checking preconditions to add the event receiver EventReceiver eventReceiver = new EventReceiver(eventReceiverConfiguration, exportedStreamDefinition, EventReceiverServiceValueHolder.getEventManagementService().getManagementModeInfo().getMode()); try { EventReceiverServiceValueHolder.getEventStreamService().subscribe(eventReceiver); } catch (EventStreamConfigurationException e) { //ignored as this is already checked } eventReceiverConfigurationMap.put(eventReceiverConfiguration.getEventReceiverName(), eventReceiver); tenantSpecificEventReceiverConfigurationMap.put(tenantId, eventReceiverConfigurationMap); } public void removeEventReceiverConfigurationFile(String fileName) throws EventReceiverConfigurationException { int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(); List<EventReceiverConfigurationFile> eventReceiverConfigurationFileList = tenantSpecificEventReceiverConfigurationFileMap.get(tenantId); if (eventReceiverConfigurationFileList != null) { for (EventReceiverConfigurationFile eventReceiverConfigurationFile : eventReceiverConfigurationFileList) { if ((eventReceiverConfigurationFile.getFileName().equals(fileName))) { if (eventReceiverConfigurationFile.getStatus(). equals(EventReceiverConfigurationFile.Status.DEPLOYED)) { String eventReceiverName = eventReceiverConfigurationFile.getEventReceiverName(); EventReceiver eventReceiver = tenantSpecificEventReceiverConfigurationMap.get(tenantId).remove(eventReceiverName); if (eventReceiver != null) { EventReceiverServiceValueHolder.getEventStreamService().unsubscribe(eventReceiver); eventReceiver.destroy(); } } eventReceiverConfigurationFileList.remove(eventReceiverConfigurationFile); return; } } } } public void activateInactiveEventReceiverConfigurationsForAdapter(String eventAdapterName) throws EventReceiverConfigurationException { List<EventReceiverConfigurationFile> fileList = new ArrayList<EventReceiverConfigurationFile>(); if (tenantSpecificEventReceiverConfigurationFileMap != null && tenantSpecificEventReceiverConfigurationFileMap.size() > 0) { for (List<EventReceiverConfigurationFile> eventReceiverConfigurationFiles : tenantSpecificEventReceiverConfigurationFileMap.values()) { if (eventReceiverConfigurationFiles != null) { for (EventReceiverConfigurationFile eventReceiverConfigurationFile : eventReceiverConfigurationFiles) { if ((eventReceiverConfigurationFile.getStatus().equals(EventReceiverConfigurationFile.Status.WAITING_FOR_DEPENDENCY)) && eventReceiverConfigurationFile.getDependency().equalsIgnoreCase(eventAdapterName)) { fileList.add(eventReceiverConfigurationFile); } } } } } for (EventReceiverConfigurationFile receiverConfigurationFile : fileList) { try { EventReceiverConfigurationFileSystemInvoker.reload(receiverConfigurationFile); } catch (Exception e) { log.error("Exception occurred while trying to deploy the Event Receiver configuration file: " + receiverConfigurationFile.getFileName(), e); } } } public void activateInactiveEventReceiverConfigurationsForStream(String streamId, int tenantId) throws EventReceiverConfigurationException { List<EventReceiverConfigurationFile> fileList = new ArrayList<EventReceiverConfigurationFile>(); if (tenantSpecificEventReceiverConfigurationFileMap != null && tenantSpecificEventReceiverConfigurationFileMap.size() > 0) { List<EventReceiverConfigurationFile> eventReceiverConfigurationFiles = tenantSpecificEventReceiverConfigurationFileMap.get(tenantId); if (eventReceiverConfigurationFiles != null) { for (EventReceiverConfigurationFile eventReceiverConfigurationFile : eventReceiverConfigurationFiles) { if (EventReceiverConfigurationFile.Status.WAITING_FOR_STREAM_DEPENDENCY.equals(eventReceiverConfigurationFile.getStatus()) && streamId.equalsIgnoreCase(eventReceiverConfigurationFile.getDependency())) { fileList.add(eventReceiverConfigurationFile); } } } } for (EventReceiverConfigurationFile receiverConfigurationFile : fileList) { try { EventReceiverConfigurationFileSystemInvoker.reload(receiverConfigurationFile); } catch (Exception e) { log.error("Exception occurred while trying to deploy the Event Receiver configuration file: " + receiverConfigurationFile.getFileName(), e); } } } public void deactivateActiveEventReceiverConfigurationsForAdapter( String dependency) throws EventReceiverConfigurationException { InputEventAdapterService eventAdapterService = EventReceiverServiceValueHolder.getInputEventAdapterService(); List<EventReceiverConfigurationFile> fileList = new ArrayList<EventReceiverConfigurationFile>(); if (tenantSpecificEventReceiverConfigurationMap != null && tenantSpecificEventReceiverConfigurationMap.size() > 0) { for (Map.Entry<Integer, Map<String, EventReceiver>> eventPublisherMapEntry : tenantSpecificEventReceiverConfigurationMap.entrySet()) { if (eventPublisherMapEntry.getValue() != null) { int tenantId = eventPublisherMapEntry.getKey(); for (EventReceiver eventReceiver : eventPublisherMapEntry.getValue().values()) { String eventAdapterType = eventReceiver.getEventReceiverConfiguration().getFromAdapterConfiguration().getType(); if (eventAdapterType.equals(dependency)) { EventReceiverConfigurationFile receiverConfigurationFile = getEventReceiverConfigurationFile(eventReceiver.getEventReceiverConfiguration().getEventReceiverName(), tenantId); if (receiverConfigurationFile != null) { fileList.add(receiverConfigurationFile); eventAdapterService.destroy(eventReceiver.getEventReceiverConfiguration().getFromAdapterConfiguration().getName()); } } } } } } for (EventReceiverConfigurationFile receiverConfigurationFile : fileList) { EventReceiverConfigurationFileSystemInvoker.reload(receiverConfigurationFile); log.info("Event receiver : " + receiverConfigurationFile.getEventReceiverName() + " in inactive state because dependency could not be found: " + dependency); } } public void deactivateActiveEventReceiverConfigurationsForStream(String streamId, int tenantId) throws EventReceiverConfigurationException { InputEventAdapterService eventAdapterService = EventReceiverServiceValueHolder.getInputEventAdapterService(); List<EventReceiverConfigurationFile> fileList = new ArrayList<EventReceiverConfigurationFile>(); if (tenantSpecificEventReceiverConfigurationMap != null && tenantSpecificEventReceiverConfigurationMap.size() > 0) { Map<String, EventReceiver> eventReceiverMap = tenantSpecificEventReceiverConfigurationMap.get(tenantId); if (eventReceiverMap != null) { for (EventReceiver eventReceiver : eventReceiverMap.values()) { EventReceiverConfiguration eventReceiverConfiguration = eventReceiver.getEventReceiverConfiguration(); String stream = EventReceiverUtil.getExportedStreamIdFrom(eventReceiverConfiguration); if (streamId.equals(stream)) { EventReceiverConfigurationFile receiverConfigurationFile = getEventReceiverConfigurationFile(eventReceiverConfiguration.getEventReceiverName(), tenantId); if (receiverConfigurationFile != null) { fileList.add(receiverConfigurationFile); eventAdapterService.destroy(eventReceiverConfiguration.getFromAdapterConfiguration().getName()); } } } } } for (EventReceiverConfigurationFile receiverConfigurationFile : fileList) { EventReceiverConfigurationFileSystemInvoker.reload(receiverConfigurationFile); log.info("Event receiver : " + receiverConfigurationFile.getEventReceiverName() + " in inactive state because event stream dependency could not be found: " + streamId); } } public boolean isEventReceiverAlreadyExists(int tenantId, String eventReceiverName) { if (tenantSpecificEventReceiverConfigurationFileMap.size() > 0) { List<EventReceiverConfigurationFile> eventReceiverConfigurationFiles = tenantSpecificEventReceiverConfigurationFileMap.get(tenantId); if (eventReceiverConfigurationFiles != null) { for (EventReceiverConfigurationFile eventReceiverConfigurationFile : eventReceiverConfigurationFiles) { if ((eventReceiverConfigurationFile.getEventReceiverName().equals(eventReceiverName)) && (eventReceiverConfigurationFile.getStatus().equals(EventReceiverConfigurationFile.Status.DEPLOYED))) { return true; } } } } return false; } public boolean isEventReceiverFileAlreadyExist(String eventReceiverFileName, int tenantId) { if (tenantSpecificEventReceiverConfigurationFileMap.size() > 0) { List<EventReceiverConfigurationFile> eventReceiverConfigurationFiles = tenantSpecificEventReceiverConfigurationFileMap.get(tenantId); if (eventReceiverConfigurationFiles != null) { for (EventReceiverConfigurationFile eventReceiverConfigurationFile : eventReceiverConfigurationFiles) { if ((eventReceiverConfigurationFile.getFileName().equals(eventReceiverFileName))) { return true; } } } } return false; } //Private Methods are below private void editTracingStatistics( EventReceiverConfiguration eventReceiverConfiguration, String eventReceiverName) throws EventReceiverConfigurationException { String fileName = getFileName(eventReceiverName); undeployActiveEventReceiverConfiguration(eventReceiverName); OMElement omElement = EventReceiverConfigurationBuilder.eventReceiverConfigurationToOM(eventReceiverConfiguration); EventReceiverConfigurationFileSystemInvoker.delete(fileName); EventReceiverConfigurationFileSystemInvoker.encryptAndSave(omElement, fileName); } private String getFileName(String eventReceiverName) { int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(); if (tenantSpecificEventReceiverConfigurationFileMap.size() > 0) { List<EventReceiverConfigurationFile> eventReceiverConfigurationFiles = tenantSpecificEventReceiverConfigurationFileMap.get(tenantId); if (eventReceiverConfigurationFiles != null) { for (EventReceiverConfigurationFile eventReceiverConfigurationFile : eventReceiverConfigurationFiles) { if ((eventReceiverConfigurationFile.getEventReceiverName().equals(eventReceiverName)) && eventReceiverConfigurationFile.getStatus().equals(EventReceiverConfigurationFile.Status.DEPLOYED)) { return new File(eventReceiverConfigurationFile.getFileName()).getName(); } } } } return null; } private void editEventReceiverConfiguration(String filename, String eventReceiverConfigurationXml, String originalEventReceiverName) throws EventReceiverConfigurationException { int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(); try { OMElement omElement = AXIOMUtil.stringToOM(eventReceiverConfigurationXml); omElement.build(); EventReceiverConfigurationHelper.validateEventReceiverConfiguration(omElement); String mappingType = EventReceiverConfigurationHelper.getInputMappingType(omElement); if (mappingType != null) { EventReceiverConfiguration eventReceiverConfigurationObject = EventReceiverConfigurationBuilder.getEventReceiverConfiguration(omElement, mappingType, true, tenantId); if (!(eventReceiverConfigurationObject.getEventReceiverName().equals(originalEventReceiverName))) { if (!isEventReceiverAlreadyExists(tenantId, eventReceiverConfigurationObject.getEventReceiverName())) { EventReceiverConfigurationFileSystemInvoker.delete(filename); EventReceiverConfigurationFileSystemInvoker.encryptAndSave(omElement, filename); } else { throw new EventReceiverConfigurationException("There is already a Event Receiver " + eventReceiverConfigurationObject.getEventReceiverName() + " with the same name"); } } else { EventReceiverConfigurationFileSystemInvoker.delete(filename); EventReceiverConfigurationFileSystemInvoker.encryptAndSave(omElement, filename); } } else { throw new EventReceiverConfigurationException("Mapping type of the Event Receiver " + originalEventReceiverName + " cannot be null"); } } catch (XMLStreamException e) { throw new EventReceiverConfigurationException("Error while building XML configuration: " + e.getMessage(), e); } } private EventReceiverConfigurationFile getEventReceiverConfigurationFile( String eventReceiverName, int tenantId) { List<EventReceiverConfigurationFile> eventReceiverConfigurationFiles = tenantSpecificEventReceiverConfigurationFileMap.get(tenantId); if (eventReceiverConfigurationFiles != null) { for (EventReceiverConfigurationFile eventReceiverConfigurationFile : eventReceiverConfigurationFiles) { if (eventReceiverConfigurationFile.getEventReceiverName().equals(eventReceiverName)) { return eventReceiverConfigurationFile; } } } return null; } private void validateToRemoveInactiveEventReceiverConfiguration(String eventReceiverName) throws EventReceiverConfigurationException { int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(); String fileName = eventReceiverName + EventReceiverConstants.ER_CONFIG_FILE_EXTENSION_WITH_DOT; List<EventReceiverConfigurationFile> eventReceiverConfigurationFiles = tenantSpecificEventReceiverConfigurationFileMap.get(tenantId); if (eventReceiverConfigurationFiles != null) { for (EventReceiverConfigurationFile eventReceiverConfigurationFile : eventReceiverConfigurationFiles) { if ((eventReceiverConfigurationFile.getFileName().equals(fileName))) { if (!(eventReceiverConfigurationFile.getStatus().equals(EventReceiverConfigurationFile.Status.DEPLOYED))) { EventReceiverConfigurationFileSystemInvoker.delete(fileName); break; } } } } } public List<String> getEncryptedProperties(String eventAdaptorType) { List<String> encryptedProperties = new ArrayList<String>(1); //OutputEventAdapterDto dto = OutputEventAdaptorHolder.getInstance().getOutputEventAdaptorService().getEventAdaptorDto(eventAdaptorType); InputEventAdapterSchema inputEventAdapterSchema = EventReceiverServiceValueHolder.getInputEventAdapterService().getInputEventAdapterSchema(eventAdaptorType); if (inputEventAdapterSchema != null) { List<Property> properties = inputEventAdapterSchema.getPropertyList(); if (properties != null) { for (Property prop : properties) { if (prop.isEncrypted()) { encryptedProperties.add(prop.getPropertyName()); } } } } return encryptedProperties; } public Map<Integer, Map<String, EventReceiver>> getTenantSpecificEventReceiverMap() { return tenantSpecificEventReceiverConfigurationMap; } public void start() { EventReceiverServiceValueHolder.getInputEventAdapterService().start(); } public void startPolling() { EventReceiverServiceValueHolder.getInputEventAdapterService().startPolling(); } }