/*
* Copyright (c) 2015 the original author or authors.
* 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:
* Etienne Studer & Donát Csikós (Gradle Inc.) - initial API and implementation and initial documentation
*/
package org.eclipse.buildship.ui.view.task;
import com.google.common.base.Optional;
import com.gradleware.tooling.toolingmodel.OmniGradleScript;
import com.gradleware.tooling.toolingmodel.util.Maybe;
import org.eclipse.buildship.ui.util.nodeselection.NodeSelection;
import org.eclipse.buildship.ui.util.editor.EditorUtils;
import org.eclipse.core.commands.ExecutionEvent;
import java.io.File;
/**
* Opens the build file for the selected {@link ProjectNode}.
*/
public final class OpenBuildScriptHandler extends SelectionDependentHandler {
@Override
protected boolean isEnabledFor(NodeSelection selection) {
return OpenBuildScriptAction.isEnabledForSelection(selection);
}
@Override
public Object execute(ExecutionEvent event) {
NodeSelection selectionHistory = getSelectionHistory(event);
for (ProjectNode projectNode : selectionHistory.toList(ProjectNode.class)) {
Optional<File> buildScript = getBuildScriptFor(projectNode);
if (buildScript.isPresent()) {
EditorUtils.openInInternalEditor(buildScript.get(), true);
}
}
return null;
}
private Optional<File> getBuildScriptFor(ProjectNode projectNode) {
Maybe<OmniGradleScript> buildScript = projectNode.getGradleProject().getBuildScript();
return buildScript.isPresent() ? Optional.fromNullable(buildScript.get().getSourceFile()) : Optional.<File>absent();
}
}