c72688707a6c9bfbf14a15f265210a5c052a711f
[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         if(env.root != null) {
41             File sroot = new File(new File(env.root, "store"), name());
42             sysconfig.put("jsvc.storage", "file:" + sroot.getPath());
43         }
44         sysconfig.putAll(env.sysconfig);
45     }
46     
47     public RequestThread worker(Responder root, Request req, ThreadGroup tg, String name) {
48         java.net.Socket sk = ((ScgiRequest)req).sk;
49         if(req.path().equals("")) {
50             return(new ScgiReqThread(new RootRedirect(""), req, tg, name, sk));
51         } else {
52             return(new ScgiReqThread(root, RequestWrap.chpath(req, req.path().substring(1)), tg, name, sk));
53         }
54     }
55 }