package org.wso2.carbon.event.stream.template.deployer.internal.util; import org.wso2.carbon.context.PrivilegedCarbonContext; import org.wso2.carbon.event.template.manager.core.TemplateDeploymentException; import org.wso2.carbon.event.stream.core.exception.EventStreamConfigurationException; import org.wso2.carbon.event.stream.core.internal.util.EventStreamConstants; import org.wso2.carbon.event.stream.template.deployer.internal.EventStreamTemplateDeployerValueHolder; import org.wso2.carbon.registry.core.Collection; import org.wso2.carbon.registry.core.Registry; import org.wso2.carbon.registry.core.RegistryConstants; import org.wso2.carbon.registry.core.Resource; import org.wso2.carbon.registry.core.exceptions.RegistryException; public class EventStreamTemplateDeployerHelper { public static void updateRegistryMaps(Registry registry, Collection infoCollection, String artifactId, String streamId) throws RegistryException { infoCollection.addProperty(artifactId, streamId); registry.put(EventStreamTemplateDeployerConstants.META_INFO_COLLECTION_PATH, infoCollection); Resource mappingResource; String mappingResourceContent = null; String mappingResourcePath = EventStreamTemplateDeployerConstants. META_INFO_COLLECTION_PATH + RegistryConstants.PATH_SEPARATOR + streamId; if (registry.resourceExists(mappingResourcePath)) { mappingResource = registry.get(mappingResourcePath); mappingResourceContent = new String((byte[]) mappingResource.getContent()); } else { mappingResource = registry.newResource(); } if (mappingResourceContent == null) { mappingResourceContent = artifactId; } else { mappingResourceContent += EventStreamTemplateDeployerConstants.META_INFO_STREAM_NAME_SEPARATER + artifactId; } mappingResource.setMediaType("text/plain"); mappingResource.setContent(mappingResourceContent); registry.put(mappingResourcePath, mappingResource); } public static void cleanMappingResourceAndUndeploy(Registry registry, String mappingResourcePath, String artifactId, String streamId) throws TemplateDeploymentException { try { Resource mappingResource = registry.get(mappingResourcePath); String mappingResourceContent = new String((byte[]) mappingResource.getContent()); //Removing artifact ID, along with separator comma. int beforeCommaIndex = mappingResourceContent.indexOf(artifactId) - 1; int afterCommaIndex = mappingResourceContent.indexOf(artifactId) + artifactId.length(); if (beforeCommaIndex > 0) { mappingResourceContent = mappingResourceContent.replace( EventStreamTemplateDeployerConstants.META_INFO_STREAM_NAME_SEPARATER + artifactId, ""); } else if (afterCommaIndex < mappingResourceContent.length()) { mappingResourceContent = mappingResourceContent.replace( artifactId + EventStreamTemplateDeployerConstants.META_INFO_STREAM_NAME_SEPARATER, ""); } else { mappingResourceContent = mappingResourceContent.replace(artifactId, ""); } if (mappingResourceContent.equals("")) { //undeploying existing stream EventStreamTemplateDeployerValueHolder.getEventStreamService().removeEventStreamDefinition( streamId.split(EventStreamConstants.STREAM_DEFINITION_DELIMITER)[0] , streamId.split(EventStreamConstants.STREAM_DEFINITION_DELIMITER)[1]); //deleting mappingResource registry.delete(mappingResourcePath); } else { mappingResource.setContent(mappingResourceContent); registry.put(mappingResourcePath, mappingResource); } } catch (EventStreamConfigurationException e) { throw new TemplateDeploymentException("Failed to get stream definition for StreamID: " + streamId + ", hence deployment failed.", e); } catch (RegistryException e) { throw new TemplateDeploymentException("Could not load the Registry for Tenant Domain: " + PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantDomain(true) + ", when trying to undeploy Event Stream with artifact ID: " + artifactId, e); } } }