| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "sync/api/sync_error.h" |
| |
| #include <ostream> |
| |
| #include "base/location.h" |
| #include "base/logging.h" |
| #include "sync/internal_api/public/base/model_type.h" |
| |
| namespace syncer { |
| |
| SyncError::SyncError() { |
| Clear(); |
| } |
| |
| SyncError::SyncError(const tracked_objects::Location& location, |
| const std::string& message, |
| ModelType type) { |
| Init(location, message, type); |
| PrintLogError(); |
| } |
| |
| SyncError::SyncError(const SyncError& other) { |
| Copy(other); |
| } |
| |
| SyncError::~SyncError() { |
| } |
| |
| SyncError& SyncError::operator=(const SyncError& other) { |
| if (this == &other) { |
| return *this; |
| } |
| Copy(other); |
| return *this; |
| } |
| |
| void SyncError::Copy(const SyncError& other) { |
| if (other.IsSet()) { |
| Init(other.location(), |
| other.message(), |
| other.type()); |
| } else { |
| Clear(); |
| } |
| } |
| |
| void SyncError::Clear() { |
| location_.reset(); |
| message_ = std::string(); |
| type_ = UNSPECIFIED; |
| } |
| |
| void SyncError::Reset(const tracked_objects::Location& location, |
| const std::string& message, |
| ModelType type) { |
| Init(location, message, type); |
| PrintLogError(); |
| } |
| |
| void SyncError::Init(const tracked_objects::Location& location, |
| const std::string& message, |
| ModelType type) { |
| location_.reset(new tracked_objects::Location(location)); |
| message_ = message; |
| type_ = type; |
| } |
| |
| bool SyncError::IsSet() const { |
| return location_.get() != NULL; |
| } |
| |
| |
| const tracked_objects::Location& SyncError::location() const { |
| CHECK(IsSet()); |
| return *location_; |
| } |
| |
| const std::string& SyncError::message() const { |
| CHECK(IsSet()); |
| return message_; |
| } |
| |
| ModelType SyncError::type() const { |
| CHECK(IsSet()); |
| return type_; |
| } |
| |
| std::string SyncError::ToString() const { |
| if (!IsSet()) { |
| return std::string(); |
| } |
| return location_->ToString() + ", " + ModelTypeToString(type_) + |
| ", Sync Error: " + message_; |
| } |
| |
| void SyncError::PrintLogError() const { |
| LAZY_STREAM(logging::LogMessage(location_->file_name(), |
| location_->line_number(), |
| logging::LOG_ERROR).stream(), |
| LOG_IS_ON(ERROR)) |
| << ModelTypeToString(type_) << ", Sync Error: " << message_; |
| } |
| |
| void PrintTo(const SyncError& sync_error, std::ostream* os) { |
| *os << sync_error.ToString(); |
| } |
| |
| } // namespace syncer |