package org.jetbrains.plugins.cucumber.inspections.model;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiDirectory;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.plugins.cucumber.BDDFrameworkType;
import javax.swing.*;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class CreateStepDefinitionFileModel {
private String myFileName;
private final Map<BDDFrameworkType, PsiDirectory> myFileTypeToDefaultDirectoryMap;
DefaultComboBoxModel myFileTypeModel;
private PsiDirectory myDirectory;
private Project myProject;
public CreateStepDefinitionFileModel(@NotNull final Project project, @NotNull final Map<BDDFrameworkType, String> fileTypeToDefaultNameMap, @NotNull final Map<BDDFrameworkType, PsiDirectory> fileTypeToDefaultDirectoryMap) {
myProject = project;
List<FileTypeComboboxItem> myFileTypeList = new ArrayList<>();
for (Map.Entry<BDDFrameworkType, String> entry : fileTypeToDefaultNameMap.entrySet()) {
if (myFileName == null) {
myFileName = entry.getValue();
}
FileTypeComboboxItem item = new FileTypeComboboxItem(entry.getKey(), entry.getValue());
myFileTypeList.add(item);
}
myFileTypeToDefaultDirectoryMap = fileTypeToDefaultDirectoryMap;
myFileTypeModel = new DefaultComboBoxModel(myFileTypeList.toArray());
myDirectory = fileTypeToDefaultDirectoryMap.get(getSelectedFileType());
}
public String getFilePath() {
final StringBuilder result = new StringBuilder();
result.append(getDirectory().getVirtualFile().getPath()).append(File.separator).append(getFileNameWithExtension());
return result.toString();
}
public String getFileNameWithExtension() {
final StringBuilder result = new StringBuilder();
result.append(myFileName)
.append('.').append(getSelectedFileType().getFileType().getDefaultExtension());
return result.toString();
}
public String getFileName() {
return myFileName;
}
public void setFileName(@NotNull final String fileName) {
myFileName = fileName;
}
public PsiDirectory getDefaultDirectory() {
return myFileTypeToDefaultDirectoryMap.get(getSelectedFileType());
}
public PsiDirectory getDirectory() {
return myDirectory;
}
public void setDirectory(@Nullable final PsiDirectory psiDirectory) {
myDirectory = psiDirectory;
}
public BDDFrameworkType getSelectedFileType() {
final FileTypeComboboxItem selectedItem = (FileTypeComboboxItem) myFileTypeModel.getSelectedItem();
return selectedItem != null ? selectedItem.getFrameworkType() : null;
}
public DefaultComboBoxModel getFileTypeModel() {
return myFileTypeModel;
}
public Project getProject() {
return myProject;
}
}