1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 var schemaRegistry = requireNative('schema_registry'); 6 var CHECK = requireNative('logging').CHECK; 7 var WARNING = requireNative('logging').WARNING; 8 9 // An object forEach. Calls |f| with each (key, value) pair of |obj|, using 10 // |self| as the target. 11 function forEach(obj, f, self) { 12 for (var key in obj) { 13 if ($Object.hasOwnProperty(obj, key)) 14 $Function.call(f, self, key, obj[key]); 15 } 16 } 17 18 // Assuming |array_of_dictionaries| is structured like this: 19 // [{id: 1, ... }, {id: 2, ...}, ...], you can use 20 // lookup(array_of_dictionaries, 'id', 2) to get the dictionary with id == 2. 21 function lookup(array_of_dictionaries, field, value) { 22 var filter = function (dict) {return dict[field] == value;}; 23 var matches = array_of_dictionaries.filter(filter); 24 if (matches.length == 0) { 25 return undefined; 26 } else if (matches.length == 1) { 27 return matches[0] 28 } else { 29 throw new Error("Failed lookup of field '" + field + "' with value '" + 30 value + "'"); 31 } 32 } 33 34 function loadTypeSchema(typeName, defaultSchema) { 35 var parts = $String.split(typeName, '.'); 36 if (parts.length == 1) { 37 if (defaultSchema == null) { 38 WARNING('Trying to reference "' + typeName + '" ' + 39 'with neither namespace nor default schema.'); 40 return null; 41 } 42 var types = defaultSchema.types; 43 } else { 44 var schemaName = $Array.join($Array.slice(parts, 0, parts.length - 1), '.'); 45 var types = schemaRegistry.GetSchema(schemaName).types; 46 } 47 for (var i = 0; i < types.length; ++i) { 48 if (types[i].id == typeName) 49 return types[i]; 50 } 51 return null; 52 } 53 54 exports.forEach = forEach; 55 exports.loadTypeSchema = loadTypeSchema; 56 exports.lookup = lookup; 57