package com.dimuthuupeksha.viewer.android.ui; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import android.app.AlertDialog; import android.app.ProgressDialog; import android.content.DialogInterface; import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; import android.util.TypedValue; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.widget.ListView; import android.widget.SimpleAdapter; import com.actionbarsherlock.app.SherlockListActivity; import com.actionbarsherlock.view.MenuItem; import com.dimuthuupeksha.viewer.android.applib.ROClient; import com.dimuthuupeksha.viewer.android.applib.RORequest; import com.dimuthuupeksha.viewer.android.applib.exceptions.ConnectionException; import com.dimuthuupeksha.viewer.android.applib.exceptions.InvalidCredentialException; import com.dimuthuupeksha.viewer.android.applib.exceptions.UnknownErrorException; import com.dimuthuupeksha.viewer.android.applib.representation.ActionResultItem; import com.dimuthuupeksha.viewer.android.applib.representation.DomainTypeAction; import com.dimuthuupeksha.viewer.android.applib.representation.JsonRepr; import com.dimuthuupeksha.viewer.android.applib.representation.Link; import com.dimuthuupeksha.viewer.android.applib.representation.ObjectMember; import com.dimuthuupeksha.viewer.android.uimodel.MenuActivity; /* Author - Dimuthu Upeksha*/ public class ObjectActionRenderActivity extends SherlockListActivity { String describedby; // String self; Map<String, ObjectMember> actionMembers; private boolean refreshed = false; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); String data = (String) getIntent().getSerializableExtra("data"); ActionResultItem actionResultItem = JsonRepr.fromString(ActionResultItem.class, data); describedby = actionResultItem.getLinkByRel("describedby").getHref(); // self = actionResultItem.getLinkByRel("self").getHref(); actionMembers = new HashMap<String, ObjectMember>(); Iterator<String> it = actionResultItem.getMembers().keySet().iterator(); while (it.hasNext()) { String key = it.next(); String memberType = actionResultItem.getMembers().get(key).getMemberType(); if (memberType.equals("action")) { System.out.println("7"); actionMembers.put(key, actionResultItem.getMembers().get(key)); System.out.println("action key " + key); System.out.println(actionResultItem.getMembers().get(key)); // System.out.println(actionResultItem.getMembers().get(key).getValue()); } } // ListView view = getListView(); // view.setAdapter(new ArrayAdapter<String>(getBaseContext(), // R.layout.simple_list_item_1, chains)); // } @Override public boolean onOptionsItemSelected(MenuItem item) { Intent intent; switch (item.getItemId()) { case R.id.home: intent = new Intent(this, HomeActivity.class); startActivity(intent); break; case R.id.services: int width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 40, getResources().getDisplayMetrics()); com.dimuthuupeksha.viewer.android.uimodel.SlideoutActivity.prepare(this, getWindow().getDecorView().getRootView(), width); startActivity(new Intent(this, MenuActivity.class)); overridePendingTransition(0, 0); break; case R.id.back: } return true; } public void refresh() { if (!refreshed) { new ResolveReferenceTask(this).execute(); refreshed = true; } } private Map<String, Map<String, Object>> referenceMap; private void render(Map<String, Map<String, Object>> referenceMap) { this.referenceMap = referenceMap; String[] actionTitles = new String[referenceMap.keySet().size()]; actionTitles = referenceMap.keySet().toArray(actionTitles); List<Map<String, String>> detailedTitles = new ArrayList<Map<String, String>>(); for (int i = 0; i < actionTitles.length; i++) { String head = ((DomainTypeAction) referenceMap.get(actionTitles[i]).get("dtAction")).getExtensions().get("friendlyName"); Map<String, String> titleMap = new HashMap<String, String>(); titleMap.put("head", head); if (actionMembers.get(actionTitles[i]).getDisabledReason() != null) { titleMap.put("subhead", actionMembers.get(actionTitles[i]).getDisabledReason()); } else { titleMap.put("subhead", ""); } detailedTitles.add(titleMap); } ListView view = getListView(); SimpleAdapter sadapter = new SimpleAdapter(this, detailedTitles, R.layout.list_item_with_two_rows, new String[] { "head", "subhead" }, new int[] { R.id.txtHead, R.id.txtSubhead }); view.setAdapter(sadapter); } @Override protected void onListItemClick(ListView l, View v, int position, long id) { String[] actionIds = new String[referenceMap.keySet().size()]; actionIds = referenceMap.keySet().toArray(actionIds); String selectedId = actionIds[position]; System.out.println(selectedId); ObjectMember member = actionMembers.get(selectedId); Link detailLink = member.getLinkByRel("details"); String data = detailLink.AsJson(); Intent intent = new Intent(this, ActionActivity.class); // pass details // link to // ActionAction // class to // render the // action intent.putExtra("detailLink", data); intent.putExtra("title", ((Map<String, String>) l.getItemAtPosition(position)).get("head")); startActivity(intent); } private class ResolveReferenceTask extends AsyncTask<Void, Void, Map<String, Map<String, Object>>> { ProgressDialog pd; int error = 0; private static final int INVALID_CREDENTIAL = -1; private static final int CONNECTION_ERROR = -2; private static final int UNKNOWN_ERROR = -3; public ResolveReferenceTask(ObjectActionRenderActivity activity) { pd = new ProgressDialog(activity); pd.setMessage("Loading"); } @Override protected void onPreExecute() { pd.show(); } @Override protected Map<String, Map<String, Object>> doInBackground(Void... params) { ROClient client = ROClient.getInstance(); Iterator<String> it = actionMembers.keySet().iterator(); Map<String, Map<String, Object>> referenceMap = new HashMap<String, Map<String, Object>>(); try { while (it.hasNext()) { String key = it.next(); // String url= self+"/actions/"+key; // System.out.println("action "+url); // RORequest request= client.RORequestTo(url); // Action action = client.executeT(Action.class, "GET", // request, // null); String url = describedby + "/actions/" + key; System.out.println("desc " + url); RORequest request = client.RORequestTo(url); DomainTypeAction dtAction = client.executeT(DomainTypeAction.class, "GET", request, null); Map<String, Object> content = new HashMap<String, Object>(); // content.put("action", action); content.put("dtAction", dtAction); System.out.println("Fname " + dtAction.getExtensions().get("friendlyName")); referenceMap.put(key, content); } } catch (ConnectionException e) { error = CONNECTION_ERROR; e.printStackTrace(); } catch (InvalidCredentialException e) { error = INVALID_CREDENTIAL; e.printStackTrace(); } catch (UnknownErrorException e) { error = UNKNOWN_ERROR; e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } return referenceMap; } @Override protected void onPostExecute(Map<String, Map<String, Object>> result) { if (result != null) { render(result); } if (error == INVALID_CREDENTIAL) { /* Username and password not valid show the Login */ Intent intent = new Intent(ObjectActionRenderActivity.this, LogInActivity.class); ObjectActionRenderActivity.this.startActivity(intent); } if (error == CONNECTION_ERROR) { /** Show the error Dialog */ AlertDialog alertDialog = new AlertDialog.Builder(ObjectActionRenderActivity.this).create(); alertDialog.setTitle("Connection Error"); alertDialog.setMessage("Please check your settings."); // Setting OK Button alertDialog.setButton("Close", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }); // Showing Alert Message alertDialog.show(); } pd.hide(); } } }