package org.korsakow.ide.ui.controller.action.snu;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Collection;
import org.apache.log4j.Logger;
import org.korsakow.domain.interf.IMedia;
import org.korsakow.domain.interf.IResource;
import org.korsakow.domain.interf.ISnu;
import org.korsakow.domain.mapper.input.ResourceInputMapper;
import org.korsakow.ide.Application;
import org.korsakow.ide.lang.LanguageBundle;
import org.korsakow.ide.resources.ResourceType;
import org.korsakow.ide.ui.ResourceEditor;
import org.korsakow.ide.ui.components.tree.KNode;
import org.korsakow.ide.ui.components.tree.ResourceNode;
import org.korsakow.ide.ui.resourceexplorer.ResourceTreeTable;
import org.korsakow.ide.ui.resourceexplorer.ResourceTreeTableModel;
import org.korsakow.ide.ui.resources.SnuResourceView;
import org.korsakow.ide.util.FileUtil;
public class CreateSnuAction implements ActionListener
{
private final ResourceTreeTable resourceTreeTable;
public CreateSnuAction(ResourceTreeTable resourceBrowser)
{
resourceTreeTable = resourceBrowser;
}
public void actionPerformed(ActionEvent event)
{
Application app = Application.getInstance();
ResourceTreeTableModel model = resourceTreeTable.getTreeTableModel();
Collection<? extends KNode> selectedNodes = resourceTreeTable.getSelectedNodes();
for (KNode selectedNode : selectedNodes)
{
if (selectedNode == null)
continue;
if (selectedNode instanceof ResourceNode == false)
continue;
ResourceNode resourceNode = (ResourceNode)selectedNode;
Long resourceId = resourceNode.getResourceId();
if (resourceId == null)
continue;
try {
IResource resource = ResourceInputMapper.map(resourceId);
if (resource instanceof IMedia == false)
continue;
IMedia media = (IMedia)resource;
doCreateSnuFromMedia(media);
} catch (Exception e) {
Application.getInstance().showUnhandledErrorDialog(LanguageBundle.getString("general.errors.uncaughtexception.title"), e);
}
}
}
public static void doCreateSnuFromMedia(IMedia media) throws Exception
{
Application app = Application.getInstance();
// try and find an open editor for a Snu with this media.
// if we find one, focus it and abort
Collection<ResourceEditor> openEditors = app.getOpenEditors();
for (ResourceEditor editor : openEditors)
{
IResource editingResource = app.getResourceForEditor(editor);
if (editingResource == null) {
// i suppose its reasonable that some other code might create an unattached resource editor
// but in that case it shouldnt be in the openEditors list
Logger.getLogger(CreateSnuAction.class).info("no resource for editor: " + editor.getResourceView().getResourceId(), new Exception("just-for-stacktrace"));
continue;
}
if (editingResource instanceof ISnu) {
IMedia editingMedia = ((ISnu)editingResource).getMainMedia();
if (editingMedia != null && editingMedia.getId().equals(media.getId())) {
editor.toFront();
return;
}
}
if (editingResource instanceof IMedia) {
if (editor.getResourceView() instanceof SnuResourceView) {
editor.toFront();
return;
}
}
}
ResourceEditor editor = app.editNew(ResourceType.SNU, media.getId());
SnuResourceView view = (SnuResourceView)editor.getResourceView();
SnuHelper.initView(view, FileUtil.getFilenameWithoutExtension(media.getName()), media);
}
}