package fr.adrienbrault.idea.symfony2plugin.doctrine.metadata.driver;
import com.intellij.psi.PsiFile;
import fr.adrienbrault.idea.symfony2plugin.doctrine.EntityHelper;
import fr.adrienbrault.idea.symfony2plugin.doctrine.dict.DoctrineModelField;
import fr.adrienbrault.idea.symfony2plugin.doctrine.metadata.dict.DoctrineMetadataModel;
import fr.adrienbrault.idea.symfony2plugin.util.yaml.YamlHelper;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.yaml.psi.YAMLFile;
import org.jetbrains.yaml.psi.YAMLKeyValue;
import java.util.ArrayList;
import java.util.Collection;
/**
* @author Daniel Espendiller <daniel@espendiller.net>
*/
public class DoctrineYamlMappingDriver implements DoctrineMappingDriverInterface {
@Nullable
public DoctrineMetadataModel getMetadata(@NotNull DoctrineMappingDriverArguments args) {
PsiFile psiFile = args.getPsiFile();
if(!(psiFile instanceof YAMLFile)) {
return null;
}
Collection<DoctrineModelField> fields = new ArrayList<>();
DoctrineMetadataModel model = new DoctrineMetadataModel(fields);
for (YAMLKeyValue yamlKeyValue : YamlHelper.getTopLevelKeyValues((YAMLFile) psiFile)) {
// first line is class name; check of we are right
if(args.isEqualClass(YamlHelper.getYamlKeyName(yamlKeyValue))) {
model.setTable(YamlHelper.getYamlKeyValueAsString(yamlKeyValue, "table"));
fields.addAll(EntityHelper.getModelFieldsSet(yamlKeyValue));
}
}
if(model.isEmpty()) {
return null;
}
return model;
}
}