package org.prevayler.demos.demo2.gui; import java.awt.*; import java.awt.event.*; import java.util.*; import javax.swing.*; import javax.swing.table.*; import net.sourceforge.javamatch.engine.*; import net.sourceforge.javamatch.query.*; import org.prevayler.Prevayler; import org.prevayler.demos.demo2.business.*; /** * Class MatchFrame shows the results of matching the data in the bank demo * application * @see http://javamatch.sourceforge.net/integration.html#prevayler * @author Walter van Iterson * @author Jacob Kjome */ class MatchFrame extends JInternalFrame { private static final long serialVersionUID=2988308712345594693L; private Prevayler prevayler; private JButton refreshButton; private JTable matchTable; private DefaultTableModel matchTableModel; /** * Creates a new MatchFrame, that uses the given Prevayler persistent storage * mechanism, and puts itself in the given parent container. */ MatchFrame( Prevayler prevayler){ super("Interesting accounts"); this.prevayler=prevayler; initUI(); refreshTable(); setVisible(true); } /** * Initializes the user interface */ private void initUI(){ setBounds(100,70,400,250); getContentPane().setLayout(new BorderLayout(0,0)); JPanel buttonPanel=new JPanel(); buttonPanel.setLayout(new FlowLayout(FlowLayout.RIGHT,0,0)); refreshButton=new JButton("Refresh"); refreshButton.addActionListener(new ActionListener(){ public void actionPerformed( ActionEvent event){ refreshTable(); } } ); buttonPanel.add(refreshButton); getContentPane().add(buttonPanel,BorderLayout.SOUTH); matchTableModel=new DefaultTableModel(); matchTableModel.setColumnIdentifiers(new String[]{"Match","Account","Balance","#Entries"}); matchTable=new JTable(matchTableModel); getContentPane().add(new JScrollPane(matchTable),BorderLayout.CENTER); } /** * Refreshes the table that shows the top-10 matching results */ private void refreshTable(){ matchTableModel.setRowCount(0); Bank bank=(Bank)prevayler.prevalentSystem(); java.util.List accounts=bank.accounts(); try { MatchEngine matchEngine=new MatchEngine(); QuerySet query=new QuerySet(); query.addPreferred(new Maximum("balance()")); query.addPreferred(new Maximum("transactionHistory().size()")); MatchResult matchResult=matchEngine.executeQuery(query,accounts); for (Iterator resultIterator=matchResult.getResultIterator(); resultIterator.hasNext(); ) { ResultItem curResultItem=(ResultItem)resultIterator.next(); Account matchedAccount=(Account)curResultItem.getMatchedObject(); Object[] rowData=new Object[4]; rowData[0]=new Float(curResultItem.getMatchValue()); rowData[1]=matchedAccount; rowData[2]=new Long(matchedAccount.balance()); rowData[3]=new Integer(matchedAccount.transactionHistory().size()); matchTableModel.addRow(rowData); } } catch ( MatchException me) { System.out.println(me); } } }