/*******************************************************************************
 * Copyright (c) 2009 Oracle. 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:
 *     Oracle - initial API and implementation
 ******************************************************************************/
package org.eclipse.jpt.core.context.persistence;

import org.eclipse.jpt.core.JpaStructureNode;
import org.eclipse.jpt.core.context.PersistentType;
import org.eclipse.jpt.core.context.XmlContextNode;
import org.eclipse.jpt.core.context.java.JarFile;
import org.eclipse.jpt.core.resource.persistence.XmlJarFileRef;

/**
 * This is the context model corresponding to the 
 * persistence resource model XmlJarRef,
 * which corresponds to the 'jar-file' tag in the persistence.xml.
 * 
 * Provisional API: This interface is part of an interim API that is still
 * under development and expected to change significantly before reaching
 * stability. It is available at this early stage to solicit feedback from
 * pioneering adopters on the understanding that any code that uses this API
 * will almost certainly be broken (repeatedly) as the API evolves.
 */
public interface JarFileRef
	extends XmlContextNode, JpaStructureNode
{
	// **************** file name **********************************************
	
	/**
	 * String constant associated with changes to the file name.
	 */
	String FILE_NAME_PROPERTY = "fileName"; //$NON-NLS-1$
	
	/**
	 * Return the file name of the jar file ref.
	 */
	String getFileName();
	
	/**
	 * Set the file name of the jar file ref.
	 */
	void setFileName(String fileName);
	
	
	// **************** JAR file ***********************************************
	
	/**
	 * String constant associated with changes to the JAR file.
	 */
	String JAR_FILE_PROPERTY = "jarFile"; //$NON-NLS-1$
	
	/**
	 * Return the JAR file ref's JAR file corresponding to the file name.
	 */
	JarFile getJarFile();
	
	
	// **************** updating ***********************************************
	
	/**
	 * Update the context JAR file ref to match the specified XML JAR file ref.
	 * @see org.eclipse.jpt.core.JpaProject#update()
	 */
	void update(XmlJarFileRef xmlJarFileRef);
	
	
	// **************** queries ************************************************
	
	/**
	 * Return the persistent type, as listed in the JAR file,
	 * with the specified name. Return null if it does not exists.
	 */
	PersistentType getPersistentType(String typeName);
	
	/**
	 * Return whether the text representation of the JAR file ref contains
	 * the specified text offset.
	 */
	boolean containsOffset(int textOffset);
}
