com.sun.tools.xjc.reader.xmlschema.ct.FreshComplexTypeBuilder Maven / Gradle / Ivy
/*
* The contents of this file are subject to the terms
* of the Common Development and Distribution License
* (the "License"). You may not use this file except
* in compliance with the License.
*
* You can obtain a copy of the license at
* https://jwsdp.dev.java.net/CDDLv1.0.html
* See the License for the specific language governing
* permissions and limitations under the License.
*
* When distributing Covered Code, include this CDDL
* HEADER in each file and include the License file at
* https://jwsdp.dev.java.net/CDDLv1.0.html If applicable,
* add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your
* own identifying information: Portions Copyright [yyyy]
* [name of copyright owner]
*/
package com.sun.tools.xjc.reader.xmlschema.ct;
import com.sun.tools.xjc.model.CPropertyInfo;
import com.sun.tools.xjc.model.TypeUse;
import com.sun.tools.xjc.reader.xmlschema.bindinfo.BIProperty;
import static com.sun.tools.xjc.reader.xmlschema.ct.ComplexTypeBindingMode.FALLBACK_CONTENT;
import static com.sun.tools.xjc.reader.xmlschema.ct.ComplexTypeBindingMode.NORMAL;
import com.sun.xml.xsom.XSComplexType;
import com.sun.xml.xsom.XSContentType;
import com.sun.xml.xsom.XSModelGroup;
import com.sun.xml.xsom.XSParticle;
import com.sun.xml.xsom.XSSimpleType;
import com.sun.xml.xsom.XSTerm;
import com.sun.xml.xsom.visitor.XSContentTypeVisitor;
/**
* Builds a complex type that inherits from the anyType complex type.
*
* @author
* Kohsuke Kawaguchi ([email protected])
*/
final class FreshComplexTypeBuilder extends CTBuilder {
public boolean isApplicable(XSComplexType ct) {
return ct.getBaseType()==schemas.getAnyType()
&& !ct.isMixed(); // not mixed
}
public void build(final XSComplexType ct) {
XSContentType contentType = ct.getContentType();
contentType.visit(new XSContentTypeVisitor() {
public void simpleType(XSSimpleType st) {
builder.recordBindingMode(ct,ComplexTypeBindingMode.NORMAL);
simpleTypeBuilder.refererStack.push(ct);
TypeUse use = simpleTypeBuilder.build(st);
simpleTypeBuilder.refererStack.pop();
BIProperty prop = BIProperty.getCustomization(ct);
CPropertyInfo p = prop.createValueProperty("Value",false,ct,use);
selector.getCurrentBean().addProperty(p);
}
public void particle(XSParticle p) {
// determine the binding of this complex type.
builder.recordBindingMode(ct,
bgmBuilder.getParticleBinder().checkFallback(p)?FALLBACK_CONTENT:NORMAL);
bgmBuilder.getParticleBinder().build(p);
XSTerm term = p.getTerm();
if(term.isModelGroup() && term.asModelGroup().getCompositor()==XSModelGroup.ALL)
selector.getCurrentBean().setOrdered(false);
}
public void empty(XSContentType e) {
builder.recordBindingMode(ct,NORMAL);
}
});
// adds attributes and we are through.
green.attContainer(ct);
}
}