summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorlresende <lresende@13f79535-47bb-0310-9956-ffa450edef68>2009-05-26 22:50:31 +0000
committerlresende <lresende@13f79535-47bb-0310-9956-ffa450edef68>2009-05-26 22:50:31 +0000
commit090512087de4e4a2bbc346a9bd0ada61a6f337bf (patch)
treeb1621b1b3ceaeb61ba2593926d01726f0503a91c
parentd8688ef4eb4ef025403952e37194c896a3337aab (diff)
TUSCANY-3060 - Applying SANNI Lookman patch with updates to Android Store UI
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@778916 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--branches/sca-java-1.x/samples/store-android/res/drawable/addc.pngbin0 -> 3391 bytes
-rw-r--r--branches/sca-java-1.x/samples/store-android/res/drawable/rems.pngbin0 -> 3358 bytes
-rw-r--r--branches/sca-java-1.x/samples/store-android/res/layout/cat_row.xml19
-rw-r--r--branches/sca-java-1.x/samples/store-android/res/layout/main.xml54
-rw-r--r--branches/sca-java-1.x/samples/store-android/res/layout/shop_row.xml20
-rw-r--r--branches/sca-java-1.x/samples/store-android/res/values/strings.xml22
-rw-r--r--branches/sca-java-1.x/samples/store-android/src/services/Commons.java17
-rw-r--r--branches/sca-java-1.x/samples/store-android/src/services/Item.java43
-rw-r--r--branches/sca-java-1.x/samples/store-android/src/services/ShoppingCartProxy.java33
-rw-r--r--branches/sca-java-1.x/samples/store-android/src/services/atom/xml/AtomXML.java321
-rw-r--r--branches/sca-java-1.x/samples/store-android/src/services/atom/xml/CartItemHandler.java138
-rw-r--r--branches/sca-java-1.x/samples/store-android/src/store/android/catalog.java214
12 files changed, 692 insertions, 189 deletions
diff --git a/branches/sca-java-1.x/samples/store-android/res/drawable/addc.png b/branches/sca-java-1.x/samples/store-android/res/drawable/addc.png
new file mode 100644
index 0000000000..17259450d8
--- /dev/null
+++ b/branches/sca-java-1.x/samples/store-android/res/drawable/addc.png
Binary files differ
diff --git a/branches/sca-java-1.x/samples/store-android/res/drawable/rems.png b/branches/sca-java-1.x/samples/store-android/res/drawable/rems.png
new file mode 100644
index 0000000000..378690fad4
--- /dev/null
+++ b/branches/sca-java-1.x/samples/store-android/res/drawable/rems.png
Binary files differ
diff --git a/branches/sca-java-1.x/samples/store-android/res/layout/cat_row.xml b/branches/sca-java-1.x/samples/store-android/res/layout/cat_row.xml
new file mode 100644
index 0000000000..e7f71cb0b6
--- /dev/null
+++ b/branches/sca-java-1.x/samples/store-android/res/layout/cat_row.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+ <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="horizontal"
+ android:layout_width="fill_parent"
+ android:padding="10px"
+ android:layout_height="50px">
+ <TextView
+ android:id="@+id/txtItemC"
+ android:layout_width="250px"
+ android:layout_height="30px"
+ android:textSize="20px"
+
+ />
+
+ <ImageView android:src="@drawable/addc"
+ android:layout_width="30px"
+ android:layout_height="30px"
+ />
+</LinearLayout> \ No newline at end of file
diff --git a/branches/sca-java-1.x/samples/store-android/res/layout/main.xml b/branches/sca-java-1.x/samples/store-android/res/layout/main.xml
index f7494f5a3a..7f296e9ac0 100644
--- a/branches/sca-java-1.x/samples/store-android/res/layout/main.xml
+++ b/branches/sca-java-1.x/samples/store-android/res/layout/main.xml
@@ -17,27 +17,49 @@
android:layout_height="fill_parent">
- <ListView android:id="@+id/ListView01"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- />
+ <ListView android:id="@+id/ListView01"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content" />
- <LinearLayout
- android:id="@+id/tab02"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent">
+ <LinearLayout
+ android:id="@+id/tab02"
+ android:orientation="vertical"
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent">
- <ListView android:id="@+id/ListView02"
+ <TextView
+ android:id="@+id/txtThx"
+ android:layout_width="fill_parent"
+ android:layout_height="30px"
+ android:text="@string/title_thx"
+ />
+ <TextView
+ android:id="@+id/txtEmpty"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ />
+ <LinearLayout
+ android:orientation="horizontal"
+ android:layout_width="fill_parent"
+ android:layout_height="41px">
+
+ <TextView
+ android:id="@+id/txtTotal"
+ android:layout_width="200px"
+ android:layout_height="30px"
+ android:text="@string/title_order"
+ />
+
+ <Button android:id="@+id/btnClean"
+ android:layout_width="100px"
+ android:layout_height="40px"
+ />
+ </LinearLayout>
+
+ <ListView android:id="@+id/ListView02"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
-
- <TextView
- android:id="@+id/txtTotal"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- />
</LinearLayout>
</FrameLayout>
diff --git a/branches/sca-java-1.x/samples/store-android/res/layout/shop_row.xml b/branches/sca-java-1.x/samples/store-android/res/layout/shop_row.xml
new file mode 100644
index 0000000000..a2ffeea56f
--- /dev/null
+++ b/branches/sca-java-1.x/samples/store-android/res/layout/shop_row.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+ <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="horizontal"
+ android:layout_width="fill_parent"
+ android:layout_height="50px"
+ android:padding="10px">
+ <TextView
+ android:id="@+id/txtItemS"
+ android:layout_width="250px"
+ android:layout_height="30px"
+ android:textSize="20px"
+
+ />
+
+ <ImageView android:src="@drawable/rems"
+ android:layout_width="30px"
+ android:layout_height="30px"
+
+ />
+</LinearLayout> \ No newline at end of file
diff --git a/branches/sca-java-1.x/samples/store-android/res/values/strings.xml b/branches/sca-java-1.x/samples/store-android/res/values/strings.xml
index 2cf7940514..33f936b510 100644
--- a/branches/sca-java-1.x/samples/store-android/res/values/strings.xml
+++ b/branches/sca-java-1.x/samples/store-android/res/values/strings.xml
@@ -3,4 +3,26 @@
<string name="hello">Hello World, catalog</string>
<string name="app_name">store</string>
<string name="app_tag">Tuscany</string>
+ <string name="btn_clean">Erase cart</string>
+ <string name="btn_add_del1">Delete</string>
+ <string name="btn_add_del2">Add</string>
+ <string name="txt_empty">Nothing to display. The cart is currently empty</string>
+ <string name="tab_catalog">catalog_tab</string>
+ <string name="tab_shop">shopping_cart_tab</string>
+ <string name="title_catalog">Catalog Items</string>
+ <string name="title_shop">Shopping Cart</string>
+ <string name="get_tag">Catalog GET!!</string>
+ <string name="start_tag">Activity started</string>
+ <string name="txt_total">Total: </string>
+ <string name="add_entry_ok">Entry added: </string>
+ <string name="add_entry_ko">Unable to add entry: </string>
+ <string name="del_entry_ok">Entry removed: </string>
+ <string name="del_entry_ko">Unable to delete item: </string>
+ <string name="alert_yes">Yes</string>
+ <string name="alert_cancel">Cancel</string>
+ <string name="del_all_ok">All entries have been removed</string>
+ <string name="title_thx">Thanks for Shopping With Us!</string>
+ <string name="title_order">Your order</string>
+ <string name="howto_del">Click on an item below to remove it</string>
+
</resources>
diff --git a/branches/sca-java-1.x/samples/store-android/src/services/Commons.java b/branches/sca-java-1.x/samples/store-android/src/services/Commons.java
new file mode 100644
index 0000000000..df51c38b5e
--- /dev/null
+++ b/branches/sca-java-1.x/samples/store-android/src/services/Commons.java
@@ -0,0 +1,17 @@
+/**
+ *
+ */
+package services;
+
+/**
+ * @author Lookouster
+ *
+ */
+public class Commons {
+
+ public static final String TAG="Tuscany";
+ public static final String DEL="HTTP DELETE ";
+ public static final String PST="HTTP POST ";
+
+
+}
diff --git a/branches/sca-java-1.x/samples/store-android/src/services/Item.java b/branches/sca-java-1.x/samples/store-android/src/services/Item.java
index 2b3e4a10c8..1881dd4d11 100644
--- a/branches/sca-java-1.x/samples/store-android/src/services/Item.java
+++ b/branches/sca-java-1.x/samples/store-android/src/services/Item.java
@@ -23,12 +23,42 @@ package services;
public class Item {
private String name;
private String price;
+ private String key;
- public Item() {
+ /**
+ * @return the key
+ */
+ public String getKey() {
+ return key;
+ }
+
+ /**
+ * @param key the key to set
+ */
+ public void setKey(String key) {
+ this.key = key;
+ }
+
+
+
+
+
+
+
+
+
+ public Item() {
}
- /**
+
+
+
+
+
+
+
+ /**
* Parses a string entry to an Item object
* @param s
* @return Item
@@ -55,7 +85,14 @@ public class Item {
this.name = name;
}
- public String getPrice() {
+ public Item(String name, String price, String key) {
+ super();
+ this.name = name;
+ this.price = price;
+ this.key = key;
+ }
+
+ public String getPrice() {
return price;
}
diff --git a/branches/sca-java-1.x/samples/store-android/src/services/ShoppingCartProxy.java b/branches/sca-java-1.x/samples/store-android/src/services/ShoppingCartProxy.java
index 7e36c19c80..acc9b2759e 100644
--- a/branches/sca-java-1.x/samples/store-android/src/services/ShoppingCartProxy.java
+++ b/branches/sca-java-1.x/samples/store-android/src/services/ShoppingCartProxy.java
@@ -19,6 +19,9 @@
package services;
+import java.util.HashMap;
+import java.util.Map;
+
import org.json.JSONException;
import org.json.JSONObject;
@@ -28,21 +31,41 @@ import services.atom.xml.AtomXML;
import services.json.rpc.JSONRpc;
public class ShoppingCartProxy {
- // see http://developer.android.com/guide/developing/tools/emulator.html
- private static final String jsonRPCTotalServiceURI = "http://10.0.2.2:8080/ShoppingCart/Total";
+ private static final String jsonRPCTotalServiceURI = "http://10.0.2.2:8080/ShoppingCart/Total";
private static final String jsonRPCTotalRequest = "{\"id\": 4, \"method\": \"Service.getTotal\", \"params\": []}";
private static final String atomXMLCartServiceURI="http://10.0.2.2:8080/ShoppingCart/Cart";
+
public Item[] getItems() {
- return null;
+ return AtomXML.getItems(atomXMLCartServiceURI);
}
public boolean addItem(Item item) {
- return AtomXML.postItem(atomXMLCartServiceURI, item);
+ String content="<entry xmlns=\"http://www.w3.org/2005/Atom\">" +
+ "<title>item</title>" +
+ "<content type=\"text/xml\">" +
+ "<Item xmlns=\"http://services/\">" +
+ "<name xmlns=\"\">" + item.getName()+ "</name>" +
+ "<price xmlns=\"\">" +item.getPrice()+"</price>" +
+ "</Item></content></entry>";
+ String key =AtomXML.postItem(atomXMLCartServiceURI, content);
+ if(key==null)
+ return false;
+ item.setKey(key);
+ Log.i("TUSCANY shopping cart proxy", key);
+ return true;
}
- public void removeItem(Item item) {
+ public boolean removeItem(Item item) {
+ Log.e("Sent key",item.getKey());
+ String uri=atomXMLCartServiceURI+"/"+item.getKey();
+ return AtomXML.performdelete(uri);
+ }
+
+ public boolean clearCartContent()
+ {
+ return AtomXML.performdelete(atomXMLCartServiceURI);
}
public void checkOut() {
diff --git a/branches/sca-java-1.x/samples/store-android/src/services/atom/xml/AtomXML.java b/branches/sca-java-1.x/samples/store-android/src/services/atom/xml/AtomXML.java
index d5bb7f151e..69f4409ed9 100644
--- a/branches/sca-java-1.x/samples/store-android/src/services/atom/xml/AtomXML.java
+++ b/branches/sca-java-1.x/samples/store-android/src/services/atom/xml/AtomXML.java
@@ -18,19 +18,30 @@
*/
package services.atom.xml;
+import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+
import org.apache.http.Header;
import org.apache.http.HeaderElement;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.ParseException;
import org.apache.http.client.ClientProtocolException;
+import org.apache.http.client.methods.HttpDelete;
+import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+import org.xml.sax.XMLReader;
+import services.Commons;
import services.Item;
import android.util.Log;
@@ -38,111 +49,209 @@ import android.util.Log;
*
*/
public class AtomXML {
-
- public static boolean postItem(String ServiceURI, final Item item)
- {
- DefaultHttpClient client=new DefaultHttpClient();
- HttpPost httpost = new HttpPost(ServiceURI);
-
- httpost.setEntity(new HttpEntity(){
-
- String entry="<entry xmlns=\"http://www.w3.org/2005/Atom\">" +
- "<title>item</title>" +
- "<content type=\"text/xml\">" +
- "<Item xmlns=\"http://services/\">" +
- "<name xmlns=\"\">" + item.getName()+ "</name>" +
- "<price xmlns=\"\">" +item.getPrice()+"</price>" +
- "</Item></content></entry>";
-
- class mHeader implements Header
- {
- public HeaderElement[] getElements() throws ParseException {
- // TODO Auto-generated method stub
- return null;
- }
-
- public String getName() {
- // TODO Auto-generated method stub
- return "Content-type";
- }
-
- public String getValue() {
- // TODO Auto-generated method stub
- return "application/atom+xml;type=entry";
- }
- }
-
- public void consumeContent() throws IOException {
- // TODO Auto-generated method stub
-
- }
-
- public InputStream getContent() throws IOException,
- IllegalStateException {
- // TODO Auto-generated method stub
- return new InputStream(){
-
- public int read() throws IOException {
- // TODO Auto-generated method stub
- return this.available();
- }
-
- };
- }
-
- public Header getContentEncoding() {
- // TODO Auto-generated method stub
- return new mHeader();
- }
-
- public long getContentLength() {
- // TODO Auto-generated method stub
- return entry.length();
- }
-
- public Header getContentType() {
- // TODO Auto-generated method stub
- return new mHeader();
- }
-
- public boolean isChunked() {
- // TODO Auto-generated method stub
- return false;
- }
-
- public boolean isRepeatable() {
- // TODO Auto-generated method stub
- return true;
- }
-
- public boolean isStreaming() {
- // TODO Auto-generated method stub
- return false;
- }
-
- public void writeTo(OutputStream arg0) throws IOException {
- // TODO Auto-generated method stub
-
- arg0.write(entry.getBytes());
- arg0.flush();
- Log.i("Tuscany", "Entry: "+item+" posted via atom/xml");
- }
-
- });
-
- try {
- HttpResponse response = client.execute(httpost);
- Log.i("Tuscany", "Atom entry post status: "+response.getStatusLine().toString());
- return true;
- } catch (ClientProtocolException e) {
- // TODO Auto-generated catch block
- Log.e("Tuscany",e.getMessage());
- } catch (IOException e) {
- // TODO Auto-generated catch block
- Log.e("Tuscany",e.getMessage());
- }
-
- return false;
- }
+
+ public static String postItem(String ServiceURI, final String content)
+ {
+ DefaultHttpClient client=new DefaultHttpClient();
+ HttpPost httpost = new HttpPost(ServiceURI);
+
+ httpost.setEntity(new HttpEntity(){
+
+ String entry=content;
+
+ class mHeader implements Header
+ {
+ public HeaderElement[] getElements() throws ParseException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public String getName() {
+ // TODO Auto-generated method stub
+ return "Content-type";
+ }
+
+ public String getValue() {
+ // TODO Auto-generated method stub
+ return "application/atom+xml;type=entry";
+ }
+ }
+
+ public void consumeContent() throws IOException {
+ // TODO Auto-generated method stub
+
+ }
+
+ public InputStream getContent() throws IOException,
+ IllegalStateException {
+ // TODO Auto-generated method stub
+ return new InputStream(){
+
+ public int read() throws IOException {
+ // TODO Auto-generated method stub
+ return this.available();
+ }
+
+ };
+ }
+
+ public Header getContentEncoding() {
+ // TODO Auto-generated method stub
+ return new mHeader();
+ }
+
+ public long getContentLength() {
+ // TODO Auto-generated method stub
+ return entry.length();
+ }
+
+ public Header getContentType() {
+ // TODO Auto-generated method stub
+ return new mHeader();
+ }
+
+ public boolean isChunked() {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ public boolean isRepeatable() {
+ // TODO Auto-generated method stub
+ return true;
+ }
+
+ public boolean isStreaming() {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ public void writeTo(OutputStream arg0) throws IOException {
+ // TODO Auto-generated method stub
+
+ arg0.write(entry.getBytes());
+ arg0.flush();
+ //Log.i("Tuscany", "Entry posted via atom/xml");
+ }
+
+ });
+
+ try {
+ HttpResponse response = client.execute(httpost);
+ InputStream is =response.getEntity().getContent();
+
+ //Human readable atom response from servlet
+ int read;
+ StringBuffer sb=new StringBuffer();
+ while((read=is.read())>0)
+ {
+ sb.append((char)read);
+ }
+ Log.i("Tuscany", "Atom entry post status: "+response.getStatusLine().toString());
+ //Log.i("Tuscany", "Response: "+sb.toString());
+ //Try now to parse the consumed data
+ try {
+ SAXParserFactory spf = SAXParserFactory.newInstance();
+ SAXParser sp;
+ sp = spf.newSAXParser();
+ XMLReader xr = sp.getXMLReader();
+ CartItemHandler cih=new CartItemHandler();
+ xr.setContentHandler(cih);
+
+ xr.parse(new InputSource(new ByteArrayInputStream(sb.toString().getBytes())));
+ is.close();
+
+ return cih.getCurrentKey();
+
+ } catch (ParserConfigurationException e) {
+ // TODO Auto-generated catch block
+ Log.e(Commons.TAG,e.getMessage());
+ } catch (SAXException e) {
+ // TODO Auto-generated catch block
+ Log.e(Commons.TAG,e.getLocalizedMessage());
+ }
+
+ } catch (ClientProtocolException e) {
+ // TODO Auto-generated catch block
+ Log.e(Commons.TAG,e.getMessage());
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ Log.e(Commons.TAG,e.getMessage());
+ }
+
+ return null;
+ }
+
+ public static boolean performdelete(String uri)
+ {
+ DefaultHttpClient client=new DefaultHttpClient();
+ Log.i(Commons.TAG,Commons.DEL+uri);
+ HttpDelete del=new HttpDelete(uri);
+
+ try {
+ client.execute(del);
+ return true;
+ } catch (ClientProtocolException e) {
+ // TODO Auto-generated catch block
+ Log.e(Commons.TAG,e.getMessage());
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ Log.e(Commons.TAG,e.getMessage());
+ }
+
+ return false;
+
+
+ }
+
+ public static Item[] getItems(String uri)
+ {
+ DefaultHttpClient client=new DefaultHttpClient();
+ HttpGet hg=new HttpGet(uri);
+ HttpResponse hr;
+ HttpEntity he;
+ try {
+ hr=client.execute(hg);
+ InputStream is =hr.getEntity().getContent();
+
+ //Human readable atom response from servlet
+ int read;
+ StringBuffer sb=new StringBuffer();
+ while((read=is.read())>0)
+ {
+ sb.append((char)read);
+ }
+ Log.i("Tuscany", "Atom get content: "+sb.toString());
+
+ SAXParserFactory spf = SAXParserFactory.newInstance();
+ SAXParser sp;
+ sp = spf.newSAXParser();
+ XMLReader xr = sp.getXMLReader();
+ CartItemHandler cih=new CartItemHandler();
+ xr.setContentHandler(cih);
+
+ xr.parse(new InputSource(new ByteArrayInputStream(sb.toString().getBytes())));
+ is.close();
+ Log.e(Commons.TAG,String.valueOf(cih.getItemsCollection().length));
+ return cih.getItemsCollection();
+
+
+ } catch (ClientProtocolException e) {
+ // TODO Auto-generated catch block
+ Log.e(Commons.TAG,e.getMessage());
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ Log.e(Commons.TAG,e.getMessage());
+ } catch (ParserConfigurationException e) {
+ // TODO Auto-generated catch block
+ Log.e(Commons.TAG,e.getMessage());
+ } catch (SAXException e) {
+ // TODO Auto-generated catch block
+ Log.e(Commons.TAG,e.getMessage());
+ }
+ return null;
+ }
+
+
+
}
diff --git a/branches/sca-java-1.x/samples/store-android/src/services/atom/xml/CartItemHandler.java b/branches/sca-java-1.x/samples/store-android/src/services/atom/xml/CartItemHandler.java
new file mode 100644
index 0000000000..58ba872f87
--- /dev/null
+++ b/branches/sca-java-1.x/samples/store-android/src/services/atom/xml/CartItemHandler.java
@@ -0,0 +1,138 @@
+/**
+ *
+ */
+package services.atom.xml;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.DefaultHandler;
+
+import android.util.Log;
+
+import services.Item;
+
+
+/**
+ * @author Lookouster
+ *
+ */
+public class CartItemHandler extends DefaultHandler {
+
+
+
+ private boolean in_entry = false;
+ private boolean in_id = false;
+ private boolean in_title = false;
+ private boolean in_content=false;
+ private boolean in_item=false;
+ private boolean in_link=false;
+ private boolean in_name=false;
+ private boolean in_price=false;
+ private String currentKey,currentName,currentPrice;
+ private List<Item> items=new ArrayList<Item>();
+
+
+
+
+ /**
+ * @return the currentName
+ */
+ public String getCurrentName() {
+ return currentName;
+ }
+
+
+ /**
+ * @return the currentPrice
+ */
+ public String getCurrentPrice() {
+ return currentPrice;
+ }
+
+
+ public void startElement(String namespaceURI, String localName,
+ String qName, Attributes atts) throws SAXException {
+ if (localName.equalsIgnoreCase("entry")) {
+ this.in_entry = true;
+ }else if (localName.equalsIgnoreCase("id")) {
+ this.in_id = true;
+ }else if (localName.equalsIgnoreCase("title")) {
+ this.in_title = true;
+ }else if (localName.equalsIgnoreCase("content")) {
+ this.in_content = true;
+ }else if (localName.equalsIgnoreCase("item")) {
+ this.in_item = true;
+ }else if (localName.equals("link")) {
+ this.in_link=true;
+ }
+ else if (localName.equalsIgnoreCase("name")) {
+ this.in_name=true;
+ }
+ else if (localName.equalsIgnoreCase("price")) {
+ this.in_price=true;
+ }
+ }
+
+
+ public void endElement(String namespaceURI, String localName, String qName)
+ throws SAXException {
+ if (localName.equalsIgnoreCase("id"))
+ this.in_id = false;
+ if (localName.equalsIgnoreCase("entry")) {
+ this.in_entry = false;
+ }else if (localName.equalsIgnoreCase("id")) {
+ this.in_id = false;
+ }else if (localName.equalsIgnoreCase("title")) {
+ this.in_title = false;
+ }else if (localName.equalsIgnoreCase("content")) {
+ this.in_content = false;
+ }else if (localName.equalsIgnoreCase("item")) {
+ this.in_item = false;
+ items.add(new Item(currentName, currentPrice, currentKey));
+ }else if (localName.equalsIgnoreCase("link")) {
+ this.in_link=false;
+ }
+ else if (localName.equalsIgnoreCase("name")) {
+ this.in_name=false;
+ }
+ else if (localName.equalsIgnoreCase("price")) {
+ this.in_price=false;
+ }
+ }
+
+
+ public void characters(char ch[], int start, int length) {
+
+ if(this.in_id){
+ if(this.in_entry)
+ {
+ currentKey=new String(ch,start, length);
+ Log.e("kjhkh", currentKey);
+ }
+
+ }
+ if(this.in_name)
+ currentName=new String(ch,start, length);
+ if(this.in_price)
+ currentPrice=new String(ch,start, length);
+
+ }
+
+ /**
+ * @return the key
+ */
+ public String getCurrentKey() {
+ return currentKey;
+ }
+
+ public Item[] getItemsCollection()
+ {
+ return items.toArray(new Item[items.size()]);
+ }
+
+
+
+}
diff --git a/branches/sca-java-1.x/samples/store-android/src/store/android/catalog.java b/branches/sca-java-1.x/samples/store-android/src/store/android/catalog.java
index 68e03abbe5..1b7bd3008c 100644
--- a/branches/sca-java-1.x/samples/store-android/src/store/android/catalog.java
+++ b/branches/sca-java-1.x/samples/store-android/src/store/android/catalog.java
@@ -28,83 +28,112 @@ import services.Catalog;
import services.CatalogProxy;
import services.Item;
import services.ShoppingCartProxy;
+import android.app.AlertDialog;
import android.app.TabActivity;
+import android.content.Context;
+import android.content.DialogInterface;
import android.graphics.Typeface;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
+import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
+import android.widget.Button;
import android.widget.ListView;
import android.widget.TabHost;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.TabHost.OnTabChangeListener;
import android.widget.TabHost.TabSpec;
+import android.view.LayoutInflater;
+
+
public class catalog extends TabActivity {
private Catalog catalogProxy = new CatalogProxy();
private ShoppingCartProxy shoppingCartProxy = new ShoppingCartProxy();
TabHost mTabHost;
ListView itemsList, cartList;
- TextView txtTotal;
+ TextView txtTotal,txtEmpty;
TabSpec catalogTab, cartTab;
- String[] items;
- Set<String> cartItems=new HashSet<String>();
+ Button btnClean;
+ Item[] items;
+ List<Item> cartItems=new ArrayList<Item>();
- private String[] getCatalogItems() {
- List<String> catalog = new ArrayList<String>();
-
- for(Item item : catalogProxy.get()) {
- catalog.add(item.toString());
- }
-
- String[] catalogArray = new String[catalog.size()];
- catalog.toArray(catalogArray);
- Log.e("Tuscany", "Catalog GET!!");
-
- return catalogArray;
+ private void getCatalogItems() {
+ items=catalogProxy.get();
+ }
+
+ private void getCartItems()
+ {
+ Item[] i=shoppingCartProxy.getItems();
+ if(i!=null)
+ {
+ for(Item item:i)
+ {
+ cartItems.add(item);
+
+ }
+ }
+ Log.e(getString(R.string.app_tag), String.valueOf(cartItems.size())+" cart items retrieved");
}
/** Called when the activity is first created. */
- @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- Log.e("Tuscany", "Started");
+ Log.e(getString(R.string.app_tag), getString(R.string.start_tag));
//Load UI from layout file
setContentView(R.layout.main);
+
+
findViews();
//Get data to be loaded to UI
- items=getCatalogItems();
+ getCatalogItems();
+ getCartItems();
+
//Load UI with data
- itemsList.setAdapter(new ArrayAdapter<String>(this,
- android.R.layout.simple_list_item_multiple_choice,items));
- itemsList.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
+ itemsList.setAdapter(new ArrayAdapter<Item>(this,
+ R.layout.cat_row,R.id.txtItemC,items));
+ itemsList.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
+ itemsList.setClickable(true);
+ reloadShoppingCart();
+
//Set Listeners
listen();
+
+
+
}
+
+
/**
* Retrieve UI Content
*/
public void findViews()
{
mTabHost = getTabHost();
- mTabHost.addTab(mTabHost.newTabSpec("catalog_tab").setIndicator("Catalog Items").setContent(R.id.ListView01));
- mTabHost.addTab(mTabHost.newTabSpec("shopping_cart_tab").setIndicator("Shopping Cart").setContent(R.id.tab02));
+ mTabHost.addTab(mTabHost.newTabSpec(getString(R.string.tab_catalog)).setIndicator(getString(R.string.title_catalog)).setContent(R.id.ListView01));
+ mTabHost.addTab(mTabHost.newTabSpec(getString(R.string.tab_shop)).setIndicator(getString(R.string.title_shop)).setContent(R.id.tab02));
mTabHost.setCurrentTab(0);
itemsList=(ListView)findViewById(R.id.ListView01);
cartList=(ListView)findViewById(R.id.ListView02);
+ btnClean=(Button)findViewById(R.id.btnClean);
+ btnClean.setText(R.string.btn_clean);
txtTotal=(TextView)findViewById(R.id.txtTotal);
- txtTotal.setTextSize((float) 25.0);
+ txtTotal.setTextSize((float) 15.0);
txtTotal.setTypeface(Typeface.DEFAULT_BOLD);
+ txtEmpty=(TextView)findViewById(R.id.txtEmpty);
+ txtEmpty.setTypeface(null, Typeface.ITALIC);
+
}
/**
@@ -116,49 +145,99 @@ public class catalog extends TabActivity {
mTabHost.setOnTabChangedListener(new OnTabChangeListener(){
public void onTabChanged(String tabId) {
- if(tabId.compareTo("shopping_cart_tab")==0)
- {
- if(!cartList.getAdapter().isEmpty())
- {
- txtTotal.setVisibility(TextView.VISIBLE);
- }
- else
- txtTotal.setVisibility(TextView.INVISIBLE);
- txtTotal.setText("Total: "+shoppingCartProxy.getTotal());
+ // TODO Auto-generated method stub
+ if(tabId.compareTo("shopping_cart_tab")==0)
+ reloadShoppingCart();
- }
}
});
- //CatalogList Listener
+
+
+
+ btnClean.setOnClickListener(new OnClickListener(){
+ public void onClick(View arg0) {
+ // TODO Auto-generated method stub
+ new AlertDialog.Builder(catalog.this)
+ .setTitle("Tuscany Android Store")
+ .setMessage("You're about to erase all items. Proceed ?")
+ .setIcon(R.drawable.icon)
+ .setPositiveButton(R.string.alert_yes,
+ new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int whichButton) {
+ if(shoppingCartProxy.clearCartContent())
+ {
+ cartItems.clear();
+ Log.i(getString(R.string.app_tag), getString(R.string.del_all_ok));
+ reloadShoppingCart();
+ }
+ }})
+ .setNegativeButton(R.string.alert_cancel, new DialogInterface.OnClickListener(){
+
+ public void onClick(DialogInterface dialog, int which) {
+ // TODO Auto-generated method stub
+ }
+ })
+ .show();
+
+
+
+ }
+
+ });
+
itemsList.setOnItemClickListener(new OnItemClickListener(){
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
- String item=itemsList.getAdapter().getItem((int)arg3).toString();
-
- //add item to shopping cart. For now, item can be added only once.
- //Items Quantity will be supported in coming versions.
- if(cartItems.add(item))
- {
- if(shoppingCartProxy.addItem(Item.parseItem(item)))
- Log.i("Tuscany", "Entry to be added: "+item);
- else
- Log.e("Tuscany", "Unable to add entry: "+item);
-
- }
- else
- {
- shoppingCartProxy.removeItem(Item.parseItem(item));
- cartItems.remove(item);
- Log.i("Tuscany", "Entry to be removed: "+item);
- }
- reloadShoppingCart();
+ addItemAction(items[(int)arg3]);
}
+
+ });
+
+ cartList.setOnItemClickListener(new OnItemClickListener(){
+
+
+ public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
+ long arg3) {
+ // TODO Auto-generated method stub
+ removeItemAction(cartItems.get((int)arg3));
+ }
+
});
+
+
+
+ }
+
+ public void addItemAction(Item item)
+ {
+ //add item to shopping cart.
+ Item tmp=new Item(item.getName(), item.getPrice());
+ if(shoppingCartProxy.addItem(tmp))
+ {
+ cartItems.add(tmp);
+ Log.i(getString(R.string.app_tag), getString(R.string.add_entry_ok)+item);
+ }
+
+ else
+ Log.e(getString(R.string.app_tag), getString(R.string.add_entry_ko)+item);
+
+ }
+
+ public void removeItemAction(Item item)
+ {
+ if(shoppingCartProxy.removeItem(item) && cartItems.remove(item))
+ {
+ Log.i(getString(R.string.app_tag), getString(R.string.del_entry_ok)+item);
+ }
+ else
+ Log.i(getString(R.string.app_tag), getString(R.string.del_entry_ko)+item);
+ reloadShoppingCart();
+
}
/**
@@ -166,12 +245,29 @@ public class catalog extends TabActivity {
*/
public void reloadShoppingCart()
{
- String[] cartArray=new String[cartItems.size()];
- cartList.setChoiceMode(ListView.CHOICE_MODE_NONE);
- cartList.setAdapter(new ArrayAdapter<String>(this,
- android.R.layout.simple_list_item_1, cartItems.toArray(cartArray)));
+ Item[] cartArray=new Item[cartItems.size()];
+ cartList.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
+ cartList.setClickable(true);
+ cartList.setAdapter(new ArrayAdapter<Item>(this,
+ R.layout.shop_row, R.id.txtItemS, cartItems.toArray(cartArray)));
+ if(!cartList.getAdapter().isEmpty())
+ {
+ txtTotal.setVisibility(TextView.VISIBLE);
+ txtEmpty.setText("Click on an item below to remove it");
+ btnClean.setVisibility(Button.VISIBLE);
+ }
+ else
+ {
+ txtTotal.setVisibility(TextView.INVISIBLE);
+ txtEmpty.setVisibility(TextView.VISIBLE);
+ txtEmpty.setText(R.string.txt_empty);
+ btnClean.setVisibility(Button.INVISIBLE);
+ }
+ String tt=shoppingCartProxy.getTotal();
+ txtTotal.setText(getString(R.string.title_order)+": "+(tt.length()>5?tt.substring(0,5):tt));
+
}
-
+
} \ No newline at end of file