From 9731f86ab6a86be19d730230fefb33fc1724ef47 Mon Sep 17 00:00:00 2001 From: mdtrooper Date: Thu, 15 Sep 2011 13:34:52 +0000 Subject: [PATCH] 2011-09-15 Miguel de Dios * res/layout/*: added new layout and some changes in other layout. * res/values/strings.xml, res/values-en/strings.xml, res/values-es/strings.xml: added more strings. * src/pandroid_event_viewer/pandorafms/*: some changes to show opened item when make click in event list. git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@4955 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f --- extras/pandroid_event_viewer/ChangeLog | 10 + .../res/layout/item_list_event_extended.xml | 157 +++++++++++ .../res/layout/item_list_event_layout.xml | 7 +- .../res/values-en/strings.xml | 12 + .../res/values-es/strings.xml | 12 + .../res/values/strings.xml | 12 + .../pandorafms/EventList.java | 250 +++++++++++++++--- .../pandorafms/EventListItem.java | 22 +- .../PandroidEventviewerActivity.java | 117 ++++++-- 9 files changed, 535 insertions(+), 64 deletions(-) create mode 100644 extras/pandroid_event_viewer/res/layout/item_list_event_extended.xml diff --git a/extras/pandroid_event_viewer/ChangeLog b/extras/pandroid_event_viewer/ChangeLog index d166e7555b..d0bdc3eec1 100644 --- a/extras/pandroid_event_viewer/ChangeLog +++ b/extras/pandroid_event_viewer/ChangeLog @@ -1,3 +1,13 @@ +2011-09-15 Miguel de Dios + + * res/layout/*: added new layout and some changes in other layout. + + * res/values/strings.xml, res/values-en/strings.xml, + res/values-es/strings.xml: added more strings. + + * src/pandroid_event_viewer/pandorafms/*: some changes to show opened item + when make click in event list. + 2011-09-13 Miguel de Dios * *.*: added first version of Pandroid Event Viewer. \ No newline at end of file diff --git a/extras/pandroid_event_viewer/res/layout/item_list_event_extended.xml b/extras/pandroid_event_viewer/res/layout/item_list_event_extended.xml new file mode 100644 index 0000000000..649082a43f --- /dev/null +++ b/extras/pandroid_event_viewer/res/layout/item_list_event_extended.xml @@ -0,0 +1,157 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/extras/pandroid_event_viewer/res/layout/item_list_event_layout.xml b/extras/pandroid_event_viewer/res/layout/item_list_event_layout.xml index dff1572878..0f8f71c0ad 100644 --- a/extras/pandroid_event_viewer/res/layout/item_list_event_layout.xml +++ b/extras/pandroid_event_viewer/res/layout/item_list_event_layout.xml @@ -16,9 +16,10 @@ --> - + />--> diff --git a/extras/pandroid_event_viewer/res/values-en/strings.xml b/extras/pandroid_event_viewer/res/values-en/strings.xml index 4e38683034..f898762bad 100644 --- a/extras/pandroid_event_viewer/res/values-en/strings.xml +++ b/extras/pandroid_event_viewer/res/values-en/strings.xml @@ -20,4 +20,16 @@ main text (value english) list (value english) + + System + + - Empty - + All + + Tags + Comments + Group + Agent name + Type + Severity diff --git a/extras/pandroid_event_viewer/res/values-es/strings.xml b/extras/pandroid_event_viewer/res/values-es/strings.xml index aebc1d6a86..25b8945920 100644 --- a/extras/pandroid_event_viewer/res/values-es/strings.xml +++ b/extras/pandroid_event_viewer/res/values-es/strings.xml @@ -20,4 +20,16 @@ main text (value spanish) list (value spanish) + + Sistema + + - Vacio - + Todo + + Etiquetas + Comentarios + Grupos + Nombre del agente + Tipo + Severidad diff --git a/extras/pandroid_event_viewer/res/values/strings.xml b/extras/pandroid_event_viewer/res/values/strings.xml index 8340d07423..c8a95b31ce 100644 --- a/extras/pandroid_event_viewer/res/values/strings.xml +++ b/extras/pandroid_event_viewer/res/values/strings.xml @@ -20,4 +20,16 @@ main text (value) list (value) + + System + + - Empty - + All + + Tags + Comments + Group + Agent name + Type + Severity diff --git a/extras/pandroid_event_viewer/src/pandroid_event_viewer/pandorafms/EventList.java b/extras/pandroid_event_viewer/src/pandroid_event_viewer/pandorafms/EventList.java index d391ef162b..f17b8fc6ae 100644 --- a/extras/pandroid_event_viewer/src/pandroid_event_viewer/pandorafms/EventList.java +++ b/extras/pandroid_event_viewer/src/pandroid_event_viewer/pandorafms/EventList.java @@ -1,51 +1,231 @@ package pandroid_event_viewer.pandorafms; -import java.util.Random; +import java.io.IOException; +import java.io.InputStream; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.HashMap; -import android.app.Activity; +import android.app.ListActivity; import android.content.Context; +import android.content.Intent; +import android.database.Cursor; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; import android.graphics.Color; +import android.opengl.Visibility; import android.os.Bundle; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.LinearLayout; import android.widget.ListView; +import android.widget.SimpleCursorAdapter; +import android.widget.TableRow; import android.widget.TextView; -public class EventList extends Activity { - private ListView lv1; - private MyAdapter la1; +public class EventList extends ListActivity { + private ListView lv; + private MyAdapter la; + public PandroidEventviewerActivity object; + public HashMap openedItem; + public HashMap imgGroups; + public HashMap imgSeverity; + public HashMap imgType; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + this.openedItem = new HashMap(); + this.imgGroups = new HashMap(); + this.imgSeverity = new HashMap(); + this.imgType = new HashMap(); + + Intent i = getIntent(); + this.object = (PandroidEventviewerActivity)i.getSerializableExtra("object"); + setContentView(R.layout.list_view_layout); - //enganchamos el view con el layout de lista de main.xml - lv1 = (ListView)findViewById(android.R.id.list); + lv = (ListView)findViewById(android.R.id.list); - la1 = new MyAdapter(getBaseContext()); + la = new MyAdapter(getBaseContext(), object); - lv1.setAdapter(la1); + lv.setAdapter(la); } + public Bitmap downloadFile(String fileUrl) {Log.e("downloadFile", fileUrl); + URL myFileUrl =null; + try { + myFileUrl= new URL(fileUrl); + } catch (MalformedURLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + try { + HttpURLConnection conn= (HttpURLConnection)myFileUrl.openConnection(); + conn.setDoInput(true); + conn.connect(); + InputStream is = conn.getInputStream(); + + return BitmapFactory.decodeStream(is); + //imView.setImageBitmap(bmImg); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + return null; + } + + public void setImageGroup(View view, String group_icon, int id) { + ImageView imgview = (ImageView)view.findViewById(id); + Bitmap img; + + if (this.imgGroups.containsKey(group_icon)) { + img = this.imgGroups.get(group_icon); + } + else { + img = this.downloadFile( + "http://192.168.70.112/pandora_console/images/groups_small/" + group_icon + ".png"); + + if (img != null) { + this.imgGroups.put(group_icon, img); + } + } + + if (img != null) { + imgview.setImageBitmap(img); + } + } + + public void setImageType(View view, String url, int id) { + ImageView imgview = (ImageView)view.findViewById(id); + Bitmap img = null; + + if (this.imgType.containsKey(url)) { + img = this.imgType.get(url); + } + else { + img = this.downloadFile(url); + + if (img != null) { + this.imgType.put(url, img); + } + } + + if (img != null) { + imgview.setImageBitmap(img); + } + } + + public void setImageSeverity(View view, String url, int id) { + ImageView imgview = (ImageView)view.findViewById(id); + Bitmap img = null; + + if (this.imgSeverity.containsKey(url)) { + img = this.imgSeverity.get(url); + } + else { + img = this.downloadFile(url); + + if (img != null) { + this.imgSeverity.put(url, img); + } + } + + if (img != null) { + imgview.setImageBitmap(img); + } + } + + @Override + protected void onListItemClick(ListView l, View v, int position, long id) + { + super.onListItemClick(l, v, position, id); + + Boolean opened = new Boolean(false); + if (this.openedItem.containsKey(new Integer(position))) { + opened = this.openedItem.get(new Integer(position)); + } + + LinearLayout itemLinearLayout = (LinearLayout)l.findViewById(R.id.item_linear_layout); + + if (!opened.booleanValue()) { + EventListItem item = this.object.eventList.get(position); + View view; + + LayoutInflater inflater = (LayoutInflater) getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); + view = inflater.inflate(R.layout.item_list_event_extended, null); + + TextView text; + if (item.tags.length() != 0) { + text = (TextView)view.findViewById(R.id.tags_text); + text.setText(item.tags); + } + + if (item.user_comment.length() != 0) { + text = (TextView)view.findViewById(R.id.comments_text); + text.setText(item.user_comment); + } + + if (item.group_name.length() != 0) { + text = (TextView)view.findViewById(R.id.group_text); + text.setText(item.group_name); + this.setImageGroup(view, item.group_icon, R.id.img_group); + } + else { + //ALL + this.setImageGroup(view, "world", R.id.img_group); + } + + if (item.agent_name.length() != 0) { + View row = view.findViewById(R.id.row_agent); + row.setVisibility(View.VISIBLE); + + text = (TextView)view.findViewById(R.id.type_text); + text.setText(item.description_event); + + this.setImageType(view, item.description_image, R.id.img_type); + } + + if (item.criticity_name.length() != 0) { + text = (TextView)view.findViewById(R.id.severity_text); + text.setText(item.criticity_name); + + this.setImageType(view, item.criticity_image, R.id.img_severity); + } + Log.e("item", item.criticity_name); + + itemLinearLayout.addView(view); + } + else { + itemLinearLayout.removeViewAt(1); + } + opened = new Boolean(!opened.booleanValue()); + this.openedItem.put(new Integer(position), opened); + } public class MyAdapter extends BaseAdapter { private Context mContext; + public PandroidEventviewerActivity object; - public MyAdapter(Context c) + public MyAdapter(Context c, PandroidEventviewerActivity object) { mContext = c; + + this.object = object; } @Override public int getCount() { - //A FUEGO ¿¿PORQUE?? Porque rellenamos con 4 datos falsos - return 40; + return this.object.eventList.size(); } @Override @@ -64,6 +244,8 @@ public class EventList extends Activity { public View getView(int position, View convertView, ViewGroup parent) { View view; + EventListItem item = this.object.eventList.get(position); + //OPTIMIZACIÓN PARA NO CREAR convertView if (convertView == null) { @@ -75,36 +257,42 @@ public class EventList extends Activity { view = convertView; } - Random rand = new Random(); - rand.setSeed(System.currentTimeMillis()); - - int status = rand.nextInt(5); - switch (status) { - case 0://Green - view.setBackgroundColor(Color.parseColor("#BBFFA4")); - break; - case 1://Red - view.setBackgroundColor(Color.parseColor("#FFC0B5")); - break; - case 2://Yellow - view.setBackgroundColor(Color.parseColor("#F4FFBF")); - break; - case 3://Blue + switch (item.criticity) { + + case 0://Blue view.setBackgroundColor(Color.parseColor("#CDE2EA")); break; - case 4://Grey + case 1://Grey + view.setBackgroundColor(Color.parseColor("#E4E4E4")); + break; + case 2://Green + view.setBackgroundColor(Color.parseColor("#BBFFA4")); + break; + case 3://Yellow + view.setBackgroundColor(Color.parseColor("#F4FFBF")); + break; + case 4://Red + view.setBackgroundColor(Color.parseColor("#FFC0B5")); + break; + default://Grey view.setBackgroundColor(Color.parseColor("#E4E4E4")); break; } TextView titulo = (TextView)view.findViewById(R.id.agent_name); - titulo.setText("Agent " + position); + + if (item.event_type.equals("system")) { + titulo.setText(R.string.system_str); + } + else { + titulo.setText(item.agent_name); + } TextView descripcion = (TextView)view.findViewById(R.id.event_name); - descripcion.setText("Module Host Alive (0.00) is going to CRITICAL"); + descripcion.setText(item.event); TextView timestamp = (TextView)view.findViewById(R.id.timestamp); - timestamp.setText("13:12:11"); + timestamp.setText(item.timestamp); return view; } diff --git a/extras/pandroid_event_viewer/src/pandroid_event_viewer/pandorafms/EventListItem.java b/extras/pandroid_event_viewer/src/pandroid_event_viewer/pandorafms/EventListItem.java index 0b91684eb1..25dc1955d8 100644 --- a/extras/pandroid_event_viewer/src/pandroid_event_viewer/pandorafms/EventListItem.java +++ b/extras/pandroid_event_viewer/src/pandroid_event_viewer/pandorafms/EventListItem.java @@ -1,5 +1,25 @@ package pandroid_event_viewer.pandorafms; public class EventListItem { - + public int id_event; + public int id_agent; + public String id_user; + public int id_group; + public int status; + public String timestamp; + public String event; + public int utimestamp; + public String event_type; + public int id_agentmodule; + public int id_alert_am; + public int criticity; + public String user_comment; + public String tags; + public String agent_name; + public String group_name; + public String group_icon; + public String description_event; + public String description_image; + public String criticity_name; + public String criticity_image; } diff --git a/extras/pandroid_event_viewer/src/pandroid_event_viewer/pandorafms/PandroidEventviewerActivity.java b/extras/pandroid_event_viewer/src/pandroid_event_viewer/pandorafms/PandroidEventviewerActivity.java index ec46cf5dec..bbcb141087 100644 --- a/extras/pandroid_event_viewer/src/pandroid_event_viewer/pandorafms/PandroidEventviewerActivity.java +++ b/extras/pandroid_event_viewer/src/pandroid_event_viewer/pandorafms/PandroidEventviewerActivity.java @@ -18,35 +18,16 @@ import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; -import java.net.Socket; -import java.net.UnknownHostException; -import java.security.KeyManagementException; -import java.security.KeyStore; -import java.security.KeyStoreException; -import java.security.NoSuchAlgorithmException; -import java.security.UnrecoverableKeyException; -import java.security.cert.CertificateException; -import java.security.cert.X509Certificate; +import java.io.Serializable; import java.util.ArrayList; import java.util.List; -import javax.net.ssl.HostnameVerifier; -import javax.net.ssl.HttpsURLConnection; -import javax.net.ssl.SSLContext; -import javax.net.ssl.TrustManager; -import javax.net.ssl.X509TrustManager; - import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpPost; -import org.apache.http.conn.scheme.Scheme; -import org.apache.http.conn.scheme.SchemeRegistry; -import org.apache.http.conn.ssl.SSLSocketFactory; -import org.apache.http.conn.ssl.X509HostnameVerifier; import org.apache.http.impl.client.DefaultHttpClient; -import org.apache.http.impl.conn.SingleClientConnManager; import org.apache.http.message.BasicNameValuePair; import android.app.TabActivity; @@ -55,7 +36,7 @@ import android.os.Bundle; import android.util.Log; import android.widget.TabHost; -public class PandroidEventviewerActivity extends TabActivity { +public class PandroidEventviewerActivity extends TabActivity implements Serializable { public ArrayList eventList; /** Called when the activity is first created. */ @@ -63,18 +44,27 @@ public class PandroidEventviewerActivity extends TabActivity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + this.eventList = new ArrayList(); + final TabHost tabHost = getTabHost(); + test(); + + Intent i_main = new Intent(this, Main.class); + tabHost.addTab ( tabHost.newTabSpec(getResources().getString(R.string.item_tab_main_text)) .setIndicator(getResources().getString(R.string.item_tab_main_text), this.getResources().getDrawable(R.drawable.house) ) - .setContent(new Intent(this, Main.class)) + .setContent(i_main) ); + + Intent i_event_list = new Intent(this, EventList.class); + i_event_list.putExtra("object", this); tabHost.addTab ( @@ -82,7 +72,7 @@ public class PandroidEventviewerActivity extends TabActivity { .setIndicator(getResources().getString(R.string.item_tab_event_list_text), this.getResources().getDrawable(R.drawable.lightning_go) ) - .setContent(new Intent(this, EventList.class)) + .setContent(i_event_list) ); tabHost.getTabWidget().getChildAt(0).getLayoutParams().height=45; @@ -90,11 +80,10 @@ public class PandroidEventviewerActivity extends TabActivity { } public void test() { + try { DefaultHttpClient httpClient = new DefaultHttpClient(); - - HttpPost httpPost = new HttpPost( "http://192.168.70.112/pandora_console/include/api.php"); @@ -105,7 +94,7 @@ public class PandroidEventviewerActivity extends TabActivity { parameters.add(new BasicNameValuePair("op2", "events")); parameters.add(new BasicNameValuePair("other_mode", "url_encode_separator_|")); parameters.add(new BasicNameValuePair("return_type", "csv")); - parameters.add(new BasicNameValuePair("other", ";||||||1315015715||10|1")); + parameters.add(new BasicNameValuePair("other", ";||||||1315015715||20|1")); UrlEncodedFormEntity entity = new UrlEncodedFormEntity(parameters); @@ -114,11 +103,81 @@ public class PandroidEventviewerActivity extends TabActivity { HttpResponse response = httpClient.execute(httpPost); HttpEntity entityResponse = response.getEntity(); - String str = convertStreamToString(entityResponse.getContent()); - Log.e("test2", str); + String return_api = convertStreamToString(entityResponse.getContent()); + + String[] lines = return_api.split("\n"); + + for (int i= 0; i < lines.length; i++) { + String[] items = lines[i].split(";", 21); + + EventListItem event = new EventListItem(); + if (items[0].length() == 0) { + event.id_event = 0; + } + else { + event.id_event = Integer.parseInt(items[0]); + } + if (items[1].length() == 0) { + event.id_agent = 0; + } + else { + event.id_agent = Integer.parseInt(items[1]); + } + event.id_user = items[2]; + if (items[3].length() == 0) { + event.id_group = 0; + } + else { + event.id_group = Integer.parseInt(items[3]); + } + if (items[4].length() == 0) { + event.status = 0; + } + else { + event.status = Integer.parseInt(items[4]); + } + event.timestamp = items[5]; + event.event = items[6]; + if (items[7].length() == 0) { + event.utimestamp = 0; + } + else { + event.utimestamp = Integer.parseInt(items[7]); + } + event.event_type = items[8]; + if (items[9].length() == 0) { + event.id_agentmodule = 0; + } + else { + event.id_agentmodule = Integer.parseInt(items[9]); + } + if (items[10].length() == 0) { + event.id_alert_am = 0; + } + else { + event.id_alert_am = Integer.parseInt(items[10]); + } + if (items[11].length() == 0) { + event.criticity = 0; + } + else { + event.criticity = Integer.parseInt(items[11]); + } + event.user_comment = items[12]; + event.tags = items[13]; + event.agent_name = items[14]; + event.group_name = items[15]; + event.group_icon = items[16]; + event.description_event = items[17]; + event.description_image = items[18]; + event.criticity_name = items[19]; + event.criticity_image = items[20]; + + this.eventList.add(event); + } } catch (Exception e) { - Log.e("test2", e.getMessage()); + Log.e("ERROR THE ", e.getMessage()); return; }