/******************************************************************************* * Copyright (c) 2000-present Liferay, Inc. All rights reserved. * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * *******************************************************************************/ package com.liferay.ide.ui.workspace; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import org.eclipse.core.runtime.Platform; import org.eclipse.jface.action.IContributionItem; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.Separator; import org.eclipse.ui.internal.ide.ChooseWorkspaceData; import org.eclipse.ui.menus.CommandContributionItem; import org.eclipse.ui.menus.CommandContributionItemParameter; import org.eclipse.ui.menus.ExtensionContributionFactory; import org.eclipse.ui.menus.IContributionRoot; import org.eclipse.ui.services.IServiceLocator; /** * @author Kamesh Sampath * @author Gregory Amerson */ @SuppressWarnings( "restriction" ) public class LaunchWorkspaceMenu extends ExtensionContributionFactory { @Override public void createContributionItems( IServiceLocator serviceLocator, IContributionRoot additions ) { final MenuManager menu = new MenuManager( "Launch Workspace" ); final IContributionItem[] workspaceHistoryItems = buildWorkspaceHistory( serviceLocator ); for( IContributionItem workspaceHistoryItem : workspaceHistoryItems ) { if( workspaceHistoryItem instanceof CommandContributionItem ) { final CommandContributionItem commandItem = (CommandContributionItem) workspaceHistoryItem; if( "Other...".equals( commandItem.getData().label ) ) { menu.add( new Separator() ); } } menu.add( workspaceHistoryItem ); } additions.addContributionItem( menu, null ); } private IContributionItem[] buildWorkspaceHistory( IServiceLocator serviceLocator ) { final List<IContributionItem> retval = new ArrayList<>(); final ChooseWorkspaceData chooseWorkspaceData = new ChooseWorkspaceData( Platform.getInstanceLocation().getURL() ); if( chooseWorkspaceData.readPersistedData() ) { final String currentWorkspace = chooseWorkspaceData.getInitialDefault(); final String[] recentWorkspaces = chooseWorkspaceData.getRecentWorkspaces(); for( String recentWorkspace : recentWorkspaces ) { if( recentWorkspace != null && !recentWorkspace.equals( currentWorkspace ) ) { retval.add( newLaunchWorkspaceCommand( serviceLocator, recentWorkspace, recentWorkspace ) ); } } retval.add( newLaunchWorkspaceCommand( serviceLocator, "New Workspace...", null ) ); } return retval.toArray( new IContributionItem[0] ); } @SuppressWarnings( "unchecked" ) private IContributionItem newLaunchWorkspaceCommand( IServiceLocator serviceLocator, String label, String workspaceLocation ) { final CommandContributionItemParameter parameter = new CommandContributionItemParameter( serviceLocator, "", LaunchWorkspaceHandler.COMMAND_ID, CommandContributionItem.STYLE_PUSH ); if( workspaceLocation != null ) { parameter.parameters = new HashMap<>(); parameter.parameters.put( LaunchWorkspaceHandler.PARAM_WORKSPACE_LOCATION, workspaceLocation ); } parameter.label = label; final CommandContributionItem launchWorkspaceCommand = new CommandContributionItem( parameter ); launchWorkspaceCommand.setVisible( true ); return launchWorkspaceCommand; } }