001    package market;
002    
003    import data.CatalogItem;
004    import data.CatalogItemValue;
005    import data.IntegerValue;
006    import data.QuoteValue;
007    import data.Value;
008    import data.ooimpl.CatalogItemImpl;
009    
010    /**
011     * A CatalogItemImpl that represents the articles of the market.
012     */
013    public class CIArticle extends CatalogItemImpl {
014    
015        private String name;
016        private String[] description = new String[] {"", ""};
017        private String category;
018    
019        /**
020         * @param id ID of the CIArticle.
021         * @param name name of the CIArticle
022         * @param category the CIArticle's category.
023         * @param bid the price a customer has to pay for this CIArticle.
024         * @param offer the cost of this CIArticle when the manager orders it.
025         */
026        public CIArticle(String id, String name, String category, int bid, int offer) {
027            super(id, new QuoteValue(new IntegerValue(bid), new IntegerValue(offer)));
028            this.name = name;
029            this.category = category;
030        }
031    
032        /**
033         * @param id ID of the CIArticle.
034         * @param name name of the CIArticle
035         * @param category the CIArticle's category.
036         * @param bid the price a customer has to pay for this CIArticle.
037         * @param offer the cost of this CIArticle when the manager orders it.
038         */
039        public CIArticle(String id, String name, String category, IntegerValue bid, IntegerValue offer) {
040            super(id, new QuoteValue(bid, offer));
041            this.name = name;
042            this.category = category;
043        }
044    
045        /**
046         * Sets the name of the article.
047         *
048         * @param name the article's name.
049         */
050        public void setArticleName(String name) {
051            this.name = name;
052        }
053    
054        /**
055         * Set the description of the article.
056         *
057         * @param description the description of this article.
058         */
059        public void setDescription(String[] description) {
060            this.description = description;
061        }
062    
063        /**
064         * @return the article's name.
065         */
066        public String getArticleName() {
067            return name;
068        }
069    
070        /**
071         * @return the article's category.
072         */
073        public String getCategory() {
074            return category;
075        }
076    
077        /**
078         * @return the description of this article.
079         */
080        public String[] getDescription() {
081            return description;
082        }
083    
084        /**
085         * @return the article's offer.
086         */
087        public int getOffer() {
088          return new Integer(((QuoteValue)getValue()).getOffer().toString()).intValue();
089        }
090    
091        /**
092         * @return the article's bid.
093         */
094        public int getBid() {
095          return new Integer(((QuoteValue)getValue()).getBid().toString()).intValue();
096        }
097    
098        /**
099         * Sets the article's bid.
100         * @param vBid the new bid.
101         */
102        public void setBid(Value vBid) {
103            setValue(new QuoteValue(vBid, ((QuoteValue)getValue()).getOffer()));
104        }
105    
106        /**
107         * @return a CatalogItemValue which returns the bid of a CIArticle.
108         */
109        public static CatalogItemValue getCatalogItemValue(){
110            return new CatalogItemValue(){
111                public Value getValue(CatalogItem ci) {
112                    CIArticle article = (CIArticle)ci;
113                    return ((QuoteValue)ci.getValue()).getBid();
114                }
115            };
116        }
117    
118        /**
119         * @return an identical clone of the given CatalogItemImpl
120         */
121        protected CatalogItemImpl getShallowClone() {
122            QuoteValue qv = (QuoteValue)this.getValue();
123            return new CIArticle(this.getName(), this.getArticleName(),
124                    this.getCategory(), (IntegerValue)qv.getBid(), (IntegerValue)qv.getOffer());
125        }
126    
127        /**
128         * Specifies how to compare CIArticles.
129         * @param o the object to be compared with this CIArticle.
130         * @return an int representing the result of the comparison.
131         */
132        public int compareTo(Object o) {
133            return name.compareTo(((CIArticle)o).getArticleName());
134        }
135    }