/******************************************************************************* * Copyright (c) 2014 Bruno Medeiros and other Contributors. * 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: * Bruno Medeiros - initial API and implementation *******************************************************************************/ package mmrnmhrm.ui.navigator; import static melnorme.utilbox.core.CoreUtil.list; import java.nio.file.Path; import org.eclipse.core.resources.IProject; import org.eclipse.jface.action.MenuManager; import org.eclipse.ui.IViewPart; import melnorme.lang.ide.core.DeeToolPreferences; import melnorme.lang.ide.core.operations.RunToolOperationOnResource; import melnorme.lang.ide.core.operations.ILangOperationsListener_Default.ProcessStartKind; import melnorme.lang.ide.core.operations.ILangOperationsListener_Default.StartOperationOptions; import melnorme.lang.ide.ui.launch.LangLaunchShortcut; import melnorme.lang.ide.ui.navigator.BuildTargetsActionGroup; import melnorme.lang.ide.ui.navigator.LangNavigatorActionProvider; import melnorme.lang.ide.ui.operations.ToolSourceModifyingOperation; import melnorme.lang.ide.ui.operations.RunToolUIOperation.RunSDKUIToolOperation; import melnorme.utilbox.core.CommonException; import mmrnmhrm.ui.DeeUIMessages; import mmrnmhrm.ui.launch.DeeLaunchShortcut; public class DeeNavigatorActionProvider extends LangNavigatorActionProvider { @Override protected BuildTargetsActionGroup createBuildTargetsActionGroup(IViewPart viewPart) { return new BuildTargetsActionGroup(viewPart) { @Override protected LangLaunchShortcut createLaunchShortcut() { return new DeeLaunchShortcut(); } }; } @Override protected void initActionGroups(IViewPart viewPart) { super.initActionGroups(viewPart); actionGroups.add(new DubPathActionGroup(viewPart)); } public static class DubPathActionGroup extends BundleOperationsActionGroup { public DubPathActionGroup(IViewPart viewPart) { super(viewPart); } @Override protected void initActions(MenuManager bundleOpsMenu, IProject project) { addRunOperationAction(bundleOpsMenu, new AddDubProjectToLocalPath(project)); addRunOperationAction(bundleOpsMenu, new RemoveDubProjectFromLocalPath(project)); addRunOperationAction(bundleOpsMenu, new DubList(project)); addRunOperationAction(bundleOpsMenu, new FormatBundleOperation(project)); } @Override protected String getMenuName() { return DeeUIMessages.DubActionMenu; } public class AddDubProjectToLocalPath extends RunSDKUIToolOperation { public AddDubProjectToLocalPath(IProject project) { super(DeeUIMessages.DubAction_AddLocalPath, project, list("add-local", project.getLocation().toFile().toString())); } } public class RemoveDubProjectFromLocalPath extends RunSDKUIToolOperation { public RemoveDubProjectFromLocalPath(IProject project) { super(DeeUIMessages.DubAction_RemoveLocalPath, project, list("remove-local", project.getLocation().toFile().toString())); } } public class DubList extends RunSDKUIToolOperation { public DubList(IProject project) { super(DeeUIMessages.DubAction_RunDubList, project, list("list")); } } } public static class FormatBundleOperation extends ToolSourceModifyingOperation { public FormatBundleOperation(IProject project) { super("Format DUB package (dfmt)", new RunToolOperationOnResource( project, list(), new StartOperationOptions(ProcessStartKind.BUILD, true, true) ) { @Override protected ProcessBuilder createProcessBuilder() throws CommonException { Path fmtPath = DeeToolPreferences.DFMT_PATH.getDerivedValue(); return getToolManager().createToolProcessBuilder(project, fmtPath, commands.toArrayList().addElements("--inplace", ".").toArray(String.class)); } } ); } } }