package com.prezi.spaghetti.gradle.internal;
import com.google.common.collect.Lists;
import com.prezi.spaghetti.gradle.internal.incubating.BinaryNamingScheme;
import org.gradle.api.Nullable;
import java.util.List;
public class SpaghettiModuleNamingScheme implements BinaryNamingScheme {
private final String parentName;
private final String collapsedName;
public SpaghettiModuleNamingScheme(String parentName) {
this.parentName = parentName;
this.collapsedName = collapseMain(this.parentName);
}
private static String collapseMain(String name) {
return name.equals("main") ? "" : name;
}
@Override
public String getDescription() {
return String.format("%s binary", parentName);
}
@Override
public String getLifecycleTaskName() {
return makeName(parentName, "module");
}
@Override
public String getTaskName(@Nullable String verb) {
return getTaskName(verb, null);
}
@Override
public String getTaskName(@Nullable String verb, @Nullable String target) {
return makeName(verb, collapsedName, "module", target);
}
private static String makeName(String... words) {
StringBuilder builder = new StringBuilder();
for (String word : words) {
if (word == null || word.length() == 0) {
continue;
}
if (builder.length() == 0) {
appendUncapitalized(builder, word);
} else {
appendCapitalized(builder, word);
}
}
return builder.toString();
}
private static void appendCapitalized(StringBuilder builder, String word) {
builder.append(Character.toTitleCase(word.charAt(0))).append(word.substring(1));
}
private static void appendUncapitalized(StringBuilder builder, String word) {
builder.append(Character.toLowerCase(word.charAt(0))).append(word.substring(1));
}
@Override
public String getOutputDirectoryBase() {
return parentName;
}
@Override
public List<String> getVariantDimensions() {
return Lists.newArrayList();
}
}