avatar

229

Make seller a more standard database object; values are set and retrieved from the backing store, and all the typical database access stuff is present.

by mrs, 12 Nov, 2007 07:06 PM
216 229  
11 package com.jbidwatcher.auction;
22 
3 import com.jbidwatcher.util.ErrorManagement;
43 import com.jbidwatcher.util.db.AuctionDB;
5 import com.jbidwatcher.util.db.DBRecord;
64 import com.jbidwatcher.xml.XMLElement;
75 
8 import java.util.HashMap;
9 import java.util.Map;
10 
116 /**
127  * User: Morgan
138  * Date: Sep 29, 2007
149  * Time: 7:27:30 PM
1510  * To change this template use File | Settings | File Templates.
1611  */
17 public class Seller {
18   static Map<String, Seller> mSellerMap = new HashMap<String,Seller>();
19   String mSeller;
20   String mPositivePercentage;
21   int mFeedback;
22   private Integer mId;
23   private static AuctionDB sDB = null;
12 public class Seller extends ActiveRecord {
13   public Seller() { }
2414 
25   public Seller() {
26     establishSellerDatabase();
27   }
15   public String getSeller() { return getString("seller"); }
16   public void setSeller(String name) { setString("seller", name); }
17   public String getPositivePercentage() { return getString("feedback_percentage"); }
18   public void setPositivePercentage(String positivePercentage) { setString("feedback_percentage", positivePercentage); }
19   public int getFeedback() { return getInteger("feedback", 0); }
20   public void setFeedback(int feedback) { setInteger("feedback", feedback); }
2821 
29   private Seller(DBRecord record) {
30     mSeller = record.get("seller");
31     try { mFeedback = Integer.parseInt(record.get("feedback")); } catch(Exception e) { mFeedback = 0; }
32     mPositivePercentage = record.get("feedback_percentage");
33   }
34 
35   private static void establishSellerDatabase() {
36     if (sDB == null) {
37       try {
38         sDB = new AuctionDB("sellers");
39       } catch (Exception e) {
40         ErrorManagement.handleException("Can't access the sellers table.", e);
41       }
42     }
43   }
44 
45   public static Seller makeSeller(String sellerName) {
46     establishSellerDatabase();
47     Seller existing_seller = mSellerMap.get(sellerName);
48     if(existing_seller == null) {
49       DBRecord existing = sDB.findByColumn("seller", sellerName);
50       Seller rval;
51 
52       if (existing == null || existing.isEmpty()) {
53       //  This should look up the seller in the database, so there's only one instance of any given seller.
54         rval = new Seller();
55         rval.setSeller(sellerName);
56       } else {
57         rval = new Seller(existing);
58       }
59 
60       mSellerMap.put(sellerName, rval);
61       return rval;
62     }
63 
64     return existing_seller;
65   }
66 
67   public Integer getId() {
68     if(mId == null) {
69       create();
70     }
71     return mId;
72   }
73 
74   private void create() {
75     String id = sDB.storeMap(getMap());
76     if(id != null && id.length() != 0) {
77       mId = Integer.parseInt(id);
78     } else {
79       mId = null;
80     }
81   }
82 
83   public DBRecord getMap() {
84     DBRecord values = new DBRecord();
85 
86     values.put("seller", mSeller);
87     values.put("feedback", Integer.toString(mFeedback));
88     values.put("feedback_percentage", mPositivePercentage);
89 
90     return values;
91   }
92 
93   public String getSeller() {
94     return mSeller;
95   }
96 
97   public void setSeller(String seller) {
98     mSeller = seller;
99   }
100 
101   public String getPositivePercentage() {
102     return mPositivePercentage;
103   }
104 
105   public void setPositivePercentage(String positivePercentage) {
106     mPositivePercentage = positivePercentage;
107   }
108 
109   public int getFeedback() {
110     return mFeedback;
111   }
112 
113   public void setFeedback(int feedback) {
114     mFeedback = feedback;
115   }
116 
11722   public XMLElement toXML() {
11823     XMLElement xmlResult = new XMLElement("seller");
11924     XMLElement xseller = new XMLElement("name");
12025     XMLElement xfeedback = new XMLElement("feedback");
12126     XMLElement xpercentage = new XMLElement("feedback_percent");
122     xseller.setContents(mSeller);
27     xseller.setContents(getSeller());
12328     xmlResult.addChild(xseller);
12429 
125     xfeedback.setContents(Integer.toString(mFeedback));
30     xfeedback.setContents(Integer.toString(getFeedback()));
12631     xmlResult.addChild(xfeedback);
12732 
128     xpercentage.setContents(mPositivePercentage);
33     xpercentage.setContents(getPositivePercentage());
12934     xmlResult.addChild(xpercentage);
13035 
13136     return xmlResult;
13237   }
13338 
134   public static Seller fromXML(XMLElement curElement) {
135     establishSellerDatabase();
39   public static Seller newFromXML(XMLElement curElement) {
40     String seller = curElement.getChild("seller").getContents();
41     if(seller == null || seller.length() == 0) return null;
42 
13643     try {
13744       Seller rval = new Seller();
13845       rval.setSeller(curElement.getChild("seller").getContents());
13946       rval.setFeedback(Integer.parseInt(curElement.getChild("feedback").getContents()));
14047       rval.setPositivePercentage(curElement.getChild("feedback_percent").getContents());
14148 
49       rval.saveDB();
14250       return rval;
14351     } catch(Exception e) {
14452       return null;
14553     }
14654   }
14755 
56   public static Seller makeSeller(String sellerName) {
57     if(sellerName == null) return null;
58 
59     Seller existing_seller = findFirstBy("seller", sellerName);
60     if (existing_seller == null) {
61       existing_seller = new Seller();
62       existing_seller.setSeller(sellerName);
63       existing_seller.saveDB();
64     }
65 
66     return existing_seller;
67   }
68 
14869   public Seller makeSeller(String sellerName, Seller oldSeller) {
14970     Seller rval = makeSeller(sellerName);
150     rval.setFeedback(oldSeller.mFeedback);
151     rval.setPositivePercentage(oldSeller.mPositivePercentage);
71     rval.setFeedback(oldSeller.getFeedback());
72     rval.setPositivePercentage(oldSeller.getPositivePercentage());
15273 
74     rval.saveDB();
15375     return rval;
15476   }
77 
78   /*************************/
79   /* Database access stuff */
80   /*************************/
81 
82   private static AuctionDB sDB;
83 
84   protected static String getTableName() { return "sellers"; }
85 
86   protected AuctionDB getDatabase() {
87     if (sDB == null) {
88       sDB = openDB(getTableName());
89     }
90     return sDB;
91   }
92 
93   public static Seller findFirstBy(String key, String value) {
94     return (Seller) ActiveRecord.findFirstBy(Seller.class, key, value);
95   }
15596 }