/******************************************************************************* * Copyright (c) 2007 Exadel, Inc. and Red Hat, Inc. * Distributed under license by Red Hat, Inc. All rights reserved. * This program is 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: * Exadel, Inc. and Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.common.model.ui.action; import org.eclipse.jdt.core.IJavaElement; import org.eclipse.jface.action.*; import org.eclipse.jface.viewers.*; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.*; import org.jboss.tools.common.model.*; import org.jboss.tools.common.model.util.EclipseResourceUtil; import org.jboss.tools.common.model.ui.ModelUIPlugin; import org.eclipse.core.resources.IResource; public abstract class AbstractModelActionDelegate implements IWorkbenchWindowActionDelegate { protected XModelObject object = null; protected IWorkbenchWindow window; public void init(IWorkbenchWindow window) { this.window = window; } public void selectionChanged(final IAction action, final ISelection selection) { Display.getDefault().asyncExec(new Runnable() { public void run() { safeSelectionChanged(action, selection); } }); } protected void safeSelectionChanged(IAction action, ISelection selection) { if(object == null && action.isEnabled()) action.setEnabled(false); XModelObject adapter = getAdapter(selection); if(adapter == null) return; object = adapter; action.setEnabled(computeEnabled()); } protected final XModelObject getAdapter(ISelection selection) { if(!(selection instanceof IStructuredSelection)) return null; Object o = ((IStructuredSelection)selection).getFirstElement(); if(o instanceof IResource) { return EclipseResourceUtil.getObjectByResource((IResource)o); } else if(o instanceof IJavaElement) { return EclipseResourceUtil.getObjectByResource(((IJavaElement)o).getJavaProject().getProject()); } return (o instanceof XModelObject) ? (XModelObject)o : null; } protected abstract boolean computeEnabled(); public void run(IAction action) { try { doRun(); } catch (XModelException e) { ModelUIPlugin.getPluginLog().logError(e); } } protected abstract void doRun() throws XModelException; public void dispose() {} }