/******************************************************************************* * Copyright (c) 2011 Subgraph. * 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: * Subgraph - initial API and implementation ******************************************************************************/ package com.subgraph.vega.impl.scanner.modules.scripting; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.Reader; import java.net.URL; import org.mozilla.javascript.Scriptable; public class ScriptFile { public enum CompileStatus { NOT_COMPILED, COMPILE_FAILED, COMPILE_SUCCEEDED }; private final URL scriptURL; private final File scriptFile; private long fileLastModified; private CompileStatus compileStatus; private Scriptable compiledScript; private String compileFailureMessage = ""; public ScriptFile(File scriptFile) { this(scriptFile, null, scriptFile.lastModified()); } public ScriptFile(URL scriptURL) { this(null, scriptURL, 0); } private ScriptFile(File scriptFile, URL scriptURL, long lastModified) { this.scriptFile = scriptFile; this.scriptURL = scriptURL; this.fileLastModified = lastModified; this.compileStatus = CompileStatus.NOT_COMPILED; this.compileFailureMessage = ""; } public String getPath() { if(scriptFile != null) return scriptFile.getAbsolutePath(); else if(scriptURL != null) return scriptURL.getPath(); else return null; } public Reader createReader() throws IOException { if(scriptFile != null) return new FileReader(scriptFile); else if(scriptURL != null) return new InputStreamReader(scriptURL.openStream()); else return null; } void setCompiledScript(Scriptable script) { this.compiledScript = script; compileFailureMessage = ""; setCompileStatus(CompileStatus.COMPILE_SUCCEEDED); } void setCompileFailed(String failureMessage) { compileFailureMessage = failureMessage; compiledScript = null; setCompileStatus(CompileStatus.COMPILE_FAILED); } public String getCompileFailureMessage() { return compileFailureMessage; } private void setCompileStatus(CompileStatus status) { this.compileStatus = status; if(scriptFile != null) fileLastModified = scriptFile.lastModified(); } public CompileStatus getCompileStatus() { return compileStatus; } public Scriptable getCompiledScript() { return compiledScript; } public boolean hasFileChanged() { if(scriptURL != null) return false; else return (scriptFile.lastModified() > fileLastModified); } }