/*******************************************************************************
* Copyright (c) 2009, 2010 Progress Software Corporation.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
******************************************************************************/
package org.fusesource.tools.messaging.cnf.actions;
import org.eclipse.core.resources.IFile;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IObjectActionDelegate;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.forms.editor.FormEditor;
import org.fusesource.tools.messaging.MessagingException;
import org.fusesource.tools.messaging.cnf.model.BaseComponent;
import org.fusesource.tools.messaging.cnf.model.BaseGroupComponent;
import org.fusesource.tools.messaging.cnf.model.DataModelManager;
import org.fusesource.tools.messaging.cnf.model.ListenerComponent;
import org.fusesource.tools.messaging.cnf.model.SenderComponent;
import org.fusesource.tools.messaging.core.IListener;
import org.fusesource.tools.messaging.core.ISender;
import org.fusesource.tools.messaging.editors.MessageEditorInput;
public class DeleteDestinationAction implements IObjectActionDelegate {
private BaseComponent activeSelection;
public void setActivePart(IAction arg0, IWorkbenchPart arg1) {
}
public void run(IAction arg0) {
try {
BaseGroupComponent baseGroupComponent = (BaseGroupComponent) activeSelection.getParent();
IFile modelFile = baseGroupComponent.getFile();
if (activeSelection instanceof SenderComponent && modelFile != null) {
deleteSender(modelFile);
} else if (activeSelection instanceof ListenerComponent && modelFile != null) {
deleteListener(modelFile);
}
} catch (MessagingException e) {
e.printStackTrace();
}
}
/**
* this method closed the editor window opened for the listener
*
* @param listener
* @param listenerComponent
*/
protected void closeEditorWindow(IListener listener, ListenerComponent listenerComponent) {
IWorkbench workbench = PlatformUI.getWorkbench();
IWorkbenchWindow[] workbenchWindows = workbench.getWorkbenchWindows();
IFile fileToOpen = ((BaseGroupComponent) listenerComponent.getParent()).getFile();
MessageEditorInput messageEditorInput = new MessageEditorInput(fileToOpen, listener);
for (IWorkbenchWindow workbenchWindow : workbenchWindows) {
IWorkbenchPage page = workbenchWindow.getActivePage();
IEditorPart findEditor = page.findEditor(messageEditorInput);
if (findEditor instanceof FormEditor) {
((FormEditor) findEditor).close(false);
break;
}
}
}
protected void deleteSender(IFile modelFile) throws MessagingException {
boolean openConfirm = MessageDialog.openConfirm(Display.getCurrent().getActiveShell(), "Confirm",
"Are you sure you want to delete the Sender?");
if (!openConfirm) {
return;
}
ISender sender = ((SenderComponent) activeSelection).getSender();
sender.stop();
DataModelManager.getInstance().removeDestination(modelFile, sender);
}
protected void deleteListener(IFile modelFile) throws MessagingException {
boolean openConfirm = MessageDialog.openConfirm(Display.getCurrent().getActiveShell(), "Confirm",
"Are you sure you want to delete the Listener?");
if (!openConfirm) {
return;
}
ListenerComponent listenerComponent = (ListenerComponent) activeSelection;
IListener listener = listenerComponent.getListener();
listener.stop();
DataModelManager.getInstance().removeDestination(modelFile, listener);
closeEditorWindow(listener, listenerComponent);
}
public void selectionChanged(IAction arg0, ISelection arg1) {
Object firstElement = ((StructuredSelection) arg1).getFirstElement();
if ((firstElement instanceof BaseComponent)) {
activeSelection = (BaseComponent) firstElement;
}
}
}