package org.netbeans.gradle.project.tasks.vars;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.jtrim.property.PropertySource;
import org.netbeans.gradle.project.NbGradleProject;
import org.netbeans.gradle.project.api.task.GradleTaskVariableQuery;
import org.netbeans.gradle.project.api.task.TaskVariable;
import org.netbeans.gradle.project.api.task.TaskVariableMap;
import org.netbeans.gradle.project.properties.standard.CustomVariables;
import org.openide.util.Lookup;
public final class TaskVariableMaps {
public static TaskVariableMap getGlobalVariableMap() {
return EnvTaskVariableMap.DEFAULT;
}
public static TaskVariableMap createProjectActionVariableMap(NbGradleProject project, Lookup actionContext) {
final List<TaskVariableMap> maps = new ArrayList<>();
addAsTaskVariableMap(project.getCommonProperties().customVariables().getActiveSource(), maps);
Collection<? extends GradleTaskVariableQuery> taskVariables
= project.getExtensions().lookupAllExtensionObjs(GradleTaskVariableQuery.class);
for (GradleTaskVariableQuery query: taskVariables) {
maps.add(query.getVariableMap(actionContext));
}
// Allow extensions to redefine variables.
maps.add(StandardTaskVariable.createVarReplaceMap(project, actionContext));
maps.add(getGlobalVariableMap());
return new CombinedTaskVariableMap(maps);
}
private static TaskVariableMap asTaskVariableMap(PropertySource<? extends CustomVariables> varsProperty) {
final CustomVariables vars = varsProperty.getValue();
if (vars == null || vars.isEmpty()) {
return null;
}
return new TaskVariableMap() {
@Override
public String tryGetValueForVariable(TaskVariable variable) {
return vars.tryGetValue(variable.getVariableName());
}
};
}
private static void addAsTaskVariableMap(
PropertySource<? extends CustomVariables> varsProperty,
List<? super TaskVariableMap> result) {
TaskVariableMap vars = asTaskVariableMap(varsProperty);
if (vars != null) {
result.add(vars);
}
}
private TaskVariableMaps() {
throw new AssertionError();
}
}