view src/nabble/view/web/template/InstantMailNamespace.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 java.util.List;
import java.util.ArrayList;
import java.util.Map;
import nabble.model.Node;
import nabble.model.Subscription;
import nabble.model.User;
import nabble.naml.compiler.Command;
import nabble.naml.compiler.CommandSpec;
import nabble.naml.compiler.Interpreter;
import nabble.naml.compiler.IPrintWriter;
import nabble.naml.compiler.Namespace;
import nabble.naml.compiler.ScopedInterpreter;


@Namespace (
	name = "instant_mail",
	global = true
)
public final class InstantMailNamespace {
	private final Node node;
	private final Map<User,Subscription> subscriptionMap;

	public InstantMailNamespace(Node node,Map<User,Subscription> subscriptionMap) {
		this.node = node;
		this.subscriptionMap = subscriptionMap;
	}

	public static final CommandSpec new_node = CommandSpec.DO;

	@Command public void new_node(IPrintWriter out,ScopedInterpreter<NodeNamespace> interp) {
		NodeNamespace nodeNs = new NodeNamespace(node);
		out.print( interp.getArg(nodeNs,"do") );
	}

	public static final CommandSpec remove_from_instant_mail = CommandSpec.NO_OUTPUT()
		.dotParameter("user")
		.build()
	;

	@Command public void remove_from_instant_mail(IPrintWriter out,Interpreter interp) {
		UserNamespace ns = interp.getArgAsNamespace(UserNamespace.class,"user");
		subscriptionMap.remove(ns.user());
	}

	public static final CommandSpec subscription_list = CommandSpec.DO;

	@Command public void subscription_list(IPrintWriter out,ScopedInterpreter<SubscriptionNamespace.SubscriptionList> interp) {
		List<Subscription> list = new ArrayList<Subscription>(subscriptionMap.values());
		out.print( interp.getArg(new SubscriptionNamespace.SubscriptionList(list),"do") );
	}

}