use of com.vodafone360.people.datatypes.ItemList in project 360-Engine-for-Android by 360.
the class HessianDecoder method decodeResponseByRequestType.
/**
*
* Parses the hashtables retrieved from the hessian payload that came from the server and
* returns a type for it.
*
* @param clist The list that will be populated with the data types.
* @param hash The hash table that contains the parsed date returned by the backend.
* @param type The type of the request that was sent, e.g. get contacts changes.
*
* @return The type of the response that was parsed (to be found in DecodedResponse.ResponseType).
*
*/
private int decodeResponseByRequestType(List<BaseDataType> clist, Hashtable<String, Object> hash, Request.Type type) {
int responseType = DecodedResponse.ResponseType.UNKNOWN.ordinal();
switch(type) {
case CONTACT_CHANGES_OR_UPDATES:
responseType = DecodedResponse.ResponseType.GET_CONTACTCHANGES_RESPONSE.ordinal();
// create ContactChanges
ContactChanges contChanges = new ContactChanges();
contChanges = contChanges.createFromHashtable(hash);
clist.add(contChanges);
break;
case ADD_CONTACT:
clist.add(Contact.createFromHashtable(hash));
responseType = DecodedResponse.ResponseType.ADD_CONTACT_RESPONSE.ordinal();
break;
case SIGN_UP:
clist.add(Contact.createFromHashtable(hash));
responseType = DecodedResponse.ResponseType.SIGNUP_RESPONSE.ordinal();
break;
case RETRIEVE_PUBLIC_KEY:
// AA define new object type
clist.add(PublicKeyDetails.createFromHashtable(hash));
responseType = DecodedResponse.ResponseType.RETRIEVE_PUBLIC_KEY_RESPONSE.ordinal();
break;
case CONTACT_DELETE:
ContactListResponse cresp = new ContactListResponse();
cresp.createFromHashTable(hash);
// add ids
@SuppressWarnings("unchecked") Vector<Long> contactIds = (Vector<Long>) hash.get(KEY_CONTACT_ID_LIST);
if (contactIds != null) {
for (Long cid : contactIds) {
cresp.mContactIdList.add((cid).intValue());
}
}
clist.add(cresp);
responseType = DecodedResponse.ResponseType.DELETE_CONTACT_RESPONSE.ordinal();
break;
case CONTACT_DETAIL_DELETE:
ContactDetailDeletion cdel = new ContactDetailDeletion();
clist.add(cdel.createFromHashtable(hash));
responseType = DecodedResponse.ResponseType.DELETE_CONTACT_DETAIL_RESPONSE.ordinal();
break;
case CONTACT_GROUP_RELATION_LIST:
ItemList groupRelationList = new ItemList(ItemList.Type.contact_group_relation);
groupRelationList.populateFromHashtable(hash);
clist.add(groupRelationList);
responseType = DecodedResponse.ResponseType.GET_CONTACT_GROUP_RELATIONS_RESPONSE.ordinal();
break;
case CONTACT_GROUP_RELATIONS:
ItemList groupRelationsList = new ItemList(ItemList.Type.contact_group_relations);
groupRelationsList.populateFromHashtable(hash);
clist.add(groupRelationsList);
responseType = DecodedResponse.ResponseType.GET_CONTACT_GROUP_RELATIONS_RESPONSE.ordinal();
break;
case DELETE_CONTACT_GROUP_RELATIONS:
// The hessian data sent by the backend is of the form
// r{1}{0}Mt{0}{0}zz. The MicroHessianInput always skips the 2 bytes
// after the type. This doesn't seem to be handling the case where
// the type is of length zero. Due to this, after decoding, the hash
// doesn't contain any elements/keys. Due to this, we are hardcoding
// the status to true here.
StatusMsg statusMsg = new StatusMsg();
statusMsg.mStatus = true;
clist.add(statusMsg);
responseType = DecodedResponse.ResponseType.UNKNOWN.ordinal();
break;
case GROUP_LIST:
ItemList zyblist = new ItemList(ItemList.Type.group_privacy);
zyblist.populateFromHashtable(hash);
clist.add(zyblist);
responseType = DecodedResponse.ResponseType.GET_GROUPS_RESPONSE.ordinal();
break;
case ITEM_LIST_OF_LONGS:
ItemList listOfLongs = new ItemList(ItemList.Type.long_value);
listOfLongs.populateFromHashtable(hash);
clist.add(listOfLongs);
// TODO
responseType = DecodedResponse.ResponseType.UNKNOWN.ordinal();
break;
case // TODO status and status list are used by many requests as a type. each request should have its own type however!
STATUS_LIST:
ItemList zybstatlist = new ItemList(ItemList.Type.status_msg);
zybstatlist.populateFromHashtable(hash);
clist.add(zybstatlist);
// TODO
responseType = DecodedResponse.ResponseType.UNKNOWN.ordinal();
break;
case STATUS:
StatusMsg s = new StatusMsg();
s.mStatus = true;
clist.add(s);
// TODO
responseType = DecodedResponse.ResponseType.UNKNOWN.ordinal();
break;
case TEXT_RESPONSE_ONLY:
Object val = hash.get("result");
if (val != null && val instanceof String) {
SimpleText txt = new SimpleText();
txt.addText((String) val);
clist.add(txt);
}
// TODO
responseType = DecodedResponse.ResponseType.UNKNOWN.ordinal();
break;
case EXPECTING_STATUS_ONLY:
StatusMsg statMsg = new StatusMsg();
clist.add(statMsg.createFromHashtable(hash));
// TODO
responseType = DecodedResponse.ResponseType.UNKNOWN.ordinal();
break;
case PRESENCE_LIST:
PresenceList mPresenceList = new PresenceList();
mPresenceList.createFromHashtable(hash);
clist.add(mPresenceList);
responseType = DecodedResponse.ResponseType.GET_PRESENCE_RESPONSE.ordinal();
break;
case PUSH_MSG:
// parse content of RPG Push msg
parsePushMessage(clist, hash);
responseType = DecodedResponse.ResponseType.PUSH_MESSAGE.ordinal();
break;
case CREATE_CONVERSATION:
Conversation mConversation = new Conversation();
mConversation.createFromHashtable(hash);
clist.add(mConversation);
responseType = DecodedResponse.ResponseType.CREATE_CONVERSATION_RESPONSE.ordinal();
break;
case DELETE_IDENTITY:
IdentityDeletion mIdenitityDeletion = new IdentityDeletion();
clist.add(mIdenitityDeletion.createFromHashtable(hash));
responseType = DecodedResponse.ResponseType.DELETE_IDENTITY_RESPONSE.ordinal();
break;
default:
LogUtils.logE("HessianDecoder.decodeResponseByRequestType() Unhandled type[" + type.name() + "]");
}
return responseType;
}
use of com.vodafone360.people.datatypes.ItemList in project 360-Engine-for-Android by 360.
the class GroupsEngine method processCommsResponse.
@Override
protected void processCommsResponse(DecodedResponse resp) {
LogUtils.logD("DownloadGroups.processCommsResponse()");
ServiceStatus status = BaseEngine.getResponseStatus(BaseDataType.ITEM_LIST_DATA_TYPE, resp.mDataTypes);
if (status == ServiceStatus.SUCCESS) {
final List<GroupItem> tempGroupList = new ArrayList<GroupItem>();
for (int i = 0; i < resp.mDataTypes.size(); i++) {
ItemList itemList = (ItemList) resp.mDataTypes.get(i);
if (itemList.mType != ItemList.Type.group_privacy) {
completeUiRequest(ServiceStatus.ERROR_UNEXPECTED_RESPONSE);
return;
}
// TODO: why cloning the list?
for (int j = 0; j < itemList.mItemList.size(); j++) {
tempGroupList.add((GroupItem) itemList.mItemList.get(j));
}
}
LogUtils.logI("DownloadGroups.processCommsResponse() - No of groups " + tempGroupList.size());
if (mPageNo == 0) {
// clear old groups if we request the first groups page
mDb.deleteAllGroups();
}
status = GroupsTable.addGroupList(tempGroupList, mDb.getWritableDatabase());
if (ServiceStatus.SUCCESS != status) {
completeUiRequest(status);
return;
}
mNoOfGroupsFetched += tempGroupList.size();
if (tempGroupList.size() < MAX_DOWN_PAGE_SIZE) {
completeUiRequest(ServiceStatus.SUCCESS);
return;
}
mPageNo++;
requestNextGroupsPage();
return;
}
LogUtils.logE("DownloadGroups.processCommsResponse() - Error requesting Zyb groups, error = " + status);
completeUiRequest(status);
}
use of com.vodafone360.people.datatypes.ItemList in project 360-Engine-for-Android by 360.
the class UploadServerContacts method processGroupAdditionsResp.
/**
* Called when a server response is received during a group/contact add
* relation sync. The server change log is updated. Possibly server errors
* are also handled.
*
* @param resp Response from server.
*/
private void processGroupAdditionsResp(final DecodedResponse resp) {
ServiceStatus status = BaseEngine.getResponseStatus(BaseDataType.ITEM_LIST_DATA_TYPE, resp.mDataTypes);
if (status == ServiceStatus.SUCCESS) {
if (resp.mDataTypes.size() == 0) {
LogUtils.logE("UploadServerContacts." + "processGroupAdditionsResp() " + "Item list cannot be empty");
complete(ServiceStatus.ERROR_COMMS_BAD_RESPONSE);
return;
}
ItemList itemList = (ItemList) resp.mDataTypes.get(0);
if (itemList.mItemList == null) {
LogUtils.logE("UploadServerContacts." + "processGroupAdditionsResp() " + "Item list cannot be NULL");
complete(ServiceStatus.ERROR_COMMS_BAD_RESPONSE);
return;
}
// TODO: Check response
long startTime = System.nanoTime();
mDb.deleteContactChanges(mContactChangeInfoList);
mDbSyncTime += (System.nanoTime() - startTime);
mContactChangeInfoList.clear();
updateProgress();
sendNextAddGroupRelationsPage();
return;
}
LogUtils.logE("UploadServerContacts.processGroupAdditionsResp() " + "Error adding group relations, error = " + status);
complete(status);
}
use of com.vodafone360.people.datatypes.ItemList in project 360-Engine-for-Android by 360.
the class UploadServerContactsTest method reportBackAddGroupSuccess.
private void reportBackAddGroupSuccess(int reqId, List<BaseDataType> data) {
Log.d(LOG_TAG, "reportBackAddGroupSuccess");
mProcessor.verifyGroupAddsState();
final List<Long> contactIdList = new ArrayList<Long>();
final List<GroupItem> groupList = new ArrayList<GroupItem>();
mProcessor.testFetchAddGroupLists(contactIdList, groupList);
assertEquals(1, groupList.size());
Long activeGroupId = groupList.get(0).mId;
assertTrue(activeGroupId != null);
ItemList itemList = new ItemList(ItemList.Type.contact_group_relations);
data.add(itemList);
for (Long contactServerId : contactIdList) {
Contact expectedContact = new Contact();
ServiceStatus status = mDb.fetchContactByServerId(contactServerId, expectedContact);
assertEquals(ServiceStatus.SUCCESS, status);
boolean found = false;
for (Long groupId : expectedContact.groupList) {
if (groupId.equals(activeGroupId)) {
found = true;
break;
}
}
assertTrue("Contact " + contactServerId + " has been added to group " + activeGroupId + " which is not in the database", found);
mItemCount--;
}
Log.i(LOG_TAG, "Groups/contacts remaining = " + mItemCount);
assertTrue(mItemCount >= 0);
if (mItemCount == 0) {
nextState(State.IDLE);
}
}
use of com.vodafone360.people.datatypes.ItemList in project 360-Engine-for-Android by 360.
the class NowPlusDatatypesTests method testItemList.
public void testItemList() {
ItemList groupPriv = new ItemList(ItemList.Type.group_privacy);
int groupType = 1;
boolean isReadOnly = true;
boolean requiresLocalisation = true;
boolean isSystemGroup = true;
boolean isSmartGroup = true;
long id = 3;
long userId = 4;
String name = "foo";
Hashtable<String, Object> hashGroup = new Hashtable<String, Object>();
hashGroup.put("grouptype", groupType);
hashGroup.put("isreadonly", isReadOnly);
hashGroup.put("requireslocalisation", requiresLocalisation);
hashGroup.put("issystemgroup", isSystemGroup);
hashGroup.put("issmartgroup", isSmartGroup);
hashGroup.put("id", id);
hashGroup.put("userid", userId);
hashGroup.put("name", name);
Vector<Hashtable<String, Object>> vect = new Vector<Hashtable<String, Object>>();
vect.add(hashGroup);
Hashtable<String, Object> hashItemListGroup = new Hashtable<String, Object>();
hashItemListGroup.put("itemlist", vect);
groupPriv.populateFromHashtable(hashItemListGroup);
GroupItem helper = new GroupItem();
GroupItem input = helper.createFromHashtable(hashGroup);
GroupItem output = (GroupItem) groupPriv.mItemList.get(0);
assertEquals(input.getType(), output.getType());
assertEquals(input.toString(), output.toString());
assertEquals(input.mGroupType, output.mGroupType);
assertEquals(input.mIsReadOnly, output.mIsReadOnly);
assertEquals(input.mRequiresLocalisation, output.mRequiresLocalisation);
assertEquals(input.mIsSystemGroup, output.mIsSystemGroup);
assertEquals(input.mIsSmartGroup, output.mIsSmartGroup);
assertEquals(input.mId, output.mId);
assertEquals(input.mUserId, output.mUserId);
assertEquals(input.mName, output.mName);
}
Aggregations