package org.itsnat.droid.impl.xmlinflater.shared.attr;
import org.itsnat.droid.impl.dom.DOMAttr;
import org.itsnat.droid.impl.util.MapSmart;
import org.itsnat.droid.impl.xmlinflater.AttrContext;
import org.itsnat.droid.impl.xmlinflater.shared.classtree.ClassDesc;
/**
* Created by jmarranz on 1/05/14.
*/
public abstract class AttrDescReflecMethodNameBased<Treturn,TclassDesc extends ClassDesc,TattrTarget,TattrContext extends AttrContext>
extends AttrDescReflecMethod<TclassDesc,TattrTarget,TattrContext>
{
protected MapSmart<String, Treturn> valueMap;
protected String defaultName;
public AttrDescReflecMethodNameBased(TclassDesc parent, String name, String methodName, Class classParam, MapSmart<String, Treturn> valueMap, String defaultName)
{
super(parent,name,methodName,classParam);
this.valueMap = valueMap;
this.defaultName = defaultName;
}
public AttrDescReflecMethodNameBased(TclassDesc parent, String name, Class classParam, MapSmart<String, Treturn> valueMap, String defaultName)
{
super(parent, name,classParam);
this.valueMap = valueMap;
this.defaultName = defaultName;
}
@Override
public void setAttribute(TattrTarget target,DOMAttr attr, TattrContext attrCtx)
{
Treturn valueRes = parseNameBasedValue(attr.getValue());
callMethod(target, valueRes);
}
@Override
public void removeAttribute(TattrTarget target, TattrContext attrCtx)
{
if (defaultName != null)
{
if (defaultName.equals("")) callMethod(target, -1); // Android utiliza el -1 de vez en cuando como valor por defecto
else setAttributeToRemove(target, defaultName,attrCtx);
}
}
protected abstract Treturn parseNameBasedValue(String value);
}