Compare commits
3 commits
clean-up-c
...
main
Author | SHA1 | Date | |
---|---|---|---|
27cdc5104b | |||
c4abd27ac7 | |||
6b88318bcd |
41 changed files with 605 additions and 549 deletions
22
.gitignore
vendored
22
.gitignore
vendored
|
@ -1,5 +1,7 @@
|
||||||
|
# Generally ignore hidden files
|
||||||
.*
|
.*
|
||||||
|
|
||||||
|
# Manage some Codium configuration
|
||||||
.vscode/*
|
.vscode/*
|
||||||
!.vscode
|
!.vscode
|
||||||
!.vscode/extensions.json
|
!.vscode/extensions.json
|
||||||
|
@ -7,22 +9,22 @@
|
||||||
!.vscode/settings.json
|
!.vscode/settings.json
|
||||||
!.vscode/tasks.json
|
!.vscode/tasks.json
|
||||||
|
|
||||||
build
|
# Ignore files created during build or run
|
||||||
|
|
||||||
/apps
|
|
||||||
/bin
|
/bin
|
||||||
/backups
|
/backups
|
||||||
/db
|
build
|
||||||
/docs
|
/docs
|
||||||
/extras
|
|
||||||
/lib
|
/lib
|
||||||
/licenses
|
/licenses
|
||||||
/log
|
/log
|
||||||
|
|
||||||
|
# Ignore files managed in src/dist
|
||||||
|
/*.properties
|
||||||
|
/apps
|
||||||
|
/db
|
||||||
|
/extras
|
||||||
|
/launcher.jar
|
||||||
/static
|
/static
|
||||||
|
|
||||||
/*.properties
|
# Manage Gradle configuration
|
||||||
!/gradle.properties
|
!/gradle.properties
|
||||||
|
|
||||||
/launcher.jar
|
|
||||||
/passwd
|
|
||||||
/start.*
|
|
||||||
|
|
|
@ -147,9 +147,11 @@ installDist {
|
||||||
dependsOn build
|
dependsOn build
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.register('processSource', Sync) {
|
def processSource = tasks.register('processSource', Sync) {
|
||||||
def gitOutput = new ByteArrayOutputStream()
|
def gitOutput = new ByteArrayOutputStream()
|
||||||
|
|
||||||
|
outputs.dir "${project.buildDir}/src"
|
||||||
|
|
||||||
exec {
|
exec {
|
||||||
commandLine 'git', 'rev-parse', '--short', 'HEAD'
|
commandLine 'git', 'rev-parse', '--short', 'HEAD'
|
||||||
standardOutput = gitOutput
|
standardOutput = gitOutput
|
||||||
|
@ -164,9 +166,11 @@ tasks.register('processSource', Sync) {
|
||||||
.replaceAll('__builddate__', new Date().format("d MMM yyyy"))
|
.replaceAll('__builddate__', new Date().format("d MMM yyyy"))
|
||||||
.replaceAll('__commithash__', gitOutput.toString().trim())
|
.replaceAll('__commithash__', gitOutput.toString().trim())
|
||||||
.replaceAll('__version__', version)
|
.replaceAll('__version__', version)
|
||||||
} into "${project.buildDir}/src"
|
} into outputs.files.singleFile
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tasks.compileJava.source = processSource.map { it.outputs.files }
|
||||||
|
|
||||||
tasks.register('update') {
|
tasks.register('update') {
|
||||||
dependsOn installDist
|
dependsOn installDist
|
||||||
|
|
||||||
|
|
|
@ -41,8 +41,8 @@ public class Commandline {
|
||||||
ClassLoader loader = Main.createClassLoader(installDir);
|
ClassLoader loader = Main.createClassLoader(installDir);
|
||||||
|
|
||||||
// get the main server class
|
// get the main server class
|
||||||
Class<?> clazz = loader.loadClass("helma.main.CommandlineRunner");
|
Class clazz = loader.loadClass("helma.main.CommandlineRunner");
|
||||||
Class<?>[] cargs = new Class<?>[]{args.getClass()};
|
Class[] cargs = new Class[]{args.getClass()};
|
||||||
Method main = clazz.getMethod("main", cargs);
|
Method main = clazz.getMethod("main", cargs);
|
||||||
Object[] nargs = new Object[]{args};
|
Object[] nargs = new Object[]{args};
|
||||||
|
|
||||||
|
|
|
@ -35,10 +35,10 @@ import java.util.ArrayList;
|
||||||
* be able to set up class and install paths.
|
* be able to set up class and install paths.
|
||||||
*/
|
*/
|
||||||
public class Main {
|
public class Main {
|
||||||
private Class<?> serverClass;
|
private Class serverClass;
|
||||||
private Object server;
|
private Object server;
|
||||||
|
|
||||||
private static final Class<?>[] EMPTY_CLASS_ARRAY = new Class<?>[0];
|
private static final Class[] EMPTY_CLASS_ARRAY = new Class[0];
|
||||||
private static final Object[] EMPTY_OBJECT_ARRAY = new Object[0];
|
private static final Object[] EMPTY_OBJECT_ARRAY = new Object[0];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -60,7 +60,7 @@ public class Main {
|
||||||
ClassLoader loader = createClassLoader(installDir);
|
ClassLoader loader = createClassLoader(installDir);
|
||||||
// get the main server class
|
// get the main server class
|
||||||
serverClass = loader.loadClass("helma.main.Server");
|
serverClass = loader.loadClass("helma.main.Server");
|
||||||
Class<?>[] cargs = new Class<?>[]{args.getClass()};
|
Class[] cargs = new Class[]{args.getClass()};
|
||||||
Method loadServer = serverClass.getMethod("loadServer", cargs);
|
Method loadServer = serverClass.getMethod("loadServer", cargs);
|
||||||
Object[] nargs = new Object[]{args};
|
Object[] nargs = new Object[]{args};
|
||||||
// and invoke the static loadServer(String[]) method
|
// and invoke the static loadServer(String[]) method
|
||||||
|
@ -111,17 +111,17 @@ public class Main {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void addJars(ArrayList<URL> jarlist, File dir) throws MalformedURLException {
|
static void addJars(ArrayList jarlist, File dir) throws MalformedURLException {
|
||||||
File[] files = dir.listFiles(new FilenameFilter() {
|
File[] files = dir.listFiles(new FilenameFilter() {
|
||||||
public boolean accept(File dir, String name) {
|
public boolean accept(File dir, String name) {
|
||||||
String n = name.toLowerCase();
|
String n = name.toLowerCase();
|
||||||
return n.endsWith(".jar") || n.endsWith(".zip");
|
return n.endsWith(".jar") || n.endsWith(".zip"); //$NON-NLS-1$//$NON-NLS-2$
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
if (files != null) {
|
if (files != null) {
|
||||||
for (int i = 0; i < files.length; i++) {
|
for (int i = 0; i < files.length; i++) {
|
||||||
jarlist.add(new URL("file:" + files[i].getAbsolutePath()));
|
jarlist.add(new URL("file:" + files[i].getAbsolutePath())); //$NON-NLS-1$
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -143,13 +143,13 @@ public class Main {
|
||||||
|
|
||||||
// set up the class path
|
// set up the class path
|
||||||
File libdir = new File(installDir, "lib");
|
File libdir = new File(installDir, "lib");
|
||||||
ArrayList<URL> jarlist = new ArrayList<>();
|
ArrayList jarlist = new ArrayList();
|
||||||
|
|
||||||
// add all jar files from the lib directory
|
// add all jar files from the lib directory
|
||||||
addJars(jarlist, libdir);
|
addJars(jarlist, libdir);
|
||||||
|
|
||||||
// add all jar files from the lib/ext directory
|
// add all jar files from the lib/ext directory
|
||||||
addJars(jarlist, new File(libdir, "ext"));
|
addJars(jarlist, new File(libdir, "ext")); //$NON-NLS-1$
|
||||||
|
|
||||||
URL[] urls = new URL[jarlist.size()];
|
URL[] urls = new URL[jarlist.size()];
|
||||||
|
|
||||||
|
@ -199,7 +199,7 @@ public class Main {
|
||||||
// try to get Helma installation directory
|
// try to get Helma installation directory
|
||||||
if (installDir == null) {
|
if (installDir == null) {
|
||||||
URL launcherUrl = ClassLoader.getSystemClassLoader()
|
URL launcherUrl = ClassLoader.getSystemClassLoader()
|
||||||
.getResource("helma/main/launcher/Main.class");
|
.getResource("helma/main/launcher/Main.class"); //$NON-NLS-1$
|
||||||
|
|
||||||
// this is a JAR URL of the form
|
// this is a JAR URL of the form
|
||||||
// jar:<url>!/{entry}
|
// jar:<url>!/{entry}
|
||||||
|
|
0
src/dist/extras/deploy.sh
vendored
Normal file → Executable file
0
src/dist/extras/deploy.sh
vendored
Normal file → Executable file
|
@ -59,7 +59,7 @@ public abstract class HelmaExtension {
|
||||||
* with pairs of varname and ESObjects. This method should be <b>synchronized</b>, if it
|
* with pairs of varname and ESObjects. This method should be <b>synchronized</b>, if it
|
||||||
* performs any other self-initialization outside the scripting environment.
|
* performs any other self-initialization outside the scripting environment.
|
||||||
*/
|
*/
|
||||||
public abstract HashMap<String, Object> initScripting(Application app, ScriptingEngine engine)
|
public abstract HashMap initScripting(Application app, ScriptingEngine engine)
|
||||||
throws ConfigurationException;
|
throws ConfigurationException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -42,7 +42,7 @@ public class DemoExtension extends HelmaExtension {
|
||||||
public void init(Server server) throws ConfigurationException {
|
public void init(Server server) throws ConfigurationException {
|
||||||
try {
|
try {
|
||||||
// just a demo with the server class itself (which is always there, obviously)
|
// just a demo with the server class itself (which is always there, obviously)
|
||||||
Class.forName("helma.main.Server");
|
Class check = Class.forName("helma.main.Server");
|
||||||
} catch (ClassNotFoundException e) {
|
} catch (ClassNotFoundException e) {
|
||||||
throw new ConfigurationException("helma-library not present in classpath. make sure helma.jar is included. get it from http://www.helma.org/");
|
throw new ConfigurationException("helma-library not present in classpath. make sure helma.jar is included. get it from http://www.helma.org/");
|
||||||
}
|
}
|
||||||
|
@ -87,7 +87,7 @@ public class DemoExtension extends HelmaExtension {
|
||||||
*
|
*
|
||||||
* @throws ConfigurationException ...
|
* @throws ConfigurationException ...
|
||||||
*/
|
*/
|
||||||
public HashMap<String, Object> initScripting(Application app, ScriptingEngine engine)
|
public HashMap initScripting(Application app, ScriptingEngine engine)
|
||||||
throws ConfigurationException {
|
throws ConfigurationException {
|
||||||
if (!(engine instanceof RhinoEngine)) {
|
if (!(engine instanceof RhinoEngine)) {
|
||||||
throw new ConfigurationException("scripting engine " + engine.toString() +
|
throw new ConfigurationException("scripting engine " + engine.toString() +
|
||||||
|
@ -98,7 +98,7 @@ public class DemoExtension extends HelmaExtension {
|
||||||
engine.toString());
|
engine.toString());
|
||||||
|
|
||||||
// initialize prototypes and global vars here
|
// initialize prototypes and global vars here
|
||||||
HashMap<String, Object> globals = new HashMap<>();
|
HashMap globals = new HashMap();
|
||||||
|
|
||||||
globals.put("demo", Server.getServer());
|
globals.put("demo", Server.getServer());
|
||||||
|
|
||||||
|
|
|
@ -603,11 +603,11 @@ public class RequestTrans implements Serializable {
|
||||||
|
|
||||||
StringTokenizer tok;
|
StringTokenizer tok;
|
||||||
|
|
||||||
if (auth.startsWith("Basic ")) {
|
if (auth.startsWith("Basic ")) { //$NON-NLS-1$
|
||||||
tok = new StringTokenizer(new String(Base64.decodeBase64(auth.substring(6))),
|
tok = new StringTokenizer(new String(Base64.decodeBase64(auth.substring(6))),
|
||||||
":");
|
":"); //$NON-NLS-1$
|
||||||
} else {
|
} else {
|
||||||
tok = new StringTokenizer(new String(Base64.decodeBase64(auth)), ":");
|
tok = new StringTokenizer(new String(Base64.decodeBase64(auth)), ":"); //$NON-NLS-1$
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -714,7 +714,7 @@ public final class ResponseTrans extends Writer implements Serializable {
|
||||||
// if (contentType != null)
|
// if (contentType != null)
|
||||||
// digest.update (contentType.getBytes());
|
// digest.update (contentType.getBytes());
|
||||||
byte[] b = this.digest.digest(this.response);
|
byte[] b = this.digest.digest(this.response);
|
||||||
this.etag = "\"" + new String(Base64.encodeBase64(b)) + "\"";
|
this.etag = "\"" + new String(Base64.encodeBase64(b)) + "\""; //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
// only set response to 304 not modified if no cookies were set
|
// only set response to 304 not modified if no cookies were set
|
||||||
if (reqtrans.hasETag(etag) && countCookies() == 0) {
|
if (reqtrans.hasETag(etag) && countCookies() == 0) {
|
||||||
response = new byte[0];
|
response = new byte[0];
|
||||||
|
|
|
@ -47,7 +47,7 @@ public final class Application implements Runnable {
|
||||||
private String name;
|
private String name;
|
||||||
|
|
||||||
// application sources
|
// application sources
|
||||||
ArrayList<Repository> repositories;
|
ArrayList repositories;
|
||||||
|
|
||||||
// properties and db-properties
|
// properties and db-properties
|
||||||
ResourceProperties props;
|
ResourceProperties props;
|
||||||
|
@ -96,15 +96,15 @@ public final class Application implements Runnable {
|
||||||
/**
|
/**
|
||||||
* Collections for evaluator thread pooling
|
* Collections for evaluator thread pooling
|
||||||
*/
|
*/
|
||||||
protected Stack<RequestEvaluator> freeThreads;
|
protected Stack freeThreads;
|
||||||
protected Vector<RequestEvaluator> allThreads;
|
protected Vector allThreads;
|
||||||
boolean running = false;
|
boolean running = false;
|
||||||
boolean debug;
|
boolean debug;
|
||||||
long starttime;
|
long starttime;
|
||||||
Hashtable<String, DbSource> dbSources;
|
Hashtable dbSources;
|
||||||
|
|
||||||
// map of app modules reflected at app.modules
|
// map of app modules reflected at app.modules
|
||||||
Map<String, Object> modules;
|
Map modules;
|
||||||
|
|
||||||
// internal worker thread for scheduler, session cleanup etc.
|
// internal worker thread for scheduler, session cleanup etc.
|
||||||
Thread worker;
|
Thread worker;
|
||||||
|
@ -113,10 +113,10 @@ public final class Application implements Runnable {
|
||||||
ThreadGroup threadgroup;
|
ThreadGroup threadgroup;
|
||||||
|
|
||||||
// threadlocal variable for the current RequestEvaluator
|
// threadlocal variable for the current RequestEvaluator
|
||||||
ThreadLocal<RequestEvaluator> currentEvaluator = new ThreadLocal<>();
|
ThreadLocal currentEvaluator = new ThreadLocal();
|
||||||
|
|
||||||
// Map of requesttrans -> active requestevaluators
|
// Map of requesttrans -> active requestevaluators
|
||||||
Hashtable<RequestTrans, RequestEvaluator> activeRequests;
|
Hashtable activeRequests;
|
||||||
|
|
||||||
String logDir;
|
String logDir;
|
||||||
|
|
||||||
|
@ -165,15 +165,15 @@ public final class Application implements Runnable {
|
||||||
private long lastPropertyRead = -1L;
|
private long lastPropertyRead = -1L;
|
||||||
|
|
||||||
// the set of prototype/function pairs which are allowed to be called via XML-RPC
|
// the set of prototype/function pairs which are allowed to be called via XML-RPC
|
||||||
private HashSet<String> xmlrpcAccess;
|
private HashSet xmlrpcAccess;
|
||||||
|
|
||||||
// the name under which this app serves XML-RPC requests. Defaults to the app name
|
// the name under which this app serves XML-RPC requests. Defaults to the app name
|
||||||
private String xmlrpcHandlerName;
|
private String xmlrpcHandlerName;
|
||||||
|
|
||||||
// the list of currently active cron jobs
|
// the list of currently active cron jobs
|
||||||
Hashtable<String, CronRunner> activeCronJobs = null;
|
Hashtable activeCronJobs = null;
|
||||||
// the list of custom cron jobs
|
// the list of custom cron jobs
|
||||||
Hashtable<String, CronJob> customCronJobs = null;
|
Hashtable customCronJobs = null;
|
||||||
|
|
||||||
private ResourceComparator resourceComparator;
|
private ResourceComparator resourceComparator;
|
||||||
private Resource currentCodeResource;
|
private Resource currentCodeResource;
|
||||||
|
@ -230,7 +230,7 @@ public final class Application implements Runnable {
|
||||||
|
|
||||||
this.caseInsensitive = "true".equalsIgnoreCase(server.getAppsProperties(name).getProperty("caseInsensitive"));
|
this.caseInsensitive = "true".equalsIgnoreCase(server.getAppsProperties(name).getProperty("caseInsensitive"));
|
||||||
|
|
||||||
this.repositories = new ArrayList<>();
|
this.repositories = new ArrayList();
|
||||||
this.repositories.addAll(Arrays.asList(repositories));
|
this.repositories.addAll(Arrays.asList(repositories));
|
||||||
resourceComparator = new ResourceComparator(this);
|
resourceComparator = new ResourceComparator(this);
|
||||||
|
|
||||||
|
@ -304,7 +304,7 @@ public final class Application implements Runnable {
|
||||||
|
|
||||||
updateProperties();
|
updateProperties();
|
||||||
|
|
||||||
dbSources = new Hashtable<>();
|
dbSources = new Hashtable();
|
||||||
modules = new SystemMap();
|
modules = new SystemMap();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -366,9 +366,7 @@ public final class Application implements Runnable {
|
||||||
|
|
||||||
private void initInternal()
|
private void initInternal()
|
||||||
throws DatabaseException, IllegalAccessException,
|
throws DatabaseException, IllegalAccessException,
|
||||||
InstantiationException, ClassNotFoundException,
|
InstantiationException, ClassNotFoundException {
|
||||||
IllegalArgumentException, InvocationTargetException,
|
|
||||||
NoSuchMethodException, SecurityException {
|
|
||||||
running = true;
|
running = true;
|
||||||
// create and init type mananger
|
// create and init type mananger
|
||||||
typemgr = new TypeManager(Application.this, ignoreDirs);
|
typemgr = new TypeManager(Application.this, ignoreDirs);
|
||||||
|
@ -383,7 +381,7 @@ public final class Application implements Runnable {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Server.getServer() != null) {
|
if (Server.getServer() != null) {
|
||||||
Vector<HelmaExtension> extensions = Server.getServer().getExtensions();
|
Vector extensions = Server.getServer().getExtensions();
|
||||||
|
|
||||||
for (int i = 0; i < extensions.size(); i++) {
|
for (int i = 0; i < extensions.size(); i++) {
|
||||||
HelmaExtension ext = (HelmaExtension) extensions.get(i);
|
HelmaExtension ext = (HelmaExtension) extensions.get(i);
|
||||||
|
@ -398,12 +396,12 @@ public final class Application implements Runnable {
|
||||||
}
|
}
|
||||||
|
|
||||||
// create and init evaluator/thread lists
|
// create and init evaluator/thread lists
|
||||||
freeThreads = new Stack<>();
|
freeThreads = new Stack();
|
||||||
allThreads = new Vector<>();
|
allThreads = new Vector();
|
||||||
|
|
||||||
activeRequests = new Hashtable<>();
|
activeRequests = new Hashtable();
|
||||||
activeCronJobs = new Hashtable<>();
|
activeCronJobs = new Hashtable();
|
||||||
customCronJobs = new Hashtable<>();
|
customCronJobs = new Hashtable();
|
||||||
|
|
||||||
// create the skin manager
|
// create the skin manager
|
||||||
skinmgr = new SkinManager(Application.this);
|
skinmgr = new SkinManager(Application.this);
|
||||||
|
@ -444,13 +442,7 @@ public final class Application implements Runnable {
|
||||||
// create and init session manager
|
// create and init session manager
|
||||||
String sessionMgrImpl = props.getProperty("sessionManagerImpl",
|
String sessionMgrImpl = props.getProperty("sessionManagerImpl",
|
||||||
"helma.framework.core.SessionManager");
|
"helma.framework.core.SessionManager");
|
||||||
try {
|
sessionMgr = (SessionManager) Class.forName(sessionMgrImpl).newInstance();
|
||||||
sessionMgr = (SessionManager) Class.forName(sessionMgrImpl)
|
|
||||||
.getDeclaredConstructor()
|
|
||||||
.newInstance();
|
|
||||||
} catch (NoSuchMethodException | InvocationTargetException e) {
|
|
||||||
throw new RuntimeException("Error initializing session manager", e);
|
|
||||||
}
|
|
||||||
logEvent("Using session manager class " + sessionMgrImpl);
|
logEvent("Using session manager class " + sessionMgrImpl);
|
||||||
sessionMgr.init(Application.this);
|
sessionMgr.init(Application.this);
|
||||||
|
|
||||||
|
@ -887,7 +879,7 @@ public final class Application implements Runnable {
|
||||||
} else {
|
} else {
|
||||||
String rootClass = classMapping.getProperty("root");
|
String rootClass = classMapping.getProperty("root");
|
||||||
Class c = typemgr.getClassLoader().loadClass(rootClass);
|
Class c = typemgr.getClassLoader().loadClass(rootClass);
|
||||||
rootObject = c.getDeclaredConstructor().newInstance();
|
rootObject = c.newInstance();
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw new RuntimeException("Error creating root object: " +
|
throw new RuntimeException("Error creating root object: " +
|
||||||
|
|
|
@ -100,7 +100,7 @@ public final class RequestEvaluator implements Runnable {
|
||||||
app.setCurrentRequestEvaluator(this);
|
app.setCurrentRequestEvaluator(this);
|
||||||
Class clazz = app.getClassLoader().loadClass(engineClassName);
|
Class clazz = app.getClassLoader().loadClass(engineClassName);
|
||||||
|
|
||||||
scriptingEngine = (ScriptingEngine) clazz.getDeclaredConstructor().newInstance();
|
scriptingEngine = (ScriptingEngine) clazz.newInstance();
|
||||||
scriptingEngine.init(app, this);
|
scriptingEngine.init(app, this);
|
||||||
} catch (Exception x) {
|
} catch (Exception x) {
|
||||||
Throwable t = x;
|
Throwable t = x;
|
||||||
|
@ -566,7 +566,7 @@ public final class RequestEvaluator implements Runnable {
|
||||||
int base = 800 * tries;
|
int base = 800 * tries;
|
||||||
Thread.sleep((long) (base + (Math.random() * base * 2)));
|
Thread.sleep((long) (base + (Math.random() * base * 2)));
|
||||||
} catch (InterruptedException interrupt) {
|
} catch (InterruptedException interrupt) {
|
||||||
// we got interrrupted, create minimal error message
|
// we got interrrupted, create minimal error message
|
||||||
res.reportError(interrupt);
|
res.reportError(interrupt);
|
||||||
done = true;
|
done = true;
|
||||||
// and release resources and thread
|
// and release resources and thread
|
||||||
|
|
|
@ -27,7 +27,7 @@ import java.net.URL;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Factory class for generating Image objects from various sources.
|
* Factory class for generating Image objects from various sources.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public abstract class ImageGenerator {
|
public abstract class ImageGenerator {
|
||||||
protected static ImageGenerator generator = null;
|
protected static ImageGenerator generator = null;
|
||||||
|
@ -72,7 +72,7 @@ public abstract class ImageGenerator {
|
||||||
"The imageGenerator class cannot be found: " + className);
|
"The imageGenerator class cannot be found: " + className);
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
generator = (ImageGenerator) generatorClass.getDeclaredConstructor().newInstance();
|
generator = (ImageGenerator)generatorClass.newInstance();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw new RuntimeException(
|
throw new RuntimeException(
|
||||||
"The ImageGenerator instance could not be created: "
|
"The ImageGenerator instance could not be created: "
|
||||||
|
@ -85,7 +85,7 @@ public abstract class ImageGenerator {
|
||||||
/**
|
/**
|
||||||
* @param w ...
|
* @param w ...
|
||||||
* @param h ...
|
* @param h ...
|
||||||
*
|
*
|
||||||
* @return ...
|
* @return ...
|
||||||
*/
|
*/
|
||||||
public ImageWrapper createImage(int w, int h) {
|
public ImageWrapper createImage(int w, int h) {
|
||||||
|
@ -95,7 +95,7 @@ public abstract class ImageGenerator {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param src ...
|
* @param src ...
|
||||||
*
|
*
|
||||||
* @return ...
|
* @return ...
|
||||||
* @throws IOException
|
* @throws IOException
|
||||||
*/
|
*/
|
||||||
|
@ -103,10 +103,10 @@ public abstract class ImageGenerator {
|
||||||
Image img = read(src);
|
Image img = read(src);
|
||||||
return img != null ? new ImageWrapper(img, this) : null;
|
return img != null ? new ImageWrapper(img, this) : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param filenamne ...
|
* @param filenamne ...
|
||||||
*
|
*
|
||||||
* @return ...
|
* @return ...
|
||||||
* @throws IOException
|
* @throws IOException
|
||||||
*/
|
*/
|
||||||
|
@ -118,7 +118,7 @@ public abstract class ImageGenerator {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param url ...
|
* @param url ...
|
||||||
*
|
*
|
||||||
* @return ...
|
* @return ...
|
||||||
* @throws MalformedURLException
|
* @throws MalformedURLException
|
||||||
* @throws IOException
|
* @throws IOException
|
||||||
|
@ -144,14 +144,14 @@ public abstract class ImageGenerator {
|
||||||
/**
|
/**
|
||||||
* @param iw ...
|
* @param iw ...
|
||||||
* @param filter ...
|
* @param filter ...
|
||||||
*
|
*
|
||||||
* @return ...
|
* @return ...
|
||||||
*/
|
*/
|
||||||
public ImageWrapper createImage(ImageWrapper iw, ImageFilter filter) {
|
public ImageWrapper createImage(ImageWrapper iw, ImageFilter filter) {
|
||||||
// use the ImagFilterOp wrapper for ImageFilters that works directly
|
// use the ImagFilterOp wrapper for ImageFilters that works directly
|
||||||
// on BufferedImages. The filtering is much faster like that.
|
// on BufferedImages. The filtering is much faster like that.
|
||||||
// Attention: needs testing with all the filters!
|
// Attention: needs testing with all the filters!
|
||||||
|
|
||||||
return createImage(iw, new ImageFilterOp(filter));
|
return createImage(iw, new ImageFilterOp(filter));
|
||||||
// Image img = ImageWaiter.waitForImage(
|
// Image img = ImageWaiter.waitForImage(
|
||||||
// Toolkit.getDefaultToolkit().createImage(
|
// Toolkit.getDefaultToolkit().createImage(
|
||||||
|
@ -162,7 +162,7 @@ public abstract class ImageGenerator {
|
||||||
/**
|
/**
|
||||||
* @param iw ...
|
* @param iw ...
|
||||||
* @param imageOp ...
|
* @param imageOp ...
|
||||||
*
|
*
|
||||||
* @return ...
|
* @return ...
|
||||||
*/
|
*/
|
||||||
public ImageWrapper createImage(ImageWrapper iw, BufferedImageOp imageOp) {
|
public ImageWrapper createImage(ImageWrapper iw, BufferedImageOp imageOp) {
|
||||||
|
@ -212,7 +212,7 @@ public abstract class ImageGenerator {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Saves the image. Image format is deduced from filename.
|
* Saves the image. Image format is deduced from filename.
|
||||||
*
|
*
|
||||||
* @param wrapper
|
* @param wrapper
|
||||||
* @param filename
|
* @param filename
|
||||||
* @param quality
|
* @param quality
|
||||||
|
@ -224,7 +224,7 @@ public abstract class ImageGenerator {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Saves the image. Image format is deduced from the dataSource.
|
* Saves the image. Image format is deduced from the dataSource.
|
||||||
*
|
*
|
||||||
* @param wrapper
|
* @param wrapper
|
||||||
* @param out
|
* @param out
|
||||||
* @param quality
|
* @param quality
|
||||||
|
@ -233,4 +233,4 @@ public abstract class ImageGenerator {
|
||||||
*/
|
*/
|
||||||
public abstract void write(ImageWrapper wrapper, OutputStream out, String type,
|
public abstract void write(ImageWrapper wrapper, OutputStream out, String type,
|
||||||
float quality, boolean alpha) throws IOException;
|
float quality, boolean alpha) throws IOException;
|
||||||
}
|
}
|
File diff suppressed because it is too large
Load diff
|
@ -24,10 +24,9 @@ import java.io.*;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import javax.imageio.*;
|
import javax.imageio.*;
|
||||||
import javax.imageio.spi.*;
|
import javax.imageio.spi.*;
|
||||||
import javax.imageio.stream.ImageOutputStream;
|
|
||||||
|
|
||||||
public class GIFImageWriterSpi extends ImageWriterSpi {
|
public class GIFImageWriterSpi extends ImageWriterSpi {
|
||||||
|
|
||||||
public GIFImageWriterSpi() {
|
public GIFImageWriterSpi() {
|
||||||
super(
|
super(
|
||||||
"Helma Object Publisher, http://helma.org/",
|
"Helma Object Publisher, http://helma.org/",
|
||||||
|
@ -36,7 +35,7 @@ public class GIFImageWriterSpi extends ImageWriterSpi {
|
||||||
new String[] {"gif", "GIF"},
|
new String[] {"gif", "GIF"},
|
||||||
new String[] {"image/gif", "image/x-gif"},
|
new String[] {"image/gif", "image/x-gif"},
|
||||||
"helma.image.imageio.gif.GIFImageWriter",
|
"helma.image.imageio.gif.GIFImageWriter",
|
||||||
new Class<?>[] {ImageOutputStream.class},
|
STANDARD_OUTPUT_TYPE,
|
||||||
null,
|
null,
|
||||||
false, null, null, null, null,
|
false, null, null, null, null,
|
||||||
false, null, null, null, null
|
false, null, null, null, null
|
||||||
|
@ -56,4 +55,4 @@ public class GIFImageWriterSpi extends ImageWriterSpi {
|
||||||
// FIXME handle # colors
|
// FIXME handle # colors
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -36,9 +36,9 @@ import helma.util.StringUtils;
|
||||||
* This class is responsible for starting and stopping Helma applications.
|
* This class is responsible for starting and stopping Helma applications.
|
||||||
*/
|
*/
|
||||||
public class ApplicationManager implements XmlRpcHandler {
|
public class ApplicationManager implements XmlRpcHandler {
|
||||||
private Hashtable<String, AppDescriptor> descriptors;
|
private Hashtable descriptors;
|
||||||
private Hashtable<String, Application> applications;
|
private Hashtable applications;
|
||||||
private Hashtable<String, Application> xmlrpcHandlers;
|
private Hashtable xmlrpcHandlers;
|
||||||
private ResourceProperties props;
|
private ResourceProperties props;
|
||||||
private Server server;
|
private Server server;
|
||||||
private long lastModified;
|
private long lastModified;
|
||||||
|
@ -54,9 +54,9 @@ public class ApplicationManager implements XmlRpcHandler {
|
||||||
public ApplicationManager(ResourceProperties props, Server server) {
|
public ApplicationManager(ResourceProperties props, Server server) {
|
||||||
this.props = props;
|
this.props = props;
|
||||||
this.server = server;
|
this.server = server;
|
||||||
this.descriptors = new Hashtable<String, AppDescriptor>();
|
this.descriptors = new Hashtable();
|
||||||
this.applications = new Hashtable<String, Application>();
|
this.applications = new Hashtable();
|
||||||
this.xmlrpcHandlers = new Hashtable<String, Application>();
|
this.xmlrpcHandlers = new Hashtable();
|
||||||
this.lastModified = 0;
|
this.lastModified = 0;
|
||||||
this.jetty = server.jetty;
|
this.jetty = server.jetty;
|
||||||
}
|
}
|
||||||
|
@ -68,10 +68,10 @@ public class ApplicationManager implements XmlRpcHandler {
|
||||||
protected void checkForChanges() {
|
protected void checkForChanges() {
|
||||||
if (this.props.lastModified() > this.lastModified && this.server.getApplicationsOption() == null) {
|
if (this.props.lastModified() > this.lastModified && this.server.getApplicationsOption() == null) {
|
||||||
try {
|
try {
|
||||||
for (Enumeration<?> e = this.props.keys(); e.hasMoreElements();) {
|
for (Enumeration e = this.props.keys(); e.hasMoreElements();) {
|
||||||
String appName = (String) e.nextElement();
|
String appName = (String) e.nextElement();
|
||||||
|
|
||||||
if ((appName.indexOf(".") == -1) &&
|
if ((appName.indexOf(".") == -1) && //$NON-NLS-1$
|
||||||
(this.applications.get(appName) == null)) {
|
(this.applications.get(appName) == null)) {
|
||||||
AppDescriptor appDesc = new AppDescriptor(appName);
|
AppDescriptor appDesc = new AppDescriptor(appName);
|
||||||
appDesc.start();
|
appDesc.start();
|
||||||
|
@ -80,7 +80,7 @@ public class ApplicationManager implements XmlRpcHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
// then stop deleted ones
|
// then stop deleted ones
|
||||||
for (Enumeration<AppDescriptor> e = this.descriptors.elements(); e.hasMoreElements();) {
|
for (Enumeration e = this.descriptors.elements(); e.hasMoreElements();) {
|
||||||
AppDescriptor appDesc = (AppDescriptor) e.nextElement();
|
AppDescriptor appDesc = (AppDescriptor) e.nextElement();
|
||||||
|
|
||||||
// check if application has been removed and should be stopped
|
// check if application has been removed and should be stopped
|
||||||
|
@ -146,10 +146,10 @@ public class ApplicationManager implements XmlRpcHandler {
|
||||||
desc.start();
|
desc.start();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for (Enumeration<?> e = this.props.keys(); e.hasMoreElements();) {
|
for (Enumeration e = this.props.keys(); e.hasMoreElements();) {
|
||||||
String appName = (String) e.nextElement();
|
String appName = (String) e.nextElement();
|
||||||
|
|
||||||
if (appName.indexOf(".") == -1) {
|
if (appName.indexOf(".") == -1) { //$NON-NLS-1$
|
||||||
String appValue = this.props.getProperty(appName);
|
String appValue = this.props.getProperty(appName);
|
||||||
|
|
||||||
if (appValue != null && appValue.length() > 0) {
|
if (appValue != null && appValue.length() > 0) {
|
||||||
|
@ -162,7 +162,7 @@ public class ApplicationManager implements XmlRpcHandler {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (Enumeration<AppDescriptor> e = this.descriptors.elements(); e.hasMoreElements();) {
|
for (Enumeration e = this.descriptors.elements(); e.hasMoreElements();) {
|
||||||
AppDescriptor appDesc = (AppDescriptor) e.nextElement();
|
AppDescriptor appDesc = (AppDescriptor) e.nextElement();
|
||||||
appDesc.bind();
|
appDesc.bind();
|
||||||
}
|
}
|
||||||
|
@ -178,7 +178,7 @@ public class ApplicationManager implements XmlRpcHandler {
|
||||||
* Stop all running applications.
|
* Stop all running applications.
|
||||||
*/
|
*/
|
||||||
public void stopAll() {
|
public void stopAll() {
|
||||||
for (Enumeration<AppDescriptor> en = this.descriptors.elements(); en.hasMoreElements();) {
|
for (Enumeration en = this.descriptors.elements(); en.hasMoreElements();) {
|
||||||
try {
|
try {
|
||||||
AppDescriptor appDesc = (AppDescriptor) en.nextElement();
|
AppDescriptor appDesc = (AppDescriptor) en.nextElement();
|
||||||
|
|
||||||
|
@ -206,9 +206,9 @@ public class ApplicationManager implements XmlRpcHandler {
|
||||||
/**
|
/**
|
||||||
* Implements org.apache.xmlrpc.XmlRpcHandler.execute()
|
* Implements org.apache.xmlrpc.XmlRpcHandler.execute()
|
||||||
*/
|
*/
|
||||||
public Object execute(String method, @SuppressWarnings("rawtypes") Vector params)
|
public Object execute(String method, Vector params)
|
||||||
throws Exception {
|
throws Exception {
|
||||||
int dot = method.indexOf(".");
|
int dot = method.indexOf("."); //$NON-NLS-1$
|
||||||
|
|
||||||
if (dot == -1) {
|
if (dot == -1) {
|
||||||
throw new Exception("Method name \"" + method +
|
throw new Exception("Method name \"" + method +
|
||||||
|
@ -224,7 +224,7 @@ public class ApplicationManager implements XmlRpcHandler {
|
||||||
Application app = (Application) this.xmlrpcHandlers.get(handler);
|
Application app = (Application) this.xmlrpcHandlers.get(handler);
|
||||||
|
|
||||||
if (app == null) {
|
if (app == null) {
|
||||||
app = (Application) this.xmlrpcHandlers.get("*");
|
app = (Application) this.xmlrpcHandlers.get("*"); //$NON-NLS-1$
|
||||||
// use the original method name, the handler is resolved within the app.
|
// use the original method name, the handler is resolved within the app.
|
||||||
method2 = method;
|
method2 = method;
|
||||||
}
|
}
|
||||||
|
@ -239,32 +239,32 @@ public class ApplicationManager implements XmlRpcHandler {
|
||||||
private String getMountpoint(String mountpoint) {
|
private String getMountpoint(String mountpoint) {
|
||||||
mountpoint = mountpoint.trim();
|
mountpoint = mountpoint.trim();
|
||||||
|
|
||||||
if ("".equals(mountpoint)) {
|
if ("".equals(mountpoint)) { //$NON-NLS-1$
|
||||||
return "/";
|
return "/"; //$NON-NLS-1$
|
||||||
} else if (!mountpoint.startsWith("/")) {
|
} else if (!mountpoint.startsWith("/")) { //$NON-NLS-1$
|
||||||
return "/" + mountpoint;
|
return "/" + mountpoint; //$NON-NLS-1$
|
||||||
}
|
}
|
||||||
|
|
||||||
return mountpoint;
|
return mountpoint;
|
||||||
}
|
}
|
||||||
|
|
||||||
private String joinMountpoint(String prefix, String suffix) {
|
private String joinMountpoint(String prefix, String suffix) {
|
||||||
if (prefix.endsWith("/") || suffix.startsWith("/")) {
|
if (prefix.endsWith("/") || suffix.startsWith("/")) { //$NON-NLS-1$//$NON-NLS-2$
|
||||||
return prefix+suffix;
|
return prefix+suffix;
|
||||||
}
|
}
|
||||||
return prefix+"/"+suffix;
|
return prefix+"/"+suffix; //$NON-NLS-1$
|
||||||
}
|
}
|
||||||
|
|
||||||
private String getPathPattern(String mountpoint) {
|
private String getPathPattern(String mountpoint) {
|
||||||
if (!mountpoint.startsWith("/")) {
|
if (!mountpoint.startsWith("/")) { //$NON-NLS-1$
|
||||||
mountpoint = "/"+mountpoint;
|
mountpoint = "/"+mountpoint; //$NON-NLS-1$
|
||||||
}
|
}
|
||||||
|
|
||||||
if ("/".equals(mountpoint)) {
|
if ("/".equals(mountpoint)) { //$NON-NLS-1$
|
||||||
return "/";
|
return "/"; //$NON-NLS-1$
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mountpoint.endsWith("/")) {
|
if (mountpoint.endsWith("/")) { //$NON-NLS-1$
|
||||||
return mountpoint.substring(0, mountpoint.length()-1);
|
return mountpoint.substring(0, mountpoint.length()-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -335,56 +335,56 @@ public class ApplicationManager implements XmlRpcHandler {
|
||||||
AppDescriptor(String name) {
|
AppDescriptor(String name) {
|
||||||
ResourceProperties conf = ApplicationManager.this.props.getSubProperties(name + '.');
|
ResourceProperties conf = ApplicationManager.this.props.getSubProperties(name + '.');
|
||||||
this.appName = name;
|
this.appName = name;
|
||||||
this.mountpoint = getMountpoint(conf.getProperty("mountpoint", this.appName));
|
this.mountpoint = getMountpoint(conf.getProperty("mountpoint", this.appName)); //$NON-NLS-1$
|
||||||
this.pathPattern = getPathPattern(this.mountpoint);
|
this.pathPattern = getPathPattern(this.mountpoint);
|
||||||
this.staticDir = conf.getProperty("static");
|
this.staticDir = conf.getProperty("static"); //$NON-NLS-1$
|
||||||
this.staticMountpoint = getPathPattern(conf.getProperty("staticMountpoint",
|
this.staticMountpoint = getPathPattern(conf.getProperty("staticMountpoint", //$NON-NLS-1$
|
||||||
joinMountpoint(this.mountpoint, "static")));
|
joinMountpoint(this.mountpoint, "static"))); //$NON-NLS-1$
|
||||||
this.staticIndex = "true".equalsIgnoreCase(conf.getProperty("staticIndex"));
|
this.staticIndex = "true".equalsIgnoreCase(conf.getProperty("staticIndex")); //$NON-NLS-1$//$NON-NLS-2$
|
||||||
String home = conf.getProperty("staticHome");
|
String home = conf.getProperty("staticHome"); //$NON-NLS-1$
|
||||||
if (home == null) {
|
if (home == null) {
|
||||||
this.staticHome = new String[] {"index.html", "index.htm"};
|
this.staticHome = new String[] {"index.html", "index.htm"}; //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
} else {
|
} else {
|
||||||
this.staticHome = StringUtils.split(home, ",");
|
this.staticHome = StringUtils.split(home, ","); //$NON-NLS-1$
|
||||||
}
|
}
|
||||||
this.protectedStaticDir = conf.getProperty("protectedStatic");
|
this.protectedStaticDir = conf.getProperty("protectedStatic"); //$NON-NLS-1$
|
||||||
|
|
||||||
this.cookieDomain = conf.getProperty("cookieDomain");
|
this.cookieDomain = conf.getProperty("cookieDomain"); //$NON-NLS-1$
|
||||||
this.sessionCookieName = conf.getProperty("sessionCookieName");
|
this.sessionCookieName = conf.getProperty("sessionCookieName"); //$NON-NLS-1$
|
||||||
this.protectedSessionCookie = conf.getProperty("protectedSessionCookie");
|
this.protectedSessionCookie = conf.getProperty("protectedSessionCookie"); //$NON-NLS-1$
|
||||||
this.uploadLimit = conf.getProperty("uploadLimit");
|
this.uploadLimit = conf.getProperty("uploadLimit"); //$NON-NLS-1$
|
||||||
this.uploadSoftfail = conf.getProperty("uploadSoftfail");
|
this.uploadSoftfail = conf.getProperty("uploadSoftfail"); //$NON-NLS-1$
|
||||||
this.debug = conf.getProperty("debug");
|
this.debug = conf.getProperty("debug"); //$NON-NLS-1$
|
||||||
String appDirName = conf.getProperty("appdir");
|
String appDirName = conf.getProperty("appdir"); //$NON-NLS-1$
|
||||||
this.appDir = (appDirName == null) ? null : getAbsoluteFile(appDirName);
|
this.appDir = (appDirName == null) ? null : getAbsoluteFile(appDirName);
|
||||||
String dbDirName = conf.getProperty("dbdir");
|
String dbDirName = conf.getProperty("dbdir"); //$NON-NLS-1$
|
||||||
this.dbDir = (dbDirName == null) ? null : getAbsoluteFile(dbDirName);
|
this.dbDir = (dbDirName == null) ? null : getAbsoluteFile(dbDirName);
|
||||||
this.servletClassName = conf.getProperty("servletClass");
|
this.servletClassName = conf.getProperty("servletClass"); //$NON-NLS-1$
|
||||||
|
|
||||||
// got ignore dirs
|
// got ignore dirs
|
||||||
this.ignoreDirs = conf.getProperty("ignore");
|
this.ignoreDirs = conf.getProperty("ignore"); //$NON-NLS-1$
|
||||||
|
|
||||||
// read and configure app repositories
|
// read and configure app repositories
|
||||||
ArrayList<Repository> repositoryList = new ArrayList<>();
|
ArrayList repositoryList = new ArrayList();
|
||||||
Class<?>[] parameters = { String.class };
|
Class[] parameters = { String.class };
|
||||||
for (int i = 0; true; i++) {
|
for (int i = 0; true; i++) {
|
||||||
String repositoryArgs = conf.getProperty("repository." + i);
|
String repositoryArgs = conf.getProperty("repository." + i); //$NON-NLS-1$
|
||||||
|
|
||||||
if (repositoryArgs != null) {
|
if (repositoryArgs != null) {
|
||||||
// lookup repository implementation
|
// lookup repository implementation
|
||||||
String repositoryImpl = conf.getProperty("repository." + i +
|
String repositoryImpl = conf.getProperty("repository." + i + //$NON-NLS-1$
|
||||||
".implementation");
|
".implementation"); //$NON-NLS-1$
|
||||||
if (repositoryImpl == null) {
|
if (repositoryImpl == null) {
|
||||||
// implementation not set manually, have to guess it
|
// implementation not set manually, have to guess it
|
||||||
if (repositoryArgs.endsWith(".zip")) {
|
if (repositoryArgs.endsWith(".zip")) { //$NON-NLS-1$
|
||||||
repositoryArgs = findResource(repositoryArgs);
|
repositoryArgs = findResource(repositoryArgs);
|
||||||
repositoryImpl = "helma.framework.repository.ZipRepository";
|
repositoryImpl = "helma.framework.repository.ZipRepository"; //$NON-NLS-1$
|
||||||
} else if (repositoryArgs.endsWith(".js")) {
|
} else if (repositoryArgs.endsWith(".js")) { //$NON-NLS-1$
|
||||||
repositoryArgs = findResource(repositoryArgs);
|
repositoryArgs = findResource(repositoryArgs);
|
||||||
repositoryImpl = "helma.framework.repository.SingleFileRepository";
|
repositoryImpl = "helma.framework.repository.SingleFileRepository"; //$NON-NLS-1$
|
||||||
} else {
|
} else {
|
||||||
repositoryArgs = findResource(repositoryArgs);
|
repositoryArgs = findResource(repositoryArgs);
|
||||||
repositoryImpl = "helma.framework.repository.FileRepository";
|
repositoryImpl = "helma.framework.repository.FileRepository"; //$NON-NLS-1$
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -491,42 +491,41 @@ public class ApplicationManager implements XmlRpcHandler {
|
||||||
rhandler.setResourceBase(staticContent.getPath());
|
rhandler.setResourceBase(staticContent.getPath());
|
||||||
rhandler.setWelcomeFiles(staticHome);
|
rhandler.setWelcomeFiles(staticHome);
|
||||||
|
|
||||||
staticContext = new ContextHandler(staticMountpoint);
|
staticContext = ApplicationManager.this.context.addContext(staticMountpoint, ""); //$NON-NLS-1$
|
||||||
ApplicationManager.this.context.addHandler(staticContext);
|
|
||||||
staticContext.setHandler(rhandler);
|
staticContext.setHandler(rhandler);
|
||||||
|
|
||||||
staticContext.start();
|
staticContext.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
appContext = new ServletContextHandler(context, pathPattern, true, true);
|
appContext = new ServletContextHandler(context, pathPattern, true, true);
|
||||||
Class<? extends EmbeddedServletClient> servletClass = servletClassName == null ?
|
Class servletClass = servletClassName == null ?
|
||||||
EmbeddedServletClient.class : Class.forName(servletClassName).asSubclass(EmbeddedServletClient.class);
|
EmbeddedServletClient.class : Class.forName(servletClassName);
|
||||||
ServletHolder holder = new ServletHolder(servletClass);
|
ServletHolder holder = new ServletHolder(servletClass);
|
||||||
holder.setInitParameter("application", appName);
|
holder.setInitParameter("application", appName);
|
||||||
appContext.addServlet(holder, "/*");
|
appContext.addServlet(holder, "/*");
|
||||||
|
|
||||||
if (this.cookieDomain != null) {
|
if (this.cookieDomain != null) {
|
||||||
holder.setInitParameter("cookieDomain", this.cookieDomain);
|
holder.setInitParameter("cookieDomain", this.cookieDomain); //$NON-NLS-1$
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.sessionCookieName != null) {
|
if (this.sessionCookieName != null) {
|
||||||
holder.setInitParameter("sessionCookieName", this.sessionCookieName);
|
holder.setInitParameter("sessionCookieName", this.sessionCookieName); //$NON-NLS-1$
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.protectedSessionCookie != null) {
|
if (this.protectedSessionCookie != null) {
|
||||||
holder.setInitParameter("protectedSessionCookie", this.protectedSessionCookie);
|
holder.setInitParameter("protectedSessionCookie", this.protectedSessionCookie); //$NON-NLS-1$
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.uploadLimit != null) {
|
if (this.uploadLimit != null) {
|
||||||
holder.setInitParameter("uploadLimit", this.uploadLimit);
|
holder.setInitParameter("uploadLimit", this.uploadLimit); //$NON-NLS-1$
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.uploadSoftfail != null) {
|
if (this.uploadSoftfail != null) {
|
||||||
holder.setInitParameter("uploadSoftfail", this.uploadSoftfail);
|
holder.setInitParameter("uploadSoftfail", this.uploadSoftfail); //$NON-NLS-1$
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.debug != null) {
|
if (this.debug != null) {
|
||||||
holder.setInitParameter("debug", this.debug);
|
holder.setInitParameter("debug", this.debug); //$NON-NLS-1$
|
||||||
}
|
}
|
||||||
|
|
||||||
if (protectedStaticDir != null) {
|
if (protectedStaticDir != null) {
|
||||||
|
@ -584,7 +583,7 @@ public class ApplicationManager implements XmlRpcHandler {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "[AppDescriptor "+this.app+"]";
|
return "[AppDescriptor "+this.app+"]"; //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,10 +41,10 @@ public class CommandlineRunner {
|
||||||
|
|
||||||
ServerConfig config = new ServerConfig();
|
ServerConfig config = new ServerConfig();
|
||||||
String commandStr = null;
|
String commandStr = null;
|
||||||
Vector<String> funcArgs = new Vector<>();
|
Vector funcArgs = new Vector();
|
||||||
|
|
||||||
// get possible environment setting for helma home
|
// get possible environment setting for helma home
|
||||||
if (System.getProperty("helma.home") != null) {
|
if (System.getProperty("helma.home")!=null) {
|
||||||
config.setHomeDir(new File(System.getProperty("helma.home")));
|
config.setHomeDir(new File(System.getProperty("helma.home")));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -110,7 +110,7 @@ public class CommandlineRunner {
|
||||||
server.shutdown();
|
server.shutdown();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* print the usage hints and prefix them with a message.
|
* print the usage hints and prefix them with a message.
|
||||||
|
|
|
@ -30,13 +30,11 @@ import java.util.HashSet;
|
||||||
* a utility method <code>getApplication</code> that can be used to determine
|
* a utility method <code>getApplication</code> that can be used to determine
|
||||||
* the name of the application trying to execute the action in question, if any.
|
* the name of the application trying to execute the action in question, if any.
|
||||||
*/
|
*/
|
||||||
@Deprecated
|
|
||||||
@SuppressWarnings("removal")
|
|
||||||
public class HelmaSecurityManager extends SecurityManager {
|
public class HelmaSecurityManager extends SecurityManager {
|
||||||
// The set of actions forbidden to application code.
|
// The set of actions forbidden to application code.
|
||||||
// We are pretty permissive, forbidding only System.exit()
|
// We are pretty permissive, forbidding only System.exit()
|
||||||
// and setting the security manager.
|
// and setting the security manager.
|
||||||
private final static HashSet<String> forbidden = new HashSet<>();
|
private final static HashSet forbidden = new HashSet();
|
||||||
|
|
||||||
static {
|
static {
|
||||||
forbidden.add("exitVM");
|
forbidden.add("exitVM");
|
||||||
|
@ -51,7 +49,7 @@ public class HelmaSecurityManager extends SecurityManager {
|
||||||
public void checkPermission(Permission p) {
|
public void checkPermission(Permission p) {
|
||||||
if (p instanceof RuntimePermission) {
|
if (p instanceof RuntimePermission) {
|
||||||
if (forbidden.contains(p.getName())) {
|
if (forbidden.contains(p.getName())) {
|
||||||
Class<?>[] classes = getClassContext();
|
Class[] classes = getClassContext();
|
||||||
|
|
||||||
for (int i = 0; i < classes.length; i++) {
|
for (int i = 0; i < classes.length; i++) {
|
||||||
if (classes[i].getClassLoader() instanceof AppClassLoader) {
|
if (classes[i].getClassLoader() instanceof AppClassLoader) {
|
||||||
|
@ -100,7 +98,7 @@ public class HelmaSecurityManager extends SecurityManager {
|
||||||
* @param status ...
|
* @param status ...
|
||||||
*/
|
*/
|
||||||
public void checkExit(int status) {
|
public void checkExit(int status) {
|
||||||
Class<?>[] classes = getClassContext();
|
Class[] classes = getClassContext();
|
||||||
|
|
||||||
for (int i = 0; i < classes.length; i++) {
|
for (int i = 0; i < classes.length; i++) {
|
||||||
if (classes[i].getClassLoader() instanceof AppClassLoader) {
|
if (classes[i].getClassLoader() instanceof AppClassLoader) {
|
||||||
|
@ -289,7 +287,7 @@ public class HelmaSecurityManager extends SecurityManager {
|
||||||
* @param clazz ...
|
* @param clazz ...
|
||||||
* @param which ...
|
* @param which ...
|
||||||
*/
|
*/
|
||||||
public void checkMemberAccess(Class<?> clazz, int which) {
|
public void checkMemberAccess(Class clazz, int which) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -306,7 +304,7 @@ public class HelmaSecurityManager extends SecurityManager {
|
||||||
* does not belong to any application.
|
* does not belong to any application.
|
||||||
*/
|
*/
|
||||||
protected String getApplication() {
|
protected String getApplication() {
|
||||||
Class<?>[] classes = getClassContext();
|
Class[] classes = getClassContext();
|
||||||
|
|
||||||
for (int i = 0; i < classes.length; i++) {
|
for (int i = 0; i < classes.length; i++) {
|
||||||
if (classes[i].getClassLoader() instanceof AppClassLoader) {
|
if (classes[i].getClassLoader() instanceof AppClassLoader) {
|
||||||
|
|
|
@ -16,6 +16,9 @@
|
||||||
|
|
||||||
package helma.main;
|
package helma.main;
|
||||||
|
|
||||||
|
import helma.util.*;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ShutdownHook that shuts down all running Helma applications on exit.
|
* ShutdownHook that shuts down all running Helma applications on exit.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -21,7 +21,6 @@ import org.eclipse.jetty.server.Connector;
|
||||||
import org.eclipse.jetty.server.HttpConfiguration;
|
import org.eclipse.jetty.server.HttpConfiguration;
|
||||||
import org.eclipse.jetty.server.HttpConnectionFactory;
|
import org.eclipse.jetty.server.HttpConnectionFactory;
|
||||||
import org.eclipse.jetty.server.ServerConnector;
|
import org.eclipse.jetty.server.ServerConnector;
|
||||||
import org.eclipse.jetty.util.resource.Resource;
|
|
||||||
import org.eclipse.jetty.xml.XmlConfiguration;
|
import org.eclipse.jetty.xml.XmlConfiguration;
|
||||||
|
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
|
@ -48,7 +47,7 @@ public class JettyServer {
|
||||||
http = new org.eclipse.jetty.server.Server();
|
http = new org.eclipse.jetty.server.Server();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
XmlConfiguration config = new XmlConfiguration(Resource.newResource(url));
|
XmlConfiguration config = new XmlConfiguration(url);
|
||||||
config.configure(http);
|
config.configure(http);
|
||||||
|
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
|
@ -60,7 +59,7 @@ public class JettyServer {
|
||||||
|
|
||||||
private JettyServer(InetSocketAddress webPort, Server server)
|
private JettyServer(InetSocketAddress webPort, Server server)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
|
|
||||||
http = new org.eclipse.jetty.server.Server();
|
http = new org.eclipse.jetty.server.Server();
|
||||||
|
|
||||||
// start embedded web server if port is specified
|
// start embedded web server if port is specified
|
||||||
|
@ -74,7 +73,7 @@ public class JettyServer {
|
||||||
connector.setHost(webPort.getAddress().getHostAddress());
|
connector.setHost(webPort.getAddress().getHostAddress());
|
||||||
connector.setPort(webPort.getPort());
|
connector.setPort(webPort.getPort());
|
||||||
connector.setIdleTimeout(30000);
|
connector.setIdleTimeout(30000);
|
||||||
// Removed deprecated method setSoLingerTime
|
connector.setSoLingerTime(-1);
|
||||||
connector.setAcceptorPriorityDelta(0);
|
connector.setAcceptorPriorityDelta(0);
|
||||||
connector.setAcceptQueueSize(0);
|
connector.setAcceptQueueSize(0);
|
||||||
|
|
||||||
|
|
|
@ -29,6 +29,8 @@ import java.io.*;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.net.*;
|
import java.net.*;
|
||||||
|
|
||||||
|
import helma.util.ResourceProperties;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Helma server main class.
|
* Helma server main class.
|
||||||
*/
|
*/
|
||||||
|
@ -65,14 +67,14 @@ public class Server implements Runnable {
|
||||||
// explicitly listed hosts.
|
// explicitly listed hosts.
|
||||||
public boolean paranoid;
|
public boolean paranoid;
|
||||||
private ApplicationManager appManager;
|
private ApplicationManager appManager;
|
||||||
private Vector<HelmaExtension> extensions;
|
private Vector extensions;
|
||||||
private Thread mainThread;
|
private Thread mainThread;
|
||||||
|
|
||||||
// configuration
|
// configuration
|
||||||
ServerConfig config;
|
ServerConfig config;
|
||||||
|
|
||||||
// map of server-wide database sources
|
// map of server-wide database sources
|
||||||
Hashtable<String, DbSource> dbSources;
|
Hashtable dbSources;
|
||||||
|
|
||||||
// the embedded web server
|
// the embedded web server
|
||||||
// protected Serve websrv;
|
// protected Serve websrv;
|
||||||
|
@ -430,10 +432,10 @@ public class Server implements Runnable {
|
||||||
// logger.debug("TimeZone = " +
|
// logger.debug("TimeZone = " +
|
||||||
// TimeZone.getDefault().getDisplayName(Locale.getDefault()));
|
// TimeZone.getDefault().getDisplayName(Locale.getDefault()));
|
||||||
|
|
||||||
dbSources = new Hashtable<String, DbSource>();
|
dbSources = new Hashtable();
|
||||||
|
|
||||||
// try to load the extensions
|
// try to load the extensions
|
||||||
extensions = new Vector<HelmaExtension>();
|
extensions = new Vector();
|
||||||
if (sysProps.getProperty("extensions") != null) {
|
if (sysProps.getProperty("extensions") != null) {
|
||||||
initExtensions();
|
initExtensions();
|
||||||
}
|
}
|
||||||
|
@ -450,8 +452,8 @@ public class Server implements Runnable {
|
||||||
String extClassName = tok.nextToken().trim();
|
String extClassName = tok.nextToken().trim();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Class<? extends HelmaExtension> extClass = Class.forName(extClassName).asSubclass(HelmaExtension.class);
|
Class extClass = Class.forName(extClassName);
|
||||||
HelmaExtension ext = (HelmaExtension) extClass.getDeclaredConstructor().newInstance();
|
HelmaExtension ext = (HelmaExtension) extClass.newInstance();
|
||||||
ext.init(this);
|
ext.init(this);
|
||||||
extensions.add(ext);
|
extensions.add(ext);
|
||||||
logger.info("Loaded: " + extClassName);
|
logger.info("Loaded: " + extClassName);
|
||||||
|
@ -570,9 +572,7 @@ public class Server implements Runnable {
|
||||||
String secManClass = sysProps.getProperty("securityManager");
|
String secManClass = sysProps.getProperty("securityManager");
|
||||||
|
|
||||||
if (secManClass != null) {
|
if (secManClass != null) {
|
||||||
@SuppressWarnings("removal")
|
|
||||||
SecurityManager secMan = (SecurityManager) Class.forName(secManClass)
|
SecurityManager secMan = (SecurityManager) Class.forName(secManClass)
|
||||||
.getDeclaredConstructor()
|
|
||||||
.newInstance();
|
.newInstance();
|
||||||
|
|
||||||
System.setSecurityManager(secMan);
|
System.setSecurityManager(secMan);
|
||||||
|
@ -764,7 +764,7 @@ public class Server implements Runnable {
|
||||||
*
|
*
|
||||||
* @return ...
|
* @return ...
|
||||||
*/
|
*/
|
||||||
public Vector<HelmaExtension> getExtensions() {
|
public Vector getExtensions() {
|
||||||
return extensions;
|
return extensions;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -805,3 +805,5 @@ public class Server implements Runnable {
|
||||||
return new InetSocketAddress(addr, port);
|
return new InetSocketAddress(addr, port);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -18,6 +18,7 @@ package helma.objectmodel;
|
||||||
|
|
||||||
import helma.framework.IPathElement;
|
import helma.framework.IPathElement;
|
||||||
import helma.framework.core.Application;
|
import helma.framework.core.Application;
|
||||||
|
import helma.framework.core.RequestEvaluator;
|
||||||
import helma.objectmodel.db.DbMapping;
|
import helma.objectmodel.db.DbMapping;
|
||||||
import helma.objectmodel.db.Relation;
|
import helma.objectmodel.db.Relation;
|
||||||
import helma.objectmodel.db.Node;
|
import helma.objectmodel.db.Node;
|
||||||
|
@ -63,8 +64,7 @@ public class TransientNode implements INode, Serializable {
|
||||||
created = lastmodified = System.currentTimeMillis();
|
created = lastmodified = System.currentTimeMillis();
|
||||||
this.app=app;
|
this.app=app;
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
private TransientNode() {
|
private TransientNode() {
|
||||||
app=null;
|
app=null;
|
||||||
}
|
}
|
||||||
|
@ -75,7 +75,7 @@ public class TransientNode implements INode, Serializable {
|
||||||
public TransientNode(Application app, String n) {
|
public TransientNode(Application app, String n) {
|
||||||
id = generateID();
|
id = generateID();
|
||||||
name = (n == null || n.length() == 0) ? id : n;
|
name = (n == null || n.length() == 0) ? id : n;
|
||||||
// HACK - decrease creation and last-modified timestamp by 1 so we notice
|
// HACK - decrease creation and last-modified timestamp by 1 so we notice
|
||||||
// modifications that take place immediately after object creation
|
// modifications that take place immediately after object creation
|
||||||
created = lastmodified = System.currentTimeMillis() - 1;
|
created = lastmodified = System.currentTimeMillis() - 1;
|
||||||
this.app = app;
|
this.app = app;
|
||||||
|
@ -378,7 +378,7 @@ public class TransientNode implements INode, Serializable {
|
||||||
}
|
}
|
||||||
|
|
||||||
private TransientProperty getProperty(String propname) {
|
private TransientProperty getProperty(String propname) {
|
||||||
TransientProperty prop = (propMap == null) ? null
|
TransientProperty prop = (propMap == null) ? null
|
||||||
: (TransientProperty) propMap.get(correctPropertyName(propname));
|
: (TransientProperty) propMap.get(correctPropertyName(propname));
|
||||||
|
|
||||||
// check if we have to create a virtual node
|
// check if we have to create a virtual node
|
||||||
|
@ -601,7 +601,7 @@ public class TransientNode implements INode, Serializable {
|
||||||
public synchronized void clearCacheNode() {
|
public synchronized void clearCacheNode() {
|
||||||
cacheNode = null;
|
cacheNode = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private String correctPropertyName(String propname) {
|
private String correctPropertyName(String propname) {
|
||||||
return app.correctPropertyName(propname);
|
return app.correctPropertyName(propname);
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,7 +22,6 @@ import helma.objectmodel.*;
|
||||||
import helma.objectmodel.dom.XmlDatabase;
|
import helma.objectmodel.dom.XmlDatabase;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.lang.reflect.InvocationTargetException;
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.sql.*;
|
import java.sql.*;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
@ -60,25 +59,19 @@ public final class NodeManager {
|
||||||
* Initialize the NodeManager for the given dbHome and
|
* Initialize the NodeManager for the given dbHome and
|
||||||
* application properties. An embedded database will be
|
* application properties. An embedded database will be
|
||||||
* created in dbHome if one doesn't already exist.
|
* created in dbHome if one doesn't already exist.
|
||||||
* @throws SecurityException
|
|
||||||
* @throws NoSuchMethodException
|
|
||||||
* @throws InvocationTargetException
|
|
||||||
* @throws IllegalArgumentException
|
|
||||||
*/
|
*/
|
||||||
public void init(File dbHome, Properties props)
|
public void init(File dbHome, Properties props)
|
||||||
throws DatabaseException, ClassNotFoundException,
|
throws DatabaseException, ClassNotFoundException,
|
||||||
IllegalAccessException, InstantiationException,
|
IllegalAccessException, InstantiationException {
|
||||||
IllegalArgumentException, InvocationTargetException,
|
|
||||||
NoSuchMethodException, SecurityException {
|
|
||||||
String cacheImpl = props.getProperty("cacheimpl", "helma.util.CacheMap");
|
String cacheImpl = props.getProperty("cacheimpl", "helma.util.CacheMap");
|
||||||
|
|
||||||
cache = (ObjectCache) Class.forName(cacheImpl).getDeclaredConstructor().newInstance();
|
cache = (ObjectCache) Class.forName(cacheImpl).newInstance();
|
||||||
cache.init(app);
|
cache.init(app);
|
||||||
|
|
||||||
String idgenImpl = props.getProperty("idGeneratorImpl");
|
String idgenImpl = props.getProperty("idGeneratorImpl");
|
||||||
|
|
||||||
if (idgenImpl != null) {
|
if (idgenImpl != null) {
|
||||||
idgen = (IDGenerator) Class.forName(idgenImpl).getDeclaredConstructor().newInstance();
|
idgen = (IDGenerator) Class.forName(idgenImpl).newInstance();
|
||||||
idgen.init(app);
|
idgen.init(app);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -32,12 +32,11 @@ public class SubnodeList implements Serializable {
|
||||||
|
|
||||||
transient protected long lastSubnodeFetch = 0;
|
transient protected long lastSubnodeFetch = 0;
|
||||||
transient protected long lastSubnodeChange = 0;
|
transient protected long lastSubnodeChange = 0;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Hide/disable zero argument constructor for subclasses
|
* Hide/disable zero argument constructor for subclasses
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("unused")
|
|
||||||
private SubnodeList() {}
|
private SubnodeList() {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -463,6 +463,8 @@ public class Transactor {
|
||||||
node.clearWriteLock();
|
node.clearWriteLock();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
long now = System.currentTimeMillis();
|
||||||
|
|
||||||
// set last subnode change times in parent nodes
|
// set last subnode change times in parent nodes
|
||||||
for (Iterator i = parentNodes.iterator(); i.hasNext(); ) {
|
for (Iterator i = parentNodes.iterator(); i.hasNext(); ) {
|
||||||
Node node = (Node) i.next();
|
Node node = (Node) i.next();
|
||||||
|
|
|
@ -23,12 +23,12 @@ import java.io.*;
|
||||||
/**
|
/**
|
||||||
* The base class for wrapped exceptions thrown by invocation of the scripting engine.
|
* The base class for wrapped exceptions thrown by invocation of the scripting engine.
|
||||||
* If the wrapped exception is a RhinoException, the script stack trace will be
|
* If the wrapped exception is a RhinoException, the script stack trace will be
|
||||||
* prepended to the actual java stack trace in stack dumps.
|
* prepended to the actual java stack trace in stack dumps.
|
||||||
*/
|
*/
|
||||||
public class ScriptingException extends Exception {
|
public class ScriptingException extends Exception {
|
||||||
|
|
||||||
private static final long serialVersionUID = -7191341724784015678L;
|
private static final long serialVersionUID = -7191341724784015678L;
|
||||||
|
|
||||||
String scriptStack = null;
|
String scriptStack = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -48,7 +48,14 @@ public class ScriptingException extends Exception {
|
||||||
*/
|
*/
|
||||||
private void setScriptStack(Throwable cause) {
|
private void setScriptStack(Throwable cause) {
|
||||||
if (cause instanceof RhinoException) {
|
if (cause instanceof RhinoException) {
|
||||||
scriptStack = ((RhinoException) cause).getScriptStackTrace();
|
FilenameFilter filter = new FilenameFilter() {
|
||||||
|
public boolean accept(File dir, String name) {
|
||||||
|
return name.endsWith(".js") ||
|
||||||
|
name.endsWith(".hac") ||
|
||||||
|
name.endsWith(".hsp");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
scriptStack = ((RhinoException) cause).getScriptStackTrace(filter);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -99,4 +106,4 @@ public class ScriptingException extends Exception {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -48,11 +48,11 @@ public class CompiledOrInterpretedModuleScriptProvider extends StrongCachingModu
|
||||||
// unlikely, but possible exception during loading the module script without compilation
|
// unlikely, but possible exception during loading the module script without compilation
|
||||||
Exception exception;
|
Exception exception;
|
||||||
// get the application's optimization level
|
// get the application's optimization level
|
||||||
boolean interpretedMode = cx.isInterpretedMode();
|
int optimizationLevel = cx.getOptimizationLevel();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// set the optimization level to not compile, but interpret
|
// set the optimization level to not compile, but interpret
|
||||||
cx.setInterpretedMode(true);
|
cx.setOptimizationLevel(-1);
|
||||||
// load the module script with the newly set optimization level
|
// load the module script with the newly set optimization level
|
||||||
ModuleScript moduleScript = super.getModuleScript(cx, moduleId, moduleUri, baseUri, paths);
|
ModuleScript moduleScript = super.getModuleScript(cx, moduleId, moduleUri, baseUri, paths);
|
||||||
// return the module script
|
// return the module script
|
||||||
|
@ -62,12 +62,12 @@ public class CompiledOrInterpretedModuleScriptProvider extends StrongCachingModu
|
||||||
exception = e;
|
exception = e;
|
||||||
} finally {
|
} finally {
|
||||||
// re-set the optimization
|
// re-set the optimization
|
||||||
cx.setInterpretedMode(interpretedMode);
|
cx.setOptimizationLevel(optimizationLevel);
|
||||||
}
|
}
|
||||||
|
|
||||||
// re-throw the exception catched when trying to load the module script without compilation
|
// re-throw the exception catched when trying to load the module script without compilation
|
||||||
throw exception;
|
throw exception;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -39,7 +39,7 @@ public class HopObjectCtor extends FunctionObject {
|
||||||
|
|
||||||
static Method hopObjCtor;
|
static Method hopObjCtor;
|
||||||
|
|
||||||
static long collectionId = 0;
|
static long collectionId = 0;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
try {
|
try {
|
||||||
|
@ -51,7 +51,7 @@ public class HopObjectCtor extends FunctionObject {
|
||||||
}
|
}
|
||||||
|
|
||||||
static final int attr = DONTENUM | PERMANENT;
|
static final int attr = DONTENUM | PERMANENT;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create and install a HopObject constructor.
|
* Create and install a HopObject constructor.
|
||||||
* Part of this is copied from o.m.j.FunctionObject.addAsConstructor().
|
* Part of this is copied from o.m.j.FunctionObject.addAsConstructor().
|
||||||
|
@ -149,7 +149,7 @@ public class HopObjectCtor extends FunctionObject {
|
||||||
private static final long serialVersionUID = -8041352998956882647L;
|
private static final long serialVersionUID = -8041352998956882647L;
|
||||||
|
|
||||||
public GetById(Scriptable scope) {
|
public GetById(Scriptable scope) {
|
||||||
ScriptRuntime.setFunctionProtoAndParent(this, Context.getCurrentContext(), scope);
|
ScriptRuntime.setFunctionProtoAndParent(this, scope);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -187,7 +187,7 @@ public class HopObjectCtor extends FunctionObject {
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getArity() {
|
public int getArity() {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getLength() {
|
public int getLength() {
|
||||||
|
@ -201,7 +201,7 @@ public class HopObjectCtor extends FunctionObject {
|
||||||
private static final long serialVersionUID = -4046933261468527204L;
|
private static final long serialVersionUID = -4046933261468527204L;
|
||||||
|
|
||||||
public HopCollection(Scriptable scope) {
|
public HopCollection(Scriptable scope) {
|
||||||
ScriptRuntime.setFunctionProtoAndParent(this, Context.getCurrentContext(), scope);
|
ScriptRuntime.setFunctionProtoAndParent(this, scope);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Object call(Context cx, Scriptable scope, Scriptable thisObj, Object[] args) {
|
public Object call(Context cx, Scriptable scope, Scriptable thisObj, Object[] args) {
|
||||||
|
|
|
@ -67,7 +67,7 @@ import org.mozilla.javascript.*;
|
||||||
* @author A. Sundararajan
|
* @author A. Sundararajan
|
||||||
* @since 1.6
|
* @since 1.6
|
||||||
*/
|
*/
|
||||||
public final class JSAdapter implements Function {
|
public final class JSAdapter implements Scriptable, Function {
|
||||||
private JSAdapter(Scriptable obj) {
|
private JSAdapter(Scriptable obj) {
|
||||||
setAdaptee(obj);
|
setAdaptee(obj);
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,16 +19,16 @@ public class JSONModuleSource extends ModuleSource {
|
||||||
@Override
|
@Override
|
||||||
public Reader getReader() {
|
public Reader getReader() {
|
||||||
StringBuffer content = new StringBuffer();
|
StringBuffer content = new StringBuffer();
|
||||||
content.append("module.exports = ");
|
content.append("module.exports = "); //$NON-NLS-1$
|
||||||
|
|
||||||
try {
|
try {
|
||||||
content.append(IOUtils.toString(this.getUri().toURL().openStream(), "UTF-8"));
|
content.append(IOUtils.toString(this.getUri().toURL().openStream()));
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
content.append("null");
|
content.append("null"); //$NON-NLS-1$
|
||||||
}
|
}
|
||||||
|
|
||||||
content.append(";");
|
content.append(";"); //$NON-NLS-1$
|
||||||
|
|
||||||
return new StringReader(content.toString());
|
return new StringReader(content.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
package helma.scripting.rhino;
|
package helma.scripting.rhino;
|
||||||
|
|
||||||
import helma.framework.core.*;
|
import helma.framework.core.*;
|
||||||
|
import helma.framework.ResponseTrans;
|
||||||
import helma.framework.repository.Resource;
|
import helma.framework.repository.Resource;
|
||||||
import org.mozilla.javascript.*;
|
import org.mozilla.javascript.*;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
|
@ -82,7 +83,7 @@ public class JavaObject extends NativeJavaObject {
|
||||||
Skin skin = engine.toSkin(skinobj, protoName);
|
Skin skin = engine.toSkin(skinobj, protoName);
|
||||||
|
|
||||||
if (skin != null) {
|
if (skin != null) {
|
||||||
skin.render(engine.reval, javaObject,
|
skin.render(engine.reval, javaObject,
|
||||||
(paramobj == Undefined.instance) ? null : paramobj);
|
(paramobj == Undefined.instance) ? null : paramobj);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -147,7 +148,7 @@ public class JavaObject extends NativeJavaObject {
|
||||||
return overload.containsKey(name) || super.has(name, start);
|
return overload.containsKey(name) || super.has(name, start);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get a named property from this object.
|
* Get a named property from this object.
|
||||||
*/
|
*/
|
||||||
public Object get(String name, Scriptable start) {
|
public Object get(String name, Scriptable start) {
|
||||||
|
|
|
@ -73,7 +73,7 @@ public class NodeModulesProvider extends UrlModuleSourceProvider {
|
||||||
// check if the file exists and is a file
|
// check if the file exists and is a file
|
||||||
if (file.exists() && file.isFile()) {
|
if (file.exists() && file.isFile()) {
|
||||||
// check if the file is a JSON file
|
// check if the file is a JSON file
|
||||||
if (file.getAbsolutePath().toLowerCase().endsWith(".json")) {
|
if (file.getAbsolutePath().toLowerCase().endsWith(".json")) { //$NON-NLS-1$
|
||||||
// return a JSON module source
|
// return a JSON module source
|
||||||
return new JSONModuleSource(null, file.toURI(), base, validator);
|
return new JSONModuleSource(null, file.toURI(), base, validator);
|
||||||
} else {
|
} else {
|
||||||
|
@ -83,7 +83,7 @@ public class NodeModulesProvider extends UrlModuleSourceProvider {
|
||||||
}
|
}
|
||||||
|
|
||||||
// lets assume the module is a JS file
|
// lets assume the module is a JS file
|
||||||
file = new File(new File(uri).getPath() + ".js");
|
file = new File(new File(uri).getPath() + ".js"); //$NON-NLS-1$
|
||||||
// check if a file.js exists and is a file
|
// check if a file.js exists and is a file
|
||||||
if (file.exists() && file.isFile()) {
|
if (file.exists() && file.isFile()) {
|
||||||
// do what would have been done anyways
|
// do what would have been done anyways
|
||||||
|
@ -91,7 +91,7 @@ public class NodeModulesProvider extends UrlModuleSourceProvider {
|
||||||
}
|
}
|
||||||
|
|
||||||
// lets assume the module is a JSON file
|
// lets assume the module is a JSON file
|
||||||
file = new File(new File(uri).getPath() + ".json");
|
file = new File(new File(uri).getPath() + ".json"); //$NON-NLS-1$
|
||||||
// check if a file.json exists and is a file
|
// check if a file.json exists and is a file
|
||||||
if (file.exists() && file.isFile()) {
|
if (file.exists() && file.isFile()) {
|
||||||
// return a JSON module source
|
// return a JSON module source
|
||||||
|
@ -135,17 +135,17 @@ public class NodeModulesProvider extends UrlModuleSourceProvider {
|
||||||
ModuleSource moduleSource;
|
ModuleSource moduleSource;
|
||||||
|
|
||||||
// lets assume that there is a "package.json" file in the directory
|
// lets assume that there is a "package.json" file in the directory
|
||||||
File packageFile = new File(directory, "package.json");
|
File packageFile = new File(directory, "package.json"); //$NON-NLS-1$
|
||||||
|
|
||||||
// check if the there is a "package.json" file in the directory
|
// check if the there is a "package.json" file in the directory
|
||||||
if (packageFile.exists() && packageFile.isFile()) {
|
if (packageFile.exists() && packageFile.isFile()) {
|
||||||
// parse the JSON file
|
// parse the JSON file
|
||||||
JsonObject json = JsonParser
|
JsonObject json = new JsonParser()
|
||||||
.parseString(new String(Files.readAllBytes(packageFile.toPath()))).getAsJsonObject();
|
.parse(new String(Files.readAllBytes(packageFile.toPath()))).getAsJsonObject();
|
||||||
// check if the JSON file defines a main JS file
|
// check if the JSON file defines a main JS file
|
||||||
if (json.has("main")) {
|
if (json.has("main")) { //$NON-NLS-1$
|
||||||
// get the main JS file, removing the filename extension
|
// get the main JS file, removing the filename extension
|
||||||
String main = FilenameUtils.removeExtension(json.get("main").getAsString());
|
String main = FilenameUtils.removeExtension(json.get("main").getAsString()); //$NON-NLS-1$
|
||||||
|
|
||||||
// load as file
|
// load as file
|
||||||
moduleSource = this.loadAsFile(new File(directory, main).toURI(), base, validator);
|
moduleSource = this.loadAsFile(new File(directory, main).toURI(), base, validator);
|
||||||
|
@ -158,7 +158,7 @@ public class NodeModulesProvider extends UrlModuleSourceProvider {
|
||||||
}
|
}
|
||||||
|
|
||||||
// load as index
|
// load as index
|
||||||
moduleSource = this.loadAsFile(new File(directory, "index").toURI(), base, validator);
|
moduleSource = this.loadAsFile(new File(directory, "index").toURI(), base, validator); //$NON-NLS-1$
|
||||||
// check if something was loaded
|
// check if something was loaded
|
||||||
if (moduleSource != null) {
|
if (moduleSource != null) {
|
||||||
// return the loaded module source
|
// return the loaded module source
|
||||||
|
|
|
@ -44,6 +44,7 @@ import org.mozilla.javascript.Undefined;
|
||||||
import org.mozilla.javascript.WrapFactory;
|
import org.mozilla.javascript.WrapFactory;
|
||||||
import org.mozilla.javascript.Wrapper;
|
import org.mozilla.javascript.Wrapper;
|
||||||
import org.mozilla.javascript.commonjs.module.RequireBuilder;
|
import org.mozilla.javascript.commonjs.module.RequireBuilder;
|
||||||
|
import org.mozilla.javascript.commonjs.module.provider.StrongCachingModuleScriptProvider;
|
||||||
import org.mozilla.javascript.tools.debugger.ScopeProvider;
|
import org.mozilla.javascript.tools.debugger.ScopeProvider;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
|
@ -1232,7 +1233,7 @@ public final class RhinoCore implements ScopeProvider {
|
||||||
|
|
||||||
protected void onContextCreated(Context cx) {
|
protected void onContextCreated(Context cx) {
|
||||||
cx.setWrapFactory(wrapper);
|
cx.setWrapFactory(wrapper);
|
||||||
cx.setInterpretedMode(optLevel < 0);
|
cx.setOptimizationLevel(optLevel);
|
||||||
cx.setInstructionObserverThreshold(10000);
|
cx.setInstructionObserverThreshold(10000);
|
||||||
if (Context.isValidLanguageVersion(languageVersion)) {
|
if (Context.isValidLanguageVersion(languageVersion)) {
|
||||||
cx.setLanguageVersion(languageVersion);
|
cx.setLanguageVersion(languageVersion);
|
||||||
|
|
|
@ -25,7 +25,7 @@ import java.io.Serializable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Serialization proxy/placeholder interface. This is used for
|
* Serialization proxy/placeholder interface. This is used for
|
||||||
* for various Helma and Rhino related classes..
|
* for various Helma and Rhino related classes..
|
||||||
*/
|
*/
|
||||||
public interface SerializationProxy extends Serializable {
|
public interface SerializationProxy extends Serializable {
|
||||||
public Object getObject(RhinoEngine engine);
|
public Object getObject(RhinoEngine engine);
|
||||||
|
@ -49,21 +49,19 @@ class ScriptBeanProxy implements SerializationProxy {
|
||||||
* @return the object represented by this proxy
|
* @return the object represented by this proxy
|
||||||
*/
|
*/
|
||||||
public Object getObject(RhinoEngine engine) {
|
public Object getObject(RhinoEngine engine) {
|
||||||
Object object = null;
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
object = engine.global.get(name, engine.global);
|
Object object = engine.global.get(name, engine.global);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
System.out.println(name);
|
System.out.println(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
return object;
|
return engine.global.get(name, engine.global);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Serialization proxy for the application object.
|
* Serialization proxy for the application object.
|
||||||
*
|
*
|
||||||
* @author Daniel Ruthardt
|
* @author Daniel Ruthardt
|
||||||
* @since 20170918
|
* @since 20170918
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -151,9 +151,7 @@ public class Profiler implements Debugger {
|
||||||
name.substring(prefixLength)
|
name.substring(prefixLength)
|
||||||
};
|
};
|
||||||
formatter.format("%1$7d ms %2$5d ms %3$6d %4$s%n", args);
|
formatter.format("%1$7d ms %2$5d ms %3$6d %4$s%n", args);
|
||||||
String result = formatter.toString();
|
return formatter.toString();
|
||||||
formatter.close();
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,10 +13,11 @@
|
||||||
* $Revision$
|
* $Revision$
|
||||||
* $Date$
|
* $Date$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package helma.scripting.rhino.debug;
|
package helma.scripting.rhino.debug;
|
||||||
|
|
||||||
import helma.framework.ResponseTrans;
|
import helma.framework.ResponseTrans;
|
||||||
|
import helma.util.HtmlEncoder;
|
||||||
import org.mozilla.javascript.*;
|
import org.mozilla.javascript.*;
|
||||||
import org.mozilla.javascript.debug.*;
|
import org.mozilla.javascript.debug.*;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
@ -84,7 +85,7 @@ public class Tracer implements Debugger {
|
||||||
* Called when execution is ready to start bytecode interpretation
|
* Called when execution is ready to start bytecode interpretation
|
||||||
* for entered a particular function or script.
|
* for entered a particular function or script.
|
||||||
*/
|
*/
|
||||||
public void onEnter(Context cx, Scriptable activation,
|
public void onEnter(Context cx, Scriptable activation,
|
||||||
Scriptable thisObj, Object[] args) {
|
Scriptable thisObj, Object[] args) {
|
||||||
|
|
||||||
time = System.currentTimeMillis();
|
time = System.currentTimeMillis();
|
||||||
|
@ -127,7 +128,7 @@ public class Tracer implements Debugger {
|
||||||
// Simplify Trace by dropping fast invocations. May be useful when looking
|
// Simplify Trace by dropping fast invocations. May be useful when looking
|
||||||
// looking for bottlenecks, but not when trying to find out wtf is going on
|
// looking for bottlenecks, but not when trying to find out wtf is going on
|
||||||
// if (time <= 1)
|
// if (time <= 1)
|
||||||
// return;
|
// return;
|
||||||
StringBuffer b = new StringBuffer("Trace: ");
|
StringBuffer b = new StringBuffer("Trace: ");
|
||||||
for (int i = 0; i < depth; i++)
|
for (int i = 0; i < depth; i++)
|
||||||
b.append(". ");
|
b.append(". ");
|
||||||
|
|
|
@ -25,7 +25,6 @@ import java.util.Enumeration;
|
||||||
import java.util.Vector;
|
import java.util.Vector;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.Reader;
|
import java.io.Reader;
|
||||||
import java.lang.reflect.InvocationTargetException;
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.sql.*;
|
import java.sql.*;
|
||||||
|
|
||||||
|
@ -63,13 +62,9 @@ public class DatabaseObject {
|
||||||
* Create a new database object based on a driver name, with driver on the classpath
|
* Create a new database object based on a driver name, with driver on the classpath
|
||||||
*
|
*
|
||||||
* @param driverName The class name of the JDBC driver
|
* @param driverName The class name of the JDBC driver
|
||||||
* @throws SecurityException
|
|
||||||
* @throws NoSuchMethodException
|
|
||||||
* @throws InvocationTargetException
|
|
||||||
* @throws IllegalArgumentException
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
DatabaseObject(String driverName) throws IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException {
|
DatabaseObject(String driverName) {
|
||||||
this.driverName = driverName;
|
this.driverName = driverName;
|
||||||
try {
|
try {
|
||||||
Class driverClass = Class.forName(driverName);
|
Class driverClass = Class.forName(driverName);
|
||||||
|
@ -78,7 +73,7 @@ public class DatabaseObject {
|
||||||
// System.err.println("##Bad class " + driverClass);
|
// System.err.println("##Bad class " + driverClass);
|
||||||
lastError = new RuntimeException("Class " + driverClass + " is not a JDBC driver");
|
lastError = new RuntimeException("Class " + driverClass + " is not a JDBC driver");
|
||||||
}
|
}
|
||||||
driverClass.getDeclaredConstructor().newInstance(); // may be needed by some drivers, harmless for others
|
driverClass.newInstance(); // may be needed by some drivers, harmless for others
|
||||||
} catch (ClassNotFoundException e) {
|
} catch (ClassNotFoundException e) {
|
||||||
// System.err.println("##Cannot find driver class: " + e);
|
// System.err.println("##Cannot find driver class: " + e);
|
||||||
// e.printStackTrace();
|
// e.printStackTrace();
|
||||||
|
@ -453,6 +448,51 @@ public class DatabaseObject {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* FIXME: dunno if this method is still used somewhere
|
||||||
|
public Object getProperty(String propertyName, int hash) {
|
||||||
|
//System.err.println(" &&& Getting property '" + propertyName + "'");
|
||||||
|
|
||||||
|
// Length property is firsy checked
|
||||||
|
|
||||||
|
// First return system or or prototype properties
|
||||||
|
if (propertyName.equals("length")) {
|
||||||
|
return Integer.valueOf(colNames.size());
|
||||||
|
} else {
|
||||||
|
if (resultSet == null) {
|
||||||
|
lastError = new SQLException("Attempt to access a released result set");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (!firstRowSeen) {
|
||||||
|
lastError = new SQLException("Attempt to access data before the first row is read");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
int index = -1; // indicates not a valid index value
|
||||||
|
try {
|
||||||
|
char c = propertyName.charAt(0);
|
||||||
|
if ('0' <= c && c <= '9') {
|
||||||
|
index = Integer.parseInt(propertyName);
|
||||||
|
}
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
} catch (StringIndexOutOfBoundsException e) { // for charAt
|
||||||
|
}
|
||||||
|
if (index>=0) {
|
||||||
|
return getProperty(index);
|
||||||
|
}
|
||||||
|
Object value = resultSet.getObject(propertyName);
|
||||||
|
// IServer.getLogger().log("&& @VALUE : " + value);
|
||||||
|
lastError = null;
|
||||||
|
return value;
|
||||||
|
} catch (SQLException e) {
|
||||||
|
// System.err.println("##Cannot get property '" + propertyName + "' " + e);
|
||||||
|
// e.printStackTrace();
|
||||||
|
lastError = e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
public Object getProperty(int index) {
|
public Object getProperty(int index) {
|
||||||
if (!firstRowSeen) {
|
if (!firstRowSeen) {
|
||||||
lastError = new SQLException("Attempt to access data before the first row is read");
|
lastError = new SQLException("Attempt to access data before the first row is read");
|
||||||
|
|
|
@ -39,7 +39,7 @@ import javax.mail.internet.MimeUtility;
|
||||||
* A JavaScript wrapper around a JavaMail message class to send
|
* A JavaScript wrapper around a JavaMail message class to send
|
||||||
* mail via SMTP from Helma
|
* mail via SMTP from Helma
|
||||||
*/
|
*/
|
||||||
public class MailObject extends ScriptableObject {
|
public class MailObject extends ScriptableObject implements Serializable {
|
||||||
|
|
||||||
private static final long serialVersionUID = -4834981850233741039L;
|
private static final long serialVersionUID = -4834981850233741039L;
|
||||||
|
|
||||||
|
|
|
@ -126,9 +126,7 @@ public class XmlObject {
|
||||||
writer.setDatabaseMode(dbmode);
|
writer.setDatabaseMode(dbmode);
|
||||||
writer.write(node);
|
writer.write(node);
|
||||||
writer.flush();
|
writer.flush();
|
||||||
String result = out.toString("UTF-8");
|
return out.toString("UTF-8");
|
||||||
writer.close();
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -217,7 +217,7 @@ public abstract class AbstractServletClient extends HttpServlet {
|
||||||
parseParameters(request, reqtrans, encoding);
|
parseParameters(request, reqtrans, encoding);
|
||||||
|
|
||||||
// read file uploads
|
// read file uploads
|
||||||
List<FileItem> uploads = null;
|
List uploads = null;
|
||||||
ServletRequestContext reqcx = new ServletRequestContext(request);
|
ServletRequestContext reqcx = new ServletRequestContext(request);
|
||||||
|
|
||||||
if (ServletFileUpload.isMultipartContent(reqcx)) {
|
if (ServletFileUpload.isMultipartContent(reqcx)) {
|
||||||
|
@ -517,9 +517,9 @@ public abstract class AbstractServletClient extends HttpServlet {
|
||||||
checksum[i] = (byte) (n);
|
checksum[i] = (byte) (n);
|
||||||
n >>>= 8;
|
n >>>= 8;
|
||||||
}
|
}
|
||||||
String etag = "\"" + new String(Base64.encodeBase64(checksum)) + "\"";
|
String etag = "\"" + new String(Base64.encodeBase64(checksum)) + "\""; //$NON-NLS-1$//$NON-NLS-2$
|
||||||
res.setHeader("ETag", etag);
|
res.setHeader("ETag", etag); //$NON-NLS-1$
|
||||||
String etagHeader = req.getHeader("If-None-Match");
|
String etagHeader = req.getHeader("If-None-Match"); //$NON-NLS-1$
|
||||||
if (etagHeader != null) {
|
if (etagHeader != null) {
|
||||||
StringTokenizer st = new StringTokenizer(etagHeader, ", \r\n");
|
StringTokenizer st = new StringTokenizer(etagHeader, ", \r\n");
|
||||||
while (st.hasMoreTokens()) {
|
while (st.hasMoreTokens()) {
|
||||||
|
@ -637,7 +637,7 @@ public abstract class AbstractServletClient extends HttpServlet {
|
||||||
* Put name and value pair in map. When name already exist, add value
|
* Put name and value pair in map. When name already exist, add value
|
||||||
* to array of values.
|
* to array of values.
|
||||||
*/
|
*/
|
||||||
private static void putMapEntry(Map<String, String[]> map, String name, String value) {
|
private static void putMapEntry(Map map, String name, String value) {
|
||||||
String[] newValues = null;
|
String[] newValues = null;
|
||||||
String[] oldValues = (String[]) map.get(name);
|
String[] oldValues = (String[]) map.get(name);
|
||||||
|
|
||||||
|
@ -653,9 +653,9 @@ public abstract class AbstractServletClient extends HttpServlet {
|
||||||
map.put(name, newValues);
|
map.put(name, newValues);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected List<FileItem> parseUploads(ServletRequestContext reqcx, RequestTrans reqtrans,
|
protected List parseUploads(ServletRequestContext reqcx, RequestTrans reqtrans,
|
||||||
final UploadStatus uploadStatus, String encoding)
|
final UploadStatus uploadStatus, String encoding)
|
||||||
throws FileUploadException, UnsupportedEncodingException {
|
throws FileUploadException, UnsupportedEncodingException {
|
||||||
// handle file upload
|
// handle file upload
|
||||||
DiskFileItemFactory factory = new DiskFileItemFactory();
|
DiskFileItemFactory factory = new DiskFileItemFactory();
|
||||||
FileUpload upload = new FileUpload(factory);
|
FileUpload upload = new FileUpload(factory);
|
||||||
|
@ -672,8 +672,8 @@ public abstract class AbstractServletClient extends HttpServlet {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
List<FileItem> uploads = upload.parseRequest(reqcx);
|
List uploads = upload.parseRequest(reqcx);
|
||||||
Iterator<FileItem> it = uploads.iterator();
|
Iterator it = uploads.iterator();
|
||||||
|
|
||||||
while (it.hasNext()) {
|
while (it.hasNext()) {
|
||||||
FileItem item = (FileItem) it.next();
|
FileItem item = (FileItem) it.next();
|
||||||
|
@ -705,7 +705,7 @@ public abstract class AbstractServletClient extends HttpServlet {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
HashMap<String, String[]> parameters = new HashMap<>();
|
HashMap parameters = new HashMap();
|
||||||
|
|
||||||
// Parse any query string parameters from the request
|
// Parse any query string parameters from the request
|
||||||
if (queryString != null) {
|
if (queryString != null) {
|
||||||
|
@ -764,7 +764,7 @@ public abstract class AbstractServletClient extends HttpServlet {
|
||||||
*
|
*
|
||||||
* @exception UnsupportedEncodingException if the data is malformed
|
* @exception UnsupportedEncodingException if the data is malformed
|
||||||
*/
|
*/
|
||||||
public static void parseParameters(Map<String, String[]> map, byte[] data, String encoding, boolean isPost)
|
public static void parseParameters(Map map, byte[] data, String encoding, boolean isPost)
|
||||||
throws UnsupportedEncodingException {
|
throws UnsupportedEncodingException {
|
||||||
if ((data != null) && (data.length > 0)) {
|
if ((data != null) && (data.length > 0)) {
|
||||||
int ix = 0;
|
int ix = 0;
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
|
|
||||||
package helma.servlet;
|
package helma.servlet;
|
||||||
|
|
||||||
|
import helma.framework.*;
|
||||||
import helma.framework.core.Application;
|
import helma.framework.core.Application;
|
||||||
import helma.main.*;
|
import helma.main.*;
|
||||||
import javax.servlet.*;
|
import javax.servlet.*;
|
||||||
|
|
|
@ -23,6 +23,7 @@ import java.util.StringTokenizer;
|
||||||
|
|
||||||
import org.apache.commons.codec.digest.DigestUtils;
|
import org.apache.commons.codec.digest.DigestUtils;
|
||||||
|
|
||||||
|
import helma.framework.repository.Resource;
|
||||||
import helma.framework.repository.Resource;
|
import helma.framework.repository.Resource;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Add table
Reference in a new issue