001    package data;
002    
003    /**
004     * Objectifier to compute the value of a CatalogItem.
005     *
006     * @see Stock#sumStock
007     *
008     * @author Steffen Zschaler
009     * @version 2.0 18/08/1999
010     * @since v1.0
011     */
012    public class CatalogItemValue extends Object {
013    
014        /**
015         * Return the value of an CatalogItem.
016         *
017         * <p>By default returns {@link CatalogItem#getValue ci.getValue()}, but you can create subclasses that
018         * refer to any attribute you want to use as the CatalogItem's value.</p>
019         *
020         * @override Always
021         *
022         * @param ci the CatalogItem whose value is to be computed
023         *
024         * @return the value of ci.
025         *
026         * @see Stock#sumStock
027         */
028        public Value getValue(CatalogItem ci) {
029            return ci.getValue();
030        }
031    
032        /**
033         * A CatalogItemValue that will return the {@link QuoteValue#getBid bid} if the
034         * {@link CatalogItem#getValue standard value} of a {@link CatalogItem} is a {@link QuoteValue}. Otherwise,
035         * it will simply return the standard value of the CatalogItem.
036         */
037        public static final CatalogItemValue EVALUATE_BID = new CatalogItemValue() {
038            public Value getValue(CatalogItem ci) {
039                Value vReturn = ci.getValue();
040    
041                if (vReturn instanceof QuoteValue) {
042                    vReturn = ((QuoteValue)vReturn).getBid();
043                }
044    
045                return vReturn;
046            }
047        };
048    
049        /**
050         * A CatalogItemValue that will return the {@link QuoteValue#getOffer offer} if the
051         * {@link CatalogItem#getValue standard value} of a {@link CatalogItem} is a {@link QuoteValue}. Otherwise,
052         * it will simply return the standard value of the CatalogItem.
053         */
054        public static final CatalogItemValue EVALUATE_OFFER = new CatalogItemValue() {
055            public Value getValue(CatalogItem ci) {
056                Value vReturn = ci.getValue();
057    
058                if (vReturn instanceof QuoteValue) {
059                    vReturn = ((QuoteValue)vReturn).getOffer();
060                }
061    
062                return vReturn;
063            }
064        };
065    
066        /**
067         * A CatalogItemValue that will return the {@link QuoteValue#getMid mid} if the
068         * {@link CatalogItem#getValue standard value} of a {@link CatalogItem} is a {@link QuoteValue}. Otherwise,
069         * it will simply return the standard value of the CatalogItem.
070         */
071        public static final CatalogItemValue EVALUATE_MID = new CatalogItemValue() {
072            public Value getValue(CatalogItem ci) {
073                Value vReturn = ci.getValue();
074    
075                if (vReturn instanceof QuoteValue) {
076                    vReturn = ((QuoteValue)vReturn).getMid();
077                }
078    
079                return vReturn;
080            }
081        };
082    
083        /**
084         * A CatalogItemValue that will return the {@link QuoteValue#getSpread spread} if the
085         * {@link CatalogItem#getValue standard value} of a {@link CatalogItem} is a {@link QuoteValue}. Otherwise,
086         * it will simply return the standard value of the CatalogItem.
087         */
088        public static final CatalogItemValue EVALUATE_SPREAD = new CatalogItemValue() {
089            public Value getValue(CatalogItem ci) {
090                Value vReturn = ci.getValue();
091    
092                if (vReturn instanceof QuoteValue) {
093                    vReturn = ((QuoteValue)vReturn).getSpread();
094                }
095    
096                return vReturn;
097            }
098        };
099    }