Mercurial Hosting > nabble
view src/nabble/view/web/template/RequestNamespace.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.java.HtmlUtils; import fschmidt.util.servlet.ServletUtils; import nabble.model.Node; import nabble.model.Site; import nabble.model.ViewCount; import nabble.naml.compiler.Command; import nabble.naml.compiler.CommandSpec; import nabble.naml.compiler.IPrintWriter; import nabble.naml.compiler.Interpreter; import nabble.naml.compiler.Namespace; import nabble.naml.compiler.ScopedInterpreter; import nabble.naml.namespaces.StringList; import nabble.naml.namespaces.TemplateException; import nabble.view.lib.Jtp; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @Namespace ( name = "http_request", global = true ) public class RequestNamespace { public final HttpServletRequest request; public RequestNamespace(HttpServletRequest request) { this.request = request; } public static final CommandSpec NAME = new CommandSpec.Builder() .dotParameter("name") .build() ; public static final CommandSpec get_parameter = NAME; @Command public void get_parameter(IPrintWriter out,Interpreter interp) { String name = interp.getArgString("name"); out.print( request.getParameter(name) ); } public static final CommandSpec get_request_header = NAME; @Command public void get_request_header(IPrintWriter out,Interpreter interp) { String name = interp.getArgString("name"); out.print( request.getHeader(name) ); } public static final CommandSpec get_cookie_value = NAME; @Command public void get_cookie_value(IPrintWriter out,Interpreter interp) { String name = interp.getArgString("name"); out.print( ServletUtils.getCookieValue(request, name) ); } @Command public void request_method(IPrintWriter out,Interpreter interp) { out.print( request.getMethod() ); } @Command public void servlet_path(IPrintWriter out,Interpreter interp) { out.print( request.getServletPath() ); } @Command public void server_name(IPrintWriter out,Interpreter interp) { out.print( request.getServerName() ); } @Command public void current_url(IPrintWriter out,Interpreter interp) { out.print( interp.encode( ServletUtils.getCurrentURL(request) ) ); } @Command public void current_path(IPrintWriter out,Interpreter interp) { out.print( interp.encode( Jtp.getCurrentPath(request) ) ); } // overridden in ServletNamespace public static final CommandSpec get_node_from_request_parameter = CommandSpec.DO; @Command public void get_node_from_request_parameter(IPrintWriter out,ScopedInterpreter<NodeNamespace> interp) throws IOException, ServletException, TemplateException { Node node = NabbleNamespace.current().site().getNode( Jtp.getLong(request, "node") ); if( node != null ) out.print( interp.getArg(new NodeNamespace(node),"do") ); } public static final CommandSpec get_parameter_values = CommandSpec.DO() .parameters("name") .build() ; @Command public void get_parameter_values(IPrintWriter out,ScopedInterpreter<ParameterValueList> interp) throws IOException, ServletException { String name = interp.getArgString("name"); String[] values = request.getParameterValues(name); List<String> list = values == null ? Collections.<String>emptyList() : Arrays.asList(values); Object block = interp.getArg(new ParameterValueList(list),"do"); out.print(block); } public static final CommandSpec get_parameters_pipe_separated = CommandSpec.DO() .parameters("name") .build() ; @Command public void get_parameters_pipe_separated(IPrintWriter out,ScopedInterpreter<ParameterValueList> interp) { String name = interp.getArgString("name"); String values = request.getParameter(name); List<String> list = values == null ? Collections.<String>emptyList() : Arrays.asList(values.split("\\|")); for (int i = 0; i < list.size(); i++) { list.set(i, HtmlUtils.urlDecode(list.get(i))); } Object block = interp.getArg(new ParameterValueList(list),"do"); out.print(block); } @Namespace ( name = "parameter_value_list", global = true ) public static final class ParameterValueList extends StringList { ParameterValueList(List<String> values) { super(values); } public List<String> values() { return elements; } @Command public void current_parameter_value(IPrintWriter out,Interpreter interp) { out.print(get()); } // hack for now private Map<String,Integer> views = null; public static final CommandSpec node_views = new CommandSpec.Builder() .parameters("node_id") .build() ; @Command public void node_views(IPrintWriter out,Interpreter interp) { if( views == null ) { Site site = NabbleNamespace.current().site(); List<Long> ids = new ArrayList<Long>(); for( String value : elements ) { ids.add(Long.parseLong(value)); } views = new HashMap<String,Integer>(); for( Map.Entry<Long,Integer> entry : ViewCount.getCounts(site,ids).entrySet() ) { views.put( Long.toString(entry.getKey()), entry.getValue() ); } } String nodeId = interp.getArgString("node_id"); out.print( views.get(nodeId) ); } } @Command public void request_base_url(IPrintWriter out,Interpreter interp) { out.print( interp.encode( Jtp.getBaseUrl(request) ) ); } }