/*
* Copyright (c) 2005-2010, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
* WSO2 Inc. 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.throttle;
import org.apache.axiom.om.OMAttribute;
import org.apache.axiom.om.OMElement;
import org.apache.synapse.config.xml.XMLConfigConstants;
import org.wso2.carbon.mediator.service.MediatorException;
import org.wso2.carbon.mediator.service.ui.AbstractListMediator;
import org.wso2.carbon.mediator.service.ui.Mediator;
import javax.xml.namespace.QName;
public class ThrottleMediator extends AbstractListMediator {
private String policyKey = null;
private OMElement inLinePolicy = null;
private String onRejectSeqKey = null;
private String onAcceptSeqKey = null;
private String id;
public ThrottleMediator() {
addChild(new OnAcceptMediator());
addChild(new OnRejectMediator());
}
public String getTagLocalName() {
return "throttle";
}
public OMElement serialize(OMElement parent) {
OMElement throttle = fac.createOMElement("throttle", synNS);
OMElement policy = fac.createOMElement("policy", synNS);
if (policyKey != null) {
policy.addAttribute(fac.createOMAttribute(
"key", nullNS, policyKey));
throttle.addChild(policy);
} else {
if (inLinePolicy != null) {
policy.addChild(inLinePolicy);
throttle.addChild(policy);
}
}
saveTracingState(throttle, this);
if (id != null) {
throttle.addAttribute(fac.createOMAttribute(
"id", nullNS, id));
}
if (onRejectSeqKey != null) {
throttle.addAttribute(fac.createOMAttribute(XMLConfigConstants.ONREJECT, nullNS,
onRejectSeqKey));
} else {
for (Mediator m : getList()) {
if (m instanceof OnRejectMediator) {
m.serialize(throttle);
}
}
}
if (onAcceptSeqKey != null) {
throttle.addAttribute(fac.createOMAttribute(XMLConfigConstants.ONACCEPT, nullNS,
onAcceptSeqKey));
} else {
for (Mediator m : getList()) {
if (m instanceof OnAcceptMediator) {
m.serialize(throttle);
}
}
}
if (parent != null) {
parent.addChild(throttle);
}
return throttle;
}
public void build(OMElement elem) {
getList().clear();
this.policyKey = null;
this.onAcceptSeqKey = null;
this.onRejectSeqKey = null;
this.inLinePolicy = null;
this.id = null;
OMElement policy = elem.getFirstChildWithName(
new QName(XMLConfigConstants.SYNAPSE_NAMESPACE, "policy"));
if (policy != null) {
OMAttribute key = policy.getAttribute(new QName(XMLConfigConstants.NULL_NAMESPACE, "key"));
if (key != null) {
String keyValue = key.getAttributeValue();
if (keyValue != null && !"".equals(keyValue)) {
policyKey = keyValue;
} else {
throw new MediatorException("key attribute should have a value ");
}
} else {
OMElement inLine = policy.getFirstElement();
if (inLine != null) {
inLinePolicy = inLine;
}
}
}
// after successfully creating the mediator
// set its common attributes such as tracing etc
processAuditStatus(this, elem);
String id = elem.getAttributeValue(new QName(XMLConfigConstants.NULL_NAMESPACE, "id"));
if (id != null && !"".equals(id)) {
this.id = id.trim();
} else {
throw new MediatorException("Idy attribute must have defined ");
}
OMAttribute onReject = elem.getAttribute(
new QName(XMLConfigConstants.NULL_NAMESPACE, XMLConfigConstants.ONREJECT));
if (onReject != null) {
String onRejectValue = onReject.getAttributeValue();
if (onRejectValue != null) {
onRejectSeqKey = onRejectValue.trim();
}
} else {
OMElement onRejectMediatorElement = elem.getFirstChildWithName(
new QName(XMLConfigConstants.SYNAPSE_NAMESPACE, XMLConfigConstants.ONREJECT));
if (onRejectMediatorElement != null) {
OnRejectMediator onRejectMediator = new OnRejectMediator();
onRejectMediator.build(onRejectMediatorElement);
addChild(onRejectMediator);
}
}
OMAttribute onAccept = elem.getAttribute(
new QName(XMLConfigConstants.NULL_NAMESPACE, XMLConfigConstants.ONACCEPT));
if (onAccept != null) {
String onAcceptValue = onAccept.getAttributeValue();
if (onAcceptValue != null) {
onAcceptSeqKey = onAcceptValue;
}
} else {
OMElement onAcceptMediatorElement = elem.getFirstChildWithName(
new QName(XMLConfigConstants.SYNAPSE_NAMESPACE, XMLConfigConstants.ONACCEPT));
if (onAcceptMediatorElement != null) {
OnAcceptMediator onAcceptMediator = new OnAcceptMediator();
onAcceptMediator.build(onAcceptMediatorElement);
addChild(onAcceptMediator);
}
}
}
public String getPolicyKey() {
return policyKey;
}
public void setPolicyKey(String policyKey) {
this.policyKey = policyKey;
}
public OMElement getInLinePolicy() {
return inLinePolicy;
}
public void setInLinePolicy(OMElement inLinePolicy) {
this.inLinePolicy = inLinePolicy;
}
public String getOnRejectSeqKey() {
return onRejectSeqKey;
}
public void setOnRejectSeqKey(String onRejectSeqKey) {
this.onRejectSeqKey = onRejectSeqKey;
}
public String getOnAcceptSeqKey() {
return onAcceptSeqKey;
}
public void setOnAcceptSeqKey(String onAcceptSeqKey) {
this.onAcceptSeqKey = onAcceptSeqKey;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}