package org.societies.android; import java.util.Arrays; import java.util.Collections; import java.util.Date; import java.util.GregorianCalendar; import java.util.List; import java.util.UUID; import javax.xml.datatype.DatatypeFactory; import javax.xml.datatype.XMLGregorianCalendar; import javax.xml.parsers.DocumentBuilderFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.societies.comm.android.ipc.utils.MarshallUtils; import org.societies.comm.xmpp.client.impl.PubsubClientAndroid; import org.societies.identity.IdentityManagerImpl; import org.societies.test.model.AddDirectEvidenceRequestBean; import org.societies.api.comm.xmpp.pubsub.Subscriber; import org.societies.api.identity.IIdentity; import org.societies.api.identity.IIdentityManager; import org.w3c.dom.Element; import org.societies.api.schema.examples.calculatorbean.CalcBean; import android.app.Activity; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; public class PubsubTesterActivity extends Activity { private static final String LOG_TAG = PubsubTesterActivity.class.getCanonicalName(); private static final List<String> classList = Collections.singletonList("org.societies.api.schema.examples.calculatorbean.CalcBean"); private ExampleTask task; /** * Called when the activity is first created. * @param savedInstanceState If the activity is being re-initialized after * previously being shut down then this Bundle contains the data it most * recently supplied in onSaveInstanceState(Bundle). <b>Note: Otherwise it is null.</b> */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.d(LOG_TAG,"onCreate"); setContentView(R.layout.main); PubsubClientAndroid pubsubClient = new PubsubClientAndroid(this); try { pubsubClient.addSimpleClasses(classList); } catch (ClassNotFoundException e) { Log.e(LOG_TAG,"ClassNotFoundException loading "+Arrays.toString(classList.toArray()), e); } task = new ExampleTask(); task.execute(pubsubClient); } @Override public void onDestroy() { super.onDestroy(); task.cancel(true); } private static Subscriber subscriber = new Subscriber() { public void pubsubEvent(IIdentity pubsubService, String node, String itemId, Object item) { try { Log.d(LOG_TAG,"**************pubsubEvent: "+pubsubService.getJid()+" "+node+" "+itemId+" "+item.getClass().getCanonicalName()); if (item instanceof CalcBean) { CalcBean calcBean = (CalcBean)item; Log.d(LOG_TAG,"A: "+calcBean.getA()); Log.d(LOG_TAG,"B: "+calcBean.getB()); } else if (item instanceof AddDirectEvidenceRequestBean) { AddDirectEvidenceRequestBean b = (AddDirectEvidenceRequestBean) item; Log.d(LOG_TAG,b.getTimestamp().toXMLFormat()); } else { Log.w(LOG_TAG,"item is not an instance of CalcBean nor AddDirectEvidenceRequestBean"); } } catch (Exception e) { Log.e(LOG_TAG,e.getMessage(), e); } } }; private static class ExampleTask extends AsyncTask<PubsubClientAndroid, Void, Void> { protected Void doInBackground(PubsubClientAndroid... args) { PubsubClientAndroid pubsubClient = args[0]; try { IIdentity pubsubService = IdentityManagerImpl.staticfromJid("xcmanager.societies.local"); CalcBean item = new CalcBean(); item.setA(1); item.setB(2); item.setMessage("testBean"); final String nodeName = "test3"; pubsubClient.ownerCreate(pubsubService, nodeName); List<String> items = pubsubClient.discoItems(pubsubService, null); for(String i:items) Log.d(LOG_TAG,"DiscoItem: "+i); pubsubClient.subscriberSubscribe(pubsubService, nodeName, subscriber); // publish calcBean String itemId = pubsubClient.publisherPublish(pubsubService, nodeName, UUID.randomUUID().toString(), item); Log.d(LOG_TAG,"Calcbean ID: "+itemId); try { Thread.sleep(1000); } catch(InterruptedException e) {} // publish AddDirectEvidenceRequestBean // AddDirectEvidenceRequestBean item2 = new AddDirectEvidenceRequestBean(); // DatatypeFactory df = DatatypeFactory.newInstance(); // XMLGregorianCalendar cal = df.newXMLGregorianCalendar(); // Log.d(LOG_TAG,"cal.getClass()="+cal.getClass()); // GregorianCalendar gc = new GregorianCalendar(); // gc.setTime(new Date()); // cal = df.newXMLGregorianCalendar(gc); // item2.setTimestamp(cal); // String itemId2 = pubsubClient.publisherPublish(pubsubService, nodeName, UUID.randomUUID().toString(), item2); // Log.d(LOG_TAG,"AddDirectEvidenceRequestBean ID: "+itemId2); // try { // Thread.sleep(1000); // } catch(InterruptedException e) {} pubsubClient.publisherDelete(pubsubService, nodeName, itemId); // pubsubClient.publisherDelete(pubsubService, nodeName, itemId2); pubsubClient.ownerPurgeItems(pubsubService, nodeName); pubsubClient.subscriberUnsubscribe(pubsubService, nodeName, subscriber); pubsubClient.ownerDelete(pubsubService, nodeName); } catch (Exception e) { Log.e(LOG_TAG,e.getMessage(), e); } return null; } } }