package com.customfit.ctg.view.users;
import com.customfit.ctg.controller.*;
import com.customfit.ctg.model.*;
import com.customfit.ctg.view.*;
import java.util.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;
/**
* Presents the user with a way to edit their user profile.
*
* @author David
*/
public class EditProfilePanel extends CreateEditPanel {
/**
* The user currently displayed on the panel.
*/
private User user;
/** Creates new form OldEditAccountPanel */
public EditProfilePanel(CreateEditMode createEditMode) {
initComponents();
this.setCreateEditMode(createEditMode);
//fix the form for creation mode when selected at instantiation
if (createEditMode == CreateEditMode.CREATE)
{
this.jLabelTitle.setText("Register a New User");
this.jTextPaneInstructions.setText("Please complete the following information in order to register a new user.\n\n" + this.jTextPaneInstructions.getText());
this.jButtonSave.setText("Register User");
this.linkLabelDelete.setVisible(false);
}
//add the proper nutrients to the drop down
this.jComboBoxTargetNutrient.removeAllItems();
for (String nutrient: NutritionFacts.getAllValidNutrients())
{
this.jComboBoxTargetNutrient.addItem(nutrient);
}
//listen for member table events
DefaultTableModel dtm = (DefaultTableModel)jTableMembers.getModel();
dtm.addTableModelListener(new TableModelListener() {
@Override
public void tableChanged(TableModelEvent e) {
DefaultTableModel membersModel = (DefaultTableModel) jTableMembers.getModel();
//if column is Member
if (e.getColumn() == 0)
{
//check for name identical to this one
for (int row = e.getFirstRow(); row <= e.getLastRow(); row++)
if (((String)membersModel.getValueAt(row, e.getColumn())).trim().equals(jTextFieldUser.getText()) ||
((String)membersModel.getValueAt(row, e.getColumn())).trim().equals("") ||
(getCreateEditMode() == CreateEditMode.EDIT &&
((String)membersModel.getValueAt(row, e.getColumn())).trim().equals(user.getName())))
membersModel.setValueAt("Member's Name", row, e.getColumn());
}
//else if column is Target
else if (e.getColumn() == 1)
{
//then make sure we insert the right unit on each one
for (int row = e.getFirstRow(); row <= e.getLastRow(); row++)
{
Measurement measurement = new Measurement((String)membersModel.getValueAt(row, e.getColumn()));
measurement.setUnit(NutritionFacts.getUnitForNutrient((String)jComboBoxTargetNutrient.getSelectedItem()));
if (!measurement.toString().equals((String)membersModel.getValueAt(row, e.getColumn())))
membersModel.setValueAt(measurement.toString(), row, e.getColumn());
}
}
validateForm();
}
});
}
/** 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() {
buttonGroupDirection = new javax.swing.ButtonGroup();
jLabelTitle = new javax.swing.JLabel();
jLabel1 = new javax.swing.JLabel();
jTextFieldUser = new javax.swing.JTextField();
jButtonSave = new javax.swing.JButton();
jButtonCancel = new javax.swing.JButton();
linkLabelDelete = new com.customfit.ctg.view.LinkLabel();
jRadioButtonMaximumDirection = new javax.swing.JRadioButton();
jRadioButtonMinimumDirection = new javax.swing.JRadioButton();
jPanel1 = new javax.swing.JPanel();
scrollPaneIngedients = new javax.swing.JScrollPane();
jTableMembers = new javax.swing.JTable();
jButtonAddMember = new javax.swing.JButton();
jButtonRemoveMember = new javax.swing.JButton();
jLabel2 = new javax.swing.JLabel();
jTextFieldTargetAmount = new javax.swing.JTextField();
jLabel4 = new javax.swing.JLabel();
jComboBoxTargetNutrient = new javax.swing.JComboBox();
jScrollPane2 = new javax.swing.JScrollPane();
jTextPaneInstructions = new javax.swing.JTextPane();
jLabelNutrientUnit = new javax.swing.JLabel();
jScrollPane3 = new javax.swing.JScrollPane();
jTextPane2 = new javax.swing.JTextPane();
setPreferredSize(new java.awt.Dimension(575, 345));
jLabelTitle.setFont(new java.awt.Font("Tahoma", 3, 18));
jLabelTitle.setText("Edit Profile");
jLabel1.setFont(new java.awt.Font("Tahoma", 1, 11));
jLabel1.setText("Your Name:");
jTextFieldUser.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyReleased(java.awt.event.KeyEvent evt) {
jTextFieldUserKeyReleased(evt);
}
});
jButtonSave.setText("Save Profile");
jButtonSave.setEnabled(false);
jButtonSave.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButtonSaveActionPerformed(evt);
}
});
jButtonCancel.setText("Cancel");
jButtonCancel.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButtonCancelActionPerformed(evt);
}
});
linkLabelDelete.setText("I want to delete my user profile.");
linkLabelDelete.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
linkLabelDeleteActionPerformed(evt);
}
});
buttonGroupDirection.add(jRadioButtonMaximumDirection);
jRadioButtonMaximumDirection.setText("Maximum Amount");
jRadioButtonMaximumDirection.setActionCommand("Maximum");
jRadioButtonMaximumDirection.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jRadioButtonMaximumDirectionActionPerformed(evt);
}
});
buttonGroupDirection.add(jRadioButtonMinimumDirection);
jRadioButtonMinimumDirection.setText("Minimum Amount");
jRadioButtonMinimumDirection.setActionCommand("Minimum");
jRadioButtonMinimumDirection.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jRadioButtonMinimumDirectionActionPerformed(evt);
}
});
jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Additional members to track", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 1, 11))); // NOI18N
jTableMembers.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
},
new String [] {
"Member", "Targeted Nutrient Amount Per Day"
}
) {
Class[] types = new Class [] {
java.lang.String.class, java.lang.String.class
};
public Class getColumnClass(int columnIndex) {
return types [columnIndex];
}
});
jTableMembers.setCellSelectionEnabled(true);
jTableMembers.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
jTableMembers.getTableHeader().setReorderingAllowed(false);
scrollPaneIngedients.setViewportView(jTableMembers);
jButtonAddMember.setIcon(new javax.swing.ImageIcon(getClass().getResource("/art/export/add-item.png"))); // NOI18N
jButtonAddMember.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButtonAddMemberActionPerformed(evt);
}
});
jButtonRemoveMember.setIcon(new javax.swing.ImageIcon(getClass().getResource("/art/export/subtract-item.png"))); // NOI18N
jButtonRemoveMember.setDefaultCapable(false);
jButtonRemoveMember.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButtonRemoveMemberActionPerformed(evt);
}
});
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(jButtonAddMember, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jButtonRemoveMember, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(482, Short.MAX_VALUE))
.addComponent(scrollPaneIngedients, javax.swing.GroupLayout.DEFAULT_SIZE, 549, Short.MAX_VALUE)
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(jButtonRemoveMember, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jButtonAddMember, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(scrollPaneIngedients, javax.swing.GroupLayout.DEFAULT_SIZE, 88, Short.MAX_VALUE))
);
jLabel2.setFont(new java.awt.Font("Tahoma", 1, 11));
jLabel2.setText("Targeted Nutrient:");
jTextFieldTargetAmount.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyReleased(java.awt.event.KeyEvent evt) {
jTextFieldTargetAmountKeyReleased(evt);
}
});
jLabel4.setFont(new java.awt.Font("Tahoma", 1, 11));
jLabel4.setText("per day");
jComboBoxTargetNutrient.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Calories", "Fat", "Sodium" }));
jComboBoxTargetNutrient.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jComboBoxTargetNutrientActionPerformed(evt);
}
});
jScrollPane2.setBorder(null);
jTextPaneInstructions.setBackground(javax.swing.UIManager.getDefaults().getColor("control"));
jTextPaneInstructions.setBorder(null);
jTextPaneInstructions.setEditable(false);
jTextPaneInstructions.setText("Please enter your name and your nutritional goals. You may specify a minimum goal or a maximum goal. This will affect your meal portioning sizes and other calculations.");
jTextPaneInstructions.setFocusable(false);
jTextPaneInstructions.setMargin(new java.awt.Insets(0, 0, 0, 0));
jTextPaneInstructions.setOpaque(false);
jTextPaneInstructions.setVerifyInputWhenFocusTarget(false);
jScrollPane2.setViewportView(jTextPaneInstructions);
jLabelNutrientUnit.setText("units");
jScrollPane3.setBorder(null);
jTextPane2.setBackground(javax.swing.UIManager.getDefaults().getColor("control"));
jTextPane2.setBorder(null);
jTextPane2.setEditable(false);
jTextPane2.setFont(new java.awt.Font("Tahoma", 1, 11));
jTextPane2.setText("Would you like to scale your weekly menu based on a maximum or minimum nutritional amount?");
jTextPane2.setFocusable(false);
jTextPane2.setMargin(new java.awt.Insets(0, 0, 0, 0));
jTextPane2.setOpaque(false);
jTextPane2.setVerifyInputWhenFocusTarget(false);
jScrollPane3.setViewportView(jTextPane2);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 555, Short.MAX_VALUE)
.addComponent(jLabelTitle, javax.swing.GroupLayout.PREFERRED_SIZE, 278, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jTextFieldUser, javax.swing.GroupLayout.PREFERRED_SIZE, 158, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jScrollPane3, javax.swing.GroupLayout.DEFAULT_SIZE, 555, Short.MAX_VALUE))
.addGroup(layout.createSequentialGroup()
.addGap(30, 30, 30)
.addComponent(jRadioButtonMaximumDirection)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jRadioButtonMinimumDirection)))
.addContainerGap())
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(layout.createSequentialGroup()
.addComponent(jButtonSave)
.addGap(18, 18, 18)
.addComponent(jButtonCancel)
.addGap(18, 18, 18)
.addComponent(linkLabelDelete, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addGap(4, 4, 4))
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel2)
.addGap(10, 10, 10)
.addComponent(jComboBoxTargetNutrient, javax.swing.GroupLayout.PREFERRED_SIZE, 122, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jTextFieldTargetAmount, javax.swing.GroupLayout.PREFERRED_SIZE, 42, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabelNutrientUnit, javax.swing.GroupLayout.PREFERRED_SIZE, 45, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel4)
.addContainerGap(183, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabelTitle)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jScrollPane2, 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(jLabel1)
.addComponent(jTextFieldUser, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jScrollPane3, javax.swing.GroupLayout.PREFERRED_SIZE, 15, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jRadioButtonMaximumDirection)
.addComponent(jRadioButtonMinimumDirection))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel2)
.addComponent(jComboBoxTargetNutrient, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jTextFieldTargetAmount, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabelNutrientUnit)
.addComponent(jLabel4, javax.swing.GroupLayout.PREFERRED_SIZE, 17, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jPanel1, 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(jButtonSave)
.addComponent(jButtonCancel)
.addComponent(linkLabelDelete, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap())
);
}// </editor-fold>//GEN-END:initComponents
private void jTextFieldUserKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jTextFieldUserKeyReleased
this.validateForm();
}//GEN-LAST:event_jTextFieldUserKeyReleased
private void jButtonSaveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonSaveActionPerformed
if (this.getCreateEditMode() == CreateEditMode.EDIT)
{
//keep the previous user name
String previousUserName = this.user.getName();
//update the user
this.user.setName(this.jTextFieldUser.getText());
//update user and present previous panel
UserManagement.updateRegistrationAndGoBack(previousUserName, this.getUser());
}
else if (this.getCreateEditMode() == CreateEditMode.CREATE)
{
//register user and present login
UserManagement.registerUserAndPresentLogin(this.getUser());
}
}//GEN-LAST:event_jButtonSaveActionPerformed
private void jButtonCancelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonCancelActionPerformed
//user bailed out, go back to the last panel
Application.getMainFrame().goBack();
}//GEN-LAST:event_jButtonCancelActionPerformed
private void linkLabelDeleteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_linkLabelDeleteActionPerformed
//tell controller to process delete request
UserManagement.deleteUser(this.user.getName());
}//GEN-LAST:event_linkLabelDeleteActionPerformed
private void jButtonAddMemberActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonAddMemberActionPerformed
DefaultTableModel dtm = (DefaultTableModel)jTableMembers.getModel();
dtm.addRow(new Object [] {"Member's Name", "0.0 " + NutritionFacts.getUnitForNutrient((String)jComboBoxTargetNutrient.getSelectedItem())});
}//GEN-LAST:event_jButtonAddMemberActionPerformed
private void jButtonRemoveMemberActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonRemoveMemberActionPerformed
int currentRow = jTableMembers.getSelectedRow();
if (currentRow != -1) {
DefaultTableModel dtm = (DefaultTableModel)jTableMembers.getModel();
dtm.removeRow(currentRow);
if (currentRow < jTableMembers.getRowCount())
jTableMembers.setRowSelectionInterval(currentRow, currentRow);
}
}//GEN-LAST:event_jButtonRemoveMemberActionPerformed
private void jTextFieldTargetAmountKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jTextFieldTargetAmountKeyReleased
this.validateForm();
}//GEN-LAST:event_jTextFieldTargetAmountKeyReleased
private void jComboBoxTargetNutrientActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jComboBoxTargetNutrientActionPerformed
if (this.jComboBoxTargetNutrient.getItemCount() > 0 && this.jComboBoxTargetNutrient.getSelectedItem() != null)
{
String newUnit = NutritionFacts.getUnitForNutrient((String)this.jComboBoxTargetNutrient.getSelectedItem());
//update unit for the nutrient
this.jLabelNutrientUnit.setText(newUnit);
//update unit for every member
for (int memberRow = 0; memberRow < this.jTableMembers.getModel().getRowCount(); memberRow++)
{
Measurement measurement = new Measurement((String)this.jTableMembers.getModel().getValueAt(0, 1));
measurement.setUnit(newUnit);
this.jTableMembers.getModel().setValueAt(measurement.toString(), memberRow, 1);
}
}
this.validateForm();
}//GEN-LAST:event_jComboBoxTargetNutrientActionPerformed
private void jRadioButtonMaximumDirectionActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButtonMaximumDirectionActionPerformed
this.validateForm();
}//GEN-LAST:event_jRadioButtonMaximumDirectionActionPerformed
private void jRadioButtonMinimumDirectionActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButtonMinimumDirectionActionPerformed
this.validateForm();
}//GEN-LAST:event_jRadioButtonMinimumDirectionActionPerformed
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.ButtonGroup buttonGroupDirection;
private javax.swing.JButton jButtonAddMember;
private javax.swing.JButton jButtonCancel;
private javax.swing.JButton jButtonRemoveMember;
private javax.swing.JButton jButtonSave;
private javax.swing.JComboBox jComboBoxTargetNutrient;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabelNutrientUnit;
private javax.swing.JLabel jLabelTitle;
private javax.swing.JPanel jPanel1;
private javax.swing.JRadioButton jRadioButtonMaximumDirection;
private javax.swing.JRadioButton jRadioButtonMinimumDirection;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JScrollPane jScrollPane3;
private javax.swing.JTable jTableMembers;
private javax.swing.JTextField jTextFieldTargetAmount;
private javax.swing.JTextField jTextFieldUser;
private javax.swing.JTextPane jTextPane2;
private javax.swing.JTextPane jTextPaneInstructions;
private com.customfit.ctg.view.LinkLabel linkLabelDelete;
private javax.swing.JScrollPane scrollPaneIngedients;
// End of variables declaration//GEN-END:variables
/**
* Extends SubPanel functionality by returning the title as being the
* same as on the panel itself.
* @return The title in the panel.
*/
@Override
public String getTitle()
{
//grab title from on the panel
return this.jLabelTitle.getText();
}
/**
* Sets the User for which the form will be laid out.
* @param user
*/
public void setUser(User user) {
//store user
this.user = user;
//set user name box
this.jTextFieldUser.setText(user.getName());
//set the min/max radio
Enumeration<AbstractButton> directionButtons = this.buttonGroupDirection.getElements();
while (directionButtons.hasMoreElements())
{
AbstractButton buttonDirection = directionButtons.nextElement();
if (buttonDirection.getActionCommand().equals("Maximum")
&& this.user.getOwnMember().getGoalDirection() == GoalDirection.MAXIMUM_GOAL)
{
this.buttonGroupDirection.setSelected(buttonDirection.getModel(), true);
}
else if (buttonDirection.getActionCommand().equals("Minimum")
&& this.user.getOwnMember().getGoalDirection() == GoalDirection.MINIMUM_GOAL)
{
this.buttonGroupDirection.setSelected(buttonDirection.getModel(), true);
}
}
//set targeted nutrient
for (int n = 0; n < this.jComboBoxTargetNutrient.getItemCount(); n++)
{
if (((String)this.jComboBoxTargetNutrient.getItemAt(n)).equals(user.getTrackedNutrient()))
this.jComboBoxTargetNutrient.setSelectedIndex(n);
}
//set own nutrient information
Member ownMember = user.getOwnMember();
this.jTextFieldTargetAmount.setText(Double.valueOf(ownMember.getGoal().getQuantity()).toString());
this.jLabelNutrientUnit.setText(ownMember.getGoal().getUnit());
this.jComboBoxTargetNutrient.setSelectedItem(user.getTrackedNutrient());
//set other member targets
DefaultTableModel membersTableModel = (DefaultTableModel) this.jTableMembers.getModel();
for (Member member : user.getAllOtherMembers())
{
membersTableModel.addRow(new Object[]{
member.getName(), member.getGoal().toString()
});
}
}
/**
* Generates a User object based on the form data.
*
* @param user User made from the form data.
*/
public User getUser()
{
ArrayList<Member> members = new ArrayList<Member>();
{
//build user's member
String memberName = this.jTextFieldUser.getText();
Double amount = Double.parseDouble(this.jTextFieldTargetAmount.getText());
Measurement goal = new Measurement(amount, NutritionFacts.getUnitForNutrient((String)jComboBoxTargetNutrient.getSelectedItem()));
if (this.buttonGroupDirection.getSelection().getActionCommand().equals("Maximum"))
members.add(new Member(memberName,
(String)this.jComboBoxTargetNutrient.getSelectedItem(),
goal,
GoalDirection.MAXIMUM_GOAL));
else if (this.buttonGroupDirection.getSelection().getActionCommand().equals("Minimum"))
members.add(new Member(memberName,
(String)this.jComboBoxTargetNutrient.getSelectedItem(),
goal,
GoalDirection.MINIMUM_GOAL));
}
for (int memberRow = 0; memberRow < this.jTableMembers.getModel().getRowCount(); memberRow++)
{
//build all other members
String memberName = (String)this.jTableMembers.getModel().getValueAt(memberRow, 0);
String amount = (String)this.jTableMembers.getModel().getValueAt(memberRow, 1);
Measurement goal = new Measurement(amount);
ButtonModel model = (ButtonModel)this.buttonGroupDirection.getSelection();
if (model.getActionCommand().equals("Maximum"))
members.add(new Member(memberName,
(String)this.jComboBoxTargetNutrient.getSelectedItem(),
goal,
GoalDirection.MAXIMUM_GOAL));
else if (model.getActionCommand().equals("Minimum"))
members.add(new Member(memberName,
(String)this.jComboBoxTargetNutrient.getSelectedItem(),
goal,
GoalDirection.MINIMUM_GOAL));
}
if (this.getCreateEditMode() == CreateEditMode.CREATE)
//create a new user
return new User(
this.jTextFieldUser.getText(),
members,
new ArrayList<Meal>()
);
else if (this.getCreateEditMode() == CreateEditMode.EDIT)
//create a new user from the existing user (i.e., keep meals)
return new User(
this.jTextFieldUser.getText(),
members,
this.user.getAllMeals()
);
else
return null;
}
/**
* Makes sure we are good to save before actually enabling the save button.
*/
private void validateForm()
{
boolean disableSaves = false;
if (this.jTextFieldUser.getText().trim().length() <= 2)
disableSaves = true;
else if (this.buttonGroupDirection.getSelection() == null)
disableSaves = true;
else if (this.jTextFieldTargetAmount.getText().trim().isEmpty())
disableSaves = true;
else if (this.getCreateEditMode() == CreateEditMode.EDIT && this.user.equals(this.getUser()))
disableSaves = true;
this.jButtonSave.setEnabled(!disableSaves);
}
}