1 /*
   2  * Copyright (c) 2006, 2017, Oracle and/or its affiliates. All rights reserved.
   3  * @LastModified: Oct 2017
   4  */
   5 /*
   6  * Licensed to the Apache Software Foundation (ASF) under one or more
   7  * contributor license agreements.  See the NOTICE file distributed with
   8  * this work for additional information regarding copyright ownership.
   9  * The ASF licenses this file to You under the Apache License, Version 2.0
  10  * (the "License"); you may not use this file except in compliance with
  11  * the License.  You may obtain a copy of the License at
  12  *
  13  *      http://www.apache.org/licenses/LICENSE-2.0
  14  *
  15  * Unless required by applicable law or agreed to in writing, software
  16  * distributed under the License is distributed on an "AS IS" BASIS,
  17  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  18  * See the License for the specific language governing permissions and
  19  * limitations under the License.
  20  */
  21 
  22 package com.sun.org.apache.xerces.internal.impl.xs.models;
  23 
  24 import com.sun.org.apache.xerces.internal.impl.xs.SubstitutionGroupHandler;
  25 import com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaException;
  26 import com.sun.org.apache.xerces.internal.xni.QName;
  27 import java.util.List;
  28 
  29 /**
  30  * Note: State of the content model is stored in the validator
  31  *
  32  * @xerces.internal
  33  *
  34  * @author Sandy Gao, IBM
  35  * @author Elena Litani, IBM
  36  */
  37 public interface XSCMValidator {
  38 
  39 
  40     public static final short FIRST_ERROR = -1;
  41 
  42     // on subsequent errors the validator should not report
  43     // an error
  44     //
  45     public static final short SUBSEQUENT_ERROR = -2;
  46 
  47     /**
  48      * This methods to be called on entering a first element whose type
  49      * has this content model. It will return the initial state of the content model
  50      *
  51      * @return Start state of the content model
  52      */
  53     public int[] startContentModel();
  54 
  55 
  56     /**
  57      * The method corresponds to one transaction in the content model.
  58      *
  59      * @param elementName
  60      * @param state  Current state
  61      * @return element decl or wildcard decl that
  62      *         corresponds to the element from the Schema grammar
  63      */
  64     public Object oneTransition (QName elementName, int[] state, SubstitutionGroupHandler subGroupHandler);
  65 
  66 
  67     /**
  68      * The method indicates the end of list of children
  69      *
  70      * @param state  Current state of the content model
  71      * @return true if the last state was a valid final state
  72      */
  73     public boolean endContentModel (int[] state);
  74 
  75     /**
  76      * check whether this content violates UPA constraint.
  77      *
  78      * @param subGroupHandler the substitution group handler
  79      * @return true if this content model contains other or list wildcard
  80      */
  81     public boolean checkUniqueParticleAttribution(SubstitutionGroupHandler subGroupHandler) throws XMLSchemaException;
  82 
  83     /**
  84      * Check which elements are valid to appear at this point. This method also
  85      * works if the state is in error, in which case it returns what should
  86      * have been seen.
  87      *
  88      * @param state  the current state
  89      * @return       a list whose entries are instances of
  90      *               either XSWildcardDecl or XSElementDecl.
  91      */
  92     public List<Object> whatCanGoHere(int[] state);
  93 
  94     /**
  95      * Used by constant space algorithm for a{n,m} for n > 1 and
  96      * m <= unbounded. Called by a validator if validation of
  97      * countent model succeeds after subsuming a{n,m} to a*
  98      * (or a+) to check the n and m bounds.
  99      *
 100      * @return <code>null</code> if validation of bounds is
 101      * successful. Returns a list of strings with error info
 102      * if not. Even entries in list returned are error codes
 103      * (used to look up properties) and odd entries are parameters
 104      * to be passed when formatting error message. Each parameter
 105      * is associated with the error code that proceeds it in
 106      * the list.
 107      */
 108     public List<String> checkMinMaxBounds();
 109 
 110      /**
 111      * <p>Returns an array containing information about the current repeating term
 112      * or <code>null</code> if no occurrence counting was being performed at the
 113      * current state.</p>
 114      *
 115      * <p>If an array is returned it will have a length == 4 and will contain:
 116      *  <ul>
 117      *   <li>a[0] :: min occurs</li>
 118      *   <li>a[1] :: max occurs</li>
 119      *   <li>a[2] :: current value of the counter</li>
 120      *   <li>a[3] :: identifier for the repeating term</li>
 121      *  </ul>
 122      * </p>
 123      *
 124      * @param state the current state
 125      * @return an array containing information about the current repeating term
 126      */
 127     public int [] occurenceInfo(int[] state);
 128 
 129     /**
 130      * Returns the name of the term (element or wildcard) for the given identifier.
 131      *
 132      * @param termId identifier for the element declaration or wildcard
 133      * @return the name of the element declaration or wildcard
 134      */
 135     public String getTermName(int termId);
 136 
 137     /**
 138      * Checks if this content model has had its min/maxOccurs values reduced for
 139      * purposes of speeding up UPA.  If so, this content model should not be used
 140      * for any purpose other than checking unique particle attribution
 141      *
 142      * @return a boolean that says whether this content has been compacted for UPA
 143      */
 144     public boolean isCompactedForUPA();
 145 } // XSCMValidator