Android Open Source - Scanner-For-Zotero Bib Item






From Project

Back to project page Scanner-For-Zotero.

License

The source code is released under:

GNU General Public License

If you think the Android project Scanner-For-Zotero listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/** 
 * Copyright 2011 John M. Schanck// ww  w .j a  va 2 s. c  om
 * 
 * ScannerForZotero is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * ScannerForZotero is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with ScannerForZotero.  If not, see <http://www.gnu.org/licenses/>.
 */

package org.ale.scanner.zotero.data;

import java.util.ArrayList;
import java.util.Date;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.content.ContentResolver;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.os.Parcel;
import android.os.Parcelable;
import android.provider.BaseColumns;
import android.text.TextUtils;

public class BibItem implements BaseColumns, Parcelable {

    public static final String TBL_NAME = "bibinfo";

    public static final String COL_DATE = "date";
    public static final String COL_TYPE = "type";
    public static final String COL_JSON = "json";
    public static final String COL_ACCT = "acct";

    public static final int TYPE_ERROR = -1;
    public static final int TYPE_BOOK = 0;
    public static final int TYPE_JOURNAL = 1;
    public static final int TYPE_MAGAZINE = 2;

    public static final int NO_ID = -1;

    private int mId;
    private long mCreationDate;
    private int mType;
    private JSONObject mInfo;
    private int mAcctId;
    private int mSelected;
    
    private String mCachedCreatorLabel = null;
    private String mCachedCreatorValue = null;
    private String mCachedTitleValue = null;

    public BibItem(int id, long date, int type, JSONObject json, int acct){
        mId = id;
        mCreationDate = date;
        mType = type;
        mInfo = json;
        mSelected = 0;
        mAcctId = acct;
    }

    public BibItem(int type, JSONObject json, int acct){
        this(NO_ID, (new Date()).getTime(), type, json, acct);
    }

    public BibItem(Parcel p) throws JSONException{
        this(p.readInt(), // _ID
             p.readLong(), // Creation Date
             p.readInt(), // Type
             new JSONObject(p.readString()), //JSON String
             p.readInt());  // Account ID
        mSelected = p.readInt();
    }

    public static BibItem fromCursor(Cursor c){
        int id = c.getInt(Database.BIBINFO_ID_INDEX);
        long date = c.getLong(Database.BIBINFO_DATE_INDEX);
        int type = c.getInt(Database.BIBINFO_TYPE_INDEX);
        String json = c.getString(Database.BIBINFO_JSON_INDEX);
        int acct = c.getInt(Database.BIBINFO_ACCT_INDEX);

        JSONObject data;
        try {
            data = new JSONObject(json);
        } catch (JSONException e) {
            return null;
        }
        
        return new BibItem(id,date,type,data,acct);
    }

    /* Parceling */
    public static final Creator<BibItem> CREATOR = new Creator<BibItem>() {
        public BibItem createFromParcel(Parcel in) {
            BibItem r;
            try {
                r = new BibItem(in);
            } catch (JSONException e) {
                r = new BibItem(TYPE_ERROR, new JSONObject(), Account.NOT_IN_DATABASE);
            }
            return r;
        }

        public BibItem[] newArray(int size) {
            return new BibItem[size];
        }
    };

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel p, int flags) {
        p.writeInt(mId);
        p.writeLong(mCreationDate);
        p.writeInt(mType);
        p.writeString(mInfo.toString());
        p.writeInt(mAcctId);
        p.writeInt(mSelected); // must be last
    }

    /* Data access */
    public void setId(int id){
        mId = id;
    }

    public int getId(){
        return mId;
    }

    public void setSelected(int sel){
        mSelected = sel;
    }

    public JSONObject getSelectedInfo(){
        try {
            return mInfo.getJSONArray("items").getJSONObject(mSelected);
        } catch (JSONException e) {
            return new JSONObject();
        }
    }

    public BibItem copy() {
        JSONObject jsoncopy;
        try {
            jsoncopy = new JSONObject(mInfo.toString());
        } catch (JSONException e) {
            jsoncopy = new JSONObject();
        }
        BibItem ret = new BibItem(mId, mCreationDate, mType, jsoncopy, mAcctId);
        ret.setSelected(mSelected);
        return ret;
    }

    /* Database */
    public ContentValues toContentValues(){
        ContentValues values = new ContentValues();
        values.put(BibItem.COL_DATE, mCreationDate);
        values.put(BibItem.COL_TYPE, mType);
        values.put(BibItem.COL_JSON, mInfo.toString());
        values.put(BibItem.COL_ACCT, mAcctId);
        return values;
    }

    public void writeToDB(ContentResolver cr){
        ContentValues values = toContentValues();
        if(mId == NO_ID) {
            Uri row = cr.insert(Database.BIBINFO_URI, values);
            int id = Integer.parseInt(row.getLastPathSegment());
            setId(id);
        } else {
            cr.update(Database.BIBINFO_URI,
                      values, BibItem._ID+"=?",
                      new String[]{String.valueOf(mId)});
        }
    }

    /* Caching for textviews */
    public boolean hasCachedValues(){
        return (mCachedTitleValue != null)
            && (mCachedCreatorLabel != null)
            && (mCachedCreatorValue != null);
    }

    public void cacheForViews() {
        JSONObject data = getSelectedInfo();
        mCachedTitleValue = data.optString(ItemField.title);
        mCachedCreatorLabel = null;

        JSONArray creators = data.optJSONArray(ItemField.creators);
        if(creators != null && creators.length() > 0){
            // Choose the creator label based on the first creator type
            // then accumulate all creators with that type to be displayed
            JSONObject jobj;
            ArrayList<String> creatorNames = new ArrayList<String>();
            for(int i=0; i<creators.length(); i++){
                jobj = (JSONObject) creators.opt(i);
                if(jobj == null) continue;
                String type = jobj.optString(CreatorType.type);
                if(TextUtils.isEmpty(mCachedCreatorLabel)){
                    mCachedCreatorLabel = type;
                }else if(!type.equals(mCachedCreatorLabel)){
                    break;
                }
                String name = jobj.optString(ItemField.Creator.name);
                if(!TextUtils.isEmpty(name))
                    creatorNames.add(name);
            }
            int indx = CreatorType.Book.indexOf(mCachedCreatorLabel);
            mCachedCreatorLabel = CreatorType.LocalizedBook.get(indx < 0 ? 0 : indx);
            mCachedCreatorValue = TextUtils.join(", ", creatorNames);
        }else{
            mCachedCreatorLabel = CreatorType.LocalizedBook.get(0);
            mCachedCreatorValue = "";
        }
    }
    public void clearCache(){
        mCachedCreatorLabel = null;
        mCachedCreatorValue = null;
        mCachedTitleValue = null;
    }
    public String getCachedCreatorLabel(){
        return mCachedCreatorLabel;
    }
    public String getCachedCreatorValue(){
        return mCachedCreatorValue;
    }
    public String getCachedTitleString(){
        return mCachedTitleValue;
    }
}




Java Source Code List

org.ale.scanner.zotero.BibDetailJSONAdapter.java
org.ale.scanner.zotero.BibItemListAdapter.java
org.ale.scanner.zotero.Dialogs.java
org.ale.scanner.zotero.EditItemActivity.java
org.ale.scanner.zotero.LoginActivity.java
org.ale.scanner.zotero.MainActivity.java
org.ale.scanner.zotero.ManageAccountsActivity.java
org.ale.scanner.zotero.PString.java
org.ale.scanner.zotero.PendingListAdapter.java
org.ale.scanner.zotero.SafeViewFlipper.java
org.ale.scanner.zotero.Util.java
org.ale.scanner.zotero.data.Access.java
org.ale.scanner.zotero.data.Account.java
org.ale.scanner.zotero.data.BibItemDBHandler.java
org.ale.scanner.zotero.data.BibItem.java
org.ale.scanner.zotero.data.Collection.java
org.ale.scanner.zotero.data.CreatorType.java
org.ale.scanner.zotero.data.Database.java
org.ale.scanner.zotero.data.Group.java
org.ale.scanner.zotero.data.ItemField.java
org.ale.scanner.zotero.data.ItemType.java
org.ale.scanner.zotero.web.APIHandler.java
org.ale.scanner.zotero.web.APIRequest.java
org.ale.scanner.zotero.web.HttpsClient.java
org.ale.scanner.zotero.web.RequestQueue.java
org.ale.scanner.zotero.web.googlebooks.GoogleBooksAPIClient.java
org.ale.scanner.zotero.web.googlebooks.GoogleBooksHandler.java
org.ale.scanner.zotero.web.worldcat.WorldCatAPIClient.java
org.ale.scanner.zotero.web.worldcat.WorldCatHandler.java
org.ale.scanner.zotero.web.zotero.ZoteroAPIClient.java
org.ale.scanner.zotero.web.zotero.ZoteroHandler.java