/* * Copyright (c) 2005 - 2014, 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.publisher.core.internal.type.map; import org.apache.axiom.om.OMElement; import org.apache.axiom.om.OMFactory; import org.wso2.carbon.event.publisher.core.config.EventOutputProperty; import org.wso2.carbon.event.publisher.core.config.EventPublisherConstants; import org.wso2.carbon.event.publisher.core.config.OutputMapping; import org.wso2.carbon.event.publisher.core.config.mapping.MapOutputMapping; import org.wso2.carbon.event.publisher.core.exception.EventPublisherConfigurationException; import org.wso2.carbon.event.publisher.core.exception.EventPublisherValidationException; import javax.xml.namespace.QName; import java.util.Iterator; import java.util.List; /** * This class is used to read the values of the event builder configuration defined in XML configuration files */ public class MapOutputMapperConfigurationBuilder { private MapOutputMapperConfigurationBuilder() { } public static OutputMapping fromOM( OMElement mappingElement) throws EventPublisherValidationException, EventPublisherConfigurationException { MapOutputMapping mapOutputMapping = new MapOutputMapping(); String customMappingEnabled = mappingElement.getAttributeValue(new QName(EventPublisherConstants.EF_ATTR_CUSTOM_MAPPING)); if (customMappingEnabled == null || (customMappingEnabled.equals(EventPublisherConstants.ENABLE_CONST))) { mapOutputMapping.setCustomMappingEnabled(true); if (!validateMapEventMapping(mappingElement)) { throw new EventPublisherConfigurationException("Map Mapping is not valid, check the output mapping"); } if (mappingElement != null) { Iterator propertyIterator = mappingElement.getChildrenWithName(new QName(EventPublisherConstants.EF_CONF_NS, EventPublisherConstants.EF_ELE_PROPERTY)); while (propertyIterator.hasNext()) { OMElement propertyOMElement = (OMElement) propertyIterator.next(); EventOutputProperty eventOutputProperty = getOutputPropertyFromOM(propertyOMElement); mapOutputMapping.addOutputPropertyConfiguration(eventOutputProperty); } } } else { mapOutputMapping.setCustomMappingEnabled(false); } return mapOutputMapping; } private static EventOutputProperty getOutputPropertyFromOM(OMElement omElement) { OMElement propertyFromElement = omElement.getFirstChildWithName(new QName(EventPublisherConstants.EF_CONF_NS, EventPublisherConstants.EF_ELEMENT_FROM)); OMElement propertyToElement = omElement.getFirstChildWithName(new QName(EventPublisherConstants.EF_CONF_NS, EventPublisherConstants.EF_ELEMENT_TO)); String name = propertyToElement.getAttributeValue(new QName(EventPublisherConstants.EF_ATTR_NAME)); String valueOf = propertyFromElement.getAttributeValue(new QName(EventPublisherConstants.EF_ATTR_NAME)); return new EventOutputProperty(name, valueOf); } public static boolean validateMapEventMapping(OMElement omElement) { int count = 0; Iterator<OMElement> mappingIterator = omElement.getChildElements(); while (mappingIterator.hasNext()) { OMElement childElement = mappingIterator.next(); String childTag = childElement.getLocalName(); if (!childTag.equals(EventPublisherConstants.EF_ELE_PROPERTY)) { return false; } count++; } return count != 0; } public static OMElement outputMappingToOM( OutputMapping outputMapping, OMFactory factory) { MapOutputMapping mapOutputMapping = (MapOutputMapping) outputMapping; List<EventOutputProperty> outputPropertyConfiguration = mapOutputMapping.getOutputPropertyConfiguration(); OMElement mappingOMElement = factory.createOMElement(new QName( EventPublisherConstants.EF_ELEMENT_MAPPING)); mappingOMElement.declareDefaultNamespace(EventPublisherConstants.EF_CONF_NS); mappingOMElement.addAttribute(EventPublisherConstants.EF_ATTR_TYPE, EventPublisherConstants.EF_MAP_MAPPING_TYPE, null); if (mapOutputMapping.isCustomMappingEnabled()) { mappingOMElement.addAttribute(EventPublisherConstants.EF_ATTR_CUSTOM_MAPPING, EventPublisherConstants.ENABLE_CONST, null); if (outputPropertyConfiguration.size() > 0) { for (EventOutputProperty eventOutputProperty : outputPropertyConfiguration) { mappingOMElement.addChild(getPropertyOmElement(factory, eventOutputProperty)); } } } else { mappingOMElement.addAttribute(EventPublisherConstants.EF_ATTR_CUSTOM_MAPPING, EventPublisherConstants.TM_VALUE_DISABLE, null); } return mappingOMElement; } private static OMElement getPropertyOmElement(OMFactory factory, EventOutputProperty eventOutputProperty) { OMElement propertyOMElement = factory.createOMElement(new QName(EventPublisherConstants.EF_ELE_PROPERTY)); propertyOMElement.declareDefaultNamespace(EventPublisherConstants.EF_CONF_NS); OMElement fromElement = factory.createOMElement(new QName(EventPublisherConstants.EF_ELEMENT_FROM)); fromElement.declareDefaultNamespace(EventPublisherConstants.EF_CONF_NS); fromElement.addAttribute(EventPublisherConstants.EF_ATTR_NAME, eventOutputProperty.getValueOf(), null); OMElement toElement = factory.createOMElement(new QName(EventPublisherConstants.EF_ELEMENT_TO)); toElement.declareDefaultNamespace(EventPublisherConstants.EF_CONF_NS); toElement.addAttribute(EventPublisherConstants.EF_ATTR_NAME, eventOutputProperty.getName(), null); propertyOMElement.addChild(fromElement); propertyOMElement.addChild(toElement); return propertyOMElement; } }