/* * Copyright 2012 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.gradle.plugins.javascript.rhino; import org.gradle.api.tasks.Input; import org.gradle.api.tasks.InputFile; import org.gradle.api.tasks.Internal; import org.gradle.api.tasks.JavaExec; import org.gradle.api.tasks.Optional; import org.gradle.process.JavaExecSpec; import org.gradle.util.CollectionUtils; import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.LinkedList; import java.util.List; public class RhinoShellExec extends JavaExec { private List<Object> rhinoOptions = new LinkedList<Object>(); private List<Object> scriptArgs = new LinkedList<Object>(); private Object script; public RhinoShellExec() { } /** * Rhino options. */ @Input public List<String> getRhinoOptions() { return CollectionUtils.stringize(rhinoOptions); } /** * Sets Rhino options. * * @since 4.0 */ public void setRhinoOptions(List<String> rhinoOptions) { this.rhinoOptions = new LinkedList<Object>(rhinoOptions); } /** * Sets Rhino options. */ public void setRhinoOptions(Object... rhinoOptions) { this.rhinoOptions = new LinkedList<Object>(Arrays.asList(rhinoOptions)); } /** * Sets Rhino options. */ public void rhinoOptions(Object... rhinoOptions) { this.rhinoOptions.addAll(Arrays.asList(rhinoOptions)); } /** * Script arguments. */ @Internal("Represented as part of args") public List<String> getScriptArgs() { return CollectionUtils.stringize(scriptArgs); } /** * Sets script arguments. * * @since 4.0 */ public void setScriptArgs(List<String> scriptArgs) { this.scriptArgs = new LinkedList<Object>(scriptArgs); } /** * Sets script arguments. */ public void setScriptArgs(Object... scriptArgs) { this.scriptArgs = new LinkedList<Object>(Arrays.asList(scriptArgs)); } /** * Sets script arguments. */ public void scriptArgs(Object... scriptArgs) { this.scriptArgs.addAll(Arrays.asList(scriptArgs)); } /** * Script file. */ @InputFile @Optional public File getScript() { return script == null ? null : getProject().file(script); } /** * Sets script file. * * @since 4.0 */ public void setScript(File script) { this.script = script; } /** * Sets script file. */ public void setScript(Object script) { this.script = script; } /** * {@inheritDoc} */ @Override public List<String> getArgs() { List<String> args = new ArrayList<String>(rhinoOptions.size() + 1 + scriptArgs.size()); args.addAll(getRhinoOptions()); File script = getScript(); if (script != null) { args.add(script.getAbsolutePath()); } args.addAll(getScriptArgs()); return args; } /** * Cannot set args directly on RhinoShellExec, use {@link #setRhinoOptions(List)}, {@link #setScriptArgs(List)} and/or {@link #setScript(File)} instead. * * @throws UnsupportedOperationException always * @since 4.0 */ @Override public JavaExec setArgs(List<String> applicationArgs) { throw argsUnsupportOperationException(); } /** * Cannot set args directly on RhinoShellExec, use {@link #setRhinoOptions(List)}, {@link #setScriptArgs(List)} and/or {@link #setScript(File)} instead. * * @throws UnsupportedOperationException always */ @Override public JavaExec setArgs(Iterable<?> applicationArgs) { throw argsUnsupportOperationException(); } /** * Cannot set args directly on RhinoShellExec, use {@link #setRhinoOptions(List)}, {@link #setScriptArgs(List)} and/or {@link #setScript(File)} instead. * * @throws UnsupportedOperationException always */ @Override public JavaExec args(Object... args) { throw argsUnsupportOperationException(); } /** * Cannot set args directly on RhinoShellExec, use {@link #setRhinoOptions(List)}, {@link #setScriptArgs(List)} and/or {@link #setScript(File)} instead. * * @throws UnsupportedOperationException always */ @Override public JavaExecSpec args(Iterable<?> args) { throw argsUnsupportOperationException(); } private UnsupportedOperationException argsUnsupportOperationException() { return new UnsupportedOperationException("Cannot set args directly on RhinoShellExec, use rhinoOptions, scriptArgs and/or script"); } @Override public void exec() { super.setArgs(getArgs()); super.exec(); } }