blob: 0fb103767a0cd303a9bef8ba04aa9643405abdcb [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008, 2015 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.osgitools;
import java.io.File;
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.execution.MavenSession;
import org.apache.maven.project.MavenProject;
import org.eclipse.tycho.BuildOutputDirectory;
import org.eclipse.tycho.ReactorProject;
import org.eclipse.tycho.ReactorProjectIdentities;
import org.eclipse.tycho.TychoProperties;
import org.eclipse.tycho.osgi.adapters.MavenReactorProjectIdentities;
public class DefaultReactorProject implements ReactorProject {
private final MavenProject project;
public DefaultReactorProject(MavenProject project) {
if (project == null) {
throw new NullPointerException();
}
this.project = project;
}
public static ReactorProject adapt(MavenProject project) {
if (project == null) {
return null;
}
ReactorProject reactorProject = (ReactorProject) project.getContextValue(CTX_REACTOR_PROJECT);
if (reactorProject == null) {
reactorProject = new DefaultReactorProject(project);
project.setContextValue(CTX_REACTOR_PROJECT, reactorProject);
}
return reactorProject;
}
public static List<ReactorProject> adapt(MavenSession session) {
ArrayList<ReactorProject> result = new ArrayList<>();
for (MavenProject project : session.getProjects()) {
result.add(adapt(project));
}
return result;
}
@Override
public boolean sameProject(Object otherProject) {
return project.equals(otherProject);
}
@Override
public File getBasedir() {
return project.getBasedir();
}
@Override
public String getPackaging() {
return project.getPackaging();
}
@Override
public String getGroupId() {
return project.getGroupId();
}
@Override
public String getArtifactId() {
return project.getArtifactId();
}
@Override
public String getVersion() {
return project.getVersion();
}
@Override
public ReactorProjectIdentities getIdentities() {
return new MavenReactorProjectIdentities(project);
}
@Override
public File getOutputDirectory() {
return new File(project.getBuild().getOutputDirectory());
}
@Override
public BuildOutputDirectory getBuildDirectory() {
return new BuildOutputDirectory(project.getBuild().getDirectory());
}
@Override
public File getTestOutputDirectory() {
return new File(project.getBuild().getTestOutputDirectory());
}
@Override
public File getArtifact() {
Artifact artifact = project.getArtifact();
return artifact != null ? artifact.getFile() : null;
}
@Override
public File getArtifact(String artifactClassifier) {
Artifact artifact = null;
if (artifactClassifier == null) {
artifact = project.getArtifact();
} else {
for (Artifact attached : project.getAttachedArtifacts()) {
if (artifactClassifier.equals(attached.getClassifier())) {
artifact = attached;
break;
}
}
}
return artifact != null ? artifact.getFile() : null;
}
@Override
public Object getContextValue(String key) {
return project.getContextValue(key);
}
@Override
public void setContextValue(String key, Object value) {
project.setContextValue(key, value);
}
@Override
public void setDependencyMetadata(boolean primary, Set<?> installableUnits) {
project.setContextValue(getDependencyMetadataKey(primary), installableUnits);
}
@Override
public Set<?> getDependencyMetadata() {
Set<?> primary = getDependencyMetadata(true);
Set<?> secondary = getDependencyMetadata(false);
if (primary == null) {
return secondary;
} else if (secondary == null) {
return primary;
}
LinkedHashSet<Object> result = new LinkedHashSet<>(primary);
result.addAll(secondary);
return result;
}
@Override
public Set<?> getDependencyMetadata(boolean primary) {
Set<?> metadata = (Set<?>) project.getContextValue(getDependencyMetadataKey(primary));
return metadata;
}
private static String getDependencyMetadataKey(boolean primary) {
return primary ? CTX_DEPENDENCY_METADATA : CTX_SECONDARY_DEPENDENCY_METADATA;
}
@Override
public String getBuildQualifier() {
String version = (String) project.getProperties().get(TychoProperties.BUILD_QUALIFIER);
if (version != null) {
return version;
}
throw new IllegalStateException("Project " + getId() + " does not have a build qualifier");
}
@Override
public String getExpandedVersion() {
String version = (String) project.getProperties().get(TychoProperties.QUALIFIED_VERSION);
if (version != null) {
return version;
}
throw new IllegalStateException("Project " + getId() + " does not have an expanded version");
}
@Override
public String getId() {
return project.getId();
}
@Override
public int hashCode() {
return project.hashCode();
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (!(obj instanceof DefaultReactorProject)) {
return false;
}
DefaultReactorProject other = (DefaultReactorProject) obj;
return project.equals(other.project);
}
@Override
public String toString() {
return project.toString();
}
}