1/* 2 * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26package com.sun.xml.internal.xsom; 27 28import com.sun.xml.internal.xsom.visitor.XSSimpleTypeFunction; 29import com.sun.xml.internal.xsom.visitor.XSSimpleTypeVisitor; 30 31import java.util.List; 32 33/** 34 * Simple type. 35 * 36 * @author 37 * Kohsuke Kawaguchi (kohsuke.kawaguchi@sun.com) 38 */ 39public interface XSSimpleType extends XSType, XSContentType 40{ 41 /** 42 * Gets the base type as XSSimpleType. 43 * 44 * Equivalent to 45 * <code> 46 * (XSSimpleType)getBaseType() 47 * </code> 48 * Since this is a simple type, we know that the base type 49 * is also a simple type. 50 * 51 * The only exception is xs:anySimpleType, which has xs:anyType 52 * as the base type. 53 * 54 * @return 55 * null if this is xs:anySimpleType. Otherwise non-null. 56 */ 57 XSSimpleType getSimpleBaseType(); 58 59 /** 60 * Gets the variety of this simple type. 61 */ 62 XSVariety getVariety(); 63 64 /** 65 * Gets the ancestor primitive {@link XSSimpleType} if 66 * this type is {@link XSVariety#ATOMIC atomic}. 67 * 68 * @return 69 * null otherwise. 70 */ 71 XSSimpleType getPrimitiveType(); 72 73 /** 74 * Returns true if this is a primitive built-in simple type 75 * (that directly derives from xs:anySimpleType, by definition.) 76 */ 77 boolean isPrimitive(); 78 79 /** 80 * Gets the nearest ancestor {@link XSListSimpleType} (including itself) 81 * if the variety of this type is {@link XSVariety#LIST list}. 82 * 83 * @return otherwise return null 84 */ 85 XSListSimpleType getBaseListType(); 86 87 /** 88 * Gets the nearest ancestor {@link XSUnionSimpleType} (including itself) 89 * if the variety of this type is {@link XSVariety#UNION union}. 90 * 91 * @return otherwise return null 92 */ 93 XSUnionSimpleType getBaseUnionType(); 94 95 /** 96 * Returns true if this type definition is marked as 'final' 97 * with respect to the given {@link XSVariety}. 98 * 99 * @return 100 * true if the type is marked final. 101 */ 102 boolean isFinal(XSVariety v); 103 104 /** 105 * If this {@link XSSimpleType} is redefined by another simple type, 106 * return that component. 107 * 108 * @return null 109 * if this component has not been redefined. 110 */ 111 public XSSimpleType getRedefinedBy(); 112 113 /** 114 * Gets the effective facet object of the given name. 115 * 116 * <p> 117 * For example, if a simple type "foo" is derived from 118 * xs:string by restriction with the "maxLength" facet and 119 * another simple type "bar" is derived from "foo" by 120 * restriction with another "maxLength" facet, this method 121 * will return the latter one, because that is the most 122 * restrictive, effective facet. 123 * 124 * <p> 125 * For those facets that can have multiple values 126 * (pattern facets and enumeration facets), this method 127 * will return only the first one. 128 * TODO: allow clients to access all of them by some means. 129 * 130 * @return 131 * If this datatype has a facet of the given name, 132 * return that object. If the facet is not specified 133 * anywhere in its derivation chain, null will be returned. 134 */ 135 XSFacet getFacet( String name ); 136 137 /** 138 * For multi-valued facets (enumeration and pattern), obtain all values. 139 * 140 * @see #getFacet(String) 141 * 142 * @return 143 * can be empty but never null. 144 */ 145 List<XSFacet> getFacets( String name ); 146 147 148 149 void visit( XSSimpleTypeVisitor visitor ); 150 <T> T apply( XSSimpleTypeFunction<T> function ); 151 152 /** Returns true if <code>this instanceof XSRestrictionSimpleType</code>. */ 153 boolean isRestriction(); 154 /** Returns true if <code>this instanceof XSListSimpleType</code>. */ 155 boolean isList(); 156 /** Returns true if <code>this instanceof XSUnionSimpleType</code>. */ 157 boolean isUnion(); 158 159 XSRestrictionSimpleType asRestriction(); 160 XSListSimpleType asList(); 161 XSUnionSimpleType asUnion(); 162} 163