package org.fandev.module.wizard;
import com.intellij.packaging.artifacts.ModifiableArtifactModel;
import com.intellij.projectImport.ProjectImportBuilder;
import com.intellij.openapi.options.ConfigurationException;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.module.ModifiableModuleModel;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleManager;
import com.intellij.openapi.roots.ui.configuration.ModulesProvider;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.vfs.VirtualFileManager;
import com.intellij.openapi.projectRoots.Sdk;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ModalityState;
import com.intellij.openapi.ui.Messages;
import org.fandev.module.FanProject;
import org.fandev.module.FanModuleType;
import org.fandev.module.pod.PodModel;
import org.fandev.module.pod.PodFileParser;
import org.fandev.icons.Icons;
import org.fandev.utils.FanUtil;
import org.fandev.utils.TextUtil;
import org.fandev.utils.VirtualFileUtil;
import org.fandev.lang.fan.FanBundle;
import javax.swing.*;
import java.util.List;
import java.util.Arrays;
import java.util.ArrayList;
/**
* Date: Sep 20, 2009
* Time: 11:13:14 PM
*
* @author Dror Bereznitsky
*/
public class FanProjectBuilder extends ProjectImportBuilder<FanProject> {
private static final Logger logger = Logger.getInstance("Project import");
private String buildScriptPath;
private Sdk sdk;
private List<FanProject> list = Arrays.asList(new FanProject());
public String getName() {
return "Fantom";
}
public Icon getIcon() {
return Icons.FAN_16;
}
public List<FanProject> getList() {
return list;
}
public boolean isMarked(FanProject fanProject) {
return false; //To change body of implemented methods use File | Settings | File Templates.
}
public void setList(List<FanProject> fanProjects) throws ConfigurationException {
list.clear();
list.addAll(fanProjects);
}
public void setOpenProjectSettingsAfter(boolean b) {
//To change body of implemented methods use File | Settings | File Templates.
}
@Override
public List<Module> commit(final Project project, final ModifiableModuleModel model, final ModulesProvider provider,
final ModifiableArtifactModel model2) {
final List<Module> modules = new ArrayList<Module>();
if (!TextUtil.isEmpty(buildScriptPath)) {
final VirtualFile buildScriptFile = VirtualFileUtil.findFileByLocalPath(buildScriptPath);
if (buildScriptFile != null) {
final FanModuleBuilder myBuilder = FanModuleType.getInstance().createModuleBuilder();
final PodModel podModel = PodFileParser.parse(buildScriptFile, sdk);
if (podModel != null) {
final String name = podModel.getName();
ApplicationManager.getApplication().runWriteAction(new Runnable() {
public void run() {
try {
myBuilder.setModulePod(podModel);
myBuilder.setSdk(sdk);
myBuilder.setName(name);
myBuilder.setContentEntryPath(project.getBaseDir().getPath());
final Module module = myBuilder.commitModule(project, model);
if (module != null) {
modules.add(module);
}
} catch (Exception e) {
logger.error("Could not import module: " + name, e);
Messages.showErrorDialog(FanBundle.message("project.import.fan.error.adding.modules", new Object[]{name}), getTitle());
}
}
});
} else {
logger.error("Could not import module");
Messages.showErrorDialog(FanBundle.message("project.import.fan.error.adding.modules", new Object[]{"unknown"}), getTitle());
}
}
}
return modules;
}
public void setBuildScriptPath(final String buildScriptPath) {
this.buildScriptPath = buildScriptPath;
}
public void setSdk(final Sdk sdk) {
this.sdk = sdk;
}
}