Created
June 9, 2012 22:26
-
-
Save ntoskrnl/2902815 to your computer and use it in GitHub Desktop.
Add competition result dialog
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package ru.mipt.sport.gui.competition; | |
import java.awt.event.ActionEvent; | |
import java.awt.event.KeyEvent; | |
import java.util.ArrayList; | |
import java.util.List; | |
import javax.persistence.EntityManager; | |
import javax.swing.*; | |
import ru.mipt.sport.model.entity.RunResultEntity; | |
import ru.mipt.sport.model.entity.RunResultEntryEntity; | |
import ru.mipt.sport.model.interfaces.RunResult; | |
import ru.mipt.sport.model.interfaces.RunResultEntry; | |
import ru.mipt.sport.utils.DBUtils; | |
/** | |
* | |
* @author danon | |
*/ | |
public class AddCompetitionResultDialog extends javax.swing.JDialog { | |
private final DBUtils db = DBUtils.getInstance(); | |
/** | |
* A return status code - returned if Cancel button has been pressed | |
*/ | |
public static final int RET_CANCEL = 0; | |
/** | |
* A return status code - returned if OK button has been pressed | |
*/ | |
public static final int RET_OK = 1; | |
/** | |
* Creates new form AddCompetitionResultDialog | |
*/ | |
public AddCompetitionResultDialog(java.awt.Frame parent, boolean modal) { | |
super(parent, modal); | |
initComponents(); | |
genderCB.addItem(null); | |
// Close the dialog when Esc is pressed | |
String cancelName = "cancel"; | |
InputMap inputMap = getRootPane().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); | |
inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), cancelName); | |
ActionMap actionMap = getRootPane().getActionMap(); | |
actionMap.put(cancelName, new AbstractAction() { | |
public void actionPerformed(ActionEvent e) { | |
doClose(RET_CANCEL); | |
} | |
}); | |
res = new RunResultEntity(); | |
} | |
public AddCompetitionResultDialog(java.awt.Frame parent, boolean modal, RunResult res) { | |
this(parent, modal); | |
if(res!=null) | |
this.res = res; | |
fillForm(); | |
} | |
private void fillForm() { | |
if(res.getCompetitionRun()!=null) | |
runTF.setText("Run #"+res.getCompetitionRun().getIndex()); | |
if(res.getStarategy()!=null) | |
typeCB.setSelectedItem(res.getStarategy()); | |
if(res.getType()!=null) | |
valueTypeCB.setSelectedItem(res.getType()); | |
totalResultTF.setText(res.getTotalValue()); | |
teamTF.setText(res.getTeam()); | |
unitsTF.setText(res.getUnits()); | |
genderCB.setSelectedItem(res.getGender()); | |
List<RunResultEntryEntity> entries = res.getResultEntries(); | |
if(entries!=null) { | |
DefaultListModel<RunResultEntry> model = (DefaultListModel)entryList.getModel(); | |
for(RunResultEntry entry : entries) { | |
model.addElement(entry); | |
} | |
} | |
nameTF.setText(generateName()); | |
} | |
private String generateName() { | |
String s = ""; | |
ListModel<RunResultEntry> model = entryList.getModel(); | |
for(int i=0; i<model.getSize(); i++) { | |
s += model.getElementAt(i).getPerson().getLastName()+" "+model.getElementAt(i).getPerson().getFirstName(); | |
if(i!=model.getSize()-1) | |
s += ", "; | |
} | |
return s; | |
} | |
private void processInput() { | |
res.setName(nameTF.getText()); | |
res.setStarategy((String)typeCB.getSelectedItem()); | |
res.setType((String)valueTypeCB.getSelectedItem()); | |
res.setUnits(unitsTF.getText()); | |
res.setTotalValue(totalResultTF.getText()); | |
res.setTeam(teamTF.getText()); | |
res.setGender((String)genderCB.getSelectedItem()); | |
ListModel<RunResultEntry> model = entryList.getModel(); | |
List<RunResultEntryEntity> lst = new ArrayList<>(); | |
for(int i=0; i<model.getSize(); i++) { | |
lst.add((RunResultEntryEntity)model.getElementAt(i)); | |
} | |
res.setResultEntries(lst); | |
} | |
/** | |
* @return the return status of this dialog - one of RET_OK or RET_CANCEL | |
*/ | |
public int getReturnStatus() { | |
return returnStatus; | |
} | |
public RunResult getResult() { | |
return res; | |
} | |
/** | |
* This method is called from within the constructor to initialize the form. | |
* WARNING: Do NOT modify this code. The content of this method is always | |
* regenerated by the Form Editor. | |
*/ | |
@SuppressWarnings("unchecked") | |
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents | |
private void initComponents() { | |
okButton = new javax.swing.JButton(); | |
cancelButton = new javax.swing.JButton(); | |
jLabel1 = new javax.swing.JLabel(); | |
runTF = new javax.swing.JTextField(); | |
jLabel2 = new javax.swing.JLabel(); | |
typeCB = new javax.swing.JComboBox(); | |
jLabel3 = new javax.swing.JLabel(); | |
nameTF = new javax.swing.JTextField(); | |
totalResultTF = new javax.swing.JTextField(); | |
jLabel4 = new javax.swing.JLabel(); | |
unitsTF = new javax.swing.JTextField(); | |
jLabel5 = new javax.swing.JLabel(); | |
valueTypeCB = new javax.swing.JComboBox(); | |
jScrollPane1 = new javax.swing.JScrollPane(); | |
entryList = new javax.swing.JList(); | |
jLabel6 = new javax.swing.JLabel(); | |
addBtn = new javax.swing.JButton(); | |
removeBtn = new javax.swing.JButton(); | |
jLabel7 = new javax.swing.JLabel(); | |
teamTF = new javax.swing.JTextField(); | |
jLabel8 = new javax.swing.JLabel(); | |
genderCB = new javax.swing.JComboBox(); | |
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); | |
setTitle("Run result..."); | |
addWindowListener(new java.awt.event.WindowAdapter() { | |
public void windowClosing(java.awt.event.WindowEvent evt) { | |
closeDialog(evt); | |
} | |
public void windowClosed(java.awt.event.WindowEvent evt) { | |
formWindowClosed(evt); | |
} | |
}); | |
okButton.setText("OK"); | |
okButton.addActionListener(new java.awt.event.ActionListener() { | |
public void actionPerformed(java.awt.event.ActionEvent evt) { | |
okButtonActionPerformed(evt); | |
} | |
}); | |
cancelButton.setText("Cancel"); | |
cancelButton.addActionListener(new java.awt.event.ActionListener() { | |
public void actionPerformed(java.awt.event.ActionEvent evt) { | |
cancelButtonActionPerformed(evt); | |
} | |
}); | |
jLabel1.setText("Run:"); | |
runTF.setEditable(false); | |
jLabel2.setText("Type:"); | |
typeCB.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "NORMAL", "NON_COMPETING" })); | |
jLabel3.setText("Name:"); | |
nameTF.setEditable(false); | |
jLabel4.setText("Result:"); | |
unitsTF.setText("s"); | |
jLabel5.setText("Value type:"); | |
valueTypeCB.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "FLOAT", "INTEGER", "TIME_MILLIS", "STRING" })); | |
entryList.setModel(new DefaultListModel<RunResultEntry>()); | |
jScrollPane1.setViewportView(entryList); | |
jLabel6.setText("Result entries:"); | |
addBtn.setText("Add..."); | |
addBtn.addActionListener(new java.awt.event.ActionListener() { | |
public void actionPerformed(java.awt.event.ActionEvent evt) { | |
addBtnActionPerformed(evt); | |
} | |
}); | |
removeBtn.setText("Remove"); | |
removeBtn.addActionListener(new java.awt.event.ActionListener() { | |
public void actionPerformed(java.awt.event.ActionEvent evt) { | |
removeBtnActionPerformed(evt); | |
} | |
}); | |
jLabel7.setText("Team:"); | |
jLabel8.setText("Gender:"); | |
genderCB.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "MALE", "FEMALE" })); | |
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); | |
getContentPane().setLayout(layout); | |
layout.setHorizontalGroup( | |
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) | |
.addGroup(layout.createSequentialGroup() | |
.addContainerGap() | |
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) | |
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() | |
.addGap(0, 0, Short.MAX_VALUE) | |
.addComponent(okButton, javax.swing.GroupLayout.PREFERRED_SIZE, 67, javax.swing.GroupLayout.PREFERRED_SIZE) | |
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) | |
.addComponent(cancelButton)) | |
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 370, Short.MAX_VALUE) | |
.addGroup(layout.createSequentialGroup() | |
.addComponent(jLabel6) | |
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) | |
.addComponent(removeBtn) | |
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) | |
.addComponent(addBtn)) | |
.addGroup(layout.createSequentialGroup() | |
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) | |
.addComponent(jLabel5) | |
.addComponent(jLabel4)) | |
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) | |
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) | |
.addGroup(layout.createSequentialGroup() | |
.addComponent(totalResultTF) | |
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) | |
.addComponent(unitsTF, javax.swing.GroupLayout.PREFERRED_SIZE, 74, javax.swing.GroupLayout.PREFERRED_SIZE)) | |
.addComponent(valueTypeCB, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))) | |
.addGroup(layout.createSequentialGroup() | |
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) | |
.addComponent(jLabel1) | |
.addComponent(jLabel2) | |
.addComponent(jLabel3) | |
.addComponent(jLabel8) | |
.addComponent(jLabel7)) | |
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) | |
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) | |
.addComponent(teamTF) | |
.addComponent(genderCB, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) | |
.addComponent(nameTF) | |
.addComponent(typeCB, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) | |
.addComponent(runTF)))) | |
.addContainerGap()) | |
); | |
layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {cancelButton, okButton}); | |
layout.setVerticalGroup( | |
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) | |
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() | |
.addContainerGap() | |
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) | |
.addComponent(jLabel1) | |
.addComponent(runTF, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) | |
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) | |
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) | |
.addComponent(typeCB, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) | |
.addComponent(jLabel2)) | |
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) | |
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) | |
.addComponent(nameTF, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) | |
.addComponent(jLabel3)) | |
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) | |
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) | |
.addComponent(genderCB, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) | |
.addComponent(jLabel8)) | |
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) | |
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) | |
.addComponent(jLabel7) | |
.addComponent(teamTF, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) | |
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) | |
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) | |
.addComponent(valueTypeCB, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) | |
.addComponent(jLabel5)) | |
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) | |
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) | |
.addComponent(totalResultTF, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) | |
.addComponent(jLabel4) | |
.addComponent(unitsTF, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) | |
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) | |
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) | |
.addComponent(jLabel6) | |
.addComponent(addBtn) | |
.addComponent(removeBtn)) | |
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) | |
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 100, Short.MAX_VALUE) | |
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) | |
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) | |
.addComponent(cancelButton) | |
.addComponent(okButton)) | |
.addContainerGap()) | |
); | |
getRootPane().setDefaultButton(okButton); | |
pack(); | |
}// </editor-fold>//GEN-END:initComponents | |
private void okButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_okButtonActionPerformed | |
processInput(); | |
doClose(RET_OK); | |
}//GEN-LAST:event_okButtonActionPerformed | |
private void cancelButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelButtonActionPerformed | |
doClose(RET_CANCEL); | |
}//GEN-LAST:event_cancelButtonActionPerformed | |
/** | |
* Closes the dialog | |
*/ | |
private void closeDialog(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_closeDialog | |
doClose(RET_CANCEL); | |
}//GEN-LAST:event_closeDialog | |
private void addBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_addBtnActionPerformed | |
AddResultEntryDialog dlg = new AddResultEntryDialog(null, true); | |
dlg.setVisible(true); | |
if(dlg.getReturnStatus()!=dlg.RET_OK) | |
return; | |
RunResultEntry entry = dlg.getResultEntry(); | |
// persist this entry if needed | |
if(res.getId()!=null) { | |
synchronized(db) { | |
EntityManager em = db.getEntityManager(true); | |
try { | |
entry.setRunResult((RunResultEntity)res); | |
em.persist(entry); | |
db.commit(); | |
} catch (Exception ex) { | |
db.rollback(); | |
} | |
} | |
} | |
DefaultListModel<RunResultEntry> model = (DefaultListModel)entryList.getModel(); | |
model.addElement(entry); | |
entryList.setSelectedValue(entry, true); | |
nameTF.setText(generateName()); | |
}//GEN-LAST:event_addBtnActionPerformed | |
private void removeBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_removeBtnActionPerformed | |
if(entryList.isSelectionEmpty()) | |
return; | |
DefaultListModel<RunResultEntry> model = (DefaultListModel)entryList.getModel(); | |
int[] a = entryList.getSelectedIndices(); | |
for(int i : a) { | |
model.removeElementAt(i); | |
} | |
}//GEN-LAST:event_removeBtnActionPerformed | |
private void formWindowClosed(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowClosed | |
db.close(); | |
}//GEN-LAST:event_formWindowClosed | |
private void doClose(int retStatus) { | |
returnStatus = retStatus; | |
setVisible(false); | |
dispose(); | |
} | |
/** | |
* @param args the command line arguments | |
*/ | |
public static void main(String args[]) { | |
/* | |
* Set the Nimbus look and feel | |
*/ | |
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> | |
/* | |
* If Nimbus (introduced in Java SE 6) is not available, stay with the | |
* default look and feel. For details see | |
* http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html | |
*/ | |
try { | |
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { | |
if ("Nimbus".equals(info.getName())) { | |
javax.swing.UIManager.setLookAndFeel(info.getClassName()); | |
break; | |
} | |
} | |
} catch (ClassNotFoundException ex) { | |
java.util.logging.Logger.getLogger(AddCompetitionResultDialog.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); | |
} catch (InstantiationException ex) { | |
java.util.logging.Logger.getLogger(AddCompetitionResultDialog.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); | |
} catch (IllegalAccessException ex) { | |
java.util.logging.Logger.getLogger(AddCompetitionResultDialog.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); | |
} catch (javax.swing.UnsupportedLookAndFeelException ex) { | |
java.util.logging.Logger.getLogger(AddCompetitionResultDialog.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); | |
} | |
//</editor-fold> | |
/* | |
* Create and display the dialog | |
*/ | |
java.awt.EventQueue.invokeLater(new Runnable() { | |
public void run() { | |
AddCompetitionResultDialog dialog = new AddCompetitionResultDialog(new javax.swing.JFrame(), true); | |
dialog.addWindowListener(new java.awt.event.WindowAdapter() { | |
@Override | |
public void windowClosing(java.awt.event.WindowEvent e) { | |
System.exit(0); | |
} | |
}); | |
dialog.setVisible(true); | |
} | |
}); | |
} | |
// Variables declaration - do not modify//GEN-BEGIN:variables | |
private javax.swing.JButton addBtn; | |
private javax.swing.JButton cancelButton; | |
private javax.swing.JList entryList; | |
private javax.swing.JComboBox genderCB; | |
private javax.swing.JLabel jLabel1; | |
private javax.swing.JLabel jLabel2; | |
private javax.swing.JLabel jLabel3; | |
private javax.swing.JLabel jLabel4; | |
private javax.swing.JLabel jLabel5; | |
private javax.swing.JLabel jLabel6; | |
private javax.swing.JLabel jLabel7; | |
private javax.swing.JLabel jLabel8; | |
private javax.swing.JScrollPane jScrollPane1; | |
private javax.swing.JTextField nameTF; | |
private javax.swing.JButton okButton; | |
private javax.swing.JButton removeBtn; | |
private javax.swing.JTextField runTF; | |
private javax.swing.JTextField teamTF; | |
private javax.swing.JTextField totalResultTF; | |
private javax.swing.JComboBox typeCB; | |
private javax.swing.JTextField unitsTF; | |
private javax.swing.JComboBox valueTypeCB; | |
// End of variables declaration//GEN-END:variables | |
private int returnStatus = RET_CANCEL; | |
private RunResult res; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment