blob: 4ae4e1a2fbd3091998a6b4e5ae32451fc17955b0 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2012 SAP AG 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:
* SAP AG - initial API and implementation
*******************************************************************************/
package org.eclipse.tycho.packaging;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.project.MavenProject;
import org.codehaus.plexus.component.annotations.Component;
import org.codehaus.plexus.component.annotations.Requirement;
import org.codehaus.plexus.logging.Logger;
import org.codehaus.plexus.util.DirectoryScanner;
import org.eclipse.tycho.core.shared.BuildProperties;
@Component(role = IncludeValidationHelper.class)
public class IncludeValidationHelper {
@Requirement
private Logger log;
public IncludeValidationHelper() {
}
public IncludeValidationHelper(Logger log) {
this.log = log;
}
public void checkBinIncludesExist(MavenProject project, BuildProperties buildProperties, boolean strict,
String... ignoredIncludes) throws MojoExecutionException {
checkIncludesExist("bin.includes", buildProperties.getBinIncludes(), project, strict, ignoredIncludes);
}
public void checkSourceIncludesExist(MavenProject project, BuildProperties buildProperties, boolean strict)
throws MojoExecutionException {
checkIncludesExist("src.includes", buildProperties.getSourceIncludes(), project, strict);
}
private void checkIncludesExist(String buildPropertiesKey, List<String> includePatterns, MavenProject project,
boolean strict, String... ignoredIncludes) throws MojoExecutionException {
File baseDir = project.getBasedir();
List<String> nonMatchingIncludes = new ArrayList<>();
List<String> ignoreList = Arrays.asList(ignoredIncludes);
if (includePatterns == null || includePatterns.isEmpty()) {
String message = new File(baseDir, "build.properties").getAbsolutePath() + ": " + buildPropertiesKey
+ " value(s) must be specified.";
if (strict) {
throw new MojoExecutionException(message);
} else {
log.warn(message);
}
}
for (String includePattern : includePatterns) {
if (ignoreList.contains(includePattern)) {
continue;
}
if (new File(baseDir, includePattern).exists()) {
continue;
}
// it does not exist as a file nor dir. Try if it matches any files as ant pattern
DirectoryScanner scanner = new DirectoryScanner();
scanner.setIncludes(new String[] { includePattern });
scanner.setBasedir(baseDir);
scanner.scan();
if (scanner.getIncludedFiles().length == 0) {
nonMatchingIncludes.add(includePattern);
}
}
if (nonMatchingIncludes.size() > 0) {
String message = new File(baseDir, "build.properties").getAbsolutePath() + ": " + buildPropertiesKey
+ " value(s) " + nonMatchingIncludes + " do not match any files.";
if (strict) {
throw new MojoExecutionException(message);
} else {
log.warn(message);
}
}
}
}