/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.kapti.mobileclient.user;
import com.kapti.mobileclient.XmlRpcClientFactory;
import com.kapti.mobileclient.exceptions.RequestError;
import com.kapti.mobileclient.exceptions.StockPlayException;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Vector;
import org.kxmlrpc.XmlRpcClient;
/**
*
* @author Thijs
*/
public class OrderFactory {
private static OrderFactory instance = new OrderFactory();
public static OrderFactory getInstance() {
return instance;
}
private OrderFactory() {
}
public Order createOrder() {
return new Order(); // We kennen het nog geen ID toe
}
public Vector getAllOrders() throws StockPlayException {
return getOrdersByFilter("");
}
public Vector getAllPendingOrders() throws StockPlayException {
return getOrdersByFilter("status == '" + Order.OrderStatus.ACCEPTED + "'");
}
public Vector getOrdersByFilter(String filter) throws StockPlayException {
Vector result = new Vector();
try {
XmlRpcClient client = XmlRpcClientFactory.getXmlRpcClient();
Vector params = new Vector();
//params.addElement(filter);
Vector users = (Vector) client.execute("User.Order.List", params);
for(Enumeration e = users.elements(); e.hasMoreElements();)
result.addElement(Order.fromStruct((Hashtable)e.nextElement()));
return result;
} catch (Exception ex) {
throw new RequestError(ex.getMessage());
}
}
public Order getOrderById(int id) throws StockPlayException {
Vector orders = getOrdersByFilter("id == '" + id + "'");
if(!orders.isEmpty())
return (Order) orders.firstElement();
else
return null;
}
public boolean makePersistent(Order t) throws StockPlayException {
XmlRpcClient client = XmlRpcClientFactory.getXmlRpcClient();
Hashtable h = t.toStruct();
//verwijder illegale velden
// h.remove(Order.IDFIELD);
// h.remove(Order.CREATIONTIMEFIELD);
// h.remove(Order.EXECUTIONTIMEFIELD);
try {
if (t.getId() > 0) {
h.remove(Order.ISINFIELD);
h.remove(Order.USERFIELD);
Vector params = new Vector();
params.addElement("id == '" + t.getId() + "'");
Hashtable h2 = new Hashtable();
h2.put(Order.STATUSFIELD, t.status);
params.addElement(h2);
return ((Boolean) client.execute("User.Order.Modify", params)).booleanValue();
}else {
Vector params = new Vector();
params.addElement(h);
Integer id = (Integer) client.execute("User.Order.Create", params);
if (id.intValue() > 0) {
t.setId(id.intValue());
}
return id.intValue() > 0;
}
} catch(Exception ex) {
throw new StockPlayException("Error occured while saving order " + t.getId() + ex.getMessage());
}
}
}