/** * Copyright 2005 Open Cloud Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.mobicents.eclipslee.servicecreation.popup.actions; import org.eclipse.core.resources.IFile; import org.eclipse.jface.action.IAction; import org.eclipse.jface.action.IMenuCreator; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.swt.SWT; import org.eclipse.swt.events.MenuAdapter; import org.eclipse.swt.events.MenuEvent; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.ui.IObjectActionDelegate; import org.eclipse.ui.IWorkbenchPart; import org.mobicents.eclipslee.servicecreation.ServiceCreationPlugin; import org.mobicents.eclipslee.util.slee.xml.components.Service; import org.mobicents.eclipslee.xml.ServiceXML; /** * @author cath */ public class ServiceXMLSubmenu implements IObjectActionDelegate, IMenuCreator { public ServiceXMLSubmenu() { super(); } public void run(IAction action) { } public void setActivePart(IAction action, IWorkbenchPart targetPart) { } public void dispose() { } public void selectionChanged(IAction action, ISelection selection) { if (selection instanceof IStructuredSelection) { fFillMenu = true; if (action != null) { if (fDelegateAction != action) { fDelegateAction = action; fDelegateAction.setMenuCreator(this); } this.selection = selection; action.setEnabled(true); return; } return; } action.setEnabled(false); } public Menu getMenu(Control control) { return null; } // NOP public Menu getMenu(Menu parent) { Menu menu = new Menu(parent); menu.addMenuListener(new MenuAdapter() { public void menuShown(MenuEvent e) { if (fFillMenu) { Menu m = (Menu) e.widget; MenuItem items[] = m.getItems(); for (int i= 0; i < items.length; i++) items[i].dispose(); fillMenu(m); fFillMenu = false; } } }); return menu; } private void fillMenu(Menu menu) { createServiceMenus(menu); } private void createServiceMenus(Menu parent) { if (selection == null && selection.isEmpty()) { return; } if (!(selection instanceof IStructuredSelection)) { return; } IStructuredSelection ssel = (IStructuredSelection) selection; if (ssel.size() > 1) { return; } // Get the first (and only) item in the selection. Object obj = ssel.getFirstElement(); // .java file selected. if (obj instanceof IFile) { try { ServiceXML serviceXML = new ServiceXML((IFile) obj); Service services[] = serviceXML.getServices(); for (int i = 0; i < services.length; i++) { Menu child = new Menu(parent); MenuItem item = new MenuItem(parent, SWT.CASCADE); item.setText(services[i].getName() + "," + services[i].getVersion() + "," + services[i].getVendor()); item.setMenu(child); item = new MenuItem(child, SWT.NONE); item.setText("Identity..."); item.addSelectionListener(new IdentitySelectionListener()); item = new MenuItem(child, SWT.NONE); item.setText("Root SBB..."); item.addSelectionListener(new RootSbbSelectionListener()); item = new MenuItem(child, SWT.SEPARATOR); item = new MenuItem(child, SWT.NONE); item.setText("Delete"); item.addSelectionListener(new DeleteSelectionListener()); } } catch (Exception e) { ServiceCreationPlugin.log("Exception caught creating menu: " + e.getMessage()); } } } private class IdentitySelectionListener extends SelectionAdapter { public void widgetSelected(SelectionEvent e) { MenuItem item = (MenuItem) e.getSource(); Menu parent = item.getParent(); MenuItem parentItem = parent.getParentItem(); EditServiceIdentityAction action = new EditServiceIdentityAction(parentItem.getText()); action.selectionChanged(null, selection); action.run(null); } } private class RootSbbSelectionListener extends SelectionAdapter { public void widgetSelected(SelectionEvent e) { MenuItem item = (MenuItem) e.getSource(); Menu parent = item.getParent(); MenuItem parentItem = parent.getParentItem(); EditServiceRootSbbAction action = new EditServiceRootSbbAction(parentItem.getText()); action.selectionChanged(null, selection); action.run(null); } } private class DeleteSelectionListener extends SelectionAdapter { public void widgetSelected(SelectionEvent e) { MenuItem item = (MenuItem) e.getSource(); Menu parent = item.getParent(); MenuItem parentItem = parent.getParentItem(); DeleteServiceAction action = new DeleteServiceAction(parentItem.getText()); action.selectionChanged(null, selection); action.run(null); } } private IAction fDelegateAction; private ISelection selection; private boolean fFillMenu; }