Mercurial Hosting > nabble
comparison src/nabble/view/web/template/UrlMapperNamespace.java @ 0:7ecd1a4ef557
add content
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Thu, 21 Mar 2019 19:15:52 -0600 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:7ecd1a4ef557 |
---|---|
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 } |