1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Use of this source code is governed by a BSD-style license that can be 3ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// found in the LICENSE file. 4ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 5ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/sync/syncable/model_type_payload_map.h" 6ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 7ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/values.h" 8ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 9ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsennamespace syncable { 10ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 11ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenModelTypePayloadMap ModelTypePayloadMapFromBitSet( 12ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const syncable::ModelTypeBitSet& types, 13ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string& payload) { 14ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ModelTypePayloadMap types_with_payloads; 15ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen for (size_t i = syncable::FIRST_REAL_MODEL_TYPE; 16ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen i < types.size(); ++i) { 17ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (types[i]) { 18ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen types_with_payloads[syncable::ModelTypeFromInt(i)] = payload; 19ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 20ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 21ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return types_with_payloads; 22ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 23ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 24ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenModelTypePayloadMap ModelTypePayloadMapFromRoutingInfo( 25ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const browser_sync::ModelSafeRoutingInfo& routes, 26ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string& payload) { 27ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ModelTypePayloadMap types_with_payloads; 28ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen for (browser_sync::ModelSafeRoutingInfo::const_iterator i = routes.begin(); 29ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen i != routes.end(); ++i) { 30ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen types_with_payloads[i->first] = payload; 31ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 32ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return types_with_payloads; 33ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 34ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 35ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenDictionaryValue* ModelTypePayloadMapToValue( 36ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const ModelTypePayloadMap& type_payloads) { 37ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DictionaryValue* value = new DictionaryValue(); 38ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen for (ModelTypePayloadMap::const_iterator it = type_payloads.begin(); 39ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen it != type_payloads.end(); ++it) { 40ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen value->SetString(syncable::ModelTypeToString(it->first), it->second); 41ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 42ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return value; 43ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 44ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 45ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid CoalescePayloads(ModelTypePayloadMap* original, 46ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const ModelTypePayloadMap& update) { 47ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen for (ModelTypePayloadMap::const_iterator i = update.begin(); 48ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen i != update.end(); ++i) { 49ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (original->count(i->first) == 0) { 50ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // If this datatype isn't already in our map, add it with 51ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // whatever payload it has. 52ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen (*original)[i->first] = i->second; 53ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } else if (i->second.length() > 0) { 54ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // If this datatype is already in our map, we only overwrite the 55ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // payload if the new one is non-empty. 56ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen (*original)[i->first] = i->second; 57ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 58ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 59ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 60ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 61ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} // namespace syncable 62