package cn.mutils.core.io.serial.primitive; import org.w3c.dom.Document; import org.w3c.dom.Node; import cn.mutils.core.annotation.False; import cn.mutils.core.annotation.Primitive; import cn.mutils.core.annotation.PrimitiveType; import cn.mutils.core.annotation.True; 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: {"isOK":true} {"isOK":"true"} */ @SuppressWarnings({"serial", "UnnecessaryBoxing", "unused", "UnnecessaryUnboxing"}) public class BoolItem extends Serial<Boolean> { protected String mTrue = "true"; protected String mFalse = "false"; public BoolItem() { mType = PrimitiveType.STRING_BOOL; mValue = Boolean.FALSE; } public BoolItem(boolean value) { mType = PrimitiveType.STRING_BOOL; mValue = Boolean.valueOf(value); } public BoolItem(String value) { mType = PrimitiveType.STRING_BOOL; mValue = Boolean.valueOf(value); } public boolean booleanValue() { return mValue.booleanValue(); } protected void init(BeanField itemField) { if (itemField != null) { Primitive type = itemField.getAnnotation(Primitive.class); if (type != null) { mType = type.value(); } True t = itemField.getAnnotation(True.class); if (t != null && !t.value().isEmpty()) { mTrue = t.value(); } False f = itemField.getAnnotation(False.class); if (f != null && !f.value().isEmpty()) { mFalse = f.value(); } } } @Override public IJsonItem fromJson(Object json, BeanField itemField) { init(itemField); String str = json.toString(); if (mType == PrimitiveType.STRING_BOOL) { if (str.equals(mTrue)) { mValue = Boolean.TRUE; } else if (str.equals(mFalse)) { mValue = Boolean.FALSE; } else { return null; } return this; } else { try { mValue = Boolean.valueOf(str); } catch (Exception e) { return null; } return this; } } @Override public Object toJson(BeanField itemField) { init(itemField); if (mType == PrimitiveType.STRING_BOOL) { return mValue ? mTrue : mFalse; } else { return mValue; } } @Override public IXmlItem fromXml(Node xml, BeanField itemField) { init(itemField); String str = xml.getTextContent(); if (str.equals(mTrue)) { mValue = Boolean.TRUE; } else if (str.equals(mFalse)) { mValue = Boolean.FALSE; } else { return null; } return this; } @Override public Node toXml(Document doc, BeanField itemField) { init(itemField); Node node = XmlUtil.newNode(doc, itemField); node.setTextContent(mValue ? mTrue : mFalse); return node; } @Override public IPropertyItem fromProperty(String value, BeanField itemField) { init(itemField); if (value.equals(mTrue)) { mValue = Boolean.TRUE; } else if (value.equals(mFalse)) { mValue = Boolean.FALSE; } else { return null; } return this; } @Override public String toProperty(BeanField itemField) { init(itemField); return mValue ? mTrue : mFalse; } }