/*
* 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.synapse.MessageContext;
import org.apache.synapse.SynapseException;
import org.apache.synapse.util.xpath.SynapseXPath;
import org.wso2.carbon.databridge.commons.AttributeType;
/**
* Property of a Stream Definition
*/
public class Property {
private String key = "";
private String value = null;
private SynapseXPath expression = null;
private String defaultValue = "";
private String type = "";
public static final String DATA_TYPE_STRING = "STRING";
public static final String DATA_TYPE_INTEGER = "INTEGER";
public static final String DATA_TYPE_FLOAT = "FLOAT";
public static final String DATA_TYPE_DOUBLE = "DOUBLE";
public static final String DATA_TYPE_BOOLEAN = "BOOLEAN";
public static final String DATA_TYPE_LONG= "LONG";
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public String getDefaultValue() {
return defaultValue;
}
public void setDefaultValue(String defaultValue) {
this.defaultValue = defaultValue;
}
public SynapseXPath getExpression() {
return expression;
}
public void setExpression(SynapseXPath expression) {
this.expression = expression;
}
public String getType() {
return type;
}
/**
* Returns the data bridge attribute type of this object
*
* @return Data bridge attribute type of this object
*/
public AttributeType getDatabridgeAttributeType() throws SynapseException {
if (DATA_TYPE_STRING.equals(type)) {
return AttributeType.STRING;
}
if (DATA_TYPE_INTEGER.equals(type)) {
return AttributeType.INT;
}
if (DATA_TYPE_FLOAT.equals(type)) {
return AttributeType.FLOAT;
}
if (DATA_TYPE_DOUBLE.equals(type)) {
return AttributeType.DOUBLE;
}
if (DATA_TYPE_BOOLEAN.equals(type)) {
return AttributeType.BOOL;
}
if (DATA_TYPE_LONG.equals(type)) {
return AttributeType.LONG;
}
throw new SynapseException(
"Invalid attribute type '" + type + "' for " + PublishEventMediatorFactory.getTagName() +
" mediator attribute");
}
public void setType(String type) {
this.type = type;
}
/**
* Extracts the property value from message context based on either value of expression attribute
*
* @param messageContext Message context from which the value should be extracted
* @return Extracted property value
*/
public Object extractPropertyValue(MessageContext messageContext) throws SynapseException {
String stringProperty;
if (expression != null) {
stringProperty = expression.stringValueOf(messageContext);
} else {
stringProperty = getValue();
}
//TODO: find whether exprssion didn't match and use default value then only
if (stringProperty == null || "".equals(stringProperty)) {
stringProperty = defaultValue;
}
if (DATA_TYPE_STRING.equals(getType())) {
return stringProperty;
}
if (DATA_TYPE_INTEGER.equals(getType())) {
return PropertyTypeConverter.convertToInt(stringProperty);
}
if (DATA_TYPE_FLOAT.equals(getType())) {
return PropertyTypeConverter.convertToFloat(stringProperty);
}
if (DATA_TYPE_DOUBLE.equals(getType())) {
return PropertyTypeConverter.convertToDouble(stringProperty);
}
if (DATA_TYPE_BOOLEAN.equals(getType())) {
return PropertyTypeConverter.convertToBoolean(stringProperty);
}
if (DATA_TYPE_LONG.equals(getType())) {
return PropertyTypeConverter.convertToLong(stringProperty);
}
return stringProperty;
}
}