/*******************************************************************************
 * Copyright (c) 2001, 2004 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 * 
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/

package org.eclipse.wst.wsdl.validation.internal.wsdl11.xsd;

import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;

import org.apache.xerces.xni.XMLResourceIdentifier;
import org.apache.xerces.xni.XNIException;
import org.apache.xerces.xni.parser.XMLEntityResolver;
import org.apache.xerces.xni.parser.XMLInputSource;

/**
 * Handle a chain of entity resolvers.
 */
public class XMLEntityResolverChain implements XMLEntityResolver
{
  private List entityResolvers = new Vector();
  
  /**
   * @see org.apache.xerces.xni.parser.XMLEntityResolver#resolveEntity(org.apache.xerces.xni.XMLResourceIdentifier)
   */
  public XMLInputSource resolveEntity(XMLResourceIdentifier xmlResourceIdentifier) throws XNIException, IOException
  {
    XMLInputSource is = null;
    Iterator entityResolverIter = entityResolvers.iterator();
    while (entityResolverIter.hasNext())
    {
      XMLEntityResolver entityResolver = (XMLEntityResolver)entityResolverIter.next();
      try
      {
        is = entityResolver.resolveEntity(xmlResourceIdentifier);
      }
      catch (XNIException e)
      {
      }
      catch (IOException e)
      {
      }
      if (is != null)
      {
        break;
      }
    }
    // Throw and IOException if the file isn't found
    if (is == null)
    {
      throw new IOException("Unable to locate file");
    }
    return is;
  }

  /**
   * Add an entity resolver to this chain.
   * 
   * @param entityResolver The resolver to add to the chain.
   */
  public void addEntityResolver(XMLEntityResolver entityResolver)
  {
    entityResolvers.add(entityResolver);
  }
}
