package realcix20.guis.views;
import info.clearthought.layout.TableLayout;
import java.awt.Component;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.sql.Date;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Comparator;
import java.util.EventObject;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.TreeMap;
import java.util.Vector;
import javax.swing.AbstractAction;
import javax.swing.AbstractCellEditor;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableColumn;
import javax.swing.table.TableModel;
import org.jdesktop.swingx.JXDatePicker;
import org.jdesktop.swingx.JXTable;
import realcix20.classes.RegClass;
import realcix20.guis.utils.DialogManager;
import realcix20.guis.utils.ImageManager;
import realcix20.guis.utils.KeyUtil;
import realcix20.guis.utils.MnemonicGenerator;
import realcix20.guis.utils.TxtManager;
import realcix20.utils.DAO;
import realcix20.utils.Resources;
public class SelectCurrencyEvaluationDialog extends JDialog implements
ActionListener {
private MainView container;
private JXDatePicker datePicker;
private JXTable sequenceTable;
private Vector datas;
Date startDate = null;
TreeMap<Date,String> resultMap=new TreeMap<Date, String>();
private JCheckBox isDelOldCUR;
public SelectCurrencyEvaluationDialog(MainView container) {
super(container);
DAO dao = DAO.getInstance();
dao.query(Resources.SELECT_EARLIST_RDATE);
ResultSet rs = dao.executeQuery();
try {
if (rs.next()) {
startDate = rs.getDate(1);
}
} catch (SQLException e1) {
e1.printStackTrace();
}
if (startDate == null) {
// ��������
DialogManager.showMessageDialog(SelectCurrencyEvaluationDialog.this,TxtManager.getTxt("INFORMATION.CURRENCYEVALUATIONSUCCESS2"));
container.setEnabled(true);
dispose();
return;
}
this.container = container;
initMenuBar();
initComponents();
}
private void initMenuBar() {
KeyUtil.add("ESCAPE", getRootPane(), new AbstractAction() {
public void actionPerformed(ActionEvent e) {
container.setEnabled(true);
dispose();
}
});
}
private void initComponents() {
// ======== this ========
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
SelectCurrencyEvaluationDialog thisWindow = (SelectCurrencyEvaluationDialog) e
.getSource();
thisWindow.container.setEnabled(true);
thisWindow.dispose();
}
});
Container contentPane = getContentPane();
// alter UI
double size[][] = {
{ 10, TableLayout.FILL, TableLayout.FILL, 10 },
{ 10, TableLayout.PREFERRED, TableLayout.FILL,
TableLayout.PREFERRED, TableLayout.PREFERRED,10 } };
TableLayout tlayout = new TableLayout(size);
tlayout.setVGap(10);
tlayout.setHGap(10);
contentPane.setLayout(tlayout);
JLabel label = new JLabel(TxtManager
.getTxt("VIEW.CURRENCYEVALUATION.LABEL"));
datePicker = new JXDatePicker();
datePicker.setFormats(new String[]{"yyyy-MM-dd"});
sequenceTable = new JXTable();
sequenceTable.setColumnControlVisible(false);
sequenceTable.setSortable(false);
sequenceTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
Vector cols = new Vector();
Vector datas = new Vector();
datas.add(new Vector());
cols.add(TxtManager.getTxt("INFORMATION.CURRENCYEVALUATION.TIMESEQUENCE"));
TableModel model = new DefaultTableModel(datas, cols);
sequenceTable.setModel(model);
sequenceTable.setRowHeight(22);
datePicker.addActionListener(this);
JButton confirmButton = new JButton();
confirmButton.setText(MnemonicGenerator.generateMnemonicString(
TxtManager.getTxt("VIEW.GLOBAL.CONFIRMBUTTON"), KeyEvent.VK_O));
confirmButton.setMnemonic(KeyEvent.VK_O);
confirmButton
.setIcon(ImageManager.getImage(ImageManager.CONFIRM_IMAGE));
confirmButton.setActionCommand("Confirm");
confirmButton.addActionListener(this);
JButton cancelButton = new JButton();
cancelButton.setText(MnemonicGenerator.generateMnemonicString(
TxtManager.getTxt("VIEW.GLOBAL.CANCELBUTTON"), KeyEvent.VK_C));
cancelButton.setMnemonic(KeyEvent.VK_C);
cancelButton.setIcon(ImageManager.getImage(ImageManager.CANCEL_IMAGE));
cancelButton.setActionCommand("Cancel");
cancelButton.addActionListener(this);
isDelOldCUR=new JCheckBox(TxtManager.getTxt("VIEW.CURRENCYEVALUATION.ISDELOLDCUR"));
isDelOldCUR.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
if(isDelOldCUR.isSelected()){
//ȷ��
if(DialogManager.showYesNoDialog(SelectCurrencyEvaluationDialog.this, TxtManager.getTxt("INFORMATION.DELETEOLDCUR")) == 0){
}else{
isDelOldCUR.setSelected(false);
}
}
}
});
contentPane.add(label, "1,1");
contentPane.add(datePicker, "2,1");
contentPane.add(new JScrollPane(sequenceTable), "1,2,2,2");
contentPane.add(isDelOldCUR,"1,3,2,3");
contentPane.add(confirmButton, "1,4,r,c");
contentPane.add(cancelButton, "2,4,l,c");
setSize(300, 400);
setTitle(TxtManager.getTxt("VIEW.CURRENCYEVALUATION.TITLE"));
setVisible(true);
setLocationRelativeTo(null);
setResizable(false);
}
private void currencyEvaluation(java.sql.Date evaluationDate) {
// first,delete TMPXR & TMPFC
deleteTMPXR_TMPFC();
// next,insert TMPXR & TMPFC
insertTMPXR(evaluationDate);
insertTMPFC(evaluationDate);
// next,validate if the xr is maintained
Vector tcs = validateXRMaintain();
if (tcs.size() == 0) {
int newR = RegClass.createCurrencyEvaluationReg(evaluationDate);
if (newR > 0) {
StringBuffer sb = new StringBuffer(TxtManager.getTxt("INFORMATION.CURRENCYEVALUATIONSUCCESS"));
sb.append(newR + " ");
resultMap.put(evaluationDate,sb.toString());
} else {
StringBuffer sb = new StringBuffer(TxtManager.getTxt("INFORMATION.CURRENCYEVALUATIONSUCCESS2"));
resultMap.put(evaluationDate,sb.toString());
}
} else {
StringBuffer sb = new StringBuffer(TxtManager.getTxt("INFORMATION.CURRENCY"));
Iterator tcsIter = tcs.iterator();
while (tcsIter.hasNext()) {
String tc = (String) tcsIter.next();
sb.append(" " + tc + ",");
}
sb.append(TxtManager.getTxt("INFORMATION.CURRENCY1"));
DialogManager.showMessageDialog(this, sb.toString());
}
}
public Vector validateXRMaintain() {
Vector tcs = new Vector();
DAO dao = DAO.getInstance();
dao.query(Resources.VALIDATE_XR_MAINTAIN_SQL);
ResultSet rs = dao.executeQuery();
try {
while (rs.next()) {
tcs.add(rs.getString("TC"));
}
rs.close();
} catch (Exception e) {
e.printStackTrace();
}
return tcs;
}
public MainView getContainer() {
return container;
}
private void insertTMPFC(java.sql.Date evaluationDate) {
DAO dao = DAO.getInstance();
dao.update(Resources.INSERT_TMPFC_SQL);
dao.setObject(1, evaluationDate);
dao.executeUpdate();
}
private void insertTMPXR(java.sql.Date evaluationDate) {
DAO dao = DAO.getInstance();
dao.update(Resources.INSERT_TMPXR_SQL);
dao.setObject(1, evaluationDate);
dao.executeUpdate();
}
private void deleteTMPXR_TMPFC() {
DAO dao = DAO.getInstance();
dao.update(Resources.DELETE_TMPXR_SQL);
dao.executeUpdate();
dao.update(Resources.DELETE_TMPFC_SQL);
dao.executeUpdate();
}
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("Cancel")) {
container.setEnabled(true);
dispose();
} else if (e.getActionCommand().equals("Confirm")) {
//clear map
resultMap.clear();
if (datas==null||datas.size() == 0) {
// ��ѡ������
DialogManager.showMessageDialog(SelectCurrencyEvaluationDialog.this,TxtManager.getTxt("INFORMATION.CURRENCYEVALUATION.ERROREMPTY"));
return;
}
//TODO ɾ���ɵ������ĵ�
if(isDelOldCUR.isSelected()){
DAO dao = DAO.getInstance();
dao.update(Resources.SELECT_REVALUATION_R);
ResultSet rs = dao.executeQuery();
DAO daor = DAO.getInstance();
try {
while(rs.next()){
int r = rs.getInt("R");
((RegClass)getContainer().getCurrentObject()).delete(r);
}
} catch (SQLException e1) {
e1.printStackTrace();
}
}
HashSet<Date> dataset=new HashSet<Date>();
for (Object dv : datas) {
Date edate = (Date)((Vector)dv).get(0);
if(!dataset.contains(edate)){
dataset.add(edate);
currencyEvaluation((java.sql.Date)((Vector)dv).get(0));
}
}
Vector results = new Vector();
for (Date date : resultMap.keySet()) {
Vector result = new Vector();
result.add(date);
result.add(resultMap.get(date));
results.add(result);
}
Vector rc = new Vector();
rc.add(TxtManager.getTxt("INFORMATION.CURRENCYEVALUATION.TIMESEQUENCE"));
rc.add(TxtManager.getTxt("INFORMATION.CURRENCYEVALUATIONRESULTTITLE"));
JXTable resultTable=new JXTable(results,rc);
DialogManager.showDialog(TxtManager.getTxt("INFORMATION.CURRENCYEVALUATIONRESULTTITLE"),new JScrollPane(resultTable));
container.setEnabled(true);
//���µ�ǰ��ͼ
container.updateObjectViewTable();
dispose();
} else {
Date endDate = new Date(datePicker.getDate().getTime());
Vector cols = new Vector();
datas = new Vector();
if (endDate.before(startDate)) {
//����ѡ�� "�������������������"
DialogManager.showMessageDialog(SelectCurrencyEvaluationDialog.this,TxtManager.getTxt("INFORMATION.CURRENCYEVALUATION.ERROREARLY")+ startDate);
return;
} else {
Vector data=new Vector();
// data.add(startDate);
// datas.add(data);
Calendar cal = new GregorianCalendar();
cal.setTimeInMillis(startDate.getTime());
int days = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
cal.set(Calendar.DAY_OF_MONTH, days);
while (cal.getTimeInMillis()<endDate.getTime()) {
data=new Vector();
data.add(new Date(cal.getTimeInMillis()));
datas.add(data);
cal.add(Calendar.MONTH, 1);
days = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
cal.set(Calendar.DAY_OF_MONTH, days);
}
data=new Vector();
data.add(endDate);
datas.add(data);
}
cols.add(TxtManager.getTxt("INFORMATION.CURRENCYEVALUATION.TIMESEQUENCE"));
sequenceTable.setModel(new DefaultTableModel(datas, cols));
// sequenceTable.updateUI();
TableColumn col = sequenceTable.getColumnModel().getColumn(0);
col.setCellEditor(new DateCellEditor());
JPopupMenu datePopMenu=new JPopupMenu();
JMenuItem delItem = new JMenuItem();
delItem.setText(MnemonicGenerator.generateMnemonicString(TxtManager.getTxt("VIEW.OBJECTEDIT.GLOBAL.DELETE"), KeyEvent.VK_D));
delItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
datas.remove(sequenceTable.getSelectedRow());
sequenceTable.updateUI();
}
});
datePopMenu.add(delItem);
sequenceTable.setComponentPopupMenu(datePopMenu);
KeyUtil.add("DELETE",sequenceTable,new AbstractAction(){
public void actionPerformed(ActionEvent e) {
datas.remove(sequenceTable.getSelectedRow());
sequenceTable.updateUI();
}
});
}
}
class DateCellEditor extends AbstractCellEditor implements TableCellEditor {
JComponent component = new JXDatePicker();
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
((JXDatePicker)component).removeActionListener(listener);
((JXDatePicker)component).setDate(new java.util.Date(((Date)value).getTime()));
((JXDatePicker)component).setFormats(new String[]{"yyyy-MM-dd"});
((JXDatePicker)component).addActionListener(listener);
return component;
}
public Object getCellEditorValue() {
Date date = new Date(((JXDatePicker)component).getDate().getTime());
if (date.before(startDate)){
//����ѡ�� "�������������������"
DialogManager.showMessageDialog(SelectCurrencyEvaluationDialog.this,TxtManager.getTxt("INFORMATION.CURRENCYEVALUATION.ERROREARLY")+ startDate);
cancelCellEditing();
}
return date;
}
ActionListener listener = new ActionListener(){
public void actionPerformed(ActionEvent e) {
stopCellEditing();
List list=new ArrayList(datas);
Collections.sort(datas,new Comparator<Vector>(){
public int compare(Vector o1, Vector o2) {
return ((Date)o1.get(0)).before((Date)o2.get(0))? -1:1;
}
});
sequenceTable.updateUI();
sequenceTable.getSelectionModel().clearSelection();
}
};
public boolean isCellEditable(EventObject evt) {
if (evt instanceof MouseEvent) {
int clickCount;
clickCount = 2;
return ((MouseEvent)evt).getClickCount() >= clickCount;
}
return true;
}
}
}