| /******************************************************************************* |
| * Copyright (c) 2010 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.ui.internal.menus; |
| |
| import java.util.HashMap; |
| import java.util.Map; |
| import java.util.Set; |
| import org.eclipse.core.expressions.Expression; |
| import org.eclipse.core.expressions.IEvaluationContext; |
| import org.eclipse.e4.core.contexts.ContextFunction; |
| import org.eclipse.e4.core.contexts.IEclipseContext; |
| import org.eclipse.e4.ui.internal.workbench.ContributionsAnalyzer; |
| import org.eclipse.e4.ui.model.application.MApplication; |
| import org.eclipse.e4.ui.model.application.ui.menu.MMenuContribution; |
| import org.eclipse.e4.ui.model.application.ui.menu.impl.MenuFactoryImpl; |
| import org.eclipse.e4.ui.workbench.modeling.ExpressionContext; |
| import org.eclipse.e4.ui.workbench.renderers.swt.ContributionRecord; |
| import org.eclipse.jface.action.ContributionManager; |
| import org.eclipse.jface.action.IContributionItem; |
| import org.eclipse.ui.ISourceProvider; |
| import org.eclipse.ui.internal.e4.compatibility.E4Util; |
| import org.eclipse.ui.internal.services.ServiceLocator; |
| import org.eclipse.ui.menus.AbstractContributionFactory; |
| import org.eclipse.ui.menus.IMenuService; |
| |
| /** |
| * @since 3.5 |
| * |
| */ |
| public class WorkbenchMenuService implements IMenuService { |
| |
| private IEclipseContext e4Context; |
| // private ServiceLocator serviceLocator; |
| private ExpressionContext legacyContext; |
| private MenuPersistence persistence; |
| private Map<AbstractContributionFactory, MMenuContribution> factoriesToContributions = new HashMap<AbstractContributionFactory, MMenuContribution>(); |
| |
| /** |
| * @param serviceLocator |
| * @param e4Context |
| */ |
| public WorkbenchMenuService(ServiceLocator serviceLocator, IEclipseContext e4Context) { |
| // this.serviceLocator = serviceLocator; |
| this.e4Context = e4Context; |
| |
| persistence = new MenuPersistence(e4Context.get(MApplication.class), e4Context); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ui.services.IServiceWithSources#addSourceProvider(org.eclipse.ui.ISourceProvider) |
| */ |
| public void addSourceProvider(ISourceProvider provider) { |
| // TODO Auto-generated method stub |
| |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ui.services.IServiceWithSources#removeSourceProvider(org.eclipse.ui.ISourceProvider) |
| */ |
| public void removeSourceProvider(ISourceProvider provider) { |
| // TODO Auto-generated method stub |
| |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ui.services.IDisposable#dispose() |
| */ |
| public void dispose() { |
| persistence.dispose(); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ui.menus.IMenuService#addContributionFactory(org.eclipse.ui.menus.AbstractContributionFactory) |
| */ |
| public void addContributionFactory(final AbstractContributionFactory factory) { |
| MMenuContribution menuContribution = MenuFactoryImpl.eINSTANCE.createMenuContribution(); |
| menuContribution.setElementId(factory.getNamespace() + ":" + factory.hashCode()); //$NON-NLS-1$ |
| MenuLocationURI location = new MenuLocationURI(factory.getLocation()); |
| |
| if ("org.eclipse.ui.popup.any".equals(location.getPath())) { //$NON-NLS-1$ |
| menuContribution.setParentId("popup"); //$NON-NLS-1$ |
| } else { |
| menuContribution.setParentId(location.getPath()); |
| } |
| String query = location.getQuery(); |
| if (query == null || query.length() == 0) { |
| query = "after=additions"; //$NON-NLS-1$ |
| } |
| menuContribution.setPositionInParent(query); |
| menuContribution.getTags().add("scheme:" + location.getScheme()); //$NON-NLS-1$ |
| String filter = ContributionsAnalyzer.MC_MENU; |
| if ("popup".equals(location.getScheme())) { //$NON-NLS-1$ |
| filter = ContributionsAnalyzer.MC_POPUP; |
| } |
| menuContribution.getTags().add(filter); |
| ContextFunction generator = new ContributionFactoryGenerator(factory); |
| menuContribution.getTransientData().put(ContributionRecord.FACTORY, generator); |
| factoriesToContributions.put(factory, menuContribution); |
| MApplication app = e4Context.get(MApplication.class); |
| app.getMenuContributions().add(menuContribution); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ui.menus.IMenuService#removeContributionFactory(org.eclipse.ui.menus.AbstractContributionFactory) |
| */ |
| public void removeContributionFactory(AbstractContributionFactory factory) { |
| MMenuContribution menuContribution; |
| if ((menuContribution = factoriesToContributions.remove(factory)) != null) { |
| MApplication app = e4Context.get(MApplication.class); |
| app.getMenuContributions().remove(menuContribution); |
| } |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ui.menus.IMenuService#populateContributionManager(org.eclipse.jface.action.ContributionManager, java.lang.String) |
| */ |
| public void populateContributionManager(ContributionManager mgr, String location) { |
| // TODO Auto-generated method stub |
| |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ui.menus.IMenuService#releaseContributions(org.eclipse.jface.action.ContributionManager) |
| */ |
| public void releaseContributions(ContributionManager mgr) { |
| // TODO Auto-generated method stub |
| |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ui.menus.IMenuService#getCurrentState() |
| */ |
| public IEvaluationContext getCurrentState() { |
| if (legacyContext == null) { |
| legacyContext = new ExpressionContext(e4Context); |
| } |
| return legacyContext; |
| } |
| |
| /** |
| * read in the menu contributions and turn them into model menu |
| * contributions |
| */ |
| public void readRegistry() { |
| persistence.read(); |
| } |
| |
| public void updateManagers() { |
| E4Util.unsupported("WorkbenchMenuService.updateManagers - time to update ... something"); //$NON-NLS-1$ |
| } |
| |
| /** |
| * @param item |
| * @param visibleWhen |
| * @param restriction |
| * @param createIdentifierId |
| */ |
| public void registerVisibleWhen(IContributionItem item, Expression visibleWhen, |
| Set restriction, String createIdentifierId) { |
| // TODO Auto-generated method stub |
| |
| } |
| |
| /** |
| * @param item |
| * @param restriction |
| */ |
| public void unregisterVisibleWhen(IContributionItem item, Set restriction) { |
| // TODO Auto-generated method stub |
| |
| } |
| |
| } |