Back to project page Scanner-For-Zotero.
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.
/** * 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; } }