package fr.opensagres.mongodb.ide.ui.actions; 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 fr.opensagres.mongodb.ide.core.model.Collection; import fr.opensagres.mongodb.ide.core.model.Database; import fr.opensagres.mongodb.ide.core.model.Server; import fr.opensagres.mongodb.ide.core.model.Users; public abstract class AbstractTreeNodeAction extends SelectionProviderAction { protected Shell shell; public AbstractTreeNodeAction(ISelectionProvider selectionProvider, String text) { this(null, selectionProvider, text); } public AbstractTreeNodeAction(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 abstract boolean accept(Server server); /** * Perform action on this server. * * @param database * a database */ public abstract void perform(Server server); /** * Return true if this database can currently be acted on. * * @return boolean * @param database * a database */ public abstract boolean accept(Database database); /** * Perform action on this database. * * @param database * a database */ public abstract void perform(Database database); /** * Return true if this collection can currently be acted on. * * @return boolean * @param collection * a collection */ public abstract boolean accept(Collection collection); /** * Perform action on this collection. * * @param database * a database */ public abstract void perform(Collection collection); /** * Return true if this users can currently be acted on. * * @return boolean * @param users * a users */ public abstract boolean accept(Users users); /** * Perform action on this users. * * @param database * a database */ public abstract void perform(Users users); public void run() { Iterator iterator = getStructuredSelection().iterator(); if (!iterator.hasNext()) return; Object obj = iterator.next(); if (obj instanceof Server) { Server server = (Server) obj; if (accept(server)) { perform(server); } selectionChanged(getStructuredSelection()); } else if (obj instanceof Database) { Database database = (Database) obj; if (accept(database)) { perform(database); } selectionChanged(getStructuredSelection()); } else if (obj instanceof Collection) { Collection collection = (Collection) obj; if (accept(collection)) { perform(collection); } selectionChanged(getStructuredSelection()); } else if (obj instanceof Users) { Users users = (Users) obj; if (accept(users)) { perform(users); } 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 Server) { Server server = (Server) obj; if (accept(server)) { enabled = true; } } else if (obj instanceof Database) { Database database = (Database) obj; if (accept(database)) { enabled = true; } } else if (obj instanceof Collection) { Collection collection = (Collection) obj; if (accept(collection)) { enabled = true; } } else if (obj instanceof Users) { Users users = (Users) obj; if (accept(users)) { enabled = true; } } else { setEnabled(false); return; } } setEnabled(enabled); } }