0
|
1 package nabble.view.web.template;
|
|
2
|
|
3 import fschmidt.util.servlet.UrlMapping;
|
|
4 import nabble.model.ModelHome;
|
|
5 import nabble.model.Node;
|
|
6 import nabble.model.Site;
|
|
7 import nabble.naml.namespaces.BasicNamespace;
|
|
8 import nabble.naml.compiler.Command;
|
|
9 import nabble.naml.compiler.IPrintWriter;
|
|
10 import nabble.naml.compiler.Interpreter;
|
|
11 import nabble.naml.compiler.CommandSpec;
|
|
12 import nabble.naml.compiler.Template;
|
|
13 import nabble.naml.compiler.TemplatePrintWriter;
|
|
14 import nabble.naml.compiler.Namespace;
|
|
15 import nabble.view.lib.Jtp;
|
|
16
|
|
17 import javax.servlet.http.HttpServletRequest;
|
|
18 import java.net.MalformedURLException;
|
|
19 import java.net.URL;
|
|
20 import java.util.Collections;
|
|
21 import java.util.HashMap;
|
|
22 import java.util.Map;
|
|
23
|
|
24
|
|
25 @Namespace (
|
|
26 name = "url_mapper",
|
|
27 global = true
|
|
28 )
|
|
29 public final class UrlMapperNamespace {
|
|
30 private final String path;
|
|
31 private final Map<String,String[]> params = new HashMap<String,String[]>();
|
|
32
|
|
33 private UrlMapperNamespace(HttpServletRequest request) {
|
|
34 this( request.getServletPath() + Jtp.hideNull(request.getPathInfo()) );
|
|
35 }
|
|
36
|
|
37 private UrlMapperNamespace(String path) {
|
|
38 this.path = path;
|
|
39 }
|
|
40
|
|
41 @Command("path") public void _path(IPrintWriter out,Interpreter interp) {
|
|
42 out.print( path );
|
|
43 }
|
|
44
|
|
45 public static final CommandSpec set_parameter = new CommandSpec.Builder()
|
|
46 .parameters("name")
|
|
47 .dotParameter("value")
|
|
48 .outputtedParameters()
|
|
49 .build()
|
|
50 ;
|
|
51
|
|
52 @Command public void set_parameter(IPrintWriter out,Interpreter interp) {
|
|
53 String name = interp.getArgString("name");
|
|
54 String value = interp.getArgString("value");
|
|
55 params.put(name,new String[]{value});
|
|
56 }
|
|
57
|
|
58 public static UrlMapping getUrlMapping(HttpServletRequest request) {
|
|
59 Site site = Jtp.getSite(request);
|
|
60 if( site == null )
|
|
61 return null;
|
|
62 Template template = site.getTemplate( "url mapper" ,
|
|
63 BasicNamespace.class, NabbleNamespace.class, UrlMapperNamespace.class
|
|
64 );
|
|
65 if( template == null )
|
|
66 return null;
|
|
67 UrlMapperNamespace umn = new UrlMapperNamespace(request);
|
|
68 template.run( TemplatePrintWriter.NULL, Collections.<String,Object>emptyMap(),
|
|
69 new BasicNamespace(template), new NabbleNamespace(site), umn
|
|
70 );
|
|
71 if( umn.params.isEmpty() )
|
|
72 return null;
|
|
73 return new UrlMapping(NamlServlet.class,umn.params);
|
|
74 }
|
|
75
|
|
76 public static Map<String,String> getParams(String urlStr) {
|
|
77 try {
|
|
78 URL url = new URL(urlStr);
|
|
79 String domain = url.getHost();
|
|
80 Long siteId = Jtp.getSiteIdFromDomain(domain);
|
|
81 if( siteId == null )
|
|
82 return null;
|
|
83 Site site = ModelHome.getSite(siteId);
|
|
84 Template template = site.getTemplate( "url mapper" ,
|
|
85 BasicNamespace.class, NabbleNamespace.class, UrlMapperNamespace.class
|
|
86 );
|
|
87 if( template == null )
|
|
88 return null;
|
|
89 UrlMapperNamespace umn = new UrlMapperNamespace(url.getPath());
|
|
90 template.run( TemplatePrintWriter.NULL, Collections.<String,Object>emptyMap(),
|
|
91 new BasicNamespace(template), new NabbleNamespace(site), umn
|
|
92 );
|
|
93 Map<String,String> params = new HashMap<String,String>();
|
|
94 for( Map.Entry<String,String[]> entry : umn.params.entrySet() ) {
|
|
95 params.put( entry.getKey(), entry.getValue()[0] );
|
|
96 }
|
|
97 return params;
|
|
98 } catch(MalformedURLException e) {
|
|
99 return null;
|
|
100 }
|
|
101 }
|
|
102
|
|
103 public static Node getNodeFromUrl(String url) {
|
|
104 Site site = Jtp.getSiteFromUrl(url);
|
|
105 if( site == null )
|
|
106 return null;
|
|
107 Map<String,String> params = getParams(url);
|
|
108 if( params == null )
|
|
109 return null;
|
|
110 try {
|
|
111 return site.getNode( Long.parseLong( params.get("node") ) );
|
|
112 } catch(NumberFormatException e) {
|
|
113 return null;
|
|
114 }
|
|
115 }
|
|
116
|
|
117 }
|