summaryrefslogtreecommitdiff
path: root/src/model/util.js
blob: 43fa66db0277505b883db4dff1b4947ef37f33e7 (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
"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['__type'].toLowerCase(), // discard all
            // labels except
            'state' : 'temp',
        }, n_raw);

        delete ret.__label_set;

        return ret;
    }

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

        delete ret.type;
        delete ret.state;

        return ret
    }

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

        ret = $.extend({
            'sourceId' : l_raw['__src'],
            'targetId' : l_raw['__dst'],
            'type' : l_raw['__type'].toLowerCase(), // discard all
            // labels except
            'state' : 'temp',
        }, l_raw);

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

        delete ret.__src;
        delete ret.__dst;
        delete ret.__type;

        return ret;
    }

    /**
     * write by adapting to backend format
     */
    function adapt_format_write_link(l_raw) {
        var ret = $.extend({
            '__src' : l_raw.sourceId,
            '__dst' : l_raw.targetId,
            '__type' : 'textual_link',
        }, l_raw);

        delete ret.source;
        delete ret.target;
        delete ret.state;

        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 : adapt_format_read_link,
        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,
    }
});