/*******************************************************************************
 * Copyright (c) 2008, 2012 Sonatype 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:
 *    Sonatype Inc. - initial API and implementation
 *******************************************************************************/
package org.eclipse.tycho.core;

import org.apache.maven.project.MavenProject;
import org.eclipse.tycho.ArtifactKey;
import org.eclipse.tycho.ReactorProject;
import org.eclipse.tycho.artifacts.DependencyArtifacts;
import org.eclipse.tycho.core.shared.TargetEnvironment;

/**
 * tycho-specific behaviour associated with MavenProject instances. stateless.
 * 
 * TODO take target environments into account!
 */
public interface TychoProject {
    /**
     * Walks all project dependencies, regardless of runtime environment filters.
     */
    public ArtifactDependencyWalker getDependencyWalker(MavenProject project);

    /**
     * Walks project dependencies resolved for the specified runtime environment.
     */
    public ArtifactDependencyWalker getDependencyWalker(MavenProject project, TargetEnvironment environment);

    /**
     * Returns resolved project dependencies. For projects targeting multiple runtime environments,
     * returned collection includes artifacts for all supported runtime environments.
     */
    public DependencyArtifacts getDependencyArtifacts(MavenProject project);

    /**
     * Returns resolved project dependencies resolved for specified runtime environment.
     */
    public DependencyArtifacts getDependencyArtifacts(MavenProject project, TargetEnvironment environment);

    // implementation must not depend on target platform
    // TODO this method is not well-defined for some packaging types; some of them don't produce artifacts addressable via Eclipse coordinates
    public ArtifactKey getArtifactKey(ReactorProject project);

    /**
     * Implicit target environment configuration present in project metadata, like, for example,
     * Eclipse-PlatformFilter OSGi bundle manifest attribute.
     */
    public TargetEnvironment getImplicitTargetEnvironment(MavenProject project);

}
