14e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
24e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
34e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// found in the LICENSE file.
44e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
54e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "components/dom_distiller/core/article_entry.h"
64e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
74e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "base/logging.h"
81e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "sync/api/sync_change.h"
94e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)using sync_pb::EntitySpecifics;
114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)using sync_pb::ArticlePage;
124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)using sync_pb::ArticleSpecifics;
134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)namespace dom_distiller {
154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)bool IsEntryPageValid(const ArticleEntryPage& page) { return page.has_url(); }
174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)bool IsEntryValid(const ArticleEntry& entry) {
194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  if (!entry.has_entry_id())
204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    return false;
214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  for (int i = 0; i < entry.pages_size(); ++i) {
224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    if (!IsEntryPageValid(entry.pages(i)))
234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      return false;
244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  }
254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  return true;
264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)bool AreEntriesEqual(const ArticleEntry& left, const ArticleEntry& right) {
294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  DCHECK(IsEntryValid(left));
304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  DCHECK(IsEntryValid(right));
314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  return left.SerializeAsString() == right.SerializeAsString();
324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)ArticleEntry EntryFromSpecifics(const EntitySpecifics& specifics) {
354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  DCHECK(specifics.has_article());
364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  const ArticleSpecifics& article_specifics = specifics.article();
374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  ArticleEntry entry = article_specifics;
384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  DCHECK(IsEntryValid(entry));
394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  return entry;
404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)EntitySpecifics SpecificsFromEntry(const ArticleEntry& entry) {
434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  DCHECK(IsEntryValid(entry));
444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  EntitySpecifics specifics;
454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  *specifics.mutable_article() = entry;
464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  return specifics;
474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)ArticleEntry GetEntryFromChange(const syncer::SyncChange& change) {
501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  DCHECK(change.IsValid());
511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  DCHECK(change.sync_data().IsValid());
521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  return EntryFromSpecifics(change.sync_data().GetSpecifics());
531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}
541e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
551e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)std::string GetEntryIdFromSyncData(const syncer::SyncData& data) {
561e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  const EntitySpecifics& entity = data.GetSpecifics();
571e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  DCHECK(entity.has_article());
581e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  const ArticleSpecifics& specifics = entity.article();
591e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  DCHECK(specifics.has_entry_id());
601e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  return specifics.entry_id();
611e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}
621e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
631e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)syncer::SyncData CreateLocalData(const ArticleEntry& entry) {
641e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  EntitySpecifics specifics = SpecificsFromEntry(entry);
651e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  const std::string& entry_id = entry.entry_id();
661e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  return syncer::SyncData::CreateLocalData(entry_id, entry_id, specifics);
671e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}
681e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}  // namespace dom_distiller
70