/*
* 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.ngrinder.script.handler;
import org.codehaus.groovy.control.CompilationFailedException;
import org.codehaus.groovy.control.CompilationUnit;
import org.codehaus.groovy.control.CompilerConfiguration;
import org.codehaus.groovy.control.Phases;
import org.ngrinder.common.util.PathUtils;
import org.ngrinder.script.model.FileEntry;
import org.springframework.stereotype.Component;
import java.net.MalformedURLException;
import java.net.URL;
import java.security.CodeSource;
import static org.ngrinder.common.util.NoOp.noOp;
/**
* Groovy {@link ScriptHandler}.
*
* @author JunHo Yoon
* @since 3.2
*/
@Component
public class GroovyScriptHandler extends ScriptHandler {
/**
* Constructor.
*/
public GroovyScriptHandler() {
this("groovy", "groovy", "Groovy", "groovy");
}
/**
* Constructor.
*
* @param key key
* @param extension extension
* @param title title
* @param codeMirrorKey code mirror key
*/
public GroovyScriptHandler(String key, String extension, String title, String codeMirrorKey) {
super(key, extension, title, codeMirrorKey);
}
@Override
protected Integer order() {
return 300;
}
@Override
public String checkSyntaxErrors(String path, String script) {
URL url;
try {
url = new URL("file", "", path);
final CompilationUnit unit = new CompilationUnit(CompilerConfiguration.DEFAULT, new CodeSource(url,
(java.security.cert.Certificate[]) null), null);
unit.addSource(path, script);
unit.compile(Phases.CONVERSION);
} catch (MalformedURLException e) {
noOp();
} catch (CompilationFailedException ce) {
return ce.getMessage();
}
return null;
}
@Override
public Integer displayOrder() {
return 200;
}
/**
* Get the default quick test file.
*
* @param basePath base path
* @return quick test file
*/
public FileEntry getDefaultQuickTestFilePath(String basePath) {
FileEntry fileEntry = new FileEntry();
fileEntry.setPath(PathUtils.join(basePath, "TestRunner." + getExtension()));
return fileEntry;
}
}