/** * Copyright (c) 2012-2013 KUBO Atsuhiro <kubo@iteman.jp>, * All rights reserved. * * This file is part of MakeGood. * * 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 */ package com.piece_framework.makegood.ui.actions; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.ActionContributionItem; import org.eclipse.jface.action.IAction; import org.eclipse.jface.action.IMenuCreator; import org.eclipse.jface.action.Separator; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.ISelection; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Menu; import org.eclipse.ui.IViewActionDelegate; import org.eclipse.ui.IViewPart; import com.piece_framework.makegood.core.continuoustesting.Scope; import com.piece_framework.makegood.ui.Activator; import com.piece_framework.makegood.ui.MakeGoodContext; import com.piece_framework.makegood.ui.Messages; /** * @since 2.2.0 */ public class ConfigureContinuousTestingAction implements IViewActionDelegate { public static final String ACTION_ID = "com.piece_framework.makegood.ui.viewActions.configureContinuousTestingAction"; //$NON-NLS-1$ public static final ImageDescriptor IMAGE_DESCRIPTOR_ENABLED = Activator.getImageDescriptor("icons/configure_continuous_testing_enabled.gif"); //$NON-NLS-1$ public static final ImageDescriptor IMAGE_DESCRIPTOR_DISABLED = Activator.getImageDescriptor("icons/configure_continuous_testing_disabled.gif"); //$NON-NLS-1$ private IAction lastSelectedAction; @Override public void run(IAction action) { (MakeGoodContext.getInstance().getContinuousTesting().isEnabled() ? createDisableContinuousTestingAction() : createEnableContinuousTestingAction()).run(); } @Override public void selectionChanged(IAction action, ISelection selection) { if (action != lastSelectedAction) { lastSelectedAction = action; lastSelectedAction.setMenuCreator(new ContinuousTestingConfigurationMenuCreator()); } } @Override public void init(IViewPart view) { } private IAction createEnableContinuousTestingAction() { return new EnableContinuousTestingAction(Messages.MakeGoodView_ConfigureContinuousTestingAction_EnableContinuousTestingAction); } private IAction createDisableContinuousTestingAction() { return new DisableContinuousTestingAction(Messages.MakeGoodView_ConfigureContinuousTestingAction_DisableContinuousTestingAction); } private class ContinuousTestingConfigurationMenuCreator implements IMenuCreator { private Menu menu; @Override public void dispose() { if (menu != null) { menu.dispose(); menu = null; } } @Override public Menu getMenu(Control parent) { if (menu != null) { menu.dispose(); menu = null; } menu = new Menu(parent); addAction(createEnableContinuousTestingAction()); addAction(createDisableContinuousTestingAction()); addSeparator(); addAction(new SetContinuousTestingScopeToAllTestsAction(Messages.MakeGoodView_ConfigureContinuousTestingAction_SetContinuousTestingScopeToAllTestsAction)); addAction(new SetContinuousTestingScopeToLastTestAction(Messages.MakeGoodView_ConfigureContinuousTestingAction_SetContinuousTestingScopeToLastTestAction)); addAction(new SetContinuousTestingScopeToFailedTestsAction(Messages.MakeGoodView_ConfigureContinuousTestingAction_SetContinuousTestingScopeToFailedTestsAction)); return menu; } @Override public Menu getMenu(Menu parent) { return null; } private void addAction(IAction action) { new ActionContributionItem(action).fill(menu, -1); } private void addSeparator() { new Separator().fill(menu, -1); } } private class EnableContinuousTestingAction extends Action { public EnableContinuousTestingAction(String text) { super(text); setToolTipText(text); setChecked(MakeGoodContext.getInstance().getContinuousTesting().isEnabled()); } @Override public void run() { MakeGoodContext.getInstance().getContinuousTesting().setEnabled(true); setChecked(true); lastSelectedAction.setImageDescriptor(IMAGE_DESCRIPTOR_ENABLED); } } private class DisableContinuousTestingAction extends Action { public DisableContinuousTestingAction(String text) { super(text); setToolTipText(text); setChecked(!MakeGoodContext.getInstance().getContinuousTesting().isEnabled()); } @Override public void run() { MakeGoodContext.getInstance().getContinuousTesting().setEnabled(false); setChecked(true); lastSelectedAction.setImageDescriptor(IMAGE_DESCRIPTOR_DISABLED); } } private class SetContinuousTestingScopeToAllTestsAction extends Action { public SetContinuousTestingScopeToAllTestsAction(String text) { super(text); setToolTipText(text); setChecked(Scope.ALL_TESTS.equals(MakeGoodContext.getInstance().getContinuousTesting().getScope())); } @Override public void run() { MakeGoodContext.getInstance().getContinuousTesting().setScope(Scope.ALL_TESTS); setChecked(true); } } private class SetContinuousTestingScopeToLastTestAction extends Action { public SetContinuousTestingScopeToLastTestAction(String text) { super(text); setToolTipText(text); setChecked(Scope.LAST_TEST.equals(MakeGoodContext.getInstance().getContinuousTesting().getScope())); } @Override public void run() { MakeGoodContext.getInstance().getContinuousTesting().setScope(Scope.LAST_TEST); setChecked(true); } } private class SetContinuousTestingScopeToFailedTestsAction extends Action { public SetContinuousTestingScopeToFailedTestsAction(String text) { super(text); setToolTipText(text); setChecked(Scope.FAILED_TESTS.equals(MakeGoodContext.getInstance().getContinuousTesting().getScope())); } @Override public void run() { MakeGoodContext.getInstance().getContinuousTesting().setScope(Scope.FAILED_TESTS); setChecked(true); } } }