package cn.mutils.core.io.serial.primitive;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import cn.mutils.core.annotation.Primitive;
import cn.mutils.core.annotation.PrimitiveType;
import cn.mutils.core.beans.BeanField;
import cn.mutils.core.io.serial.Serial;
import cn.mutils.core.json.IJsonItem;
import cn.mutils.core.properties.IPropertyItem;
import cn.mutils.core.xml.IXmlItem;
import cn.mutils.core.xml.XmlUtil;
/**
* Support two data types:{"n":3.14} {"n":"3.14"}
*/
@SuppressWarnings({"serial", "UnnecessaryBoxing", "UnnecessaryUnboxing", "unused"})
public class DoubleItem extends Serial<Double> {
public DoubleItem() {
mType = PrimitiveType.STRING_DOUBLE;
mValue = Double.valueOf(0D);
}
public DoubleItem(double value) {
mType = PrimitiveType.STRING_DOUBLE;
mValue = Double.valueOf(value);
}
public DoubleItem(String value) {
mType = PrimitiveType.STRING_DOUBLE;
mValue = Double.valueOf(value);
}
public double doubleValue() {
return mValue.doubleValue();
}
protected void init(BeanField itemField) {
if (itemField != null) {
Primitive t = itemField.getAnnotation(Primitive.class);
if (t != null) {
mType = t.value();
}
}
}
@Override
public IJsonItem fromJson(Object json, BeanField itemField) {
init(itemField);
try {
mValue = Double.valueOf(json.toString());
} catch (Exception e) {
return null;
}
return this;
}
@Override
public Object toJson(BeanField itemField) {
init(itemField);
if (mType == PrimitiveType.STRING_DOUBLE) {
return mValue.toString();
} else {
return mValue;
}
}
@Override
public IXmlItem fromXml(Node xml, BeanField itemField) {
init(itemField);
try {
mValue = Double.valueOf(xml.getTextContent());
} catch (Exception e) {
return null;
}
return this;
}
@Override
public Node toXml(Document doc, BeanField itemField) {
init(itemField);
Node node = XmlUtil.newNode(doc, itemField);
node.setTextContent(mValue.toString());
return node;
}
@Override
public IPropertyItem fromProperty(String value, BeanField itemField) {
init(itemField);
try {
mValue = Double.valueOf(value);
} catch (Exception e) {
return null;
}
return this;
}
@Override
public String toProperty(BeanField itemField) {
init(itemField);
return mValue.toString();
}
}