/*
 * Decompiled with CFR 0_110.
 * 
 * Could not load the following classes:
 *  com.sun.msv.datatype.xsd.XSDatatype
 *  java.lang.Object
 *  java.lang.String
 *  java.util.HashMap
 *  java.util.Map
 */
package org.dom4j.datatype;

import com.sun.msv.datatype.xsd.XSDatatype;
import java.util.HashMap;
import java.util.Map;
import org.dom4j.Attribute;
import org.dom4j.DocumentFactory;
import org.dom4j.Element;
import org.dom4j.QName;
import org.dom4j.datatype.DatatypeAttribute;
import org.dom4j.datatype.DatatypeElement;

public class DatatypeElementFactory
extends DocumentFactory {
    private Map attributeXSDatatypes = new HashMap();
    private Map childrenXSDatatypes = new HashMap();
    private QName elementQName;

    public DatatypeElementFactory(QName qName) {
        this.elementQName = qName;
    }

    @Override
    public Attribute createAttribute(Element element, QName qName, String string2) {
        XSDatatype xSDatatype = this.getAttributeXSDatatype(qName);
        if (xSDatatype == null) {
            return super.createAttribute(element, qName, string2);
        }
        return new DatatypeAttribute(qName, xSDatatype, string2);
    }

    @Override
    public Element createElement(QName qName) {
        XSDatatype xSDatatype;
        XSDatatype xSDatatype2 = this.getChildElementXSDatatype(qName);
        if (xSDatatype2 != null) {
            return new DatatypeElement(qName, xSDatatype2);
        }
        DocumentFactory documentFactory = qName.getDocumentFactory();
        if (documentFactory instanceof DatatypeElementFactory && (xSDatatype = ((DatatypeElementFactory)documentFactory).getChildElementXSDatatype(qName)) != null) {
            return new DatatypeElement(qName, xSDatatype);
        }
        return super.createElement(qName);
    }

    public XSDatatype getAttributeXSDatatype(QName qName) {
        return (XSDatatype)this.attributeXSDatatypes.get((Object)qName);
    }

    public XSDatatype getChildElementXSDatatype(QName qName) {
        return (XSDatatype)this.childrenXSDatatypes.get((Object)qName);
    }

    public QName getQName() {
        return this.elementQName;
    }

    public void setAttributeXSDatatype(QName qName, XSDatatype xSDatatype) {
        this.attributeXSDatatypes.put((Object)qName, (Object)xSDatatype);
    }

    public void setChildElementXSDatatype(QName qName, XSDatatype xSDatatype) {
        this.childrenXSDatatypes.put((Object)qName, (Object)xSDatatype);
    }
}

