/*
* Copyright (c) 2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.mediator.publishevent;
import org.apache.axiom.om.OMElement;
import org.apache.synapse.Mediator;
import org.apache.synapse.config.xml.AbstractMediatorSerializer;
import org.apache.synapse.config.xml.SynapseXPathSerializer;
public class PublishEventMediatorSerializer extends AbstractMediatorSerializer {
/**
* Creates XML representation of the publishEvent mediator
*
* @param mediator The mediator for which the XML representation should be created
* @return The Created XML representation of mediator as an OMElement
*/
@Override
public OMElement serializeSpecificMediator(Mediator mediator) {
assert mediator instanceof PublishEventMediator :
PublishEventMediatorFactory.getTagName() + " mediator is expected";
PublishEventMediator publishEventMediator = (PublishEventMediator) mediator;
OMElement mediatorElement = fac.createOMElement(PublishEventMediatorFactory.getTagName(), synNS);
OMElement eventSinkElement =
fac.createOMElement(PublishEventMediatorFactory.EVENT_SINK_QNAME.getLocalPart(), synNS);
eventSinkElement.setText(publishEventMediator.getEventSinkName());
mediatorElement.addChild(eventSinkElement);
OMElement streamNameElement =
fac.createOMElement(PublishEventMediatorFactory.STREAM_NAME_QNAME.getLocalPart(), synNS);
streamNameElement.setText(publishEventMediator.getStreamName());
mediatorElement.addChild(streamNameElement);
OMElement streamVersionElement =
fac.createOMElement(PublishEventMediatorFactory.STREAM_VERSION_QNAME.getLocalPart(), synNS);
streamVersionElement.setText(publishEventMediator.getStreamVersion());
mediatorElement.addChild(streamVersionElement);
OMElement streamAttributesElement =
fac.createOMElement(PublishEventMediatorFactory.ATTRIBUTES_QNAME.getLocalPart(), synNS);
OMElement metaAttributesElement = fac.createOMElement(PublishEventMediatorFactory.META_QNAME.getLocalPart(), synNS);
for (Property property : publishEventMediator.getMetaProperties()) {
metaAttributesElement.addChild(createElementForProperty(property));
}
streamAttributesElement.addChild(metaAttributesElement);
OMElement correlationAttributesElement =
fac.createOMElement(PublishEventMediatorFactory.CORRELATION_QNAME.getLocalPart(), synNS);
for (Property property : publishEventMediator.getCorrelationProperties()) {
correlationAttributesElement.addChild(createElementForProperty(property));
}
streamAttributesElement.addChild(correlationAttributesElement);
OMElement payloadAttributesElement =
fac.createOMElement(PublishEventMediatorFactory.PAYLOAD_QNAME.getLocalPart(), synNS);
for (Property property : publishEventMediator.getPayloadProperties()) {
payloadAttributesElement.addChild(createElementForProperty(property));
}
streamAttributesElement.addChild(payloadAttributesElement);
OMElement arbitraryAttributesElement =
fac.createOMElement(PublishEventMediatorFactory.ARBITRARY_QNAME.getLocalPart(), synNS);
for (Property property : publishEventMediator.getArbitraryProperties()) {
arbitraryAttributesElement.addChild(createElementForProperty(property));
}
streamAttributesElement.addChild(arbitraryAttributesElement);
mediatorElement.addChild(streamAttributesElement);
return mediatorElement;
}
@Override
public String getMediatorClassName() {
return PublishEventMediator.class.getName();
}
/**
* Creates the XML representation of the given mediator property
*
* @param property Property for which the XML representation should be created
* @return XML representation of the property as an OMElement
*/
private OMElement createElementForProperty(Property property) {
OMElement attributeElement = fac.createOMElement(PublishEventMediatorFactory.ATTRIBUTE_QNAME.getLocalPart(), synNS);
attributeElement.addAttribute(
fac.createOMAttribute(PublishEventMediatorFactory.getNameAttributeQ().getLocalPart(), nullNS,
property.getKey()));
attributeElement.addAttribute(
fac.createOMAttribute(PublishEventMediatorFactory.TYPE_QNAME.getLocalPart(), nullNS, property.getType()));
attributeElement.addAttribute(
fac.createOMAttribute(PublishEventMediatorFactory.DEFAULT_QNAME.getLocalPart(), nullNS,
property.getDefaultValue()));
if (property.getExpression() != null) {
SynapseXPathSerializer.serializeXPath(property.getExpression(), attributeElement,
PublishEventMediatorFactory.getExpressionAttributeQ().getLocalPart());
} else {
attributeElement.addAttribute(
fac.createOMAttribute(PublishEventMediatorFactory.getValueAttributeQ().getLocalPart(), nullNS,
property.getValue()));
}
return attributeElement;
}
}