/******************************************************************************* * 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 java.util.*; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.jface.action.*; import org.eclipse.jface.viewers.*; import org.eclipse.swt.widgets.*; import org.eclipse.ui.actions.ActionContext; import org.jboss.tools.common.meta.action.XActionList; import org.jboss.tools.common.model.XModelObject; public class ModelContributionManager extends MenuManager { ActionContext context; ISelection selection; Shell shell; XMenuInvoker invoker; public ModelContributionManager(Shell shell, XMenuInvoker invoker) { super("JBoss Tools"); this.shell = shell; this.invoker = invoker; } public void setContext(ActionContext context) { this.context = context; } public void setSelection(ISelection s) { selection = s; } protected void update(boolean force, boolean recursive) { if (isDirty() || force) { if (getMenu() != null && !getMenu().isDisposed()) { Menu menu = getMenu(); MenuItem[] is = menu.getItems(); for (int i = 0; i < is.length; i++) is[i].dispose(); XModelObject[] os = getSelectedModelObjects(); if(os.length == 0) return; XModelObject o = os[0]; if(os.length == 1) os = null; XModelObjectActionList l = new XModelObjectActionList(getActionList(o), o, os, new Object[]{o}); l.setShell(shell); l.createMenu(menu); l.removeLastSeparator(menu); } } } public XActionList getActionList(XModelObject o) { if(invoker != null) return invoker.getActionList(o); return o.getModelEntity().getActionList(); } public XModelObject[] getSelectedModelObjects() { ISelection s = context != null ? context.getSelection() : selection; if(s == null || s.isEmpty() || !(s instanceof StructuredSelection)) return new XModelObject[0]; StructuredSelection ss = (StructuredSelection)s; Iterator it = ss.iterator(); ArrayList<XModelObject> l = new ArrayList<XModelObject>(); while(it.hasNext()) { IAdaptable a = (IAdaptable)it.next(); XModelObject o = a instanceof XModelObject ? (XModelObject)a : (XModelObject)a.getAdapter(XModelObject.class); if(o != null) l.add(o); } return l.toArray(new XModelObject[0]); } }