⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 collectionelement.java

📁 对xml很好的java处理引擎,编译中绑定xml
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/*Copyright (c) 2004-2007, Dennis M. SosnoskiAll rights reserved.Redistribution and use in source and binary forms, with or without modification,are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this   list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice,   this list of conditions and the following disclaimer in the documentation   and/or other materials provided with the distribution. * Neither the name of JiBX nor the names of its contributors may be used   to endorse or promote products derived from this software without specific   prior written permission.THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" ANDANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIEDWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE AREDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FORANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ONANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THISSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.*/package org.jibx.binding.model;import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import org.jibx.binding.util.StringArray;import org.jibx.runtime.IUnmarshallingContext;import org.jibx.runtime.JiBXException;/** * Model component for <b>collection</b> element of binding definition. * * @author Dennis M. Sosnoski * @version 1.0 */ public class CollectionElement extends StructureElementBase{    /** Enumeration of allowed attribute names */    public static final StringArray s_allowedAttributes =        new StringArray(new String[] { "add-method", "item-type", "iter-method",        "load-method", "size-method", "store-method" },        StructureElementBase.s_allowedAttributes);        /** Load method name. */    private String m_loadMethodName;        /** Size method name. */    private String m_sizeMethodName;        /** Store method name. */    private String m_storeMethodName;        /** Add method name. */    private String m_addMethodName;        /** Iterator method name. */    private String m_iterMethodName;        /** Item type name. */    private String m_itemTypeName;        /** Load method information. */    private IClassItem m_loadMethodItem;        /** Size method information. */    private IClassItem m_sizeMethodItem;        /** Store method information. */    private IClassItem m_storeMethodItem;        /** Add method information. */    private IClassItem m_addMethodItem;        /** Iterator method information. */    private IClassItem m_iterMethodItem;        /** Item type information. */    private IClass m_itemTypeClass;    	/**	 * Default constructor.	 */	public CollectionElement() {        super(COLLECTION_ELEMENT);    }    /**     * Get item type name.     *      * @return item type name (or <code>null</code> if none)     */    public String getItemTypeName() {        return m_itemTypeName;    }        /**     * Set item type name.     *      * @param type item type name (or <code>null</code> if none)     */    public void setItemTypeName(String type) {        m_itemTypeName = type;    }    /**     * Get item type information. This call is only meaningful after     * validation.     *      * @return item type information     */    public IClass getItemTypeClass() {        return m_itemTypeClass;    }        /**     * Get add method name.     *      * @return add method name (or <code>null</code> if none)     */    public String getAddMethodName() {        return m_addMethodName;    }        /**     * Set add method name.     *      * @param name add method name (or <code>null</code> if none)     */    public void setAddMethodName(String name) {        m_addMethodName = name;    }    /**     * Get add method information. This call is only meaningful after     * validation.     *      * @return add method information (or <code>null</code> if none)     */    public IClassItem getAddMethodItem() {        return m_addMethodItem;    }        /**     * Get iterator method name.     *      * @return iterator method name (or <code>null</code> if none)     */    public String getIterMethodName() {        return m_iterMethodName;    }        /**     * Set iterator method name.     *      * @param name iterator method name (or <code>null</code> if none)     */    public void setIterMethodName(String name) {        m_iterMethodName = name;    }        /**     * Get iterator method information. This call is only meaningful after     * validation.     *      * @return iterator method information (or <code>null</code> if none)     */    public IClassItem getIterMethodItem() {        return m_iterMethodItem;    }        /**     * Get load method name.     *      * @return load method name (or <code>null</code> if none)     */    public String getLoadMethodName() {        return m_loadMethodName;    }        /**     * Set load method name.     *      * @param name load method name (or <code>null</code> if none)     */    public void setLoadMethodName(String name) {        m_loadMethodName = name;    }        /**     * Get load method information. This call is only meaningful after     * validation.     *      * @return load method information (or <code>null</code> if none)     */    public IClassItem getLoadMethodItem() {        return m_loadMethodItem;    }        /**     * Get size method name.     *      * @return size method name (or <code>null</code> if none)     */    public String getSizeMethodName() {        return m_sizeMethodName;    }        /**     * Set size method name.     *      * @param name size method name (or <code>null</code> if none)     */    public void setSizeMethodName(String name) {        m_sizeMethodName = name;    }        /**     * Get size method information. This call is only meaningful after     * validation.     *      * @return size method information (or <code>null</code> if none)     */    public IClassItem getSizeMethodItem() {        return m_sizeMethodItem;    }        /**     * Get store method name.     *      * @return store method name (or <code>null</code> if none)     */    public String getStoreMethodName() {        return m_storeMethodName;    }        /**     * Set store method name.     *      * @param name store method name (or <code>null</code> if none)     */    public void setStoreMethodName(String name) {        m_storeMethodName = name;    }        /**     * Get store method information. This call is only meaningful after     * validation.     *      * @return store method information (or <code>null</code> if none)     */    public IClassItem getStoreMethodItem() {        return m_storeMethodItem;    }        //    // Overrides of base class methods    /**     * Set ID property. This is never supported for an object coming from a     * collection.     *     * @param child child defining the ID property     * @return <code>true</code> if successful, <code>false</code> if ID     * already defined     */    public boolean setIdChild(IComponent child) {        throw new IllegalStateException            ("Internal error: method should never be called");    }        /**     * Check for object present. Always <code>true</code> for collection.     *     * @return <code>true</code>     */    public boolean hasObject() {        return true;    }        /**     * Check for attribute definition. Always <code>false</code> for collection.     *     * @return <code>false</code>     */    public boolean hasAttribute() {        return false;    }    /**     * Check for content definition. Always <code>true</code> for collection.     *     * @return <code>true</code>     */    public boolean hasContent() {        return true;    }    /* (non-Javadoc)     * @see org.jibx.binding.model.ContainerElementBase#getChildObjectType()     */    public IClass getChildObjectType() {        return getItemTypeClass();    }        //    // Validation methods    /**     * Make sure all attributes are defined.     *     * @param uctx unmarshalling context     * @exception JiBXException on unmarshalling error     */    private void preSet(IUnmarshallingContext uctx) throws JiBXException {        validateAttributes(uctx, s_allowedAttributes);    }        /* (non-Javadoc)     * @see org.jibx.binding.model.ElementBase#prevalidate(org.jibx.binding.model.ValidationContext)     */    public void prevalidate(ValidationContext vctx) {                // first process attributes and check for errors        super.prevalidate(vctx);        if (!vctx.isSkipped(this)) {                        // check for ignored attributes            if (isAllowRepeats()) {                vctx.addWarning("'allow-repeats' attribute ignored on collection");            }            if (isChoice()) {                vctx.addWarning("'choice' attribute ignored on collection");            }                        // get the actual collection type and item type            IClass clas = getType();            if (clas == null) {                clas = vctx.getContextObject().getObjectType();            }            String tname = m_itemTypeName;            if (tname == null) {                String ctype = clas.getName();                if (ctype.endsWith("[]")) {                    tname = ctype.substring(0, ctype.length()-2);                } else {                    tname = "java.lang.Object";                }            }             m_itemTypeClass = vctx.getClassInfo(tname);            if (m_itemTypeClass == null) {                vctx.addFatal("Can't find class " + tname);            }                        // handle input and output bindings separately            if (vctx.isInBinding()) {                                // check store techniques                String sname = m_storeMethodName;                String aname = m_addMethodName;                if (sname != null && aname != null) {                    vctx.addWarning("Both store-method and add-method " +                        "supplied; using add-method");                    sname = null;                }                                // set defaults based on collection type if needed                if (sname == null && aname == null) {                    if (clas.isSuperclass("java.util.ArrayList") ||                        clas.isSuperclass("java.util.Vector") ||                        clas.isImplements("Ljava/util/Collection;")) {                        aname = "add";                    } else if (!clas.getName().endsWith("[]")) {                        vctx.addError("Need store-method or add-method for " +                            "input binding");                    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -