DataRowHandlerForOrganization.java revision f262d56495ac4ea30d31bd050efb116bd4bb4235
1/*
2 * Copyright (C) 2010 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 * use this file except in compliance with the License. You may obtain a copy of
6 * the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 * License for the specific language governing permissions and limitations under
14 * the License
15 */
16package com.android.providers.contacts;
17
18import com.android.providers.contacts.ContactsDatabaseHelper.Tables;
19import com.android.providers.contacts.SearchIndexManager.IndexBuilder;
20
21import android.content.ContentValues;
22import android.database.Cursor;
23import android.database.DatabaseUtils;
24import android.database.sqlite.SQLiteDatabase;
25import android.provider.ContactsContract.CommonDataKinds.Organization;
26import android.provider.ContactsContract.Data;
27
28/**
29 * Handler for organization data rows.
30 */
31public class DataRowHandlerForOrganization extends DataRowHandlerForCommonDataKind {
32
33    public DataRowHandlerForOrganization(ContactsDatabaseHelper dbHelper,
34            ContactAggregator aggregator) {
35        super(dbHelper, aggregator,
36                Organization.CONTENT_ITEM_TYPE, Organization.TYPE, Organization.LABEL);
37    }
38
39    @Override
40    public long insert(SQLiteDatabase db, TransactionContext txContext, long rawContactId,
41            ContentValues values) {
42        String company = values.getAsString(Organization.COMPANY);
43        String title = values.getAsString(Organization.TITLE);
44
45        long dataId = super.insert(db, txContext, rawContactId, values);
46
47        fixRawContactDisplayName(db, txContext, rawContactId);
48        mDbHelper.insertNameLookupForOrganization(rawContactId, dataId, company, title);
49        return dataId;
50    }
51
52    @Override
53    public boolean update(SQLiteDatabase db, TransactionContext txContext, ContentValues values,
54            Cursor c, boolean callerIsSyncAdapter) {
55        if (!super.update(db, txContext, values, c, callerIsSyncAdapter)) {
56            return false;
57        }
58
59        boolean containsCompany = values.containsKey(Organization.COMPANY);
60        boolean containsTitle = values.containsKey(Organization.TITLE);
61        if (containsCompany || containsTitle) {
62            long dataId = c.getLong(DataUpdateQuery._ID);
63            long rawContactId = c.getLong(DataUpdateQuery.RAW_CONTACT_ID);
64
65            String company;
66
67            if (containsCompany) {
68                company = values.getAsString(Organization.COMPANY);
69            } else {
70                mSelectionArgs1[0] = String.valueOf(dataId);
71                company = DatabaseUtils.stringForQuery(db,
72                        "SELECT " + Organization.COMPANY +
73                        " FROM " + Tables.DATA +
74                        " WHERE " + Data._ID + "=?", mSelectionArgs1);
75            }
76
77            String title;
78            if (containsTitle) {
79                title = values.getAsString(Organization.TITLE);
80            } else {
81                mSelectionArgs1[0] = String.valueOf(dataId);
82                title = DatabaseUtils.stringForQuery(db,
83                        "SELECT " + Organization.TITLE +
84                        " FROM " + Tables.DATA +
85                        " WHERE " + Data._ID + "=?", mSelectionArgs1);
86            }
87
88            mDbHelper.deleteNameLookup(dataId);
89            mDbHelper.insertNameLookupForOrganization(rawContactId, dataId, company, title);
90
91            fixRawContactDisplayName(db, txContext, rawContactId);
92        }
93        return true;
94    }
95
96    @Override
97    public int delete(SQLiteDatabase db, TransactionContext txContext, Cursor c) {
98        long dataId = c.getLong(DataUpdateQuery._ID);
99        long rawContactId = c.getLong(DataDeleteQuery.RAW_CONTACT_ID);
100
101        int count = super.delete(db, txContext, c);
102        fixRawContactDisplayName(db, txContext, rawContactId);
103        mDbHelper.deleteNameLookup(dataId);
104        return count;
105    }
106
107    @Override
108    protected int getTypeRank(int type) {
109        switch (type) {
110            case Organization.TYPE_WORK: return 0;
111            case Organization.TYPE_CUSTOM: return 1;
112            case Organization.TYPE_OTHER: return 2;
113            default: return 1000;
114        }
115    }
116
117    @Override
118    public boolean containsSearchableColumns(ContentValues values) {
119        return values.containsKey(Organization.COMPANY)
120                || values.containsKey(Organization.DEPARTMENT)
121                || values.containsKey(Organization.JOB_DESCRIPTION)
122                || values.containsKey(Organization.OFFICE_LOCATION)
123                || values.containsKey(Organization.PHONETIC_NAME)
124                || values.containsKey(Organization.SYMBOL)
125                || values.containsKey(Organization.TITLE);
126    }
127
128    @Override
129    public void appendSearchableData(IndexBuilder builder) {
130        builder.appendContentFromColumn(Organization.TITLE);
131        builder.appendContentFromColumn(Organization.COMPANY, IndexBuilder.SEPARATOR_COMMA);
132        builder.appendContentFromColumn(Organization.PHONETIC_NAME,
133                IndexBuilder.SEPARATOR_PARENTHESES);
134        builder.appendContentFromColumn(Organization.SYMBOL, IndexBuilder.SEPARATOR_PARENTHESES);
135        builder.appendContentFromColumn(Organization.DEPARTMENT, IndexBuilder.SEPARATOR_SLASH);
136        builder.appendContentFromColumn(Organization.OFFICE_LOCATION, IndexBuilder.SEPARATOR_SLASH);
137        builder.appendContentFromColumn(Organization.JOB_DESCRIPTION, IndexBuilder.SEPARATOR_SLASH);
138    }
139}
140