summaryrefslogtreecommitdiff
path: root/src/model/util.js
blob: 11f131bd2b9af988c5cfa28d3901e449ebe62e87 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
"use strict"

/**
 * model utility functions:
 *    - convert from/to client/backend data representations
 */
define(['jquery', 'model/diff'],
function($, model_diff) {

    /**
     * read by adapting from backend format
     */
    function adapt_format_read_node(n_raw) {
        var ret;

        ret = $.extend({
            'type' : n_raw['__label_set'][0].toLowerCase(), // discard all
            // labels except
            'state' : 'perm',
        }, n_raw);

        delete ret.__label_set;

        return ret;
    }

    /**
     * write by adapting to backend format
     */
    function adapt_format_write_node(n_raw) {
        var ret = $.extend({
            '__label_set' : [n_raw.type],
        }, n_raw);

        delete ret.state;
        delete ret.status
        delete ret.type;

        return ret
    }

    /**
     * read by adapting from backend format
     */
    function adapt_format_read_link_ptr(l_raw) {
        var ret;

        ret = $.extend({
            '__src_id' : l_raw['__src_id'],
            '__dst_id' : l_raw['__dst_id'],
            'type' : l_raw['__label_set'][0].toLowerCase(), // discard all
            // labels except
            'state' : 'perm',
        }, l_raw);

        ret['name'] = ret['type'];

        delete ret.__type;

        return ret;
    }

    /**
     * write by adapting to backend format
     */
    function adapt_format_write_link(l_raw) {
        var ret = $.extend({
            '__src_id' : l_raw.source.id,
            '__dst_id' : l_raw.target.id,
            '__label_set' : [l_raw.name],
        }, l_raw);

        delete ret.__dst;
        delete ret.__src;
        delete ret.source; // introduced by d3 accessor methods
        delete ret.state;
        delete ret.status;
        delete ret.target;

        return ret;
    }

    /**
     * write adapt diff from node set, link set. sets may be passed by reference
     * as they are cloned
     */
    function adapt_format_write_topo_diff(n_set, l_set) {

        var new_n_set = $.extend([], n_set);
        var new_l_set = $.extend([], l_set);

        // filter out 'bubble' nodes
        new_n_set = new_n_set.filter(function(n) {
            return 'bubble' != n.type;
        });

        new_n_set = $.map(new_n_set, function(n, _) {
            return adapt_format_write_node(n);
        })

        new_l_set = $.map(new_l_set, function(l, _) {
            return adapt_format_write_link(l);
        })

        var topo_diff = new model_diff.new_topo_diff({
            node_set_add : new_n_set,
            link_set_add : new_l_set
        });
        return topo_diff;
    }

    return {
        adapt_format_read_node : adapt_format_read_node,
        adapt_format_read_link_ptr : adapt_format_read_link_ptr,
        adapt_format_write_node : adapt_format_write_node,
        adapt_format_write_link : adapt_format_write_link,
        adapt_format_write_topo_diff : adapt_format_write_topo_diff,
    }
});