package jetbrains.mps.ide.newModuleDialogs;
/*Generated by MPS */
import jetbrains.mps.project.AbstractModule;
import com.intellij.openapi.ui.DialogWrapper;
import jetbrains.mps.ide.ui.dialogs.modules.AbstractModuleCreationSettings;
import jetbrains.mps.project.MPSProject;
import org.jetbrains.annotations.Nullable;
import com.intellij.project.ProjectKt;
import javax.swing.JComponent;
import jetbrains.mps.ide.newSolutionDialog.NewModuleUtil;
import jetbrains.mps.baseLanguage.closures.runtime._FunctionTypes;
public abstract class AbstractModuleCreationDialog<R extends AbstractModule> extends DialogWrapper {
protected R myResult;
protected AbstractModuleCreationSettings mySettings;
protected final MPSProject myProject;
protected String myError = null;
protected String myVirtualFolder;
public AbstractModuleCreationDialog(MPSProject project, @Nullable String virtualFolder) {
super(project.getProject());
setOKButtonText("&OK");
setCancelButtonText("Ca&ncel");
myProject = project;
myVirtualFolder = virtualFolder;
}
protected String getProjectPath() {
// looks like magic
return (myProject != null ? ((!(ProjectKt.isDirectoryBased(myProject.getProject())) ? myProject.getProjectFile().getParentFile().getAbsolutePath() : myProject.getProjectFile().getAbsolutePath())) : null);
}
@Nullable
@Override
public JComponent getPreferredFocusedComponent() {
return mySettings.getPreferredFocusedComponent();
}
@Override
protected void doOKAction() {
if (!(check())) {
return;
}
super.doOKAction();
NewModuleUtil.runModuleCreation(myProject, new _FunctionTypes._void_P0_E0() {
public void invoke() {
runCreation();
}
});
}
public R getModule() {
return myResult;
}
@Nullable
public String getError() {
return myError;
}
protected boolean check() {
myError = NewModuleUtil.check(myProject.getRepository(), getExtension(), mySettings.getModuleName(), mySettings.getModuleLocation());
setErrorText(myError);
return myError == null;
}
@Nullable
public JComponent createCenterPanel() {
if (mySettings == null) {
mySettings = createSettingsInstance();
mySettings.setListener(new AbstractModuleCreationSettings.ModuleCreationSettingsListener() {
@Override
public void changed() {
AbstractModuleCreationDialog.this.check();
}
});
}
return mySettings;
}
protected abstract String getExtension();
protected abstract AbstractModuleCreationSettings createSettingsInstance();
protected abstract void runCreation();
}