View Javadoc

1   package net.sourceforge.finmodel.asset;
2   
3   import java.math.BigDecimal;
4   import java.util.Calendar;
5   import java.util.HashMap;
6   import java.util.Map;
7   
8   import net.sourceforge.finmodel.asset.stock.StockLookup;
9   
10  public class Stock extends AssetImpl implements Asset {
11  	public static final long serialVersionUID = 1L;
12  	
13  	private String ticker;
14  	private String exchange;
15  	private BigDecimal cost;
16  	private BigDecimal divYield;
17  	private BigDecimal growth;
18  	
19  	private static Map<String, Stock> allStocks = new HashMap<String, Stock>();
20  	
21  	private void init(String ticker) {
22  		StockLookup lookup = new StockLookup( ticker );
23  		this.ticker = ticker;
24  		this.name = lookup.getName();
25  		this.cost = lookup.getPrice();
26  		exchange = lookup.getExchange();
27  		divYield = lookup.getDividendYield();
28  		growth = new BigDecimal("0.05");		
29  		this.apr = growth.add(divYield);
30  		if (!allStocks.containsKey(ticker)) {
31  			allStocks.put(ticker, this);
32  		}
33  	}
34  	
35  	public Stock() {
36  		super("Unknown", BigDecimal.ONE, BigDecimal.ZERO);
37  	}
38  	/** 
39  	 * Creates a stock with a zero balance.
40  	 * @param ticker
41  	 */
42  	public Stock(String ticker) {
43  		super(ticker, BigDecimal.ONE, BigDecimal.ZERO);
44  		init(ticker);
45  	}
46  	
47  	protected void setDividendYield(BigDecimal divYield) {
48  		this.divYield = divYield;
49  	}
50  	
51  	public BigDecimal getDividendYield() {
52  		return divYield;
53  	}
54  	
55  	@Override
56  	public BigDecimal getEstimatedValue( Calendar cal )
57  	{
58  		return cost;
59  	}
60  	
61  	protected void setTicker(String ticker) {
62  		this.ticker = ticker;
63  	}
64  	
65  	public String getTicker() {
66  		return ticker;
67  	}
68  
69  	protected void setExchange(String exchange) {
70  		this.exchange = exchange;
71  	}
72  	
73  	public String getExchange() {
74  		return exchange;
75  	}
76  
77  	/**
78  	 * @param divYield the divYield to set
79  	 */
80  	protected void setDivYield(BigDecimal divYield) {
81  		this.divYield = divYield;
82  	}
83  
84  	/**
85  	 * @return the divYield
86  	 */
87  	protected BigDecimal getDivYield() {
88  		return divYield;
89  	}
90  	
91  	public static Stock getStock(String ticker) {
92  		if (allStocks.containsKey(ticker)) {
93  			return allStocks.get(ticker);
94  		} else {
95  			synchronized (allStocks) {
96  				if (allStocks.containsKey(ticker)) {
97  					return allStocks.get(ticker);
98  				} else {
99  					Stock rc = new Stock(ticker);
100 					allStocks.put(ticker, rc);
101 					return rc;
102 				}
103 			}
104 		}
105 	}
106 }