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