package fr.adrienbrault.idea.symfony2plugin.config.doctrine;
import com.intellij.codeInsight.lookup.LookupElement;
import com.intellij.codeInsight.lookup.LookupElementBuilder;
import com.intellij.util.containers.ContainerUtil;
import fr.adrienbrault.idea.symfony2plugin.Symfony2Icons;
import fr.adrienbrault.idea.symfony2plugin.util.completion.annotations.AnnotationMethodInsertHandler;
import fr.adrienbrault.idea.symfony2plugin.util.completion.annotations.AnnotationTagInsertHandler;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
/**
* @link http://docs.doctrine-project.org/en/latest/reference/basic-mapping.html
*/
public class DoctrineStaticTypeLookupBuilder {
private InsertHandler insertHandler = InsertHandler.Yaml;
public static void fillOrmLookupElementsWithStatic(@NotNull Collection<LookupElement> lookupElements) {
List<String> strings = Arrays.asList("id", "string", "integer", "smallint", "bigint", "boolean", "decimal", "date", "time", "datetime", "text", "array", "float");
Collection<String> lookupStrings = ContainerUtil.map(lookupElements, LookupElement::getLookupString);
for (String string : strings) {
if(!lookupStrings.contains(string)) {
lookupElements.add(LookupElementBuilder.create(string).withIcon(Symfony2Icons.DOCTRINE));
}
}
}
public ArrayList<LookupElement> getNullAble() {
return ListToElements(Arrays.asList("true", "false"));
}
public ArrayList<LookupElement> getRootItems() {
return ListToElements(Arrays.asList("type", "table", "fields", "embedded", "manyToOne", "manyToMany", "oneToOne", "oneToMany", "indexes", "id", "lifecycleCallbacks", "repositoryClass", "inheritanceType", "discriminatorColumn", "uniqueConstraints"));
}
public enum InsertHandler {
Annotations, Yaml
}
public ArrayList<LookupElement> ListToElements(List<String> items) {
// @TODO: not nice here
if(this.insertHandler.equals(InsertHandler.Annotations)) {
return this.ListToAnnotationsElements(items);
}
return this.ListToYmlElements(items);
}
public ArrayList<LookupElement> ListToAnnotationsElements(List<String> items) {
ArrayList<LookupElement> lookups = new ArrayList<>();
for (String item : items) {
if(item.startsWith("@")) {
lookups.add(new DoctrineTypeLookup(item, AnnotationTagInsertHandler.getInstance()));
} else {
lookups.add(new DoctrineTypeLookup(item, AnnotationMethodInsertHandler.getInstance()));
}
}
return lookups;
}
public ArrayList<LookupElement> ListToYmlElements(List<String> items) {
ArrayList<LookupElement> lookups = new ArrayList<>();
for (String answer : items) {
lookups.add(new DoctrineTypeLookup(answer));
}
return lookups;
}
}