package org.freeplane.plugin.workspace.actions;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.io.IOException;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import org.freeplane.core.ui.components.UITools;
import org.freeplane.core.util.LogUtils;
import org.freeplane.core.util.TextUtils;
import org.freeplane.plugin.workspace.WorkspaceController;
import org.freeplane.plugin.workspace.components.dialog.ImportProjectDialogPanel;
import org.freeplane.plugin.workspace.io.IProjectSettingsIOHandler.LOAD_RETURN_TYPE;
import org.freeplane.plugin.workspace.model.WorkspaceModelException;
import org.freeplane.plugin.workspace.model.project.AWorkspaceProject;
public class WorkspaceImportProjectAction extends AWorkspaceAction {
private static final long serialVersionUID = 1L;
public static final String KEY = "workspace.action.project.import";
public WorkspaceImportProjectAction() {
super(KEY);
}
public void actionPerformed(ActionEvent event) {
final ImportProjectDialogPanel dialog = new ImportProjectDialogPanel();
dialog.setConfirmButton(new Component() {
private static final long serialVersionUID = 1L;
private Component confirmButton;
@Override
public void setEnabled(boolean b) {
if(confirmButton == null) {
findButton(dialog);
}
if(confirmButton != null) {
confirmButton.setEnabled(b);
}
}
private void findButton(Component dialog) {
Component parent = dialog.getParent();
while(parent != null) {
if(parent instanceof JOptionPane) {
//WORKSPACE - test: os other than windows7
for(Component comp : ((JOptionPane) parent).getComponents()) {
if(comp instanceof JPanel && ((JPanel) comp).getComponentCount() > 0 && ((JPanel) comp).getComponent(0) instanceof JButton) {
confirmButton = ((JPanel) comp).getComponent(0);
}
}
}
parent = parent.getParent();
}
}
});
int response = JOptionPane.showConfirmDialog(UITools.getFrame(), dialog, TextUtils.getText("workspace.action.node.import.project.dialog.title"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);
if(response == JOptionPane.OK_OPTION) {
AWorkspaceProject project = dialog.getProject();
if(project == null) {
return;
}
WorkspaceController.getCurrentModel().addProject(project);
try {
LOAD_RETURN_TYPE return_type = WorkspaceController.getCurrentModeExtension().getProjectLoader().loadProject(project);
if(return_type == LOAD_RETURN_TYPE.NEW_PROJECT && dialog.getProjectName() != null && dialog.getProjectName().length() > 0) {
project.getModel().changeNodeName(project.getModel().getRoot(), dialog.getProjectName());
}
} catch (IOException e) {
LogUtils.severe(e);
} catch (WorkspaceModelException e) {
LogUtils.severe(e);
}
try {
WorkspaceController.save();
}
catch (Exception e) {
}
}
}
}