content: /*
   *  This file is part of AndroidIDE.
   *
   *  AndroidIDE is free software: you can redistribute it and/or modify
   *  it under the terms of the GNU General Public License as published by
   *  the Free Software Foundation, either version 3 of the License, or
   *  (at your option) any later version.
   *
   *  AndroidIDE is distributed in the hope that it will be useful,
   *  but WITHOUT ANY WARRANTY; without even the implied warranty of
   *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   *  GNU General Public License for more details.
   *
   *  You should have received a copy of the GNU General Public License
   *   along with AndroidIDE.  If not, see <https://www.gnu.org/licenses/>.
   */
  
  /*
   * reserved comment block
   * DO NOT REMOVE OR ALTER!
   */
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 2001-2003 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Xerces" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation and was
   * originally based on software copyright (c) 1999, International
   * Business Machines, Inc., http://www.apache.org.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  package jaxp.sun.org.apache.xerces.internal.xinclude;
  
  import java.util.Stack;
  
  public class XPointerFramework{
  
          /*
                  Todo's by next integration.
                  While constructing schema names and uris use a dynamic datastructure.
           */
  
      XPointerSchema [] fXPointerSchema;
      String [] fSchemaPointerName;
      String [] fSchemaPointerURI;
      String fSchemaPointer;
      String fCurrentSchemaPointer;
      Stack fSchemaNotAvailable;
      int fCountSchemaName = 0;
      int schemaLength = 0;
      XPointerSchema fDefaultXPointerSchema;
  
      public XPointerFramework(){
          this(null);
      }
  
      public XPointerFramework(XPointerSchema [] xpointerschema){
          fXPointerSchema = xpointerschema;
          fSchemaNotAvailable = new Stack();
      }
  
      public void reset(){
          fXPointerSchema = null;
          fXPointerSchema = null;
          fCountSchemaName = 0;
          schemaLength = 0;
          fSchemaPointerName = null;
          fSchemaPointerURI = null;
          fDefaultXPointerSchema = null;
          fCurrentSchemaPointer = null;
      }
  
      public void setXPointerSchema(XPointerSchema [] xpointerschema){
          fXPointerSchema = xpointerschema;
      }
  
      public void setSchemaPointer(String schemaPointer){
          fSchemaPointer = schemaPointer;
      }
  
      public XPointerSchema getNextXPointerSchema(){
          int  i=fCountSchemaName;
          if(fSchemaPointerName == null){
              getSchemaNames();
          }
          if(fDefaultXPointerSchema == null){
              getDefaultSchema();
          }
          if(fDefaultXPointerSchema.getXpointerSchemaName().equalsIgnoreCase(fSchemaPointerName[i])){
              fDefaultXPointerSchema.reset();
              fDefaultXPointerSchema.setXPointerSchemaPointer(fSchemaPointerURI[i]);
              fCountSchemaName = ++i;
              return  getDefaultSchema();
          }
          if(fXPointerSchema == null){
              fCountSchemaName = ++i;
              return null;
          }
  
          int fschemalength = fXPointerSchema.length;
  
          for(;fSchemaPointerName[i] != null; i++){
              for(int j=0; j<fschemalength; j++ ){
                  if(fSchemaPointerName[i].equalsIgnoreCase(fXPointerSchema[j].getXpointerSchemaName())){
                      fXPointerSchema[j].setXPointerSchemaPointer(fSchemaPointerURI[i]);
                      fCountSchemaName = ++i;
                      return fXPointerSchema[j];
                  }
              }
  
              if(fSchemaNotAvailable == null)
              fSchemaNotAvailable = new Stack();
  
              fSchemaNotAvailable.push(fSchemaPointerName[i]);
          }
          return null;
      }
  
      public XPointerSchema getDefaultSchema(){
          if(fDefaultXPointerSchema == null)
              fDefaultXPointerSchema = new XPointerElementHandler();
          return fDefaultXPointerSchema;
      }
  
      public void getSchemaNames(){
          int count =0;
          int index =0, lastindex =0;
          int schemapointerindex  =0, schemapointerURIindex=0;
          char c;
          int length = fSchemaPointer.length();
          fSchemaPointerName = new String [5];
          fSchemaPointerURI = new String [5];
  
          index = fSchemaPointer.indexOf('(');
          if( index <= 0)
              return;
  
          fSchemaPointerName[schemapointerindex++] = fSchemaPointer.substring(0, index++).trim();
          lastindex = index;
          String tempURI = null;
          count++;
  
          while(index < length){
              c = fSchemaPointer.charAt(index);
              if(c == '(')
                  count++;
              if(c == ')')
                  count--;
              if(count==0 ){
                  tempURI = fSchemaPointer.substring(lastindex, index).trim();
                  fSchemaPointerURI[schemapointerURIindex++] = getEscapedURI(tempURI);
                  lastindex = index;
                  if((index = fSchemaPointer.indexOf('(', lastindex)) != -1){
                      fSchemaPointerName[schemapointerindex++] = fSchemaPointer.substring(lastindex+1, index).trim();
                      count++;
                      lastindex = index+1;
                  }
                  else{
                      index = lastindex;
                  }
              }
              index++;
          }
          schemaLength = schemapointerURIindex -1;
      }
  
      public String   getEscapedURI(String URI){
          return URI;
      }
  
      public int getSchemaCount(){
          return schemaLength;
      }
  
      public int getCurrentPointer(){
          return fCountSchemaName;
      }
  
  }//XPointerFramwork
  