package org.itsnat.droid.impl.xmlinflater.values.classtree; import org.itsnat.droid.ItsNatDroidException; import org.itsnat.droid.impl.dom.DOMAttr; import org.itsnat.droid.impl.dom.values.DOMElemValues; import org.itsnat.droid.impl.dom.values.DOMElemValuesItemNormal; import org.itsnat.droid.impl.dom.values.XMLDOMValues; import org.itsnat.droid.impl.util.MiscUtil; import org.itsnat.droid.impl.xmlinflated.values.ElementValuesItemNormal; import org.itsnat.droid.impl.xmlinflated.values.ElementValuesResources; import org.itsnat.droid.impl.xmlinflater.values.ClassDescValuesMgr; import static org.itsnat.droid.impl.dom.values.XMLDOMValues.TYPE_BOOL; import static org.itsnat.droid.impl.dom.values.XMLDOMValues.TYPE_DIMEN; /** * Created by jmarranz on 07/01/2016. */ public class ClassDescValuesItemNormal extends ClassDescValues<ElementValuesItemNormal> { public ClassDescValuesItemNormal(ClassDescValuesMgr classMgr, String tagName) { super(classMgr, tagName, null); } public String getType() { return classOrDOMElemName; } public ElementValuesItemNormal createElementValuesItemNormal(DOMElemValuesItemNormal domElement, ElementValuesResources parentChildValues) { // Se ha chequeado antes que está t_odo bien en domElement (existe type, name y value de una de las dos formas) DOMAttr attrName = domElement.getDOMAttribute(null, "name"); if (attrName == null) throw MiscUtil.internalError(); String name = attrName.getValue(); DOMAttr valueAsDOMAttr = domElement.getValueAsDOMAttr(); return new ElementValuesItemNormal(domElement.getTagName(),parentChildValues,getType(),name, valueAsDOMAttr); } public static String getResourceTypeItemNormal(DOMElemValues domElement) { // Sólo vale para los elementos directamente por debajo de <resources> no para los hijos de <style> cuyos <item> no tienen atributo "type" String tagName = domElement.getTagName(); if (tagName.equals("item")) { DOMAttr attrType = domElement.getDOMAttribute(null, "type"); if (attrType == null) throw new ItsNatDroidException("Missing the type attribute in <item> declaration"); String type = attrType.getValue(); if (XMLDOMValues.TYPE_DIMEN.equals(type)) { // Vemos si hay format="..." por ejemplo format="float" (ej <item name=".." type="dimen" format="float">...</item>) reemplazaría como nombre de dimensión a type "dimen" // Valores esperados de format="..." (no los soportamos todos): boolean,dimension,color,enum,integer,flag,float,fraction,reference,string DOMAttr attrFormat = domElement.getDOMAttribute(null, "format"); if (attrFormat != null) { type = attrFormat.getValue(); if ("dimension".equals(type)) type = TYPE_DIMEN; // Usamos "dimen" que es el nombre que usamos initernamente else if ("boolean".equals(type)) type = TYPE_BOOL; // Idem "bool" // Los demás coinciden con el atributo type o no los usamos } } return type; } else { return tagName; // Ej <dimen> <color> etc } } }