Android Open Source - nl.fhict.intellicloud.answers.android Review Sync






From Project

Back to project page nl.fhict.intellicloud.answers.android.

License

The source code is released under:

Apache License

If you think the Android project nl.fhict.intellicloud.answers.android 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

package nl.fhict.intellicloud.answers.backendcommunication;
//w w w .j  a  va  2 s. c o m
import java.io.IOException;
import java.util.ArrayList;

import nl.fhict.intellicloud.answers.backendcommunication.IntellicloudDbContract.AnswersEntry;
import nl.fhict.intellicloud.answers.backendcommunication.IntellicloudDbContract.QuestionsEntry;
import nl.fhict.intellicloud.answers.backendcommunication.IntellicloudDbContract.ReviewsEntry;

import org.apache.http.auth.AuthenticationException;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.accounts.AuthenticatorException;
import android.accounts.OperationCanceledException;
import android.content.ContentProviderClient;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.net.ParseException;
import android.net.Uri;
import android.os.RemoteException;
import android.util.Log;

public class ReviewSync {
  private ContentProviderClient contentProviderClient;
  private Context context;

  private int idColumn;
  private int localIdColumn;
  private int timestampColumn;
  private int answerIdColumn;
  private int reviewerIdColumn;
  private int dateColumn;
  private int reviewColumn;
  private int reviewStateColumn;


  public ReviewSync(Context context, ContentProviderClient contentProviderClient)
  {
    this.context = context;
    this.contentProviderClient = contentProviderClient;
  }

  public ArrayList<JSONObject> syncReviews(JSONArray reviewsResultArray) throws AuthenticationException, ParseException, OperationCanceledException, AuthenticatorException, JSONException, IOException, RemoteException
  {

    ArrayList<JSONObject> reviewsToUpload = new ArrayList<JSONObject>();
    ArrayList<JSONObject>  reviewsToAddToDB = new ArrayList<JSONObject> ();

    Uri uri = BackendContentProvider.CONTENT_REVIEWS;
    Cursor reviewsCursor = null;

    reviewsCursor = contentProviderClient.query(uri, null, null, null, null);

    idColumn = reviewsCursor.getColumnIndex(ReviewsEntry.COLUMN_BACKEND_ID);
    timestampColumn = reviewsCursor.getColumnIndex(ReviewsEntry.COLUMN_TIMESTAMP);
    answerIdColumn = reviewsCursor.getColumnIndex(ReviewsEntry.COLUMN_ANSWER_ID);
    reviewerIdColumn = reviewsCursor.getColumnIndex(ReviewsEntry.COLUMN_REVIEWER_ID);
    dateColumn = reviewsCursor.getColumnIndex(ReviewsEntry.COLUMN_DATE);
    reviewColumn = reviewsCursor.getColumnIndex(ReviewsEntry.COLUMN_REVIEW);
    localIdColumn = reviewsCursor.getColumnIndex(ReviewsEntry.COLUMN_ID);
    reviewStateColumn = reviewsCursor.getColumnIndex(ReviewsEntry.COLUMN_REVIEWSTATE);

    reviewsCursor.moveToFirst();
    
    for (int i = 0; i < reviewsResultArray.length(); i++)
    {
      reviewsToAddToDB.add(reviewsResultArray.getJSONObject(i));
    }

    while (!reviewsCursor.isAfterLast()) {
      Log.d("sync", "while");
      JSONObject serverReview = null;


      for (int i = 0; i < reviewsToAddToDB.size(); i++)
      {
        
        serverReview = reviewsToAddToDB.get(i);
        
        if (SyncHelper.getIdFromURI(serverReview.getString("Id")) == (reviewsCursor.getInt(idColumn)))
        {
          reviewsToAddToDB.remove(i);
          if (SyncHelper.isServerObjectNewer(serverReview, reviewsCursor))
          {
            updateReview(serverReview, reviewsCursor.getInt(localIdColumn));
          }
          break;

        }
      }

      reviewsCursor.moveToNext();
    }

    reviewsCursor.moveToFirst();
    while (!reviewsCursor.isAfterLast())
    {
      if (reviewsCursor.getString(idColumn) == null)
      {
        reviewsToUpload.add(getJsonForCurrentReview(reviewsCursor));

//        String deleteUri = uri + "/" + reviewsCursor.getInt(localIdColumn);
        reviewsCursor.moveToNext();
//        contentProviderClient.delete(Uri.parse(deleteUri), null, null);
      }
      else
      {
        reviewsCursor.moveToNext();
      }
    }
    reviewsCursor.close();

    for (int i = 0; i < reviewsToAddToDB.size(); i++)
    {
      addReviewToDb(reviewsToAddToDB.get(i));
    }

    return reviewsToUpload;

  }
  private ContentValues getReviewContentValues(JSONObject review) throws AuthenticationException, ParseException, OperationCanceledException, AuthenticatorException, JSONException, IOException
  {
    ContentValues values = new ContentValues();
    values.put(ReviewsEntry.COLUMN_TIMESTAMP, review.optString("LastChangedTime"));
    //values.put(ReviewsEntry.COLUMN_DATE, review.optString("Date"));
    values.put(ReviewsEntry.COLUMN_REVIEW, review.optString("Review"));
    values.put(ReviewsEntry.COLUMN_REVIEWSTATE, review.optInt("ReviewState"));


    String answer = review.optString("Answer");
    if (answer != null && !answer.equals("null") && answer.length() > 0)
    {
      values.put(ReviewsEntry.COLUMN_ANSWER_ID, SyncHelper.getRealIdForObjectURI(answer, context));
    }
    String reviewer = review.optString("Reviewer");
    if (reviewer != null && !reviewer.equals("null") && reviewer.length() > 0)
    {
      values.put(ReviewsEntry.COLUMN_REVIEWER_ID, SyncHelper.getRealIdForObjectURI(reviewer,context));
      
    }
    String backendid = review.optString("Id");
    if (backendid != null)
    {
      values.put(ReviewsEntry.COLUMN_BACKEND_ID, SyncHelper.getIdFromURI(backendid));
    }
    return values;
  }
  private void updateReview(JSONObject review, int rowId) throws JSONException, RemoteException, AuthenticationException, ParseException, OperationCanceledException, AuthenticatorException, IOException
  {
    String updateUri = BackendContentProvider.CONTENT_REVIEWS + "/" + rowId;
    ContentValues values = getReviewContentValues(review);
    contentProviderClient.update(Uri.parse(updateUri), values, null, null);
  }
  private JSONObject getJsonForCurrentReview(Cursor cursor) throws JSONException
  {
    JSONObject jsonAnswer = new JSONObject();
    jsonAnswer.accumulate("employeeId", cursor.getInt(reviewerIdColumn));
    jsonAnswer.accumulate("answerId", cursor.getInt(answerIdColumn));
    jsonAnswer.accumulate("review", cursor.getString(reviewColumn));
    return jsonAnswer;
  }
  private void addReviewToDb(JSONObject review) throws JSONException, RemoteException, AuthenticationException, ParseException, OperationCanceledException, AuthenticatorException, IOException
  {
    ContentValues values = getReviewContentValues(review);
    contentProviderClient.insert(BackendContentProvider.CONTENT_REVIEWS, values);
  }

}




