blob: 1f34611b06be364ff37ffc3609bdcd3b26f58885 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008, 2013 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.project;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import org.eclipse.tycho.ReactorProject;
import org.eclipse.tycho.core.shared.BuildProperties;
import org.eclipse.tycho.core.shared.BuildPropertiesParser;
public class EclipsePluginProjectImpl implements EclipsePluginProject {
private final ReactorProject project;
private final BuildProperties buildProperties;
private final LinkedHashMap<String, BuildOutputJar> outputJars = new LinkedHashMap<>();
private final BuildOutputJar dotOutputJar;
public EclipsePluginProjectImpl(ReactorProject project, BuildPropertiesParser buildPropertiesParser)
throws IOException {
this.project = project;
this.buildProperties = buildPropertiesParser.parse(project.getBasedir());
LinkedHashMap<String, BuildOutputJar> jars = new LinkedHashMap<>();
for (String jarName : buildProperties.getJarsCompileOrder()) {
jars.put(jarName, null);
}
List<String> extraClasspath = new ArrayList<>();
extraClasspath.addAll(buildProperties.getJarsExtraClasspath());
String dotJarName = null;
Set<Entry<String, List<String>>> jarToSourceFolderEntries = buildProperties.getJarToSourceFolderMap()
.entrySet();
for (Entry<String, List<String>> entry : jarToSourceFolderEntries) {
String jarName = entry.getKey();
File outputDirectory;
if (".".equals(jarName) || jarToSourceFolderEntries.size() == 1) {
// in case of one classpath entry which is not ".", also use standard
// maven output dir for better interoperability with plain maven plugins
dotJarName = jarName;
outputDirectory = project.getOutputDirectory();
} else {
String classesDir = jarName;
if (jarName.endsWith("/")) {
classesDir = jarName.substring(0, jarName.length() - 1);
}
outputDirectory = project.getBuildDirectory().getChild(classesDir + "-classes");
}
List<File> sourceFolders = toFileList(project.getBasedir(), entry.getValue());
List<String> jarExtraEntries = buildProperties.getJarToExtraClasspathMap().get(jarName);
if (jarExtraEntries != null) {
extraClasspath.addAll(jarExtraEntries);
}
jars.put(jarName, new BuildOutputJar(jarName, outputDirectory, sourceFolders, extraClasspath));
}
this.dotOutputJar = dotJarName != null ? jars.get(dotJarName) : null;
for (BuildOutputJar jar : jars.values()) {
if (jar != null) {
this.outputJars.put(jar.getName(), jar);
}
}
}
private List<File> toFileList(File parent, List<String> names) throws IOException {
ArrayList<File> result = new ArrayList<>();
for (String name : names) {
// don't call getCanonicalFile here because otherwise we'll be forced to call getCanonical* everywhere
result.add(new File(new File(parent, name).toURI().normalize()));
}
return result;
}
@Override
public ReactorProject getMavenProject() {
return project;
}
@Override
public List<BuildOutputJar> getOutputJars() {
return new ArrayList<>(outputJars.values());
}
@Override
public BuildOutputJar getDotOutputJar() {
return dotOutputJar;
}
@Override
public Map<String, BuildOutputJar> getOutputJarMap() {
return outputJars;
}
@Override
public BuildProperties getBuildProperties() {
return buildProperties;
}
}