16e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 26e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 36e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// found in the LICENSE file. 46e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 56e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)package org.chromium.components.bookmarks; 66e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 76e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)import android.text.TextUtils; 86e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)import android.util.Log; 96e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)import org.chromium.base.CalledByNative; 116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)/** 136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * Simple object representing the bookmark id. 146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) */ 156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)public class BookmarkId { 166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) public static final int INVALID_FOLDER_ID = -2; 176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) public static final int ROOT_FOLDER_ID = -1; 186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) private static final String LOG_TAG = "BookmarkId"; 206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) private static final char TYPE_PARTNER = 'p'; 216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) private final long mId; 236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) private final int mType; 246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) public BookmarkId(long id, int type) { 266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) mId = id; 276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) mType = type; 286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) /** 316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * @param c The char representing the type. 326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * @return The Bookmark type from a char representing the type. 336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) */ 346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) private static int getBookmarkTypeFromChar(char c) { 356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) switch (c) { 366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) case TYPE_PARTNER: 376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return BookmarkType.BOOKMARK_TYPE_PARTNER; 386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) default: 396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return BookmarkType.BOOKMARK_TYPE_NORMAL; 406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) /** 446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * @param c The char representing the bookmark type. 456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * @return Whether the char representing the bookmark type is a valid type. 466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) */ 476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) private static boolean isValidBookmarkTypeFromChar(char c) { 486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return c == TYPE_PARTNER; 496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) /** 526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * @param s The bookmark id string (Eg: p1 for partner bookmark id 1). 536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * @return the Bookmark id from the string which is a concatenation of 546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * bookmark type and the bookmark id. 556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) */ 566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) public static BookmarkId getBookmarkIdFromString(String s) { 576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) long id = ROOT_FOLDER_ID; 586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) int type = BookmarkType.BOOKMARK_TYPE_NORMAL; 596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (TextUtils.isEmpty(s)) 606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return new BookmarkId(id, type); 616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) char folderTypeChar = s.charAt(0); 626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (isValidBookmarkTypeFromChar(folderTypeChar)) { 636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) type = getBookmarkTypeFromChar(folderTypeChar); 646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) s = s.substring(1); 656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) try { 676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) id = Long.parseLong(s); 686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } catch (NumberFormatException exception) { 696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) Log.e(LOG_TAG, "Error parsing url to extract the bookmark folder id.", exception); 706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return new BookmarkId(id, type); 726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) /** 756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * @return The id of the bookmark. 766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) */ 776e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) @CalledByNative 786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) public long getId() { 796e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return mId; 806e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 816e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 826e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) /** 836e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * @return The bookmark type. 846e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) */ 856e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) @CalledByNative 866e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) public int getType() { 876e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return mType; 886e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 896e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 906e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) private String getBookmarkTypeString() { 916e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) switch (mType) { 926e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) case BookmarkType.BOOKMARK_TYPE_PARTNER: 936e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return String.valueOf(TYPE_PARTNER); 946e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) case BookmarkType.BOOKMARK_TYPE_NORMAL: 956e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) default: 966e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return ""; 976e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 986e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 996e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1006e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) @Override 1016e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) public String toString() { 1026e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return getBookmarkTypeString() + mId; 1036e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 1046e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1056e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) @Override 1066e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) public boolean equals(Object o) { 1076e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (!(o instanceof BookmarkId)) 1086e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return false; 1096e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) BookmarkId item = (BookmarkId) o; 1106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return (item.mId == mId && item.mType == mType); 1116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 1126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) @Override 1146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) public int hashCode() { 1156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return toString().hashCode(); 1166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 1176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 118