package org.chartsy.main.favorites.nodes;
import java.text.DecimalFormat;
import org.chartsy.main.data.DataProvider;
import org.chartsy.main.data.Dataset;
import org.chartsy.main.data.Stock;
import org.chartsy.main.events.DataProviderAdapter;
import org.chartsy.main.events.DataProviderEvent;
import org.chartsy.main.managers.DataProviderManager;
import org.chartsy.main.managers.DatasetUsage;
/**
*
* @author Viorel
*/
public class StockAPI extends Object
{
private String dataProviderName;
private String symbol;
private String exchange;
private String companyName;
private double newValue = -1;
private double oldValue = -1;
public StockAPI()
{
}
public String getDisplayName()
{
return getStock().getKey();
}
public void setDataProviderName(String dataProviderName)
{
this.dataProviderName = dataProviderName;
}
public String getDataProviderName()
{
return this.dataProviderName;
}
public void setSymbol(String symbol)
{
this.symbol = symbol;
}
public String getSymbol()
{
return this.symbol;
}
public void setExchange(String exchange)
{
this.exchange = exchange;
}
public String getExchange()
{
return this.exchange;
}
public void setCompanyName(String companyName)
{
this.companyName = companyName;
}
public String getCompanyName()
{
return this.companyName;
}
public Stock getStock()
{
if (symbol != null
&& exchange != null
&& companyName != null)
{
Stock stock = new Stock(symbol, exchange);
stock.setCompanyName(companyName);
return stock;
}
else
return null;
}
public DataProvider getDataProvider()
{
return DataProviderManager.getDefault().getDataProvider(dataProviderName);
}
public void initializeDataProvider()
{
final DataProvider dp = getDataProvider();
if (dp != null)
{
final Stock stock = getStock();
String key = dp.getDatasetKey(stock, dp.DAILY);
if (!DatasetUsage.getInstance().isDatasetInMemory(key))
{
try
{
dp.fetchDatasetForFavorites(stock);
} catch (Exception ex)
{
// do nothing
}
}
DataProviderAdapter adapter = new DataProviderAdapter()
{
@Override
public void triggerDataProviderListener(DataProviderEvent evt)
{
String key = dp.getDatasetKey(stock, dp.DAILY);
if (key.equals((String) evt.getSource()))
{
Dataset dataset = DatasetUsage.getInstance().getDatasetFromMemory(key);
if (dataset != null && !dataset.isEmpty())
{
oldValue = dataset.getCloseAt(dataset.getLastIndex() - 1);
newValue = dataset.getLastClose();
} else
{
oldValue = 0;
newValue = 0;
}
}
}
};
DatasetUsage.getInstance().addDataProviderListener(adapter);
DatasetUsage.getInstance().addDatasetUpdater(dataProviderName, stock, dp.DAILY);
Dataset dataset = DatasetUsage.getInstance().getDatasetFromMemory(key);
if (dataset != null && !dataset.isEmpty())
{
DatasetUsage.getInstance().fetchDataset(key);
oldValue = dataset.getCloseAt(dataset.getLastIndex() - 1);
newValue = dataset.getLastClose();
} else
{
oldValue = 0;
newValue = 0;
}
}
}
public Object[][] getData()
{
double value = newValue;
double dif = newValue - oldValue;
double percent = oldValue == 0 ? 0 : dif / oldValue * 100;
return new String[][]
{
{
getStock().getKey(),
String.valueOf(value),
String.valueOf(dif),
String.valueOf(percent)
}
};
}
public @Override String toString()
{
String newline = System.getProperty("line.separator");
StringBuilder builder = new StringBuilder();
builder.append("--- ").append(getStock().getKey()).append(" ---").append(newline);
builder.append("symbol: ").append(getSymbol()).append(newline);
builder.append("exchange: ").append(getExchange()).append(newline);
builder.append("companyName: ").append(getCompanyName()).append(newline);
builder.append("dataProvider: ").append(getDataProviderName()).append(newline);
return builder.toString();
}
public @Override boolean equals(Object obj)
{
if (obj == this)
return true;
if (!(obj instanceof StockAPI))
return false;
StockAPI that = (StockAPI) obj;
if (that.hashCode() != hashCode())
return false;
return true;
}
public @Override int hashCode()
{
int hash = 5;
hash = 89 * hash + (this.dataProviderName != null ? this.dataProviderName.hashCode() : 0);
hash = 89 * hash + (this.symbol != null ? this.symbol.hashCode() : 0);
hash = 89 * hash + (this.exchange != null ? this.exchange.hashCode() : 0);
hash = 89 * hash + (this.companyName != null ? this.companyName.hashCode() : 0);
return hash;
}
}