package org.bndtools.headless.build.manager.api;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Set;
import org.bndtools.api.NamedPlugin;
import org.osgi.annotation.versioning.ConsumerType;
/**
* <p>
* The interface of a headless build plugin.
* </p>
* <p>
* A headless build plugin can generate files in the cnf project and all bnd projects so that they can be built using
* the corresponding headless build tooling.
* </p>
*/
@ConsumerType
public interface HeadlessBuildPlugin {
/**
* @return generic plugin information
*/
NamedPlugin getInformation();
/**
* Setup/remove files enabling headless build of a project.
*
* @param cnf
* true when the project directory is that of the cnf project
* @param projectDir
* the project directory
* @param add
* true to add/create the files, false to remove them
* @param enabledIgnorePlugins
* set with enabled version control ignore plugins
* @throws IOException
* upon error(s)
*/
@Deprecated
void setup(boolean cnf, File projectDir, boolean add, Set<String> enabledIgnorePlugins) throws IOException;
void setup(boolean cnf, File projectDir, boolean add, Set<String> enabledIgnorePlugins, List<String> warnings) throws IOException;
// Future expansion of the interface: automatic management of template files
//
// public enum HeadlessBuildFileStatus {
// NONE, UPDATE, ADD, REMOVE;
// }
//
// public interface HeadlessBuildFileInfo {
// String getBuildFile();
//
// File getFile();
//
// HeadlessBuildFileStatus getFileStatus();
// }
//
// List<HeadlessBuildFileInfo> check(boolean cnf, File projectDir) throws IOException;
//
// InputStream getBuildFile(boolean cnf, File projectDir, HeadlessBuildFileInfo fileInfo) throws IOException;
//
// void update(boolean cnf, File projectDir, List<HeadlessBuildFileInfo> fileInfos) throws IOException;
}