code: /*
   * 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.xml.xsom;
  
  import java.util.Iterator;
  import java.util.Collection;
  
  import com.sun.xml.xsom.visitor.XSWildcardFunction;
  import com.sun.xml.xsom.visitor.XSWildcardVisitor;
  
  /**
   * Wildcard schema component (used for both attribute wildcard
   * and element wildcard.)
   * 
   * XSWildcard interface can always be downcasted to either
   * Any, Other, or Union.
   */
  public interface XSWildcard extends XSComponent, XSTerm
  {
      static final int LAX = 1;
      static final int STRTICT = 2;
      static final int SKIP = 3;
      /**
       * Gets the processing mode.
       * 
       * @return
       *      Either LAX, STRICT, or SKIP.
       */
      int getMode();
  
      /**
       * Returns true if the specified namespace URI is valid
       * wrt this wildcard.
       * 
       * @param namespaceURI
       *      Use the empty string to test the default no-namespace.
       */
      boolean acceptsNamespace(String namespaceURI);
  
      /** Visitor support. */
      void visit(XSWildcardVisitor visitor);
      <T> T apply(XSWildcardFunction<T> function);
  
      /**
       * <code>##any</code> wildcard.
       */
      interface Any extends XSWildcard {
      }
      /**
       * <code>##other</code> wildcard.
       */
      interface Other extends XSWildcard {
          /**
           * Gets the namespace URI excluded from this wildcard.
           */
          String getOtherNamespace();
      }
      /**
       * Wildcard of a set of namespace URIs.
       */
      interface Union extends XSWildcard {
          /**
           * Short for <code>getNamespaces().iterator()</code>
           */
          Iterator<String> iterateNamespaces();
  
          /**
           * Read-only list of namespace URIs.
           */
          Collection<String> getNamespaces();
      }
  }
  