Java Source Code List

nl.fhict.intellicloud.answers.AddReviewActivity.java
nl.fhict.intellicloud.answers.AnswerState.java
nl.fhict.intellicloud.answers.Answer.java
nl.fhict.intellicloud.answers.AuthorizationActivity.java
nl.fhict.intellicloud.answers.FeedbackState.java
nl.fhict.intellicloud.answers.FeedbackType.java
nl.fhict.intellicloud.answers.Feedback.java
nl.fhict.intellicloud.answers.FilterList.java
nl.fhict.intellicloud.answers.GetUserIdTask.java
nl.fhict.intellicloud.answers.IUserFoundObserver.java
nl.fhict.intellicloud.answers.IncomingQuestionsListAdapter.java
nl.fhict.intellicloud.answers.ListFragment.java
nl.fhict.intellicloud.answers.MainActivity.java
nl.fhict.intellicloud.answers.OriginalAnswerActivity.java
nl.fhict.intellicloud.answers.QuestionListOnClickListener.java
nl.fhict.intellicloud.answers.QuestionState.java
nl.fhict.intellicloud.answers.Question.java
nl.fhict.intellicloud.answers.RejectedAnswerActivity.java
nl.fhict.intellicloud.answers.ReviewListAdapter.java
nl.fhict.intellicloud.answers.ReviewOverviewActivity.java
nl.fhict.intellicloud.answers.ReviewState.java
nl.fhict.intellicloud.answers.Review.java
nl.fhict.intellicloud.answers.SendAnswerActivity.java
nl.fhict.intellicloud.answers.SlidingMenuListAdapter.java
nl.fhict.intellicloud.answers.UserType.java
nl.fhict.intellicloud.answers.User.java
nl.fhict.intellicloud.answers.backendcommunication.AnswerDataSource.java
nl.fhict.intellicloud.answers.backendcommunication.AnswerSync.java
nl.fhict.intellicloud.answers.backendcommunication.AuthenticatorService.java
nl.fhict.intellicloud.answers.backendcommunication.Authenticator.java
nl.fhict.intellicloud.answers.backendcommunication.BackendContentProvider.java
nl.fhict.intellicloud.answers.backendcommunication.BackendSyncAdapter.java
nl.fhict.intellicloud.answers.backendcommunication.BackendSyncService.java
nl.fhict.intellicloud.answers.backendcommunication.DummyBackend.java
nl.fhict.intellicloud.answers.backendcommunication.IAnswerService.java
nl.fhict.intellicloud.answers.backendcommunication.IClaimService.java
nl.fhict.intellicloud.answers.backendcommunication.IQuestionService.java
nl.fhict.intellicloud.answers.backendcommunication.IReviewService.java
nl.fhict.intellicloud.answers.backendcommunication.IUserService.java
nl.fhict.intellicloud.answers.backendcommunication.IntellicloudDbContract.java
nl.fhict.intellicloud.answers.backendcommunication.LocalStorageSQLiteHelper.java
nl.fhict.intellicloud.answers.backendcommunication.QuestionDataSource.java
nl.fhict.intellicloud.answers.backendcommunication.QuestionsSync.java
nl.fhict.intellicloud.answers.backendcommunication.ReviewDataSource.java
nl.fhict.intellicloud.answers.backendcommunication.ReviewSync.java
nl.fhict.intellicloud.answers.backendcommunication.ServerAccessor.java
nl.fhict.intellicloud.answers.backendcommunication.SyncHelper.java
nl.fhict.intellicloud.answers.backendcommunication.UserDataSource.java
nl.fhict.intellicloud.answers.backendcommunication.UserSync.java
nl.fhict.intellicloud.answers.backendcommunication.oauth.AuthenticationManager.java