/*******************************************************************************
 * Copyright (c) 2010 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.jaxb.core.resource.java;

import org.eclipse.core.resources.IFile;
import org.eclipse.jdt.core.dom.CompilationUnit;
import org.eclipse.jpt.common.core.JptResourceModel;
import org.eclipse.jpt.common.core.utility.TextRange;
import org.eclipse.jpt.common.utility.model.Model;
import org.eclipse.jpt.jaxb.core.AnnotationProvider;

/**
 * Common interface for Java resource nodes (source code or binary).
 * <p>
 * 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.
 * 
 * @version 3.0
 * @since 3.0
 */
public interface JavaResourceNode
	extends Model
{

	/**
	 * Return the Eclipse file that contains the Java resource node
	 * (typically either a Java source code file or a JAR).
	 */
	IFile getFile();

	/**
	 * Return the root of the Java resource containment hierarchy
	 * (typically either a compilation unit or a package fragment root).
	 */
	Root getRoot();

	/**
	 * Return the [source] node's root (the compilation unit).
	 */
	// TODO get rid of this method...?
	JavaResourceCompilationUnit getJavaResourceCompilationUnit();

	/**
	 * Return the [source] node's text range in the compilation unit's file.
	 */
	TextRange getTextRange(CompilationUnit astRoot);

	/**
	 * Initialize the [source] node from the specified AST.
	 */
	void initialize(CompilationUnit astRoot);

	/**
	 * Synchronize the [source] node with the specified AST.
	 */
	void synchronizeWith(CompilationUnit astRoot);


	/**
	 * Root of Java resource model containment hierarchy.
	 */
	interface Root extends JavaResourceNode, JptResourceModel {

		/**
		 * Return the root's Java resource types.
		 */
		Iterable<JavaResourceType> getTypes();
			String TYPES_COLLECTION = "types"; //$NON-NLS-1$

		/**
		 * Return the root's Java resource enums.
		 */
		Iterable<JavaResourceEnum> getEnums();
			String ENUMS_COLLECTION = "enums"; //$NON-NLS-1$

		/**
		 * Called (via a hook in change notification) whenever anything in the
		 * Java resource model changes. Forwarded to listeners.
		 */
		void resourceModelChanged();

		/**
		 * Return the annotation provider that supplies the annotations found
		 * in the Java resource model.
		 */
		AnnotationProvider getAnnotationProvider();

	}

}
