Commit c313256c by Kunj Gupta

Added Local DB table for storing My Requests.

parent 3082f65a
......@@ -74,7 +74,7 @@ public class MyRequestAdapter extends BaseAdapter {
MyRequest req = mReqList.get(position);
holder.number.setText(req.getNumber());
holder.shortDescription.setText(req.getShotrDescription());
holder.shortDescription.setText(req.getShortDescription());
if(!req.getApproval().isEmpty()) {
if (req.getApproval().equalsIgnoreCase("requested")) {
......
......@@ -32,6 +32,7 @@ public class DBManager extends SQLiteOpenHelper implements DBConstants {
createVariableTable(db);
createVariableChoiceTable(db);
createMyIncidentTable(db);
createMyRequestTable(db);
}
@Override
......@@ -104,4 +105,14 @@ public class DBManager extends SQLiteOpenHelper implements DBConstants {
+ INCIDENT_IMPACT + " integer, "
+ INCIDENT_SYNC_DIRTY + " integer default " + SYNC_FLAG_NONE + ");");
}
private void createMyRequestTable(SQLiteDatabase db) {
db.execSQL("create table " + TABLE_MY_REQUEST + "("
+ REQUEST_ID + " integer primary key autoincrement, "
+ REQUEST_NUMBER + " text, "
+ REQUEST_SHORT_DESCRIPTION + " text, "
+ REQUEST_SYS_UPDATED_ON + " real, "
+ REQUEST_APPROVAL + " text, "
+ REQUEST_SYNC_DIRTY + " integer default " + SYNC_FLAG_NONE + ");");
}
}
package com.vsoft.uoflservicenow.db.managers;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import com.vsoft.uoflservicenow.CatalogueApplication;
import com.vsoft.uoflservicenow.db.models.MyRequest;
import com.vsoft.uoflservicenow.utils.DBConstants;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
/**
*
* @author Kunj on 11-08-2016.
*/
public class MyRequestsManager implements DBConstants {
public static long save(MyRequest myRequest, int syncDirty) {
SQLiteDatabase db = CatalogueApplication.getDatabase();
if (db != null) {
myRequest.setSyncDirty(syncDirty);
long id = db.insert(TABLE_MY_REQUEST, null, getContentValues(myRequest));
myRequest.setId(id);
return id;
} else {
return -1;
}
}
public static int delete(MyRequest myRequest) {
SQLiteDatabase db = CatalogueApplication.getDatabase();
if (db != null) {
if (myRequest.getNumber() == null || myRequest.getNumber().isEmpty()) {
return db.delete(TABLE_MY_REQUEST, REQUEST_ID + "=" + myRequest.getId(), null);
} else {
return update(myRequest, SYNC_FLAG_DELETE);
}
}
return -1;
}
public static int update(MyRequest myRequest, int syncDirty) {
return update(myRequest, null, syncDirty);
}
public static int update(MyRequest myRequest, List<String> column, int syncDirty) {
SQLiteDatabase db = CatalogueApplication.getDatabase();
if (db != null) {
myRequest.setSyncDirty(syncDirty);
if (column == null || column.size() == 0) {
return db.update(TABLE_MY_REQUEST, getContentValues(myRequest), REQUEST_ID + "=" + myRequest.getId(), null);
} else {
ContentValues contentValues = new ContentValues(column.size());
contentValues.put(REQUEST_SYNC_DIRTY, myRequest.getSyncDirty());
for (int i = 0; i < column.size(); i++) {
String columnName = column.get(i);
if (REQUEST_NUMBER.equals(columnName)) {
contentValues.put(REQUEST_NUMBER, myRequest.getNumber());
} else if (REQUEST_SHORT_DESCRIPTION.equals(columnName)) {
contentValues.put(REQUEST_SHORT_DESCRIPTION, myRequest.getShortDescription());
} else if (REQUEST_SYS_UPDATED_ON.equals(columnName)) {
contentValues.put(REQUEST_SYS_UPDATED_ON, myRequest.getUpdateOn());
} else if (REQUEST_APPROVAL.equals(columnName)) {
contentValues.put(REQUEST_APPROVAL, myRequest.getApproval());
}
}
return db.update(TABLE_MY_REQUEST, contentValues, REQUEST_ID + "=" + myRequest.getId(), null);
}
} else {
return -1;
}
}
public static void handleGetRequest(List<MyRequest> serverMyRequestList) {
if(serverMyRequestList != null && !serverMyRequestList.isEmpty()) {
/*requestSysIdMap contain all server response request Sys Id*/
HashMap<String, Integer> requestSysIdMap = new HashMap<>(0);
Integer intObj = Integer.valueOf(1);
for (int i = 0; i < serverMyRequestList.size(); i++) {
String sysId = serverMyRequestList.get(i).getNumber();
requestSysIdMap.put(sysId, intObj);
}
/*localRequestList is contain all local Incidents */
List<MyRequest> localRequestList = getAllRequests();
if (localRequestList != null && !localRequestList.isEmpty()) {
for (int i = 0; i < localRequestList.size(); i++) {
MyRequest localRequest = localRequestList.get(i);
String localRequestNumber = localRequest.getNumber();
if (localRequestNumber != null
&& !localRequestNumber.isEmpty()
&& !requestSysIdMap.containsKey(localRequestNumber)) {
//Update sys_id with empty string because required to delete locally
localRequest.setNumber("");
delete(localRequest);
}
}
}
/*Check this MyRequest is exist in local DB or not
* If doesn't exist in local, save it
* If exist in local, update the local item with data from server item.
* */
for (int i = 0; i < serverMyRequestList.size(); i++) {
MyRequest myRequest = serverMyRequestList.get(i);
MyRequest localRequest = getRequestFromNumber(myRequest.getNumber());
if (localRequest == null) {
save(myRequest, DBConstants.SYNC_FLAG_NONE);
} else {
/*Update complete local MyRequest object with response MyRequest object*/
myRequest.setId(localRequest.getId());
update(myRequest, DBConstants.SYNC_FLAG_NONE);
}
}
} else {
/*That means there is no REQUEST in server response, then all local items should be deleted those are contain sys_id*/
/*localRequestList is contain all local MyRequest */
List<MyRequest> localRequestList = getAllRequests();
if (localRequestList != null && !localRequestList.isEmpty()) {
for (int i = 0; i < localRequestList.size(); i++) {
MyRequest localMyRequest = localRequestList.get(i);
String localIncidentNumber = localMyRequest.getNumber();
if (localIncidentNumber != null
&& !localIncidentNumber.isEmpty()) {
//Update number with empty string because required to delete locally
localMyRequest.setNumber("");
delete(localMyRequest);
}
}
}
}
}
public static List<MyRequest> getAllRequests() {
SQLiteDatabase db = CatalogueApplication.getDatabase();
if (db != null) {
Cursor c = db.rawQuery("select * from " + TABLE_MY_REQUEST
+ " where " + INCIDENT_SYNC_DIRTY
+ "!=" + DBConstants.SYNC_FLAG_DELETE, null);
ArrayList<MyRequest> requestList;
if (c.getCount() > 0) {
requestList = new ArrayList<>(c.getCount());
while (c.moveToNext()) {
MyRequest.MyRequestBuilder builder = MyRequest.MyRequestBuilder.aMyRequest();
fillAllRequestDetails(c, builder);
requestList.add(builder.build());
}
} else {
requestList = new ArrayList<>(0);
}
c.close();
return requestList;
} else {
return new ArrayList<>(0);
}
}
public static MyRequest get(long requestId) {
SQLiteDatabase db = CatalogueApplication.getDatabase();
MyRequest myRequest = null;
if (db != null) {
Cursor c = db.rawQuery("select * from " + TABLE_MY_REQUEST + " where " + REQUEST_ID + "=" + requestId, null);
if (c.moveToFirst()) {
MyRequest.MyRequestBuilder builder = MyRequest.MyRequestBuilder.aMyRequest();
fillAllRequestDetails(c, builder);
myRequest = builder.build();
}
c.close();
}
return myRequest;
}
public static MyRequest getRequestFromNumber(String number) {
SQLiteDatabase db = CatalogueApplication.getDatabase();
MyRequest myRequest = null;
if(db!=null) {
Cursor c = db.rawQuery("select * from " + TABLE_MY_REQUEST + " where " + INCIDENT_NUMBER + "='" + number + "'", null);
if (c.moveToFirst()) {
MyRequest.MyRequestBuilder builder = MyRequest.MyRequestBuilder.aMyRequest();
fillAllRequestDetails(c, builder);
myRequest = builder.build();
}
c.close();
}
return myRequest;
}
private static void fillAllRequestDetails(Cursor c, MyRequest.MyRequestBuilder builder) {
builder.setId(c.getLong(INDEX_REQUEST_ID));
builder.setNumber(c.getString(INDEX_REQUEST_NUMBER));
builder.setShortDescription(c.getString(INDEX_REQUEST_SHORT_DESCRIPTION));
builder.setUpdateOn(c.getLong(INDEX_REQUEST_SYS_UPDATED_ON));
builder.setApproval(c.getString(INDEX_REQUEST_APPROVAL));
builder.setSyncDirty(c.getInt(INDEX_REQUEST_SYNC_DIRTY));
}
private static ContentValues getContentValues(MyRequest myRequest) {
ContentValues cv = new ContentValues(REQUEST_COLUMN_COUNT - 1);
cv.put(REQUEST_NUMBER, myRequest.getNumber());
cv.put(REQUEST_SHORT_DESCRIPTION, myRequest.getShortDescription());
cv.put(REQUEST_SYS_UPDATED_ON, myRequest.getUpdateOn());
cv.put(REQUEST_APPROVAL, myRequest.getApproval());
cv.put(REQUEST_SYNC_DIRTY, myRequest.getSyncDirty());
return cv;
}
}
\ No newline at end of file
......@@ -12,6 +12,7 @@ import org.json.JSONObject;
*/
public class MyRequest {
private long id = -1;
@SerializedName("number")
@Expose
private String number;
......@@ -22,12 +23,22 @@ public class MyRequest {
@SerializedName("short_description")
@Expose
private String shotrDescription;
private String shortDescription;
@SerializedName("approval")
@Expose
String approval;
private int syncDirty;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getNumber() {
return number;
}
......@@ -44,12 +55,12 @@ public class MyRequest {
this.updateOn = updateOn;
}
public String getShotrDescription() {
return shotrDescription;
public String getShortDescription() {
return shortDescription;
}
public void setShotrDescription(String shotrDescription) {
this.shotrDescription = shotrDescription;
public void setShortDescription(String shortDescription) {
this.shortDescription = shortDescription;
}
public String getApproval() {
......@@ -60,6 +71,14 @@ public class MyRequest {
this.approval = approval;
}
public int getSyncDirty() {
return syncDirty;
}
public void setSyncDirty(int syncDirty) {
this.syncDirty = syncDirty;
}
public void parseJson(JSONObject jsonObject) {
String dueDate = null;
try {
......@@ -71,9 +90,81 @@ public class MyRequest {
this.setUpdateOn(Util.getDateTimeForMyRequestFromString(dueDate));
}
public static final class MyRequestBuilder {
String approval;
private long id = -1;
private String number;
private long updateOn;
private String shortDescription;
private int syncDirty;
private MyRequestBuilder() {
}
public static MyRequestBuilder aMyRequest() {
return new MyRequestBuilder();
}
public MyRequestBuilder setId(long id) {
this.id = id;
return this;
}
public MyRequestBuilder setNumber(String number) {
this.number = number;
return this;
}
public MyRequestBuilder setUpdateOn(long updateOn) {
this.updateOn = updateOn;
return this;
}
public MyRequestBuilder setShortDescription(String shortDescription) {
this.shortDescription = shortDescription;
return this;
}
public MyRequestBuilder setApproval(String approval) {
this.approval = approval;
return this;
}
public MyRequestBuilder setSyncDirty(int syncDirty) {
this.syncDirty = syncDirty;
return this;
}
public MyRequestBuilder but() {
return aMyRequest().setId(id).setNumber(number).setUpdateOn(updateOn).setShortDescription(shortDescription).setApproval(approval).setSyncDirty(syncDirty);
}
public MyRequest build() {
MyRequest myRequest = new MyRequest();
myRequest.setId(id);
myRequest.setNumber(number);
myRequest.setUpdateOn(updateOn);
myRequest.setShortDescription(shortDescription);
myRequest.setApproval(approval);
myRequest.setSyncDirty(syncDirty);
return myRequest;
}
}
public static class Json {
public static final String URL_PARAM_CATALOGUE_SYSPRM_QUERY_VALUE = "request.requested_for=javascript:gs.getUserID()";
public static final String DUE_DATE = "sys_updated_on";
}
@Override
public String toString() {
return "MyRequest{" +
"id=" + id +
", number='" + number + '\'' +
", updateOn=" + updateOn +
", shortDescription='" + shortDescription + '\'' +
", approval='" + approval + '\'' +
", syncDirty=" + syncDirty +
'}';
}
}
......@@ -17,6 +17,7 @@ import com.vsoft.uoflservicenow.R;
import com.vsoft.uoflservicenow.adapters.MyRequestAdapter;
import com.vsoft.uoflservicenow.api.listeners.get.GetMyRequestApiListener;
import com.vsoft.uoflservicenow.api.managers.MyRequestApiManager;
import com.vsoft.uoflservicenow.db.managers.MyRequestsManager;
import com.vsoft.uoflservicenow.db.models.MyRequest;
import com.vsoft.uoflservicenow.enums.SyncStatus;
import com.vsoft.uoflservicenow.utils.DialogUtils;
......@@ -37,8 +38,6 @@ public class MyRequestActivity extends AppCompatActivity {
@BindView(R.id.tool_bar_view) Toolbar mToolbar;
@BindView(R.id.request_screen_list_view) ListView mListView;
private List<MyRequest> mMyRequestList;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
......@@ -61,10 +60,15 @@ public class MyRequestActivity extends AppCompatActivity {
// Send initial screen view hit.
Util.sendScreenName(tracker, actionBar.getTitle().toString());
if(application.isNetConnected()) {
new FetchMyRequestData().execute();
List<MyRequest> myRequestList = MyRequestsManager.getAllRequests();
if(myRequestList.isEmpty()) {
if(application.isNetConnected()) {
new FetchMyRequestData().execute();
} else {
DialogUtils.showNoConnectionDialogWithCloseActivity(MyRequestActivity.this);
}
} else {
DialogUtils.showNoConnectionDialogWithCloseActivity(MyRequestActivity.this);
setData(myRequestList);
}
}
class FetchMyRequestData extends AsyncTask<String, Void, SyncStatus> {
......@@ -84,7 +88,8 @@ public class MyRequestActivity extends AppCompatActivity {
return MyRequestApiManager.getMyrequests(new GetMyRequestApiListener() {
@Override
public void onDoneApiCall(List<MyRequest> requestList) {
mMyRequestList = requestList;
Collections.sort(requestList, new StringDateComparator());
MyRequestsManager.handleGetRequest(requestList);
}
});
}
......@@ -96,8 +101,7 @@ public class MyRequestActivity extends AppCompatActivity {
progressDialog.dismiss();
}
if(syncStatus == SyncStatus.SUCCESS) {
if(mMyRequestList !=null)
setData(mMyRequestList);
setData(MyRequestsManager.getAllRequests());
} else {
showErrorDialog(R.string.failed_to_fetch_my_request_string);
}
......@@ -107,11 +111,8 @@ public class MyRequestActivity extends AppCompatActivity {
private void setData(final List<MyRequest> reqList) {
MyRequestAdapter adapter = new MyRequestAdapter(MyRequestActivity.this);
Collections.sort(reqList, new StringDateComparator());
adapter.setRequestList(reqList);
mListView.setAdapter(adapter);
}
class StringDateComparator implements Comparator<MyRequest> {
......
......@@ -7,6 +7,7 @@ public interface DBConstants {
String TABLE_CATALOGUE_VARIABLES = "catalogue_variable";
String TABLE_VARIABLE_CHOICES = "variable_choices";
String TABLE_MY_INCIDENT = "my_incidents";
String TABLE_MY_REQUEST = "my_requests";
String ID = "_id";
String SYS_ID = "sys_id";
......@@ -142,4 +143,26 @@ public interface DBConstants {
int INDEX_INCIDENT_SYNC_DIRTY = 5;
int INCIDENT_COLUMN_COUNT = 6;
/**
* MyRequest table
*/
String REQUEST_ID = ID;
String REQUEST_NUMBER = "number";
String REQUEST_SHORT_DESCRIPTION = "short_description";
String REQUEST_SYS_UPDATED_ON = "sys_updated_on";
String REQUEST_APPROVAL = "approval";
String REQUEST_SYNC_DIRTY = SYNC_DIRTY;
/**
* Request for My Requests table. *Use these only if you fetch all columns*
*/
int INDEX_REQUEST_ID = 0;
int INDEX_REQUEST_NUMBER = 1;
int INDEX_REQUEST_SHORT_DESCRIPTION = 2;
int INDEX_REQUEST_SYS_UPDATED_ON = 3;
int INDEX_REQUEST_APPROVAL = 4;
int INDEX_REQUEST_SYNC_DIRTY = 5;
int REQUEST_COLUMN_COUNT = 6;
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment