blob: 0bb9edbc1e9f3be64aa4a3b3f019bedd582bf71a [file] [log] [blame]
/* 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.xmlbeans.impl.schema;
import java.io.InputStream;
import java.io.File;
import java.math.BigInteger;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Collections;
import javax.xml.namespace.QName;
import org.apache.xmlbeans.QNameSet;
import org.apache.xmlbeans.SchemaAnnotation;
import org.apache.xmlbeans.SchemaAttributeGroup;
import org.apache.xmlbeans.SchemaAttributeGroup;
import org.apache.xmlbeans.SchemaAttributeModel;
import org.apache.xmlbeans.SchemaComponent;
import org.apache.xmlbeans.SchemaGlobalAttribute;
import org.apache.xmlbeans.SchemaGlobalAttribute;
import org.apache.xmlbeans.SchemaGlobalElement;
import org.apache.xmlbeans.SchemaGlobalElement;
import org.apache.xmlbeans.SchemaIdentityConstraint;
import org.apache.xmlbeans.SchemaLocalAttribute;
import org.apache.xmlbeans.SchemaModelGroup;
import org.apache.xmlbeans.SchemaModelGroup;
import org.apache.xmlbeans.SchemaParticle;
import org.apache.xmlbeans.SchemaType;
import org.apache.xmlbeans.SchemaTypeLoader;
import org.apache.xmlbeans.SchemaTypeSystem;
import org.apache.xmlbeans.XmlObject;
import org.apache.xmlbeans.Filer;
public class SoapEncSchemaTypeSystem extends SchemaTypeLoaderBase
implements SchemaTypeSystem
{
public static final String SOAPENC = "http://schemas.xmlsoap.org/soap/encoding/";
public static final String SOAP_ARRAY = "Array";
public static final String ARRAY_TYPE = "arrayType";
private static final String ATTR_ID = "id";
private static final String ATTR_HREF = "href";
private static final String ATTR_OFFSET = "offset";
private static final SchemaType[] EMPTY_SCHEMATYPE_ARRAY = new SchemaType[0];
private static final SchemaGlobalElement[] EMPTY_SCHEMAELEMENT_ARRAY = new SchemaGlobalElement[0];
private static final SchemaModelGroup[] EMPTY_SCHEMAMODELGROUP_ARRAY = new SchemaModelGroup[0];
private static final SchemaAttributeGroup[] EMPTY_SCHEMAATTRIBUTEGROUP_ARRAY = new SchemaAttributeGroup[0];
private static final SchemaAnnotation[] EMPTY_SCHEMAANNOTATION_ARRAY = new SchemaAnnotation[0];
// The global builtin type system
public static SchemaTypeSystem get()
{ return _global; }
private static SoapEncSchemaTypeSystem _global = new SoapEncSchemaTypeSystem();
private SchemaTypeImpl soapArray;
private SchemaGlobalAttributeImpl arrayType;
private Map _handlesToObjects = new HashMap();
private String soapArrayHandle;
private SchemaContainer _container = new SchemaContainer(SOAPENC);
private SoapEncSchemaTypeSystem()
{
// soapenc:Array
_container.setTypeSystem(this);
soapArray = new SchemaTypeImpl(_container, true);
_container.addGlobalType(soapArray.getRef());
soapArray.setName(new QName(SOAPENC, SOAP_ARRAY));
soapArrayHandle = SOAP_ARRAY.toLowerCase() + "type";
soapArray.setComplexTypeVariety(SchemaType.ELEMENT_CONTENT);
soapArray.setBaseTypeRef(BuiltinSchemaTypeSystem.ST_ANY_TYPE.getRef());
soapArray.setBaseDepth(1);
soapArray.setDerivationType(SchemaType.DT_EXTENSION);
soapArray.setSimpleTypeVariety(SchemaType.NOT_SIMPLE);
SchemaParticleImpl contentModel = new SchemaParticleImpl();
contentModel.setParticleType(SchemaParticle.SEQUENCE);
contentModel.setMinOccurs(BigInteger.ZERO);
contentModel.setMaxOccurs(BigInteger.ONE);
contentModel.setTransitionRules(QNameSet.ALL, true);
SchemaParticleImpl[] children = new SchemaParticleImpl[1];
contentModel.setParticleChildren(children);
SchemaParticleImpl contentModel2 = new SchemaParticleImpl();
contentModel2.setParticleType(SchemaParticle.WILDCARD);
contentModel2.setWildcardSet(QNameSet.ALL);
contentModel2.setWildcardProcess(SchemaParticle.LAX);
contentModel2.setMinOccurs(BigInteger.ZERO);
contentModel2.setMaxOccurs(null);
contentModel2.setTransitionRules(QNameSet.ALL, true);
children[0] = contentModel2;
SchemaAttributeModelImpl attrModel = new SchemaAttributeModelImpl();
attrModel.setWildcardProcess(SchemaAttributeModel.LAX);
HashSet excludedURI = new HashSet();
excludedURI.add(SOAPENC);
attrModel.setWildcardSet(QNameSet.forSets(excludedURI, null, Collections.EMPTY_SET,
Collections.EMPTY_SET));
SchemaLocalAttributeImpl attr = new SchemaLocalAttributeImpl();
attr.init(new QName("", ATTR_ID), BuiltinSchemaTypeSystem.ST_ID.getRef(),
SchemaLocalAttribute.OPTIONAL, null, null, null, false, null, null, null);
attrModel.addAttribute(attr);
attr = new SchemaLocalAttributeImpl();
attr.init(new QName("", ATTR_HREF), BuiltinSchemaTypeSystem.ST_ANY_URI.getRef(),
SchemaLocalAttributeImpl.OPTIONAL, null, null, null, false, null, null, null);
attrModel.addAttribute(attr);
attr = new SchemaLocalAttributeImpl();
attr.init(new QName(SOAPENC, ARRAY_TYPE), BuiltinSchemaTypeSystem.ST_STRING.getRef(),
SchemaLocalAttributeImpl.OPTIONAL, null, null, null, false, null, null, null);
attrModel.addAttribute(attr);
attr = new SchemaLocalAttributeImpl();
attr.init(new QName(SOAPENC, ATTR_OFFSET), BuiltinSchemaTypeSystem.ST_STRING.getRef(),
SchemaLocalAttributeImpl.OPTIONAL, null, null, null, false, null, null, null);
attrModel.addAttribute(attr);
soapArray.setContentModel(contentModel, attrModel, Collections.EMPTY_MAP, Collections.EMPTY_MAP, false);
// soapenc:arrayType
arrayType = new SchemaGlobalAttributeImpl(_container);
_container.addGlobalAttribute(arrayType.getRef());
arrayType.init(new QName(SOAPENC, ARRAY_TYPE), BuiltinSchemaTypeSystem.ST_STRING.getRef(),
SchemaLocalAttributeImpl.OPTIONAL, null, null, null, false, null, null, null);
_handlesToObjects.put(soapArrayHandle, soapArray);
_handlesToObjects.put(ARRAY_TYPE.toLowerCase() + "attribute", arrayType);
_container.setImmutable();
}
/**
* Returns the name of this loader.
*/
public String getName()
{
return "schema.typesystem.soapenc.builtin";
}
public SchemaType findType(QName qName)
{
if (SOAPENC.equals(qName.getNamespaceURI()) &&
SOAP_ARRAY.equals(qName.getLocalPart()))
return soapArray;
else
return null;
}
public SchemaType findDocumentType(QName qName)
{
return null;
}
public SchemaType findAttributeType(QName qName)
{
return null;
}
public SchemaGlobalElement findElement(QName qName)
{
return null;
}
public SchemaGlobalAttribute findAttribute(QName qName)
{
if (SOAPENC.equals(qName.getNamespaceURI()) &&
ARRAY_TYPE.equals(qName.getLocalPart()))
return arrayType;
else
return null;
}
public SchemaModelGroup findModelGroup(QName qName)
{
return null;
}
public SchemaAttributeGroup findAttributeGroup(QName qName)
{
return null;
}
public boolean isNamespaceDefined(String string)
{
return SOAPENC.equals(string);
}
public SchemaType.Ref findTypeRef(QName qName)
{
SchemaType type = findType(qName);
return (type == null ? null : type.getRef());
}
public SchemaType.Ref findDocumentTypeRef(QName qName)
{
return null;
}
public SchemaType.Ref findAttributeTypeRef(QName qName)
{
return null;
}
public SchemaGlobalElement.Ref findElementRef(QName qName)
{
return null;
}
public SchemaGlobalAttribute.Ref findAttributeRef(QName qName)
{
SchemaGlobalAttribute attr = findAttribute(qName);
return (attr == null ? null : attr.getRef());
}
public SchemaModelGroup.Ref findModelGroupRef(QName qName)
{
return null;
}
public SchemaAttributeGroup.Ref findAttributeGroupRef(QName qName)
{
return null;
}
public SchemaIdentityConstraint.Ref findIdentityConstraintRef(QName qName)
{
return null;
}
public SchemaType typeForClassname(String string)
{
return null;
}
public InputStream getSourceAsStream(String string)
{
return null; // no source
}
/**
* Returns the classloader used by this loader for resolving types.
*/
public ClassLoader getClassLoader()
{
return SoapEncSchemaTypeSystem.class.getClassLoader();
}
/**
* Describe <code>resolve</code> method here.
*
*/
public void resolve()
{
// don't need to do anything; already resolved
}
/**
* @return an array consisting of a single type
*/
public SchemaType[] globalTypes()
{
return new SchemaType[] {soapArray};
}
public SchemaType[] documentTypes()
{
return EMPTY_SCHEMATYPE_ARRAY;
}
public SchemaType[] attributeTypes()
{
return EMPTY_SCHEMATYPE_ARRAY;
}
public SchemaGlobalElement[] globalElements()
{
return EMPTY_SCHEMAELEMENT_ARRAY;
}
public SchemaGlobalAttribute[] globalAttributes()
{
return new SchemaGlobalAttribute[] {arrayType};
}
public SchemaModelGroup[] modelGroups()
{
return EMPTY_SCHEMAMODELGROUP_ARRAY;
}
public SchemaAttributeGroup[] attributeGroups()
{
return EMPTY_SCHEMAATTRIBUTEGROUP_ARRAY;
}
public SchemaAnnotation[] annotations()
{
return EMPTY_SCHEMAANNOTATION_ARRAY;
}
/**
* Returns the handle for the given type within this loader.
*/
public String handleForType(SchemaType type)
{
if (soapArray.equals(type))
return soapArrayHandle;
else
return null;
}
/**
*
*/
public SchemaComponent resolveHandle(String string)
{
return (SchemaComponent) _handlesToObjects.get(string);
}
/**
*
*/
public SchemaType typeForHandle(String string)
{
return (SchemaType) _handlesToObjects.get(string);
}
/**
* Describe <code>saveToDirectory</code> method here.
*
* @param file a <code>File</code> value
*/
public void saveToDirectory(File file)
{
throw new UnsupportedOperationException("The builtin soap encoding schema type system cannot be saved.");
}
public void save(Filer filer)
{
throw new UnsupportedOperationException("The builtin soap encoding schema type system cannot be saved.");
}
}