package org.itsnat.droid.impl.xmlinflater.drawable.classtree;
import android.graphics.drawable.Drawable;
import org.itsnat.droid.ItsNatDroidException;
import org.itsnat.droid.impl.dom.DOMAttr;
import org.itsnat.droid.impl.dom.drawable.DOMElemDrawable;
import org.itsnat.droid.impl.xmlinflated.drawable.ElementDrawableChild;
import org.itsnat.droid.impl.xmlinflated.drawable.ElementDrawableChildBase;
import org.itsnat.droid.impl.xmlinflated.drawable.ElementDrawableChildDrawableBridge;
import org.itsnat.droid.impl.xmlinflated.drawable.ElementDrawableChildRoot;
import org.itsnat.droid.impl.xmlinflater.drawable.AttrDrawableContext;
import org.itsnat.droid.impl.xmlinflater.drawable.ClassDescDrawableMgr;
/**
* Esta clase está pensada para el drawable que se permite como hijo único (por ejemplo el típico <bitmap>) en los casos en donde existe también el atributo android:drawable="" ej en <clip> o bajo <item>
* en drawables basados en capas (item). Puede ser CUALQUIER DRAWABLE aunque la documentación sólo ponga el ejemplo de <bitmap>
*
* Created by jmarranz on 10/11/14.
*/
public class ClassDescElementDrawableChildDrawableBridge extends ClassDescElementDrawableChildBased<ElementDrawableChildDrawableBridge>
{
public static final String NAME = "*";
public ClassDescElementDrawableChildDrawableBridge(ClassDescDrawableMgr classMgr)
{
super(classMgr,NAME,null);
}
@Override
public Class<ElementDrawableChildDrawableBridge> getDrawableOrElementDrawableClass()
{
return ElementDrawableChildDrawableBridge.class;
}
@Override
public ElementDrawableChild createElementDrawableChild(DOMElemDrawable domElement, DOMElemDrawable domElementParent, ElementDrawableChildBase parentChildDrawable, AttrDrawableContext attrCtx)
{
String name = domElement.getTagName();
@SuppressWarnings("unchecked")
ClassDescElementDrawableBased<Drawable> classDescBridgeRealTarget = (ClassDescElementDrawableBased<Drawable>)getClassDescDrawableMgr().get(name);
if (classDescBridgeRealTarget == null)
throw new ItsNatDroidException("Not found processor for " + domElementParent.getTagName() + ":" + name);
ElementDrawableChildRoot childDrawable = classDescBridgeRealTarget.createElementDrawableChildRoot(domElement,attrCtx);
Drawable drawable = childDrawable.getDrawable();
return new ElementDrawableChildDrawableBridge(parentChildDrawable,classDescBridgeRealTarget,drawable);
}
@Override
@SuppressWarnings("unchecked")
public boolean isAttributeIgnored(ElementDrawableChildDrawableBridge resource, String namespaceURI, String name)
{
if (super.isAttributeIgnored(resource,namespaceURI,name))
return true;
ClassDescElementDrawableBased<Drawable> classDescBridge = resource.getClassDescElementDrawableBasedBridgeRoot();
return classDescBridge.isAttributeIgnored(resource.getDrawable(),namespaceURI,name);
}
@Override
@SuppressWarnings("unchecked")
public boolean setAttribute(ElementDrawableChildDrawableBridge resource, DOMAttr attr, AttrDrawableContext attrCtx)
{
// Se redefine completamente
ClassDescElementDrawableBased<Drawable> classDescBridge = resource.getClassDescElementDrawableBasedBridgeRoot();
return classDescBridge.setAttribute(resource.getDrawable(),attr,attrCtx);
}
}