Free cookie consent management tool by TermsFeed Policy Generator

source: branches/OaaS/HeuristicLab.Services.Optimization.Web/Content/Datatypemapping.js @ 9305

Last change on this file since 9305 was 9227, checked in by fschoepp, 11 years ago

#1888:

  • Experiments will be saved as JSON elements within the blob store.
  • Added simple model and JSON converters.
  • Backend stores and runs experiments.
  • Updated interfaces to save/read experiments.
  • Added a binding to automatically map incoming JSON ajax requests to experiment models.
  • Added the javascript DatatypeMapper to map parameter inputs to the right html elements and vice versa.
  • Added smartwizard to generate Wizards for creating new experiments (New.cshtml).
File size: 5.4 KB
Line 
1function DatatypeMapper() {
2}
3
4DatatypeMapper.prototype.mapHtml = function (property) {
5    var parameter = property.Value;
6    var key = property.Name;
7    if (property.Options) {
8        return DatatypeMapper_mapStrings(property.Name, property.Options, property.Value);
9    }
10    else if (parameter instanceof Array) {
11        // parameter is a vector of strings
12        if (parameter[0] instanceof String || typeof (parameter[0]) == 'string') {
13            return DatatypeMapper_mapStrings(key, parameter);
14
15        }
16        // parameter is a vector of numbers
17        else if (!isNaN(parameter[0])) {
18            return DatatypeMapper_mapNumbers(key, parameter);
19        }
20        // parameter is a matrix of numbers
21        else {
22            return DatatypeMapper_mapMatrix(key, parameter);
23        }
24
25    }
26    else if (typeof (parameter) == 'boolean') {
27        return DatatypeMapper_mapBoolean(key, parameter);
28    }
29    // parameter is a number
30    else if (!isNaN(parameter)) {
31        return DatatypeMapper_mapNumber(key, parameter);
32    }
33    return 'No mapping for ' + typeof (parameter) + ' (Key: ' + key + ')';
34}
35
36
37function DatatypeMapper_mapStrings(key, param, selected) {
38  // http://stackoverflow.com/questions/4814512/how-to-create-dropdown-list-dynamically-using-jquery
39  var s = $('<select name="' + key + '"/>');
40  for (var i = 0; i < param.length; i++) {
41    $('<option />', { value: param[i], text: param[i] }).appendTo(s);
42  }
43  s.val(selected);
44  return s;
45}
46
47function DatatypeMapper_mapNumber(key, param) {
48  return $('<input type="text" name="' + key + '" />').val(param);
49}
50
51function DatatypeMapper_mapBoolean(key, param) {
52  var s = $('<select name="' + key + '"/>');
53  $('<option />', { value: 'true', text: 'true' }).appendTo(s);
54  $('<option />', { value: 'false', text: 'false' }).appendTo(s);
55  return s;
56}
57
58function DatatypeMapper_mapNumbers(key, param) {
59  // http: //stackoverflow.com/questions/8749236/create-table-with-jquery-append
60  var table = $('<table></table>').addClass('editableTable');
61  var head = $('<thead></thead>');
62  // create head elements
63  var headerRow = $('<tr></tr>');
64  $('<td />').text(key + ' Column').appendTo(headerRow); 
65  headerRow.appendTo(head);
66  head.appendTo(table);
67  var body = $('<tbody></tbody>');
68  for (var i = 0; i < param.length; i++) {
69    var row = $('<tr></tr>');
70    var td = $('<td />').appendTo(row);
71    $('<input type="text" name="' + key + '_' + i + '" />').val(param[i]).appendTo(td);   
72    row.appendTo(body);
73  }
74  body.appendTo(table);
75  return table;
76}
77
78function DatatypeMapper_mapMatrix(key, param) {
79  // http: //stackoverflow.com/questions/8749236/create-table-with-jquery-append
80  var table = $('<table></table>').addClass('editableTable');
81  var head = $('<thead></thead>');
82  // create head elements
83  var headerRow = $('<tr></tr>');
84  for (var i = 0; i < param[0].length; i++) {
85    $('<td />').text(key + ' Column ' + i).appendTo(headerRow);
86  }
87  headerRow.appendTo(head);
88  head.appendTo(table);
89  var body = $('<tbody></tbody>');
90  for (var i = 0; i < param.length; i++) {
91    var row = $('<tr></tr>');
92    for (var j = 0; j < param[i].length; j++) {
93      var td = $('<td />').appendTo(row);     
94      $('<input type="text" name="' + key + '_' + i + '_' + j + '" />').val(param[i][j]).appendTo(td);     
95    }
96    row.appendTo(body);
97  }
98  body.appendTo(table);
99  return table;
100
101  /*var table = '<table class="editableTable"><thead><tr>';
102  for (var i = 0; i < param[0].length; i++) {
103    table += '<th>' + key + ' Column ' + (i + 1) + '</th>';
104  }
105  table += '</tr>';
106  // foreach value entry (2d entry)
107  for (var i = 0; i < param.length; i++) {
108    table += '<tr>';
109    for (var j = 0; j < param[i].length; j++) {
110      table += '<td><input type="text" name="' + key + '_' + i + '_' + j + '" /></td>';
111    }
112    table += '</tr>';
113  }
114  return $*/
115}
116
117DatatypeMapper.prototype.mapString = function (value) {
118  if (value == "true") return true;
119  else if (value == "false") return false;
120  else if (!isNaN(value)) return parseFloat(value.replace(',', '.'));
121  return value;
122}
123
124DatatypeMapper.prototype.aggregateTables = function (data) {
125    // aggregate tables:
126    for (var dataKey in data) {
127        var entry = data[dataKey];
128        var tableEntries = {};
129        var toRemove = [];
130        for (var key in entry) {
131            if (key.indexOf('_') != -1) {
132                var splitted = key.split('_');
133                var name = splitted[0];
134                var row = parseInt(splitted[1]);
135                if (!(name in tableEntries)) {
136                    tableEntries[name] = []
137                }
138
139                if (splitted.length == 2) { // its a vector of elements
140                    tableEntries[name].push(entry[key])
141                } else if (splitted.length == 3) { // its a matrix of elements
142                    column = parseInt(splitted[2]);
143                    if (tableEntries[name].length < row + 1)
144                        tableEntries[name].push([]);
145                    tableEntries[name][row][column] = entry[key];
146                }
147                toRemove.push(key);
148            }
149        }
150
151        for (var i = 0; i < toRemove.length; i++) {
152            delete entry[toRemove[i]];
153        }
154
155        for (var key in tableEntries) {
156            entry[key] = tableEntries[key];
157        }
158    }
159}
Note: See TracBrowser for help on using the repository browser.