16e459a252dbfcce8411911ee38e68884c9e96887lararennie@google.com// Copyright (C) 2014 Google Inc. 26e459a252dbfcce8411911ee38e68884c9e96887lararennie@google.com// 36e459a252dbfcce8411911ee38e68884c9e96887lararennie@google.com// Licensed under the Apache License, Version 2.0 (the "License"); 46e459a252dbfcce8411911ee38e68884c9e96887lararennie@google.com// you may not use this file except in compliance with the License. 56e459a252dbfcce8411911ee38e68884c9e96887lararennie@google.com// You may obtain a copy of the License at 66e459a252dbfcce8411911ee38e68884c9e96887lararennie@google.com// 76e459a252dbfcce8411911ee38e68884c9e96887lararennie@google.com// http://www.apache.org/licenses/LICENSE-2.0 86e459a252dbfcce8411911ee38e68884c9e96887lararennie@google.com// 96e459a252dbfcce8411911ee38e68884c9e96887lararennie@google.com// Unless required by applicable law or agreed to in writing, software 106e459a252dbfcce8411911ee38e68884c9e96887lararennie@google.com// distributed under the License is distributed on an "AS IS" BASIS, 116e459a252dbfcce8411911ee38e68884c9e96887lararennie@google.com// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 126e459a252dbfcce8411911ee38e68884c9e96887lararennie@google.com// See the License for the specific language governing permissions and 136e459a252dbfcce8411911ee38e68884c9e96887lararennie@google.com// limitations under the License. 146e459a252dbfcce8411911ee38e68884c9e96887lararennie@google.com 156e459a252dbfcce8411911ee38e68884c9e96887lararennie@google.com#ifndef I18N_ADDRESSINPUT_ADDRESS_INPUT_HELPER_H_ 166e459a252dbfcce8411911ee38e68884c9e96887lararennie@google.com#define I18N_ADDRESSINPUT_ADDRESS_INPUT_HELPER_H_ 176e459a252dbfcce8411911ee38e68884c9e96887lararennie@google.com 186e459a252dbfcce8411911ee38e68884c9e96887lararennie@google.com#include <libaddressinput/util/basictypes.h> 196e459a252dbfcce8411911ee38e68884c9e96887lararennie@google.com 209f47fe3ed525accac995b095d408a825673a2ee1roubert@google.com#include <vector> 219f47fe3ed525accac995b095d408a825673a2ee1roubert@google.com 226e459a252dbfcce8411911ee38e68884c9e96887lararennie@google.comnamespace i18n { 236e459a252dbfcce8411911ee38e68884c9e96887lararennie@google.comnamespace addressinput { 246e459a252dbfcce8411911ee38e68884c9e96887lararennie@google.com 256e459a252dbfcce8411911ee38e68884c9e96887lararennie@google.comclass LookupKey; 266e459a252dbfcce8411911ee38e68884c9e96887lararennie@google.comclass PreloadSupplier; 276e459a252dbfcce8411911ee38e68884c9e96887lararennie@google.comstruct AddressData; 288a5ea9e2e8b5642281fa679b70266b80a4bf039drouslan@chromium.orgstruct Node; 296e459a252dbfcce8411911ee38e68884c9e96887lararennie@google.com 306e459a252dbfcce8411911ee38e68884c9e96887lararennie@google.comclass AddressInputHelper { 316e459a252dbfcce8411911ee38e68884c9e96887lararennie@google.com public: 326e459a252dbfcce8411911ee38e68884c9e96887lararennie@google.com // Creates an input helper that uses the supplier provided to get metadata to 336e459a252dbfcce8411911ee38e68884c9e96887lararennie@google.com // help a user complete or fix an address. Doesn't take ownership of 346e459a252dbfcce8411911ee38e68884c9e96887lararennie@google.com // |supplier|. Since latency is important for these kinds of tasks, we expect 356e459a252dbfcce8411911ee38e68884c9e96887lararennie@google.com // the supplier to have the data already. 366e459a252dbfcce8411911ee38e68884c9e96887lararennie@google.com AddressInputHelper(PreloadSupplier* supplier); 376e459a252dbfcce8411911ee38e68884c9e96887lararennie@google.com 386e459a252dbfcce8411911ee38e68884c9e96887lararennie@google.com ~AddressInputHelper(); 396e459a252dbfcce8411911ee38e68884c9e96887lararennie@google.com 406e459a252dbfcce8411911ee38e68884c9e96887lararennie@google.com // Fill in missing components of an address as best as we can based on 416e459a252dbfcce8411911ee38e68884c9e96887lararennie@google.com // existing data. For example, for some countries only one postal code is 426e459a252dbfcce8411911ee38e68884c9e96887lararennie@google.com // valid; this would enter that one. For others, the postal code indicates 436e459a252dbfcce8411911ee38e68884c9e96887lararennie@google.com // what state should be selected. Existing data will never be overwritten. 446e459a252dbfcce8411911ee38e68884c9e96887lararennie@google.com // 456e459a252dbfcce8411911ee38e68884c9e96887lararennie@google.com // Note that the preload supplier must have had the rules for the country 466e459a252dbfcce8411911ee38e68884c9e96887lararennie@google.com // represented by this address loaded before this method is called - otherwise 476e459a252dbfcce8411911ee38e68884c9e96887lararennie@google.com // an assertion failure will result. 482310d4c20bd041d8c48b006e4168ec7a34c9f8fdrouslan@chromium.org // 492310d4c20bd041d8c48b006e4168ec7a34c9f8fdrouslan@chromium.org // The address should have the best language tag as returned from 502310d4c20bd041d8c48b006e4168ec7a34c9f8fdrouslan@chromium.org // BuildComponents(). 516e459a252dbfcce8411911ee38e68884c9e96887lararennie@google.com void FillAddress(AddressData* address) const; 526e459a252dbfcce8411911ee38e68884c9e96887lararennie@google.com 536e459a252dbfcce8411911ee38e68884c9e96887lararennie@google.com private: 546e459a252dbfcce8411911ee38e68884c9e96887lararennie@google.com void CheckChildrenForPostCodeMatches( 556e459a252dbfcce8411911ee38e68884c9e96887lararennie@google.com const AddressData& address, const LookupKey& lookup_key, 566e459a252dbfcce8411911ee38e68884c9e96887lararennie@google.com const Node* parent, std::vector<Node>* hierarchy) const; 576e459a252dbfcce8411911ee38e68884c9e96887lararennie@google.com 586e459a252dbfcce8411911ee38e68884c9e96887lararennie@google.com // We don't own the supplier_. 596e459a252dbfcce8411911ee38e68884c9e96887lararennie@google.com PreloadSupplier* const supplier_; 606e459a252dbfcce8411911ee38e68884c9e96887lararennie@google.com 616e459a252dbfcce8411911ee38e68884c9e96887lararennie@google.com DISALLOW_COPY_AND_ASSIGN(AddressInputHelper); 626e459a252dbfcce8411911ee38e68884c9e96887lararennie@google.com}; 636e459a252dbfcce8411911ee38e68884c9e96887lararennie@google.com 646e459a252dbfcce8411911ee38e68884c9e96887lararennie@google.com} // namespace addressinput 656e459a252dbfcce8411911ee38e68884c9e96887lararennie@google.com} // namespace i18n 666e459a252dbfcce8411911ee38e68884c9e96887lararennie@google.com 676e459a252dbfcce8411911ee38e68884c9e96887lararennie@google.com#endif // I18N_ADDRESSINPUT_ADDRESS_INPUT_HELPER_H_ 68