001: /*
002: * Copyright 2006 Sun Microsystems, Inc. All Rights Reserved.
003: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
004: *
005: * This code is free software; you can redistribute it and/or modify it
006: * under the terms of the GNU General Public License version 2 only, as
007: * published by the Free Software Foundation. Sun designates this
008: * particular file as subject to the "Classpath" exception as provided
009: * by Sun in the LICENSE file that accompanied this code.
010: *
011: * This code is distributed in the hope that it will be useful, but WITHOUT
012: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
013: * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
014: * version 2 for more details (a copy is included in the LICENSE file that
015: * accompanied this code).
016: *
017: * You should have received a copy of the GNU General Public License version
018: * 2 along with this work; if not, write to the Free Software Foundation,
019: * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
020: *
021: * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
022: * CA 95054 USA or visit www.sun.com if you need additional information or
023: * have any questions.
024: */
025:
026: package com.sun.xml.internal.xsom;
027:
028: /**
029: * Complex type.
030: *
031: * @author
032: * Kohsuke Kawaguchi (kohsuke.kawaguchi@sun.com)
033: */
034: public interface XSComplexType extends XSType, XSAttContainer {
035: /**
036: * Checks if this complex type is declared as an abstract type.
037: */
038: boolean isAbstract();
039:
040: boolean isFinal(int derivationMethod);
041:
042: /**
043: * Roughly corresponds to the block attribute. But see the spec
044: * for gory detail.
045: */
046: boolean isSubstitutionProhibited(int method);
047:
048: /**
049: * Gets the scope of this complex type.
050: * This is not a property defined in the schema spec.
051: *
052: * @return
053: * null if this complex type is global. Otherwise
054: * return the element declaration that contains this anonymous
055: * complex type.
056: */
057: XSElementDecl getScope();
058:
059: /**
060: * The content of this complex type.
061: *
062: * @return
063: * always non-null.
064: */
065: XSContentType getContentType();
066:
067: /**
068: * Gets the explicit content of a complex type with a complex content
069: * that was derived by extension.
070: *
071: * <p>
072: * Informally, the "explicit content" is the portion of the
073: * content model added in this derivation. IOW, it's a delta between
074: * the base complex type and this complex type.
075: *
076: * <p>
077: * For example, when a complex type T2 derives fom T1, then:
078: * <pre>
079: * content type of T2 = SEQUENCE( content type of T1, explicit content of T2 )
080: * </pre>
081: *
082: * @return
083: * If this complex type is derived by restriction or has a
084: * simple content, this method returns null.
085: * IOW, this method only works for a complex type with
086: * a complex content derived by extension from another complex type.
087: */
088: XSContentType getExplicitContent();
089:
090: // meaningful only if getContentType returns particles
091: boolean isMixed();
092:
093: /**
094: * If this {@link XSComplexType} is redefined by another complex type,
095: * return that component.
096: *
097: * @return null
098: * if this component has not been redefined.
099: */
100: public XSComplexType getRedefinedBy();
101: }
|