aboutsummaryrefslogtreecommitdiff
path: root/src/nodetree_virtual.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/nodetree_virtual.erl')
-rw-r--r--src/nodetree_virtual.erl95
1 files changed, 95 insertions, 0 deletions
diff --git a/src/nodetree_virtual.erl b/src/nodetree_virtual.erl
new file mode 100644
index 000000000..7e6fdefa1
--- /dev/null
+++ b/src/nodetree_virtual.erl
@@ -0,0 +1,95 @@
+%%% ====================================================================
+%%% ``The contents of this file are subject to the Erlang Public License,
+%%% Version 1.1, (the "License"); you may not use this file except in
+%%% compliance with the License. You should have received a copy of the
+%%% Erlang Public License along with this software. If not, it can be
+%%% retrieved via the world wide web at http://www.erlang.org/.
+%%%
+%%% Software distributed under the License is distributed on an "AS IS"
+%%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%%% the License for the specific language governing rights and limitations
+%%% under the License.
+%%%
+%%% The Initial Developer of the Original Code is ProcessOne.
+%%% Portions created by ProcessOne are Copyright 2006-2013, ProcessOne
+%%% All Rights Reserved.''
+%%% This software is copyright 2006-2013, ProcessOne.
+%%%
+%%%
+%%% @copyright 2006-2013 ProcessOne
+%%% @author Christophe Romain <christophe.romain@process-one.net>
+%%% [http://www.process-one.net/]
+%%% @version {@vsn}, {@date} {@time}
+%%% @end
+%%% ====================================================================
+
+%%% @doc The module <strong>{@module}</strong> is the PubSub node tree plugin that
+%%% allow virtual nodes handling.
+%%% <p>PubSub node tree plugins are using the {@link gen_nodetree} behaviour.</p>
+%%% <p>This plugin development is still a work in progress. Due to optimizations in
+%%% mod_pubsub, this plugin can not work anymore without altering functioning.
+%%% Please, send us comments, feedback and improvements.</p>
+
+-module(nodetree_virtual).
+
+-author('christophe.romain@process-one.net').
+
+-include("pubsub.hrl").
+
+-include("jlib.hrl").
+
+-behaviour(gen_pubsub_nodetree).
+
+-export([init/3, terminate/2, options/0, set_node/1,
+ get_node/3, get_node/2, get_node/1, get_nodes/2,
+ get_nodes/1, get_parentnodes/3, get_parentnodes_tree/3,
+ get_subnodes/3, get_subnodes_tree/3, create_node/6,
+ delete_node/2]).
+
+%% ================
+%% API definition
+%% ================
+
+init(_Host, _ServerHost, _Opts) -> ok.
+
+terminate(_Host, _ServerHost) -> ok.
+
+options() -> [{virtual_tree, true}].
+
+set_node(_NodeRecord) -> ok.
+
+get_node(Host, Node, _From) -> get_node(Host, Node).
+
+get_node(Host, Node) -> get_node({Host, Node}).
+
+get_node({Host, _} = NodeId) ->
+ Record = #pubsub_node{nodeid = NodeId, id = NodeId},
+ Module = jlib:binary_to_atom(<<"node_",
+ (Record#pubsub_node.type)/binary>>),
+ Options = Module:options(),
+ Owners = [{<<"">>, Host, <<"">>}],
+ Record#pubsub_node{owners = Owners, options = Options}.
+
+get_nodes(Host, _From) -> get_nodes(Host).
+
+get_nodes(_Host) -> [].
+
+get_parentnodes(_Host, _Node, _From) -> [].
+
+get_parentnodes_tree(_Host, _Node, _From) -> [].
+
+get_subnodes(Host, Node, _From) ->
+ get_subnodes(Host, Node).
+
+get_subnodes(_Host, _Node) -> [].
+
+get_subnodes_tree(Host, Node, _From) ->
+ get_subnodes_tree(Host, Node).
+
+get_subnodes_tree(_Host, _Node) -> [].
+
+create_node(Host, Node, _Type, _Owner, _Options,
+ _Parents) ->
+ {error, {virtual, {Host, Node}}}.
+
+delete_node(Host, Node) -> [get_node(Host, Node)].