blob: 06fd708ee619906ea7b1dcd3f329b383bf83d3fc [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2003, 2011 IBM Corporation and others.
* 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
*
* Contributors:
* IBM Corporation - Initial API and implementation
*******************************************************************************/
package org.eclipse.wst.server.ui.internal.view.servers;
import java.util.Iterator;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.actions.SelectionProviderAction;
import org.eclipse.wst.server.core.IServer;
/**
* An abstract class for an action on a server.
*/
public abstract class AbstractServerAction extends SelectionProviderAction {
protected Shell shell;
public AbstractServerAction(ISelectionProvider selectionProvider, String text) {
this(null, selectionProvider, text);
}
public AbstractServerAction(Shell shell, ISelectionProvider selectionProvider, String text) {
super(selectionProvider, text);
this.shell = shell;
setEnabled(false);
}
/**
* Return true if this server can currently be acted on.
*
* @return boolean
* @param server a server
*/
public boolean accept(IServer server) {
return true;
}
/**
* Perform action on this server.
*
* @param server a server
*/
public abstract void perform(IServer server);
public void run() {
Iterator iterator = getStructuredSelection().iterator();
if (!iterator.hasNext())
return;
Object obj = iterator.next();
if (obj instanceof IServer) {
IServer server = (IServer) obj;
if (accept(server))
perform(server);
selectionChanged(getStructuredSelection());
}
}
/**
* Update the enabled state.
*
* @param sel a selection
*/
public void selectionChanged(IStructuredSelection sel) {
if (sel.isEmpty()) {
setEnabled(false);
return;
}
boolean enabled = false;
Iterator iterator = sel.iterator();
while (iterator.hasNext()) {
Object obj = iterator.next();
if (obj instanceof IServer) {
IServer server = (IServer) obj;
if (accept(server))
enabled = true;
} else {
setEnabled(false);
return;
}
}
setEnabled(enabled);
}
}