Moved the SCGI storage root default into Environment.
[jsvc.git] / src / dolda / jsvc / scgi / DSContext.java
1 package dolda.jsvc.scgi;
2
3 import java.io.*;
4 import java.net.*;
5 import dolda.jsvc.*;
6 import dolda.jsvc.util.*;
7
8 public class DSContext extends SimpleContext {
9     public final long mtime;
10     public final ThreadContext tg;
11     private final Environment env;
12
13     private static String mangle(File f) {
14         String ret = f.getName();
15         int p = ret.lastIndexOf('.');
16         if(p > 0)
17             ret = ret.substring(0, p);
18         for(f = f.getParentFile(); f != null; f = f.getParentFile())
19             ret = f.getName() + "/" + ret;
20         return(ret);
21     }
22
23     private static URL makingmewanttokilljavac(File jar) {
24         try {
25             return(jar.toURI().toURL());
26         } catch(MalformedURLException e) {
27             throw(new RuntimeException(e));
28         }
29     }
30
31     public DSContext(File jar, Environment env) throws ThreadContext.CreateException {
32         super(URLClassLoader.newInstance(new URL[] {makingmewanttokilljavac(jar)}, env.libloader()), mangle(jar));
33         this.mtime = jar.lastModified();
34         this.env = env;
35         loadconfig();
36         this.tg = ThreadContext.create(this, loader);
37     }
38     
39     private void loadconfig() {
40         sysconfig.putAll(env.sysconfig);
41     }
42     
43     public RequestThread worker(Responder root, Request req, ThreadGroup tg, String name) {
44         java.net.Socket sk = ((ScgiRequest)req).sk;
45         if(req.path().equals("")) {
46             return(new ScgiReqThread(new RootRedirect(""), req, tg, name, sk));
47         } else {
48             return(new ScgiReqThread(root, RequestWrap.chpath(req, req.path().substring(1)), tg, name, sk));
49         }
50     }
51 }