/*******************************************************************************
 * 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.dtd.core.internal.emf.util;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.wst.dtd.core.internal.emf.DTDFile;


/**
 * Load another DTD model - use when there is external entity references from
 * another model
 */
public class ExternalDTDModel {
	DTDFile dtdFile = null;

	public ExternalDTDModel() {
	}

	public DTDFile getExternalDTDFile() {
		return dtdFile;
	}

	/**
	 * Load the DTD model specified by the uri e.g.
	 * file:C:/eclipse/examples/purchaseorder.dtd
	 */
	public boolean loadModel(ResourceSet resources, String uri) {
		boolean rc = true;

		if (uri == null || uri.equals("")) { //$NON-NLS-1$
			return false;
		}

		try {
			// todo... Investigate why we can not create a new DTDUtil to load
			// the external
			// without breaking the bvt test bucket on the oagis cases.
			// Are depending on mof's built in caching via
			// resources.load(uri)?
			//
			URI uriObj = URI.createURI(uri);
			Resource r = resources.createResource(uriObj);
			Map options = new HashMap();
			r.load(options);

			for (Iterator i = resources.getResources().iterator(); i.hasNext();) {
				DTDFile currentFile = (DTDFile) ((Resource) i.next()).getContents().get(0);
				String currentURI = currentFile.eResource().getURI().toString();
				// note : mof stores a slightly different uri than the one we
				// passed in to resources.load(uri)
				// In the 'file:' protocol case, the call
				// resource.load("file:D:\x.dtd") will store a resource with
				// uri "D:\x.dtd".
				// This is why we use 'endswith()' instead of 'equals()' to
				// compare.
				if (uri.endsWith(currentURI)) {
					dtdFile = currentFile;
					break;
				}
			}
			if (dtdFile == null) {
				rc = false;
			}
		}
		catch (Exception ex) {
			rc = false;
		}
		return rc;
	}
}
