edu.pdx.cecs.orcycle.SegmentData.java Source code

Java tutorial

Introduction

Here is the source code for edu.pdx.cecs.orcycle.SegmentData.java

Source

/**
 *  ORcycle, Copyright 2014, 2015, PSU Transportation, Technology, and People Lab.
 *
 *  @author Robin Murray <robin5@pdx.edu>    (code)
 *  @author Miguel Figliozzi <figliozzi@pdx.edu> and ORcycle team (general app
 *  design and features, report questionnaires and new ORcycle features)
 *
 *  For more information on the project, go to
 *  http://www.pdx.edu/transportation-lab/orcycle and http://www.pdx.edu/transportation-lab/app-development
 *
 *  Updated/modified for Oregon pilot study and app deployment.
 *
 *  ORcycle 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 any later version.
 *  ORcycle 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
 *  ORcycle. If not, see <http://www.gnu.org/licenses/>.
 *
 */

package edu.pdx.cecs.orcycle;

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

import android.content.Context;
import android.database.Cursor;

public class SegmentData {
    private long segmentId;
    private long tripId;
    private int rating;
    private String details;
    private int startIndex;
    private int endIndex;
    private int segmentStatus;

    private final DbAdapter mDb;

    public static int STATUS_INCOMPLETE = 0;
    public static int STATUS_COMPLETE = 1;
    public static int STATUS_SENT = 2;

    private static final String MODULE_TAG = "SegmentData";

    public static SegmentData createSegment(Context c) {
        SegmentData t = new SegmentData(c.getApplicationContext(), 0);
        t.createSegmentInDatabase(c);
        t.initializeData();
        return t;
    }

    public static SegmentData fetchSegment(Context c, long segment_id) {
        SegmentData t = new SegmentData(c.getApplicationContext(), segment_id);
        t.populateDetails();
        return t;
    }

    private SegmentData(Context ctx, long segment_id) {
        Context context = ctx.getApplicationContext();
        this.segmentId = segment_id;
        mDb = new DbAdapter(context);
    }

    private void initializeData() {
        tripId = -1;
        rating = -1;
        details = "";
        startIndex = -1;
        endIndex = -1;
    }

    // Get lat/long extremes, etc, from note record
    void populateDetails() {

        mDb.openReadOnly();
        try {
            Cursor cursor = mDb.fetchSegment(segmentId);

            try {
                tripId = cursor.getLong(cursor.getColumnIndex("tripid"));
                rating = cursor.getInt(cursor.getColumnIndex("rating"));
                details = cursor.getString(cursor.getColumnIndex("details"));
                startIndex = cursor.getInt(cursor.getColumnIndex("startindex"));
                endIndex = cursor.getInt(cursor.getColumnIndex("endindex"));
                segmentStatus = cursor.getInt(cursor.getColumnIndex("status"));
            } finally {
                cursor.close();
            }
        } finally {
            mDb.close();
        }
    }

    void createSegmentInDatabase(Context c) {
        mDb.open();
        segmentId = mDb.createSegment();
        mDb.close();
    }

    public boolean updateSegmentStatus(int segmentStatus) {
        boolean rtn;
        mDb.open();
        if (rtn = mDb.updateSegmentStatus(segmentId, segmentStatus)) {
            this.segmentStatus = segmentStatus;
        }
        mDb.close();
        return rtn;
    }

    public void updateSegment() {
        updateSegment(-1, -1, "", -1, -1);
    }

    public void updateSegment(long tripId, int rating, String details, int startIndex, int endIndex) {
        // Save the segment details to the database.
        mDb.open();
        try {
            if (mDb.updateSegment(segmentId, tripId, rating, details, startIndex, endIndex)) {
                this.tripId = tripId;
                this.rating = rating;
                this.details = details;
                this.startIndex = startIndex;
                this.endIndex = endIndex;
            }
        } finally {
            mDb.close();
        }
    }

    public long getSegmentId() {
        return segmentId;
    }

    // JSON field identifiers
    public static final String JFID_TRIP_ID = "t";
    public static final String JFID_RATING = "r";
    public static final String JFID_DETAILS = "d";
    public static final String JFID_START_INDEX = "s";
    public static final String JFID_END_INDEX = "e";

    public JSONObject getJSON() throws JSONException {

        JSONObject json = new JSONObject();

        json.put(JFID_TRIP_ID, tripId);
        json.put(JFID_RATING, rating);
        json.put(JFID_DETAILS, details);
        json.put(JFID_START_INDEX, startIndex);
        json.put(JFID_END_INDEX, endIndex);

        return json;
    }

}