package com.iangclifton.auid.realestate; import org.json.JSONException; import org.json.JSONObject; import android.os.Parcel; import android.os.Parcelable; import android.util.Log; /** * Represents a single Property such as a house or a condo. * * This is thread safe and implements Parcelable for passing between Activities. * In this case, the Property simply reuses the raw JSON String to pass around * so that JSONObject can do the heavy lifting. * * In the real world, the data for each of these objects would be coming from * a server somewhere, so this object is modeled after a possible JSON * representation. * * @author Ian G. Clifton */ public class Property implements Parcelable { private static final String TAG = "Property"; public static final String JSON_KEY_BATHROOMS = "bathroomCount"; public static final String JSON_KEY_BEDROOMS = "bedroomCount"; public static final String JSON_KEY_CITY = "city"; public static final String JSON_KEY_FOOTAGE= "footage"; public static final String JSON_KEY_PRICE = "displayPrice"; public static final String JSON_KEY_STATE = "state"; public static final String JSON_KEY_STREET_ADDRESS = "address"; /** * The number of bathrooms like "1.5" */ private final float mBathroomCount; /** * The number of bedrooms */ private final int mBedroomCount; /** * The name of the city like "Seattle" */ private final String mCity; /** * Square footage of the property like "2200" */ private final int mFootage; /** * The displayable price of the property like "$490,000" */ private final String mPrice; /** * The raw JSON representation of the object */ private final String mRawJson; /** * The abbreviated name of the state like "WA" */ private final String mState; /** * The street address like "123 Main St." */ private final String mStreetAddress; public Property(JSONObject json) throws JSONException { mBathroomCount = (float) json.getDouble(JSON_KEY_BATHROOMS); mBedroomCount = json.getInt(JSON_KEY_BEDROOMS); mCity = json.getString(JSON_KEY_CITY); mFootage = json.getInt(JSON_KEY_FOOTAGE); mPrice = json.getString(JSON_KEY_PRICE); mState = json.getString(JSON_KEY_STATE); mStreetAddress = json.getString(JSON_KEY_STREET_ADDRESS); mRawJson = json.toString(); } @Override public int describeContents() { return 0; } /** * Returns the number of bathrooms like "1.5" * * @return the bathroomCount */ public float getBathroomCount() { return mBathroomCount; } /** * Returns the number of bedrooms * * @return the bedroomCount */ public int getBedroomCount() { return mBedroomCount; } /** * Returns the name of the city like "Seattle" * * @return the city */ public String getCity() { return mCity; } /** * Returns the square footage of the property like "2200" * * @return the footage */ public int getFootage() { return mFootage; } /** * Returns the displayable price of the property like "$490,000" * * @return the price */ public String getPrice() { return mPrice; } /** * Returns the abbreviated name of the state like "WA" * * @return the state */ public String getState() { return mState; } /** * Returns the street address like "123 Main St." * * @return the streetAddress */ public String getStreetAddress() { return mStreetAddress; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(mRawJson); } /** * Parcelable.Creator required to construct a Property object from a Parcel. */ public static final Parcelable.Creator<Property> CREATOR = new Parcelable.Creator<Property>() { @Override public Property createFromParcel(Parcel source) { final String rawJson = source.readString(); try { final JSONObject jsonObject = new JSONObject(rawJson); return new Property(jsonObject); } catch (JSONException e) { // In theory, it's impossible to get here Log.e(TAG, "Failed to create Property from JSON String: " + e.getMessage()); return null; } } @Override public Property[] newArray(int size) { return new Property[size]; } }; }