Mercurial Hosting > nabble
view 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 |
line wrap: on
line source
package nabble.view.web.template; import fschmidt.util.servlet.UrlMapping; import nabble.model.ModelHome; import nabble.model.Node; import nabble.model.Site; import nabble.naml.namespaces.BasicNamespace; import nabble.naml.compiler.Command; import nabble.naml.compiler.IPrintWriter; import nabble.naml.compiler.Interpreter; import nabble.naml.compiler.CommandSpec; import nabble.naml.compiler.Template; import nabble.naml.compiler.TemplatePrintWriter; import nabble.naml.compiler.Namespace; import nabble.view.lib.Jtp; import javax.servlet.http.HttpServletRequest; import java.net.MalformedURLException; import java.net.URL; import java.util.Collections; import java.util.HashMap; import java.util.Map; @Namespace ( name = "url_mapper", global = true ) public final class UrlMapperNamespace { private final String path; private final Map<String,String[]> params = new HashMap<String,String[]>(); private UrlMapperNamespace(HttpServletRequest request) { this( request.getServletPath() + Jtp.hideNull(request.getPathInfo()) ); } private UrlMapperNamespace(String path) { this.path = path; } @Command("path") public void _path(IPrintWriter out,Interpreter interp) { out.print( path ); } public static final CommandSpec set_parameter = new CommandSpec.Builder() .parameters("name") .dotParameter("value") .outputtedParameters() .build() ; @Command public void set_parameter(IPrintWriter out,Interpreter interp) { String name = interp.getArgString("name"); String value = interp.getArgString("value"); params.put(name,new String[]{value}); } public static UrlMapping getUrlMapping(HttpServletRequest request) { Site site = Jtp.getSite(request); if( site == null ) return null; Template template = site.getTemplate( "url mapper" , BasicNamespace.class, NabbleNamespace.class, UrlMapperNamespace.class ); if( template == null ) return null; UrlMapperNamespace umn = new UrlMapperNamespace(request); template.run( TemplatePrintWriter.NULL, Collections.<String,Object>emptyMap(), new BasicNamespace(template), new NabbleNamespace(site), umn ); if( umn.params.isEmpty() ) return null; return new UrlMapping(NamlServlet.class,umn.params); } public static Map<String,String> getParams(String urlStr) { try { URL url = new URL(urlStr); String domain = url.getHost(); Long siteId = Jtp.getSiteIdFromDomain(domain); if( siteId == null ) return null; Site site = ModelHome.getSite(siteId); Template template = site.getTemplate( "url mapper" , BasicNamespace.class, NabbleNamespace.class, UrlMapperNamespace.class ); if( template == null ) return null; UrlMapperNamespace umn = new UrlMapperNamespace(url.getPath()); template.run( TemplatePrintWriter.NULL, Collections.<String,Object>emptyMap(), new BasicNamespace(template), new NabbleNamespace(site), umn ); Map<String,String> params = new HashMap<String,String>(); for( Map.Entry<String,String[]> entry : umn.params.entrySet() ) { params.put( entry.getKey(), entry.getValue()[0] ); } return params; } catch(MalformedURLException e) { return null; } } public static Node getNodeFromUrl(String url) { Site site = Jtp.getSiteFromUrl(url); if( site == null ) return null; Map<String,String> params = getParams(url); if( params == null ) return null; try { return site.getNode( Long.parseLong( params.get("node") ) ); } catch(NumberFormatException e) { return null; } } }