Package org.codehaus.xfire.aegis.type.java5

Source Code of org.codehaus.xfire.aegis.type.java5.AnnotatedTypeInfo

package org.codehaus.xfire.aegis.type.java5;

import java.beans.PropertyDescriptor;

import javax.xml.namespace.QName;

import org.codehaus.xfire.aegis.type.Type;
import org.codehaus.xfire.aegis.type.TypeMapping;
import org.codehaus.xfire.aegis.type.basic.BeanTypeInfo;
import org.codehaus.xfire.util.NamespaceHelper;

public class AnnotatedTypeInfo
    extends BeanTypeInfo
{
    public AnnotatedTypeInfo(TypeMapping tm, Class typeClass, String ns)
    {
        super(typeClass, ns);
        setTypeMapping(tm);       
        initialize();
    }
   
    /**
     * Override from parent in order to check for IgnoreProperty annotation.
     */
    protected void mapProperty(PropertyDescriptor pd)
    {
        if (isIgnored(pd))
            return; // do not map ignored properties

        String name = pd.getName();
        if (isAttribute(pd))
        {
            mapAttribute(name, createMappedName(pd));
        }
        else if (isElement(pd))
        {
            mapElement(name, createMappedName(pd));
        }
    }
    
    @Override
    protected boolean registerType(PropertyDescriptor desc)
    {
        XmlAttribute att = desc.getReadMethod().getAnnotation(XmlAttribute.class);
        if (att != null && att.type() != Type.class) return false;
       
        XmlElement el = desc.getReadMethod().getAnnotation(XmlElement.class);
        if (el != null && el.type() != Type.class) return false;
       
        return super.registerType(desc);
    }

    protected boolean isIgnored(PropertyDescriptor desc)
    {
        return desc.getReadMethod().isAnnotationPresent(IgnoreProperty.class);
    }
        
    protected boolean isAttribute(PropertyDescriptor desc)
    {
        return desc.getReadMethod().isAnnotationPresent(XmlAttribute.class);
    }

    protected boolean isElement(PropertyDescriptor desc)
    {
        return !isAttribute(desc);
    }

    protected boolean isAnnotatedElement(PropertyDescriptor desc)
    {
        return desc.getReadMethod().isAnnotationPresent(XmlElement.class);
    }
       
    @Override
    protected QName createMappedName(PropertyDescriptor desc)
    {
        return createQName(desc);
    }

    protected QName createQName(PropertyDescriptor desc)
    {
        String name = null;
        String ns = null;
       
        XmlType xtype = (XmlType) getTypeClass().getAnnotation(XmlType.class);
        if (xtype != null)
        {
            ns = xtype.namespace();
        }

        if (isAttribute(desc))
        {
            XmlAttribute att = desc.getReadMethod().getAnnotation(XmlAttribute.class);
            name = att.name();
            if (att.namespace().length() > 0) ns = att.namespace();
        }
        else if (isAnnotatedElement(desc))
        {
            XmlElement att = desc.getReadMethod().getAnnotation(XmlElement.class);
            name = att.name();
            if (att.namespace().length() > 0) ns = att.namespace();
        }
       
        if (name == null || name.length() == 0)
            name = desc.getName();
       
        if (ns == null || ns.length() == 0)
            ns = NamespaceHelper.makeNamespaceFromClassName( getTypeClass().getName(), "http");
       
        return new QName(ns, name);
    }

    public boolean isNillable(QName name)
    {
        PropertyDescriptor desc = getPropertyDescriptorFromMappedName(name);
       
        if (isAnnotatedElement(desc))
        {
            XmlElement att = desc.getReadMethod().getAnnotation(XmlElement.class);
            return att.nillable();
        }
        else
        {
            return super.isNillable(name);
        }
    }
   
    public int getMinOccurs ( QName name )
    {
        PropertyDescriptor desc = getPropertyDescriptorFromMappedName(name);       
        if (isAnnotatedElement(desc))
        {
            XmlElement att = desc.getReadMethod().getAnnotation(XmlElement.class);
            String minOccurs = att.minOccurs();
            if ( minOccurs != null && minOccurs.length() > 0 )
            {
                return Integer.parseInt( minOccurs );
            }
        }
        return super.getMinOccurs(name);
    }
}
TOP

Related Classes of org.codehaus.xfire.aegis.type.java5.AnnotatedTypeInfo

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.