schema.java

来自「JAVA 文章管理系统源码」· Java 代码 · 共 182 行

JAVA
182
字号
/*
 * Copyright 2004 The Apache Software Foundation.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */ 

package org.apache.commons.betwixt.schema;

import java.beans.IntrospectionException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Collection;

import org.apache.commons.betwixt.ElementDescriptor;
import org.apache.commons.betwixt.XMLBeanInfo;
import org.apache.commons.betwixt.XMLIntrospector;

/**
 * Model for top level element in an XML Schema
 * 
 * @author <a href='http://jakarta.apache.org/'>Jakarta Commons Team</a>
 * @version $Revision: 1.2.2.1 $
 */
public class Schema {
	
	private List elements = new ArrayList();
	private List complexTypes = new ArrayList();
	private List simpleTypes = new ArrayList(); 
    
    private XMLIntrospector introspector;
	
    public Schema() {
        this(new XMLIntrospector());
    }
    
    public Schema(XMLIntrospector introspector) {
        this.introspector = introspector;
    }
    
    /**
     * Introspects the given type giving an <code>XMLBeanInfo</code>.
     * @param type Class to introspect, not null
     * @return <code>XMLBeanInfo</code>, not null
     * @throws IntrospectionException
     */
    public XMLBeanInfo introspect(Class type) throws IntrospectionException {
         return introspector.introspect(type);
    }
    
    /**
     * Gets the complex types defined
     * @return list of <code>ComplexType</code>'s not null
     */
    public List getComplexTypes() {
        return complexTypes;
    }


	/**
	 * Adds a new complex type to those defined
	 * @param complexType not null
	 */
	public void addComplexType(GlobalComplexType complexType) {
		complexTypes.add(complexType);
	}
	

    /**
     * Gets the elements definied
     * @return list of <code>Element</code>s not null
     */
    public List getElements() {
        return elements;
    }

	/**
	 * Adds a new element to those defined.
	 * @param element not null
	 */
	public void addElement(GlobalElement element) {
		elements.add(element);
	}

    /**
     * Gets the simple types defined.
     * @return list of <code>SimpleType</code>s not null
     */
    public List getSimpleTypes() {
        return simpleTypes;
    }

	/**
	 * Adds a new simple type to those defined.
	 * @param simpleType
	 */
	public void addSimpleType(SimpleType simpleType) {
		simpleTypes.add(simpleType);
	}


    /**
     * Adds global (top level) element and type declarations matching the given descriptor.
     * @param elementDescriptor ElementDescriptor not null
     */
    public void addGlobalElementType(TranscriptionConfiguration configuration, ElementDescriptor elementDescriptor) throws IntrospectionException {
        // need to create a global element declaration and a complex type 
        // use the fully qualified class name as the type name
        GlobalElement element = new GlobalElement(
                            elementDescriptor.getLocalName(), 
                            elementDescriptor.getPropertyType().getName());
        addElement(element);
        
        GlobalComplexType type = new GlobalComplexType(configuration, elementDescriptor, this);
        addComplexType(type);
    }	
	
    public boolean equals(Object obj) {
    	boolean result = false;
        if (obj instanceof Schema) {
        	Schema schema = (Schema) obj;
        	result = 
                    equalContents(elements, schema.elements) &&
                    equalContents(complexTypes, schema.complexTypes) &&
                    equalContents(simpleTypes, schema.simpleTypes);
        }
        return result;
    }
    
    private boolean equalContents(Collection one, Collection two)
    {
        // doesn't check cardinality but should be ok
        if (one.size() != two.size()) {
            return false;
        }
        for (Iterator it=one.iterator();it.hasNext();) {
            Object object = it.next();
            if (!two.contains(object)) {
                return false;
            }
        }
        return true;
    }

    public int hashCode() {
        return 0;
    }
    


    public String toString() {
        StringBuffer buffer = new StringBuffer();
        buffer.append("<?xml version='1.0'?>");
        buffer.append("<xsd:schema xmlns:xsd='http://www.w3c.org/2001/XMLSchema'>");
        
        for (Iterator it=simpleTypes.iterator(); it.hasNext();) {
              buffer.append(it.next());    
        }    
        
        for (Iterator it=complexTypes.iterator(); it.hasNext();) {
              buffer.append(it.next());    
        }
        
  
        for (Iterator it=elements.iterator(); it.hasNext();) {
              buffer.append(it.next());    
        } 
        buffer.append("</xsd:schema>");
        return buffer.toString();
    }
}

⌨️ 快捷键说明

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