ModelType.java revision c2e0dbddbe15c98d52c4786dac06cb8952a8ae6d
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)package org.chromium.sync.internal_api.pub.base; 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import android.util.Log; 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import com.google.common.collect.HashMultimap; 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import com.google.common.collect.Multimap; 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import com.google.common.collect.Sets; 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import com.google.ipc.invalidation.external.client.types.ObjectId; 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import com.google.protos.ipc.invalidation.Types; 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import java.util.Collection; 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import java.util.HashSet; 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import java.util.Set; 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/** 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * The model types that are synced in Chrome for Android. 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)public enum ModelType { 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * An autofill object. 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AUTOFILL("AUTOFILL"), 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * An autofill profile object. 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AUTOFILL_PROFILE("AUTOFILL_PROFILE"), 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * A bookmark folder or a bookmark URL object. 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BOOKMARK("BOOKMARK"), 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Flags to enable experimental features. 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPERIMENTS("EXPERIMENTS"), 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * An object representing a set of Nigori keys. 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) NIGORI("NIGORI"), 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * A password entry. 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PASSWORD("PASSWORD"), 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * An object representing a browser session or tab. 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SESSION("SESSION"), 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * A typed_url folder or a typed_url object. 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TYPED_URL("TYPED_URL"), 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /** 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * A history delete directive object. 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) HISTORY_DELETE_DIRECTIVE("HISTORY_DELETE_DIRECTIVE"), 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /** 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * A device info object. 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DEVICE_INFO("DEVICE_INFO"), 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /** 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * A proxy tabs object (placeholder for sessions). 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) PROXY_TABS("NULL"), 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /** 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * A favicon image object. 69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FAVICON_IMAGE("FAVICON_IMAGE"), 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /** 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * A favicon tracking object. 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FAVICON_TRACKING("FAVICON_TRACKING"); 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** Special type representing all possible types. */ 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public static final String ALL_TYPES_TYPE = "ALL_TYPES"; 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private static final String TAG = ModelType.class.getSimpleName(); 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private final String mModelType; 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ModelType(String modelType) { 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) mModelType = modelType; 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public ObjectId toObjectId() { 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return ObjectId.newInstance(Types.ObjectSource.Type.CHROME_SYNC.getNumber(), 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) mModelType.getBytes()); 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public static ModelType fromObjectId(ObjectId objectId) { 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) try { 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return valueOf(new String(objectId.getName())); 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } catch (IllegalArgumentException e) { 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return null; 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Converts string representations of types to sync to {@link ModelType}s. 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * <p> 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * If {@code syncTypes} contains {@link #ALL_TYPES_TYPE}, then the returned 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * set contains all values of the {@code ModelType} enum. 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * <p> 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Otherwise, the returned set contains the {@code ModelType} values for all elements of 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * {@code syncTypes} for which {@link ModelType#valueOf(String)} successfully returns; other 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * elements are dropped. 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public static Set<ModelType> syncTypesToModelTypes(Collection<String> syncTypes) { 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (syncTypes.contains(ALL_TYPES_TYPE)) { 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return Sets.newHashSet(ModelType.values()); 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Set<ModelType> modelTypes = Sets.newHashSetWithExpectedSize(syncTypes.size()); 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (String syncType : syncTypes) { 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) try { 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) modelTypes.add(valueOf(syncType)); 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } catch (IllegalArgumentException exception) { 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Drop invalid sync types. 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Log.w(TAG, "Could not translate sync type to model type: " + syncType); 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return modelTypes; 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** Converts a set of {@link ModelType} to a set of {@link ObjectId}. */ 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public static Set<ObjectId> modelTypesToObjectIds(Set<ModelType> modelTypes) { 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Set<ObjectId> objectIds = Sets.newHashSetWithExpectedSize(modelTypes.size()); 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (ModelType modelType : modelTypes) { 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) objectIds.add(modelType.toObjectId()); 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return objectIds; 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** Converts a set of {@link ModelType} to a set of string names. */ 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public static Set<String> modelTypesToSyncTypes(Set<ModelType> modelTypes) { 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Set<String> objectIds = Sets.newHashSetWithExpectedSize(modelTypes.size()); 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (ModelType modelType : modelTypes) { 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) objectIds.add(modelType.toString()); 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return objectIds; 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 145