package org.marketcetera.photon.actions;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.widgets.Event;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.actions.ActionDelegate;
import org.marketcetera.core.CoreException;
import org.marketcetera.messagehistory.ReportHolder;
import org.marketcetera.photon.Messages;
import org.marketcetera.photon.PhotonPlugin;
import org.marketcetera.photon.views.fixmessagedetail.FIXMessageDetailView;
import org.marketcetera.photon.views.fixmessagedetail.IFIXMessageDetail;
import org.marketcetera.util.log.I18NBoundMessage1P;
import quickfix.Message;
public class ViewFIXMessageDetailActionDelegate
extends ActionDelegate
implements Messages
{
public final static String ID = "org.marketcetera.photon.actions.ViewFIXMessageDetailActionDelegate"; //$NON-NLS-1$
private ISelection currentSelection;
public ViewFIXMessageDetailActionDelegate() {
}
private Message getMessageFromSelection(ISelection selection) {
Message fixMessage = null;
if (selection instanceof IStructuredSelection) {
IStructuredSelection structuredSelection = (IStructuredSelection) selection;
if (structuredSelection.size() == 1) {
Object firstElement = structuredSelection.getFirstElement();
if (firstElement instanceof Message) {
fixMessage = (Message) firstElement;
} else if (firstElement instanceof ReportHolder) {
fixMessage = ((ReportHolder) firstElement).getMessage();
}
}
}
return fixMessage;
}
@Override
public void selectionChanged(IAction action, ISelection selection) {
boolean shouldEnable = false;
currentSelection = selection;
Message fixMessage = getMessageFromSelection(selection);
if (fixMessage != null) {
shouldEnable = true;
}
action.setEnabled(shouldEnable);
}
@Override
public void runWithEvent(IAction action, Event event) {
Message fixMessage = getMessageFromSelection(currentSelection);
if (fixMessage != null) {
try {
IWorkbenchWindow activeWindow = PlatformUI.getWorkbench()
.getActiveWorkbenchWindow();
IWorkbenchPage targetPage = activeWindow.getActivePage();
if (targetPage == null) {
throw new CoreException(NULL_TARGET_PAGE);
}
IViewPart viewPart = targetPage
.showView(FIXMessageDetailView.ID);
if (viewPart instanceof IFIXMessageDetail) {
IFIXMessageDetail messageDetailView = (IFIXMessageDetail) viewPart;
messageDetailView.showMessage(fixMessage);
} else {
throw new CoreException(new I18NBoundMessage1P(VIEW_DOES_NOT_IMPLEMENT, IFIXMessageDetail.class));
}
} catch (Exception anyException) {
PhotonPlugin.getMainConsoleLogger().error(FAILED_TO_OPEN_VIEW.getText(FIXMessageDetailView.ID),
anyException);
}
}
}
}