Mercurial Hosting > nabble
diff src/nabble/view/web/forum/NodeEditorNamespace.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 diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/nabble/view/web/forum/NodeEditorNamespace.java Thu Mar 21 19:15:52 2019 -0600 @@ -0,0 +1,189 @@ +package nabble.view.web.forum; + +import nabble.model.Message; +import nabble.model.ModelException; +import nabble.model.Node; +import nabble.model.export.Export; +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.TemplateException; +import nabble.view.lib.Permissions; +import nabble.view.web.template.NodeNamespace; +import nabble.view.web.template.ServletNamespace; +import nabble.view.web.template.UrlMapperNamespace; + +import java.util.Calendar; + + +@Namespace ( + name = "node_editor", + global = true +) +public final class NodeEditorNamespace { + private final Node node; + private final ServletNamespace servletNs; + + public NodeEditorNamespace(Node node,ServletNamespace servletNs) { + this.node = node; + this.servletNs = servletNs; + } + + public Node node() { + return node; + } + + private Node getLocalNode(String url) throws ModelException.InvalidPermalink { + url = url.trim(); + if (url.length() == 0) + return null; + Node n = UrlMapperNamespace.getNodeFromUrl(url); + if (n != null) { + return n.getSite().equals(node.getSite())? n : null; + } + // No app found. Let's check if this is a permalink url... + n = Permalink.getPostFromUrl(url); + if (n == null) + throw new ModelException.InvalidPermalink(); + return n.getSite().equals(node.getSite())? n : null; + } + + public static final CommandSpec edited_node = CommandSpec.DO; + + @Command public void edited_node(IPrintWriter out,ScopedInterpreter<NodeNamespace> interp) { + NodeNamespace ns = new NodeNamespace(node); + out.print( interp.getArg(ns,"do") ); + } + + public static final CommandSpec save_node = CommandSpec.NO_OUTPUT; + + @Command public void save_node(IPrintWriter out,Interpreter interp) + throws ModelException + { + if( node.isInDb() ) + node.update(); + else + node.insert(true); + } + + public static final CommandSpec set_parent_url = new CommandSpec.Builder() + .parameters("parent_url") + .build() + ; + + @Command public void set_parent_url(IPrintWriter out,Interpreter interp) + throws TemplateException + { + String url = interp.getArgString("parent_url"); + Node parent = getLocalNode(url); + if( node.equals(parent) ) + throw TemplateException.newInstance("same_node_loop"); + node.changeParent(parent); + } + + public static final CommandSpec set_subject = new CommandSpec.Builder() + .parameters("subject") + .build() + ; + + @Command public void set_subject(IPrintWriter out,Interpreter interp) + throws ModelException + { + String subject = interp.getArgString("subject"); + node.setSubject(subject); + } + + public static final CommandSpec set_message = new CommandSpec.Builder() + .parameters("message","is_html") + .build() + ; + + @Command public void set_message(IPrintWriter out,Interpreter interp) + throws ModelException + { + Message.Format msgFmt = interp.getArgAsBoolean("is_html") ? Message.Format.HTML : Message.Format.TEXT; + String message = interp.getArgString("message"); + node.setMessage(message,msgFmt); + } + + public static final CommandSpec set_type = new CommandSpec.Builder() + .parameters("type") + .build() + ; + + @Command public void set_type(IPrintWriter out,Interpreter interp) + throws ModelException + { + String type = interp.getArgString("type"); + node.setType(type); + } + + public static final CommandSpec set_when_created = new CommandSpec.Builder() + .parameters("date") + .build() + ; + + @Command public void set_when_created(IPrintWriter out,Interpreter interp) + throws ModelException + { + String date = interp.getArgString("date"); + try { + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(Long.valueOf(date)); + node.setWhenCreated(cal.getTime()); + } catch (NumberFormatException e) { + throw ModelException.newInstance("invalid_date", "Invalid date in milliseconds"); + } + } + + + public static final CommandSpec remove_permissions = CommandSpec.NO_OUTPUT; + + @Command public void remove_permissions(IPrintWriter out,Interpreter interp) { + Permissions.removePermissions(node); + } + + public static final CommandSpec add_permission = CommandSpec.NO_OUTPUT() + .parameters("permission") + .optionalParameters("group") + .build() + ; + + @Command public void add_permission(IPrintWriter out,Interpreter interp) { + String perm = interp.getArgString("permission"); + String group = interp.getArgString("group"); + if( group == null ) + Permissions.addPermission(node,perm); + else + Permissions.addPermission(node,perm,group); + } + + public static final CommandSpec remove_permission = CommandSpec.NO_OUTPUT() + .parameters("permission") + .optionalParameters("group") + .build() + ; + + @Command public void remove_permission(IPrintWriter out,Interpreter interp) { + String group = interp.getArgString("group"); + String perm = interp.getArgString("permission"); + if (group == null) + Permissions.removePermission(node,perm); + else + Permissions.removePermission(node,perm,group); + } + + public static final CommandSpec is_valid_export_permalink = new CommandSpec.Builder() + .parameters("permalink") + .build() + ; + + @Command public void is_valid_export_permalink(IPrintWriter out,Interpreter interp) + throws ModelException + { + out.print(Export.isValidExportServer(interp.getArgString("permalink"))); + } +}