/*
* Licensed Materials - Property of Rogue Wave Software, Inc.
* © Copyright Rogue Wave Software, Inc. 2014, 2017
* © Copyright IBM Corp. 2009, 2014
* © Copyright ILOG 1996, 2009
* All Rights Reserved.
*
* Note to U.S. Government Users Restricted Rights:
* The Software and Documentation were developed at private expense and
* are "Commercial Items" as that term is defined at 48 CFR 2.101,
* consisting of "Commercial Computer Software" and
* "Commercial Computer Software Documentation", as such terms are
* used in 48 CFR 12.212 or 48 CFR 227.7202-1 through 227.7202-4,
* as applicable.
*/
package bank;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.event.ValueChangeEvent;
import org.apache.myfaces.trinidad.component.core.data.CoreTable;
import bank.css.CSSBean;
import ilog.views.chart.IlvChart;
import ilog.views.chart.IlvChartRenderer;
import ilog.views.chart.IlvDataWindow;
import ilog.views.chart.data.IlvDataSetPoint;
import ilog.views.chart.data.IlvDefaultDataSet;
import ilog.views.chart.faces.servlet.IlvFacesChart;
import ilog.views.chart.renderer.IlvAreaChartRenderer;
import ilog.views.chart.renderer.IlvBarChartRenderer;
import ilog.views.chart.renderer.IlvSingleBarRenderer;
import ilog.views.faces.dhtml.event.FacesViewActionEvent;
/**
* This class in the main application bean. It contains the other beans and
* resources, the chart for example. All the JSF actions are declared in this
* class.
*/
public class BankBean {
/**
* The bean that contains the CSS theme configuration.
*/
private CSSBean css = new CSSBean();
/**
* A data model to build the chart and the data table.
*/
private RawDataModel dataModel = new RawDataModel();
/**
* The chart to display in the web pages.
*/
private IlvChart chart;
/**
* The data table component that displays the list of operations.
*/
private CoreTable dataTable = new CoreTable();
// private List dataTable = new ArrayList
private final static int NB_VISIBLE_ROWS = 5;
/**
* The account number of the customer
*/
private Object accountNumber = "53721812344";
/**
* The name of the customer.
*/
private Object name = new String("John Smith");
/**
* The message displayed if the login failed.
*/
private String errorMessage;
/**
* The locales registered on this bean.
*/
private Map<String, Locale> locales = new HashMap<String, Locale>();
/**
* The currently selected display point.
*/
private IlvDataSetPoint currentPoint = null;
/**
* Creates a new bean instance.
*/
public BankBean() {
initLocales();
initChartComponent();
}
/**
* Populates the locale list.
*/
protected void initLocales() {
locales.put("English", Locale.ENGLISH);
}
/**
* Creates the chart component to be displayed by the chart views. There are
* two renderers: - One which displays a polyline representing the balance. -
* A second that displays bars, a bar representing an operation.
*/
protected void initChartComponent() {
chart = new IlvFacesChart();
RawDataModel raw = new RawDataModel();
IlvBarChartRenderer barRenderer = new IlvBarChartRenderer(IlvBarChartRenderer.SUPERIMPOSED);
IlvAreaChartRenderer areaRenderer = new IlvAreaChartRenderer();
IlvDefaultDataSet ds1 = new IlvDefaultDataSet("Balance", raw.getDates(), raw.getBalances(), false);
ds1.setDataLabels(raw.getLabels());
IlvDefaultDataSet ccDS = raw.getCcDS();
IlvDefaultDataSet transferDS = raw.getTransferDS();
IlvDefaultDataSet withdrawDS = raw.getWithdrawDS();
IlvDefaultDataSet checkDS = raw.getCheckDS();
areaRenderer.getDataSource().addDataSet(ds1);
barRenderer.getDataSource().addDataSet(ccDS);
barRenderer.getDataSource().addDataSet(transferDS);
barRenderer.getDataSource().addDataSet(withdrawDS);
barRenderer.getDataSource().addDataSet(checkDS);
chart.addRenderer(areaRenderer);
chart.addRenderer(barRenderer);
Iterator<IlvChartRenderer> iter = barRenderer.getChildIterator();
while (iter.hasNext())
((IlvSingleBarRenderer) iter.next()).setWidthPercent(90);
}
// Actions
/**
* Changes the current CSS theme.
*
* @param evt
* The action event sent by the component.
*/
public void changeTheme(ActionEvent evt) {
String newTheme = evt.getComponent().getId();
css.setTheme(newTheme);
}
/**
* Changes the current locale.
*
* @param evt
* The action event sent by the component.
*/
public void changeLocale(ActionEvent evt) {
String localeId = evt.getComponent().getId();
FacesContext ctx = FacesContext.getCurrentInstance();
Locale locale = (Locale) locales.get(localeId);
ctx.getViewRoot().setLocale(locale);
chart.setLocale(locale);
}
/**
* Set the selected index on the index specified by the event value.
*
* @param evt
* The value change event sent by the component.
*/
public void selectedIndexChanged(ValueChangeEvent evt) {
int newIndex = Integer.parseInt((String) evt.getNewValue());
selectedIndexChanged(newIndex);
}
/**
* Set the table selected index.
*
* @param index
* The index of the selected point in the table model.
*/
public void selectedIndexChanged(int index) {
dataModel.setSelectedIndex(index);
}
/**
* Shows on the table the operations visible on the chart.
*
* @param event
* The action event.
*/
public void syncTable(ActionEvent event) {
IlvDataWindow win = getChart().getCoordinateSystem(0).getVisibleWindow();
int[] indexes = dataModel.getVisibleIndexes(win);
int length = indexes[1] - indexes[0] + 1;
dataTable.setRows(length);
dataTable.setFirst(dataModel.getRowCount() - indexes[1] - 1);
}
/**
* Sets the table selected index according to the display point selected.
*
* @param evt
* The value change event.
*/
public void selectedDataPointChanged(ValueChangeEvent evt) {
IlvDataSetPoint dataSetPoint = (IlvDataSetPoint) evt.getNewValue();
selectDataSetPoint(dataSetPoint);
}
/**
* Selects the specified data set point.
*
* @param dataSetPoint
* The date set point to select.
*/
public void selectDataSetPoint(IlvDataSetPoint dataSetPoint) {
if (dataSetPoint != null && !dataSetPoint.equals(currentPoint)) {
IlvChart chart = getChart();
// Retrieve the list of the indexes table of the points in this data
// set.
SuppressWarnings("unchecked")
List<Integer> list = (ArrayList<Integer>) dataSetPoint.getDataSet().getProperty("indexes");
if (list != null) {
chart.setPseudoClasses(dataSetPoint.getDataSet(), dataSetPoint.getIndex(), new String[] { "selected" });
if (currentPoint != null) {
getChart().removePseudoClass(currentPoint.getDataSet(), currentPoint.getIndex(), "selected");
}
int index = ((Integer) list.get(dataSetPoint.getIndex())).intValue();
currentPoint = dataSetPoint;
selectedIndexChanged(index);
}
}
}
/**
* Sets the table selected index accoring to the display point selected.
*
* @param evt
*/
public void selectedDataPointChanged(FacesViewActionEvent evt) {
IlvDataSetPoint dataSetPoint = (IlvDataSetPoint) evt.getObject();
selectDataSetPoint(dataSetPoint);
}
/**
* Displays the next <code>NB_VISIBLE_ROWS</code> rows of the operation table.
*
* @param evt
* The action event.
*/
public void previousTablePage(ActionEvent evt) {
int first = dataTable.getFirst();
first += NB_VISIBLE_ROWS;
if (first >= dataModel.getRowCount())
first = dataModel.getRowCount() - 1;
dataTable.setFirst(first);
}
/**
* Displays the previous <code>NB_VISIBLE_ROWS</code> rows of the operation
* table.
*
* @param evt
* The action event.
*/
public void nextTablePage(ActionEvent evt) {
int first = dataTable.getFirst();
first -= NB_VISIBLE_ROWS;
if (first < 0)
first = 0;
dataTable.setFirst(first);
}
/**
* Changes the current CSS theme.
*
* @param evt
* The value change event sent by the component.
*/
public void changeCSS(ValueChangeEvent evt) {
getCss().setTheme((String) evt.getNewValue());
}
/**
* Sets the text to the chart header.
*
* @param evt
* The vale change event.
*/
public void setHeaderLabel(ValueChangeEvent evt) {
chart.setHeaderText((String) evt.getNewValue());
}
/**
* Sets the text to the chart footer.
*
* @param evt
* The vale change event.
*/
public void setFooterLabel(ValueChangeEvent evt) {
chart.setFooterText((String) evt.getNewValue());
}
// Setters & Getters
public CSSBean getCss() {
return css;
}
public void setCss(CSSBean bean) {
css = bean;
}
public Object getAccountNumber() {
return accountNumber;
}
public Object getName() {
return name;
}
public void setAccountNumber(Object object) {
accountNumber = object;
}
public void setName(Object object) {
name = object;
}
public String getErrorMessage() {
return errorMessage;
}
public void setErrorMessage(String string) {
errorMessage = string;
}
public RawDataModel getDataModel() {
return dataModel;
}
public void setDataModel(RawDataModel model) {
dataModel = model;
}
public IlvChart getChart() {
return chart;
}
public void setChart(IlvChart chart) {
}
public CoreTable getDataTable() {
return dataTable;
}
public void setDataTable(CoreTable data) {
this.dataTable = data;
}
}