package org.korsakow.ide.ui.controller.action;
import org.dsrg.soenea.domain.MapperException;
import org.dsrg.soenea.domain.command.CommandException;
import org.dsrg.soenea.uow.UoW;
import org.korsakow.domain.CommandExecutor;
import org.korsakow.domain.command.RenameResourceCommand;
import org.korsakow.domain.command.Request;
import org.korsakow.domain.command.Response;
import org.korsakow.domain.interf.IResource;
import org.korsakow.domain.mapper.input.ResourceInputMapper;
import org.korsakow.ide.Application;
import org.korsakow.ide.lang.LanguageBundle;
import org.korsakow.ide.ui.resourceexplorer.ResourceTreeTable;
public class RenameCommitAction extends AbstractAction
{
private final ResourceTreeTable treeTable;
private final long id;
private final String newName;
public RenameCommitAction(ResourceTreeTable treeTable, long id, String newName)
{
this.treeTable = treeTable;
this.id = id;
this.newName = newName;
}
@Override
public boolean isUndoable()
{
return true;
}
@Override // UndoableEdit
public String getUndoPresentationName()
{
return String.format("Rename %s", newName);
}
@Override
public void undo()
{
try {
super.undo();
UoW.newCurrent();
Application.getInstance().notifyResourceModified(ResourceInputMapper.map(id));
} catch (MapperException e) {
Application.getInstance().showUnhandledErrorDialog(LanguageBundle.getString("general.errors.uncaughtexception.title"), e);
}
}
@Override
public void performAction()
{
try {
renameMedia(ResourceInputMapper.map(id), newName);
} catch (CommandException e) {
Application.getInstance().showUnhandledErrorDialog(LanguageBundle.getString("general.errors.uncaughtexception.title"), e);
} catch (MapperException e) {
Application.getInstance().showUnhandledErrorDialog(LanguageBundle.getString("general.errors.uncaughtexception.title"), e);
} catch (InterruptedException e) {
Application.getInstance().showUnhandledErrorDialog(LanguageBundle.getString("general.errors.uncaughtexception.title"), e);
} catch (Exception e) {
Application.getInstance().showUnhandledErrorDialog(LanguageBundle.getString("general.errors.uncaughtexception.title"), e);
}
treeTable.repaint();
}
// @Override
// public void editingCanceled(ChangeEvent e)
// {
// }
// @Override
// public void editingStopped(ChangeEvent event)
// {
// String name = treeTable.getDefaultEditor(TreeTableModel.class).getCellEditorValue().toString();
// // TreeTable.getEditingNode, the obvious choice, returns null at this point because swing is terribly designed
// KNode editingNode = ((ResourceTreeTableCellEditor)treeTable.getDefaultEditor(TreeTableModel.class)).getEditingNode();
//
// if (editingNode instanceof ResourceNode) {
// try {
// renameMedia(ResourceInputMapper.map(((ResourceNode)editingNode).getResourceId()), name);
// } catch (CommandException e) {
// Application.getInstance().showUnhandledErrorDialog(LanguageBundle.getString("general.errors.uncaughtexception.title"), e);
// } catch (MapperException e) {
// Application.getInstance().showUnhandledErrorDialog(LanguageBundle.getString("general.errors.uncaughtexception.title"), e);
// } catch (InterruptedException e) {
// Application.getInstance().showUnhandledErrorDialog(LanguageBundle.getString("general.errors.uncaughtexception.title"), e);
// } catch (Exception e) {
// Application.getInstance().showUnhandledErrorDialog(LanguageBundle.getString("general.errors.uncaughtexception.title"), e);
// }
// treeTable.repaint();
// }
// }
private static void renameMedia(IResource resource, String newName) throws CommandException, InterruptedException
{
Request request = new Request();
request.set(RenameResourceCommand.ID, resource.getId());
request.set(RenameResourceCommand.NAME, newName);
Response response = new Response();
CommandExecutor.executeCommand(RenameResourceCommand.class, request, response);
Application.getInstance().notifyResourceModified(((IResource)response.get(RenameResourceCommand.RESOURCE)));
}
}