package org.societies.android.platform.cistester;
import java.util.ArrayList;
import java.util.List;
import org.societies.android.api.cis.directory.ACisAdvertisementRecord;
import org.societies.android.api.cis.directory.ICisDirectory;
import org.societies.android.api.cis.management.AActivity;
import org.societies.android.api.cis.management.ACommunity;
import org.societies.android.api.cis.management.ACriteria;
import org.societies.android.api.cis.management.AParticipant;
import org.societies.android.api.cis.management.ICisManager;
import org.societies.android.api.cis.management.ICisSubscribed;
import org.societies.android.api.cis.management.AMembershipCrit;
import org.societies.android.platform.cis.CisDirectoryBase;
import org.societies.android.platform.cis.CommunityManagementBase;
import org.societies.android.platform.cis.CommunityManagementLocal.LocalBinder;
import org.societies.api.context.model.CtxAttributeTypes;
import org.societies.api.schema.cis.community.Criteria;
import org.societies.api.schema.cis.community.MembershipCrit;
import org.societies.api.schema.cis.directory.CisAdvertisementRecord;
import org.societies.api.schema.cis.manager.ListCrit;
import org.societies.comm.xmpp.client.impl.ClientCommunicationMgr;
import org.societies.api.identity.INetworkNode;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.ServiceConnection;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.IBinder;
import android.os.Parcelable;
import android.util.Log;
import android.view.View;
public class TestActivityCIS extends Activity {
private final String CLIENT_PACKAGE = "org.societies.android.platform.cistester";
private ICisManager serviceCISManager;
private boolean serviceCISManagerConnected = false;
private ICisSubscribed serviceCISsubscribe;
private boolean serviceCISsubscribeConnected = false;
private final String hardCodedTargetJid = "cis-358c387c-bc79-44fe-82b0-b628b50093e3.societies.local";
private final String hardCodedTargetName = "vasco";
private ICisDirectory serviceCISdir;
private boolean serviceCISdirConnected = false;
private static final String LOG_TAG = TestActivityCIS.class.getName();
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.d(LOG_TAG, "before intents");
//CREATE INTENT FOR CIS MANAGER SERVICE AND BIND
Intent intentCisManager = new Intent(this.getApplicationContext(), CommunityManagementBase.class);
this.getApplicationContext().bindService(intentCisManager, cisManagerConnection, Context.BIND_AUTO_CREATE);
//CREATE INTENT FOR CIS SUBSCRIBE AND BIND
Intent intentCisSubscribe = new Intent(this.getApplicationContext(), CommunityManagementBase.class);
this.getApplicationContext().bindService(intentCisSubscribe, cisSubscribeConnection, Context.BIND_AUTO_CREATE);
//CREATE INTENT FOR CIS DIRECTORY AND BIND
Intent intentCisDir = new Intent(this.getApplicationContext(), CisDirectoryBase.class);
this.getApplicationContext().bindService(intentCisDir, cisDirConnection, Context.BIND_AUTO_CREATE);
Log.d(LOG_TAG, "before registering broadcasts");
//REGISTER BROADCAST
//CIS Manager
IntentFilter intentFilter = new IntentFilter() ;
intentFilter.addAction(ICisManager.CREATE_CIS);
intentFilter.addAction(ICisManager.DELETE_CIS);
intentFilter.addAction(ICisManager.GET_CIS_LIST);
intentFilter.addAction(ICisManager.JOIN_CIS);
//CIS Subscriber
intentFilter.addAction(ICisSubscribed.GET_MEMBERS);
intentFilter.addAction(ICisSubscribed.GET_ACTIVITY_FEED);
intentFilter.addAction(ICisSubscribed.ADD_ACTIVITY);
//CIS DIRECTORY
intentFilter.addAction(ICisDirectory.FIND_ALL_CIS);
intentFilter.addAction(ICisDirectory.FILTER_CIS);
intentFilter.addAction(ICisDirectory.FIND_CIS_ID);
Log.d(LOG_TAG, "gonna register receiver");
this.getApplicationContext().registerReceiver(new bReceiver(), intentFilter);
//TEST THE CIS COMPONENT
Log.d(LOG_TAG, "gonna create test");
TestCIS task = new TestCIS(this);
Log.d(LOG_TAG, "gonna execute test");
task.execute();
}
/**
* ICisManager service connection
*/
private ServiceConnection cisManagerConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName name, IBinder service) {
Log.d(LOG_TAG, "Connecting to ICisManager service");
try {
//GET LOCAL BINDER
LocalBinder binder = (LocalBinder) service;
//OBTAIN SERVICE DISCOVERY API
serviceCISManager = (ICisManager) binder.getService();
serviceCISManagerConnected = true;
Log.d(LOG_TAG, "Successfully connected to ICisManager service");
} catch (Exception ex) {
Log.d(LOG_TAG, "Error binding to service: " + ex.getMessage());
}
}
public void onServiceDisconnected(ComponentName name) {
Log.d(LOG_TAG, "Disconnecting from ServiceDiscovery service");
serviceCISManagerConnected = false;
}
};
/**
* ICisSubscribed service connection
*/
private ServiceConnection cisSubscribeConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName name, IBinder service) {
Log.d(LOG_TAG, "Connecting to ICisSubsribed service");
//get a local binder
LocalBinder binder = (LocalBinder) service;
//obtain the service's API
serviceCISsubscribe = (ICisSubscribed) binder.getService();
serviceCISsubscribeConnected = true;
Log.d(LOG_TAG, "Successfully connected to ICisSubsribed service");
}
public void onServiceDisconnected(ComponentName name) {
Log.d(LOG_TAG, "Disconnecting from ICisSubsribed service");
serviceCISsubscribeConnected = false;
}
};
/**
* ICisDirectory service connection
*/
private ServiceConnection cisDirConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName name, IBinder service) {
Log.d(LOG_TAG, "Connecting to ICisDirectory service");
//get a local binder
org.societies.android.platform.cis.CisDirectoryLocal.LocalBinder binder = (org.societies.android.platform.cis.CisDirectoryLocal.LocalBinder) service;
//obtain the service's API
serviceCISdir = (ICisDirectory) binder.getService();
serviceCISdirConnected = true;
Log.d(LOG_TAG, "Successfully connected to ICisDirectory service");
}
public void onServiceDisconnected(ComponentName name) {
Log.d(LOG_TAG, "Disconnecting from ICisDirectory service");
serviceCISsubscribeConnected = false;
}
};
public void btnSendMessage_onClick(View view) {
Log.d(LOG_TAG, ">>>>>>>>btnSendMessage_onClick - serviceCISsubscribeConnected: " + serviceCISsubscribeConnected);
//if (serviceCISsubscribeConnected)
//
}
public void loginXMPPServer(String userName, String userPassword, String domain) {
Log.d(LOG_TAG, "loginXMPPServer user: " + userName + " pass: " + userPassword + " domain: " + domain);
ClientCommunicationMgr ccm = new ClientCommunicationMgr(this);
INetworkNode networkNode = ccm.login(userName, domain, userPassword);
}
private class TestCIS extends AsyncTask<Void, Void, Void> {
private Context context;
public TestCIS(Context context) {
this.context = context;
}
protected Void doInBackground(Void... args) {
Log.d(LOG_TAG, "login called");
loginXMPPServer("xcmanager","xcmanager","societies.local");
try {// WAIT TILL ALL THE SERVICES ARE CONNECTED
Thread.currentThread();
Thread.sleep(5 * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
//TEST CONNECTIONS
Log.d(LOG_TAG, ">>>>>>>>serviceCISManagerConnected: " + serviceCISManagerConnected);
Log.d(LOG_TAG, ">>>>>>>>serviceCISsubscribeConnected: " + serviceCISsubscribeConnected);
Log.d(LOG_TAG, ">>>>>>>>serviceCISdirConnected: " + serviceCISdirConnected);
//TEST: CREATE CIS
AMembershipCrit aCrit = new AMembershipCrit();
List<ACriteria> rules = new ArrayList<ACriteria>();
ACriteria crit1 = new ACriteria();
//ACriteria crit2 = new ACriteria();
crit1.setAttrib("Location"); crit1.setOperator("equals"); crit1.setRank(1); crit1.setValue1("Paris");
//crit2.setAttrib("Age"); crit2.setOperator(">"); crit2.setRank(2); crit2.setValue1("18");
rules.add(crit1);
aCrit.setACriteria(rules);
//rules.add(crit2);
serviceCISManager.createCis(CLIENT_PACKAGE, "Tester CIS", "Test Type", "Test Description", aCrit, "privacy policy stuff");
//TEST: GET ALL CIS ADVERTISEMENTS FROM DIRECTORY
serviceCISdir.findAllCisAdvertisementRecords(CLIENT_PACKAGE);
return null;
}
}
private void continueTests(String cis_id, String cis_name) {
Log.d(LOG_TAG, "entered continue test");
//TEST: GET ADVERT RECORD
//serviceCISdir.searchByID(CLIENT_PACKAGE, cis_id);
// TODO: get a real advertisement
CisAdvertisementRecord ad = new CisAdvertisementRecord();
ad.setId(cis_id);
// in order to force the join to send qualifications, Ill add some criteria to the AdRecord
MembershipCrit membershipCrit = new MembershipCrit();
List<Criteria> criteria = new ArrayList<Criteria>();
Criteria c1 = new Criteria();c1.setAttrib(CtxAttributeTypes.ADDRESS_HOME_CITY);c1.setOperator("equals");c1.setValue1("something");
Criteria c2 = new Criteria();c2.setAttrib(CtxAttributeTypes.RELIGIOUS_VIEWS);c2.setOperator("equals");c2.setValue1("something");
criteria.add(c1);criteria.add(c2);membershipCrit.setCriteria(criteria);
ad.setMembershipCrit(membershipCrit);
//TEST: JOIN
Log.d(LOG_TAG, "record conversion");
ACisAdvertisementRecord aAdrec = ACisAdvertisementRecord.convertCisAdvertRecord(ad);
Log.d(LOG_TAG, "sending join");
serviceCISManager.Join(CLIENT_PACKAGE, aAdrec);
//serviceCISManager.subscribeToCommunity(CLIENT_PACKAGE, cis_name, cis_id);
Log.d(LOG_TAG, "join sent");
//TEST: LIST CIS'S (OWNED + SUBSCRIBED)
serviceCISManager.getCisList(CLIENT_PACKAGE, ListCrit.ALL.toString());
Log.d(LOG_TAG, "get cis list");
//TEST: GET MEMBERS OF CIS
serviceCISsubscribe.getMembers(CLIENT_PACKAGE, cis_id);
Log.d(LOG_TAG, "get member list");
//TEST: ADD ACTIVITY
AActivity activity = new AActivity();
activity.setActor("Alec"); activity.setVerb("went"); activity.setTarget("mad"); activity.setTarget("late");
serviceCISsubscribe.addActivity(CLIENT_PACKAGE, cis_id, activity);
//TEST: GET ACTIVITIES
serviceCISsubscribe.getActivityFeed(CLIENT_PACKAGE, cis_id);
}
private class bReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d(LOG_TAG, intent.getAction());
if (intent.getAction().equals(ICisManager.CREATE_CIS)) {
boolean result = intent.getBooleanExtra(ICisManager.INTENT_RETURN_BOOLEAN,false);
Log.d(LOG_TAG, ">>>>>CIS Creation RESULT:\n>>>>>: " + result);
if(true == result){
//UNMARSHALL THE COMMUNITY FROM Parcel BACK TO COMMUNITY
Parcelable parcel = intent.getParcelableExtra(ICisManager.INTENT_RETURN_VALUE);
ACommunity cis = (ACommunity) parcel;
Log.d(LOG_TAG, ">>>>>CREATE COMMUNITY RESULT:\nCIS ID: " + cis.getCommunityJid());
}
continueTests(hardCodedTargetJid, hardCodedTargetName);
}
if (intent.getAction().equals(ICisDirectory.FIND_ALL_CIS)) {
//UNMARSHALL THE ADVERTS FROM THE RETURNED PARCELS
Parcelable parcels[] = intent.getParcelableArrayExtra(ICisDirectory.INTENT_RETURN_VALUE);
for (int i = 0; i < parcels.length; i++) {
ACommunity cis = (ACommunity) parcels[i];
Log.d(LOG_TAG, ">>>>>CIS DIRECTORY RESULTS:\nCIS ID: " + cis.getCommunityJid());
continueTests(cis.getCommunityJid(), cis.getCommunityName());
}
}
if (intent.getAction().equals(ICisManager.GET_CIS_LIST)) {
//UNMARSHALL THE ID FROM THE RETURNED PARCEL
Parcelable parcels[] = intent.getParcelableArrayExtra(ICisManager.INTENT_RETURN_VALUE);
for (int i = 0; i < parcels.length; i++) {
ACommunity cis = (ACommunity) parcels[i];
Log.d(LOG_TAG, ">>>>>GET CIS RESULTS:\nCIS ID: " + cis.getCommunityJid());
}
}
if (intent.getAction().equals(ICisManager.JOIN_CIS)) {
//UNMARSHALL THE result
boolean result = intent.getBooleanExtra(ICisSubscribed.INTENT_RETURN_BOOLEAN,false);
Log.d(LOG_TAG, ">>>>>CIS JOIN RESULT:\n>>>>>Allowed to join: " + result);
if(true == result){
//UNMARSHALL THE community FROM Parcel
Parcelable parcel = intent.getParcelableExtra(ICisSubscribed.INTENT_RETURN_VALUE);
ACommunity resp = (ACommunity) parcel;
Log.d(LOG_TAG, ">>>>>Community Joined: " + resp.getCommunityName() + "\n" + resp.getDescription());
}
}
if (intent.getAction().equals(ICisSubscribed.GET_MEMBERS)) {
//UNMARSHALL THE PARTICIPANTS FROM THE RETURNED PARCELS
Parcelable parcels[] = intent.getParcelableArrayExtra(ICisSubscribed.INTENT_RETURN_VALUE);
for (int i = 0; i < parcels.length; i++) {
AParticipant member = (AParticipant) parcels[i];
Log.d(LOG_TAG, ">>>>>CIS Member Listing RESULTS:\nMEMBER ID: " + member.getJid());
Log.d(LOG_TAG, ">>>>>MEMBER ROLE: " + member.getRole().toString());
}
}
if (intent.getAction().equals(ICisSubscribed.ADD_ACTIVITY)) {
//UNMARSHALL THE RESULT FROM Parcel
Parcelable parcel = intent.getParcelableExtra(ICisSubscribed.INTENT_RETURN_VALUE);
Log.d(LOG_TAG, ">>>>>ADD ACTIVIY RESULTS:\npublished: " + parcel.toString());
}
if (intent.getAction().equals(ICisSubscribed.GET_ACTIVITY_FEED)) {
//UNMARSHALL THE ACTIVITIES FROM Parcels
Parcelable parcels[] = intent.getParcelableArrayExtra(ICisSubscribed.INTENT_RETURN_VALUE);
for (int i = 0; i < parcels.length; i++) {
AActivity activity = (AActivity) parcels[i];
Log.d(LOG_TAG, ">>>>>GET ACTIVIY FEED RESULTS:\npublish: " + activity.getPublished());
}
}
}
};
}