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.
| 216 | 229 | |
|---|---|---|
| 1 | 1 | package com.jbidwatcher.auction; |
| 2 | 2 | |
| 3 | import com.jbidwatcher.util.ErrorManagement; | |
| 4 | 3 | import com.jbidwatcher.util.db.AuctionDB; |
| 5 | import com.jbidwatcher.util.db.DBRecord; | |
| 6 | 4 | import com.jbidwatcher.xml.XMLElement; |
| 7 | 5 | |
| 8 | import java.util.HashMap; | |
| 9 | import java.util.Map; | |
| 10 | ||
| 11 | 6 | /** |
| 12 | 7 | * User: Morgan |
| 13 | 8 | * Date: Sep 29, 2007 |
| 14 | 9 | * Time: 7:27:30 PM |
| 15 | 10 | * To change this template use File | Settings | File Templates. |
| 16 | 11 | */ |
| 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() { } | |
| 24 | 14 | |
| 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); } | |
| 28 | 21 | |
| 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 | ||
| 117 | 22 | public XMLElement toXML() { |
| 118 | 23 | XMLElement xmlResult = new XMLElement("seller"); |
| 119 | 24 | XMLElement xseller = new XMLElement("name"); |
| 120 | 25 | XMLElement xfeedback = new XMLElement("feedback"); |
| 121 | 26 | XMLElement xpercentage = new XMLElement("feedback_percent"); |
| 122 | xseller.setContents(mSeller); | |
| 27 | xseller.setContents(getSeller()); | |
| 123 | 28 | xmlResult.addChild(xseller); |
| 124 | 29 | |
| 125 | xfeedback.setContents(Integer.toString(mFeedback)); | |
| 30 | xfeedback.setContents(Integer.toString(getFeedback())); | |
| 126 | 31 | xmlResult.addChild(xfeedback); |
| 127 | 32 | |
| 128 | xpercentage.setContents(mPositivePercentage); | |
| 33 | xpercentage.setContents(getPositivePercentage()); | |
| 129 | 34 | xmlResult.addChild(xpercentage); |
| 130 | 35 | |
| 131 | 36 | return xmlResult; |
| 132 | 37 | } |
| 133 | 38 | |
| 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 | ||
| 136 | 43 | try { |
| 137 | 44 | Seller rval = new Seller(); |
| 138 | 45 | rval.setSeller(curElement.getChild("seller").getContents()); |
| 139 | 46 | rval.setFeedback(Integer.parseInt(curElement.getChild("feedback").getContents())); |
| 140 | 47 | rval.setPositivePercentage(curElement.getChild("feedback_percent").getContents()); |
| 141 | 48 | |
| 49 | rval.saveDB(); | |
| 142 | 50 | return rval; |
| 143 | 51 | } catch(Exception e) { |
| 144 | 52 | return null; |
| 145 | 53 | } |
| 146 | 54 | } |
| 147 | 55 | |
| 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 | ||
| 148 | 69 | public Seller makeSeller(String sellerName, Seller oldSeller) { |
| 149 | 70 | Seller rval = makeSeller(sellerName); |
| 150 | rval.setFeedback(oldSeller.mFeedback); | |
| 151 | rval.setPositivePercentage(oldSeller.mPositivePercentage); | |
| 71 | rval.setFeedback(oldSeller.getFeedback()); | |
| 72 | rval.setPositivePercentage(oldSeller.getPositivePercentage()); | |
| 152 | 73 | |
| 74 | rval.saveDB(); | |
| 153 | 75 | return rval; |
| 154 | 76 | } |
| 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 | } | |
| 155 | 96 | } |
