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
40
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
79
80 protected void setDivYield(BigDecimal divYield) {
81 this.divYield = divYield;
82 }
83
84
85
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 }