package com.razorfish.platforms.intellivault.actions;
import com.razorfish.platforms.intellivault.config.IntelliVaultCRXRepository;
import com.razorfish.platforms.intellivault.config.IntelliVaultOperationConfig;
import com.razorfish.platforms.intellivault.exceptions.IntelliVaultException;
import com.razorfish.platforms.intellivault.services.IntelliVaultService;
import com.intellij.execution.filters.TextConsoleBuilderFactory;
import com.intellij.execution.ui.ConsoleView;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.progress.ProgressIndicator;
import com.intellij.openapi.progress.Task;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.Messages;
import com.intellij.openapi.wm.ToolWindow;
import com.intellij.openapi.wm.ToolWindowAnchor;
import com.intellij.openapi.wm.ToolWindowManager;
import com.intellij.ui.content.Content;
import com.intellij.ui.content.ContentFactory;
import com.razorfish.platforms.intellivault.config.IntelliVaultOperationConfig;
import com.razorfish.platforms.intellivault.exceptions.IntelliVaultException;
import com.razorfish.platforms.intellivault.services.IntelliVaultService;
import org.jetbrains.annotations.NotNull;
/**
* Created with IntelliJ IDEA.
* User: sean.steimer
* Date: 3/13/13
* Time: 8:44 PM
* To change this template use File | Settings | File Templates.
*/
public class IntelliVaultImportAction extends IntelliVaultAbstractAction {
@Override
protected Task getTask(VaultOperationDirectory vaultOpDir, IntelliVaultOperationConfig conf,
IntelliVaultCRXRepository repository, Project project) {
return new IntelliVaultImportTask(vaultOpDir, conf, repository, project);
}
protected String getDialogMessage() {
return "Import to %s from %s?";
}
/**
* The Task that executes the Import in the Background.
*/
private class IntelliVaultImportTask extends Task.Backgroundable {
private VaultOperationDirectory vaultOpDir;
private IntelliVaultOperationConfig conf;
private IntelliVaultCRXRepository repository;
private ConsoleView console;
/**
* Construct the Instance to be executed.
*
* @param vaultOpDir the Vault Operation Directory
* @param conf the Vault Configuration Options
* @param repository the CRX Repository to import into
* @param project the IntelliJ Project
*/
public IntelliVaultImportTask(VaultOperationDirectory vaultOpDir, IntelliVaultOperationConfig conf,
IntelliVaultCRXRepository repository, Project project) {
super(project, "Running IntelliVault Import Action");
this.conf = conf;
this.repository = repository;
this.vaultOpDir = vaultOpDir;
TextConsoleBuilderFactory factory = TextConsoleBuilderFactory.getInstance();
this.console = factory.createBuilder(project).getConsole();
ToolWindowManager toolWindowManager = ToolWindowManager.getInstance(project);
String twId = "IntelliVault";
ToolWindow toolWindow = toolWindowManager.getToolWindow(twId);
if (toolWindow == null) {
toolWindow = toolWindowManager.registerToolWindow(twId, true, ToolWindowAnchor.BOTTOM);
}
ContentFactory contentFactory = ContentFactory.SERVICE.getInstance();
Content content = contentFactory.createContent(console.getComponent(), "", false);
toolWindow.getContentManager().addContent(content);
toolWindow.getContentManager().setSelectedContent(content);
//TODO toolWindow.setIcon();
toolWindow.show(new Runnable() {
@Override
public void run() {
//To change body of implemented methods use File | Settings | File Templates.
}
});
}
@Override
public void run(@NotNull ProgressIndicator progressIndicator) {
IntelliVaultService vaultService = getVaultService();
try {
vaultService.vaultImport(repository, conf, vaultOpDir, progressIndicator, console);
if (conf.showMessageDialogs()) {
ApplicationManager.getApplication().invokeLater(new Runnable() {
@Override
public void run() {
Messages.showInfoMessage(String.format("Successfully Imported to %s.",
new Object[]{repository.getRepoUrl() + vaultOpDir.getJcrPath()}),
"IntelliVault Import Completed Successfully!"
);
}
});
}
}
catch (final IntelliVaultException e) {
ApplicationManager.getApplication().invokeLater(new Runnable() {
@Override
public void run() {
Messages.showErrorDialog(e.getLocalizedMessage(), "IntelliVault Error!");
}
});
}
}
}
}