package com.prezi.spaghetti.gradle.internal; import com.google.common.base.Function; import com.google.common.collect.Iterables; import com.prezi.spaghetti.gradle.internal.incubating.BinaryContainer; import com.prezi.spaghetti.gradle.internal.incubating.BinaryInternal; import com.prezi.spaghetti.gradle.internal.incubating.DefaultBinaryContainer; import com.prezi.spaghetti.gradle.internal.incubating.DefaultProjectSourceSet; import com.prezi.spaghetti.gradle.internal.incubating.ProjectSourceSet; import java.io.File; import java.util.ArrayList; import java.util.Collection; import org.gradle.api.Action; import org.gradle.api.Project; import org.gradle.api.Task; import org.gradle.api.artifacts.Configuration; import org.gradle.internal.reflect.Instantiator; public class SpaghettiExtension { private final ProjectSourceSet sources; private final BinaryContainer binaries; private String language; private Configuration configuration; private Configuration testConfiguration; private Configuration obfuscatedConfiguration; private Configuration testObfuscatedConfiguration; private String sourceBaseUrl; private boolean publishTestArtifacts; private Collection<Function<Void, Iterable<File>>> definitionSearchSourceDirProviders; public SpaghettiExtension(final Project project, Instantiator instantiator, Configuration defaultConfiguration, Configuration defaultTestConfiguration, Configuration defaultObfuscatedConfiguration, Configuration defaultTestObfuscatedConfiguration) { this.sources = instantiator.newInstance(DefaultProjectSourceSet.class, instantiator); this.binaries = instantiator.newInstance(DefaultBinaryContainer.class, instantiator); this.configuration = defaultConfiguration; this.obfuscatedConfiguration = defaultObfuscatedConfiguration; this.testConfiguration = defaultTestConfiguration; this.testObfuscatedConfiguration = defaultTestObfuscatedConfiguration; this.definitionSearchSourceDirProviders = new ArrayList<Function<Void, Iterable<File>>>(); binaries.withType(BinaryInternal.class).all(new Action<BinaryInternal>() { public void execute(BinaryInternal binary) { Task binaryLifecycleTask = project.task(binary.getNamingScheme().getLifecycleTaskName()); binaryLifecycleTask.setGroup("build"); binaryLifecycleTask.setDescription(String.format("Assembles %s.", binary)); binary.setBuildTask(binaryLifecycleTask); } }); } public ProjectSourceSet getSources() { return sources; } public void sources(Action<ProjectSourceSet> action) { action.execute(sources); } public BinaryContainer getBinaries() { return binaries; } public void binaries(Action<BinaryContainer> action) { action.execute(binaries); } public String getLanguage() { return language; } public void setLanguage(String language) { this.language = language; } public void language(String language) { setLanguage(language); } public Configuration getConfiguration() { return configuration; } public void setConfiguration(Configuration configuration) { this.configuration = configuration; } public void configuration(Configuration configuration) { setConfiguration(configuration); } public Configuration getTestConfiguration() { return testConfiguration; } public void setTestConfiguration(Configuration testConfiguration) { this.testConfiguration = testConfiguration; } public void testConfiguration(Configuration testConfiguration) { setTestConfiguration(testConfiguration); } public Configuration getObfuscatedConfiguration() { return obfuscatedConfiguration; } public void setObfuscatedConfiguration(Configuration obfuscatedConfiguration) { this.obfuscatedConfiguration = obfuscatedConfiguration; } public void obfuscatedConfiguration(Configuration obfuscatedConfiguration) { setObfuscatedConfiguration(obfuscatedConfiguration); } public Configuration getTestObfuscatedConfiguration() { return testObfuscatedConfiguration; } public void setTestObfuscatedConfiguration(Configuration testObfuscatedConfiguration) { this.testObfuscatedConfiguration = testObfuscatedConfiguration; } public void testObfuscatedConfiguration(Configuration testObfuscatedConfiguration) { setTestObfuscatedConfiguration(testObfuscatedConfiguration); } public String getSourceBaseUrl() { return sourceBaseUrl; } public void setSourceBaseUrl(String sourceBaseUrl) { this.sourceBaseUrl = sourceBaseUrl; } @SuppressWarnings("UnusedDeclaration") public void sourceBaseUrl(String source) { setSourceBaseUrl(source); } public boolean getPublishTestArtifacts() { return publishTestArtifacts; } public void setPublishTestArtifacts(boolean publishTestArtifacts) { this.publishTestArtifacts = publishTestArtifacts; } public void publishTestArtifacts(boolean publishTestArtifacts) { setPublishTestArtifacts(publishTestArtifacts); } public void registerDefinitionSearchSourceDirs(Function<Void, Iterable<File>> callback) { definitionSearchSourceDirProviders.add(callback); } public Collection<Iterable<File>> getDefinitionSearchSourceDirs() { Collection<Iterable<File>> iterables = new ArrayList<Iterable<File>>(); for (Function<Void, Iterable<File>> callback : definitionSearchSourceDirProviders) { iterables.add(callback.apply(null)); } return iterables; } }