package org.elixir_lang.module;
import com.intellij.compiler.CompilerWorkspaceConfiguration;
import com.intellij.ide.util.projectWizard.*;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleType;
import com.intellij.openapi.options.ConfigurationException;
import com.intellij.openapi.projectRoots.SdkTypeId;
import com.intellij.openapi.roots.ModifiableRootModel;
import com.intellij.openapi.util.Condition;
import com.intellij.openapi.util.Pair;
import org.elixir_lang.icons.ElixirIcons;
import org.elixir_lang.sdk.ElixirSdkType;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.util.Collections;
/**
* Created by zyuyou on 2015/5/26.
*
*/
public class ElixirModuleBuilder extends JavaModuleBuilder implements ModuleBuilderListener {
@Override
public void setupRootModel(ModifiableRootModel rootModel) throws ConfigurationException {
addListener(this);
super.setupRootModel(rootModel);
}
@Override
public ModuleType getModuleType() {
return ElixirModuleType.getInstance();
}
@Override
public boolean isSuitableSdkType(SdkTypeId sdkType) {
return sdkType == ElixirSdkType.getInstance();
}
@Override
public Icon getNodeIcon() {
return ElixirIcons.FILE;
}
@Override
public void moduleCreated(@NotNull Module module) {
CompilerWorkspaceConfiguration.getInstance(module.getProject()).CLEAR_OUTPUT_DIRECTORY = false;
}
@Nullable
@Override
public ModuleWizardStep modifySettingsStep(@NotNull SettingsStep settingsStep) {
return new SdkSettingsStep(settingsStep, this, new Condition<SdkTypeId>() {
@Override
public boolean value(SdkTypeId sdkTypeId) {
return isSuitableSdkType(sdkTypeId);
}
}){
@Override
public void updateDataModel(){
super.updateDataModel();
final String path = getContentEntryPath();
if(path != null){
setSourcePaths(Collections.singletonList(Pair.create(path + "/lib", "")));
}
}
};
}
}