/*******************************************************************************
 * Copyright (c) 2007 BEA Systems, Inc. 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:
 * BEA Systems, Inc. - initial API and implementation
 *******************************************************************************/
package org.eclipse.jst.j2ee.classpathdep;

import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.jst.j2ee.internal.J2EEConstants;

/**
 * Holds constants related to classpath component dependencies.
 */
public interface IClasspathDependencyConstants {

	/**
	 * Enumeration that is used to select component dependency attribute type. 
	 */
	public static enum DependencyAttributeType {CLASSPATH_COMPONENT_DEPENDENCY, CLASSPATH_COMPONENT_NONDEPENDENCY, DEPENDENCY_OR_NONDEPENDENCY}; 
	
	/**
	 * Name of the custom Java classpath entry attribute that is used to flag
	 * entries which should be exposed as module dependencies via the virtual component API. 
	 * The value of the attribute represents the runtime path to which resolved classpath entry components
	 * will be mapped in the deployed/exported module. By default, tagged classpath entries of dynamic web 
	 * projects will be mapped to the WEB-INF/lib folder of the web project (or WEB-INF/classes if the entry points to a class folder). 
	 * Tagged classpath entries that reference archives for utility, ejb and connector projects will be mapped to either the root of the EAR (if the project is
	 * referenced by an EAR) or to the /WEB-INF/lib directory of the WAR (if the project is a 
	 * web library reference of a web project); the runtime path of "../" is used to represent the mapping
	 * into the referencing module in both of these cases. Tagged classpath entries that reference class folders for utility, ejb and connector projects
	 * will map into the root of the utility, ejb or connector archive.
	 * Only container, library and variable entries are currently supported; for containers, only the resolved
	 * entries that are library entries are supported. All resolved entries are mapped unless they have the 
	 * "org.eclipse.jst.component.nondependency" attribute (or are project which are not currently supported and are therefore always skipped). 
	 */
	public static final String CLASSPATH_COMPONENT_DEPENDENCY = "org.eclipse.jst.component.dependency"; //$NON-NLS-1

	/**
	 * Name of the custom Java classpath entry attribute that is used to flag
	 * the resolved entries of classpath containers that should not be exposed
	 * via the virtual component API.
	 */
	public static final String CLASSPATH_COMPONENT_NON_DEPENDENCY = "org.eclipse.jst.component.nondependency"; //$NON-NLS-1
	
	/**
	 * Runtime path used to indicate that the resolved contributions from a classpath entry should be
	 * mapped into the exported/deployed structure of the parent module at the same location that the target module
	 * is mapped (will be either the EAR root or /WEB-INF/lib).
	 */
	public static final String RUNTIME_MAPPING_INTO_CONTAINER = "../";
	
	/**
	 * IPath value of RUNTIME_MAPPING_INTO_CONTAINER.
	 */
	public static final IPath RUNTIME_MAPPING_INTO_CONTAINER_PATH = new Path(RUNTIME_MAPPING_INTO_CONTAINER);

	/**
	 * Runtime path used to indicate that the resolved contributions from a classpath entry should be
	 * mapped into the root of the exported/deployed module.
	 */
	public static final String RUNTIME_MAPPING_INTO_COMPONENT ="/";
	
	/**
	 * IPath value of RUNTIME_MAPPING_INTO_COMPONENT.
	 */
	public static final IPath RUNTIME_MAPPING_INTO_COMPONENT_PATH = new Path(RUNTIME_MAPPING_INTO_COMPONENT);
	
	/**
	 * Runtime path used to map into /WEB-INF/classes
	 */
	public static final IPath WEB_INF_CLASSES_PATH = new Path(J2EEConstants.WEB_INF_CLASSES).makeAbsolute();
	
	/**
	 * Runtime path used to map into /WEB-INF/lib
	 */
	public static final IPath WEB_INF_LIB_PATH = new Path(J2EEConstants.WEB_INF_LIB).makeAbsolute();
	
	}
