package com.customfit.ctg.view.recipes;
import com.customfit.ctg.controller.*;
import com.customfit.ctg.model.*;
import com.customfit.ctg.view.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.*;
import javax.swing.event.*;
import javax.swing.table.*;
/**
* This is the main panel for managing the recipes that are available
* to select from.
*
* @author Ryan Spoon
*/
public class EditRecipePanel extends CreateEditPanel {
/**
* Holds the panel that was open right before this panel was instantiated.
*/
private SubPanel previousPanel;
/**
* Holds the original recipe the way it was.
*/
private Recipe recipe;
/** Creates new form OldRecipeListPanel */
public EditRecipePanel(CreateEditMode createEditMode) {
initComponents();
//setup edit mode
super.setCreateEditMode(createEditMode);
//customize form for edit mode
if (this.getCreateEditMode() == CreateEditMode.CREATE)
{
this.jLabelTitle.setText("Create a New Recipe");
//disable links
this.linkLabelDelete.setVisible(false);
this.linkLabelAddToMeal.setVisible(false);
this.linkLabelPrint.setVisible(false);
}
else if (this.getCreateEditMode() == CreateEditMode.EDIT)
this.jLabelTitle.setText("Edit Recipe");
//save last panel in view
this.previousPanel = Application.getMainFrame().getPanel();
//setup the me-menu in the right-top corner
jComboBoxMeMenu.setModel(new javax.swing.DefaultComboBoxModel(new String[] {"User: " + UserManagement.getCurrentUser().getName(), "Profile Home", "Edit Profile", "Logout" }));
//clear out the built-in combo box for units
ArrayList<String> allUnits = new ArrayList<String>();
allUnits.add("");
allUnits.addAll(Arrays.asList(Measurement.getAllMeasurementUnits()));
this.jComboBoxServingSizeUnit.setModel(new javax.swing.DefaultComboBoxModel(allUnits.toArray(new String[] {})));
//clear out the nutrition info box for reflection
DefaultTableModel nutritionTableModel = (DefaultTableModel) this.jTableNutritionFacts.getModel();
for (String nutrient: NutritionFacts.getAllValidNutrients())
{
nutritionTableModel.addRow(new Object[] { nutrient , });
}
//listen for star rating events
this.starRatingPanel.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
validateForm();
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
// throw new UnsupportedOperationException("Not supported yet.");
}
});
//listen for nutrition table events
nutritionTableModel.addTableModelListener(new TableModelListener() {
@Override
public void tableChanged(TableModelEvent e) {
//update unit on nutrition table
DefaultTableModel nutritionTableModel = (DefaultTableModel) jTableNutritionFacts.getModel();
for (int row = e.getFirstRow(); row <= e.getLastRow(); row++)
{
if (nutritionTableModel.getValueAt(row, e.getColumn()) != null && !((String)nutritionTableModel.getValueAt(row, e.getColumn())).isEmpty())
{
Measurement measurement = new Measurement((String)nutritionTableModel.getValueAt(row, e.getColumn()));
measurement.setUnit(NutritionFacts.getUnitForNutrient((String)nutritionTableModel.getValueAt(row, 0)));
if (!measurement.toString().equals((String)nutritionTableModel.getValueAt(row, e.getColumn())))
nutritionTableModel.setValueAt(measurement.toString(), row, e.getColumn());
if (measurement.getQuantity() <= 0.0)
nutritionTableModel.setValueAt("", row, e.getColumn());
}
}
validateForm();
}
});
//listen for ingredient table events
DefaultTableModel ingredientModel = (DefaultTableModel)jTableIngredients.getModel();
ingredientModel.addTableModelListener(new TableModelListener() {
@Override
public void tableChanged(TableModelEvent e) {
DefaultTableModel membersModel = (DefaultTableModel) jTableIngredients.getModel();
//if column is Amount
if (e.getColumn() == 0)
{
//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()));
if (!measurement.toString().equals((String)membersModel.getValueAt(row, e.getColumn())))
membersModel.setValueAt(measurement.toString(), row, e.getColumn());
}
}
// //if column is Member
// else if (e.getColumn() == 1)
// {
// //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());
// }
jTableIngredients.setModel(membersModel);
jTableIngredients.revalidate();
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() {
jButtonSave = new javax.swing.JButton();
btnCancel = new javax.swing.JButton();
lblName = new javax.swing.JLabel();
lblName1 = new javax.swing.JLabel();
jTextName = new javax.swing.JTextField();
scrollPaneNutrition = new javax.swing.JScrollPane();
jTableNutritionFacts = new javax.swing.JTable();
jLabelTitle = new javax.swing.JLabel();
jComboBoxMeMenu = new javax.swing.JComboBox();
jPanel1 = new javax.swing.JPanel();
scrollPaneIngedients = new javax.swing.JScrollPane();
jTableIngredients = new javax.swing.JTable();
jButtonAddIngredient = new javax.swing.JButton();
jButtonRemoveIngredient = new javax.swing.JButton();
starRatingPanel = new com.customfit.ctg.view.StarRatingPanel();
jSpinnerMakes = new javax.swing.JSpinner();
lblName2 = new javax.swing.JLabel();
lblName3 = new javax.swing.JLabel();
jTextFieldServingSize = new javax.swing.JTextField();
jComboBoxServingSizeUnit = new javax.swing.JComboBox();
jPanel2 = new javax.swing.JPanel();
jScrollPane1 = new javax.swing.JScrollPane();
jTextAreaInstructions = new javax.swing.JTextArea();
linkLabelAddToMeal = new com.customfit.ctg.view.LinkLabel();
linkLabelPrint = new com.customfit.ctg.view.LinkLabel();
linkLabelDelete = new com.customfit.ctg.view.LinkLabel();
jButtonSave.setText("Save");
jButtonSave.setEnabled(false);
jButtonSave.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButtonSaveActionPerformed(evt);
}
});
btnCancel.setText("Cancel");
btnCancel.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnCancelActionPerformed(evt);
}
});
lblName.setFont(new java.awt.Font("Tahoma", 1, 11));
lblName.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
lblName.setText("Name: ");
lblName1.setFont(new java.awt.Font("Tahoma", 1, 11));
lblName1.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
lblName1.setText("Rating: ");
jTextName.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyReleased(java.awt.event.KeyEvent evt) {
jTextNameKeyReleased(evt);
}
});
scrollPaneNutrition.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Nutrition Facts", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 1, 11))); // NOI18N
scrollPaneNutrition.setFont(new java.awt.Font("Tahoma", 1, 11));
jTableNutritionFacts.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
},
new String [] {
"Name", "Amount"
}
) {
Class[] types = new Class [] {
java.lang.String.class, java.lang.String.class
};
boolean[] canEdit = new boolean [] {
false, true
};
public Class getColumnClass(int columnIndex) {
return types [columnIndex];
}
public boolean isCellEditable(int rowIndex, int columnIndex) {
return canEdit [columnIndex];
}
});
jTableNutritionFacts.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
jTableNutritionFacts.getTableHeader().setReorderingAllowed(false);
scrollPaneNutrition.setViewportView(jTableNutritionFacts);
jTableNutritionFacts.getColumnModel().getColumn(0).setMinWidth(120);
jTableNutritionFacts.getColumnModel().getColumn(0).setPreferredWidth(120);
jTableNutritionFacts.getColumnModel().getColumn(0).setMaxWidth(120);
jLabelTitle.setFont(new java.awt.Font("Tahoma", 3, 18));
jLabelTitle.setText("Edit Recipe");
jComboBoxMeMenu.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Me Menu", "Edit User", "Logout" }));
jComboBoxMeMenu.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jComboBoxMeMenuActionPerformed(evt);
}
});
jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Ingredients", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 1, 11))); // NOI18N
jTableIngredients.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
},
new String [] {
"Amount", "Ingredient"
}
) {
Class[] types = new Class [] {
java.lang.String.class, java.lang.String.class
};
public Class getColumnClass(int columnIndex) {
return types [columnIndex];
}
});
jTableIngredients.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
jTableIngredients.getTableHeader().setReorderingAllowed(false);
scrollPaneIngedients.setViewportView(jTableIngredients);
jTableIngredients.getColumnModel().getColumn(0).setMinWidth(45);
jTableIngredients.getColumnModel().getColumn(0).setPreferredWidth(55);
jTableIngredients.getColumnModel().getColumn(0).setMaxWidth(60);
jButtonAddIngredient.setIcon(new javax.swing.ImageIcon(getClass().getResource("/art/export/add-item.png"))); // NOI18N
jButtonAddIngredient.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButtonAddIngredientActionPerformed(evt);
}
});
jButtonRemoveIngredient.setIcon(new javax.swing.ImageIcon(getClass().getResource("/art/export/subtract-item.png"))); // NOI18N
jButtonRemoveIngredient.setDefaultCapable(false);
jButtonRemoveIngredient.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButtonRemoveIngredientActionPerformed(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()
.addGap(2, 2, 2)
.addComponent(jButtonAddIngredient, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jButtonRemoveIngredient, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(222, Short.MAX_VALUE))
.addComponent(scrollPaneIngedients, javax.swing.GroupLayout.DEFAULT_SIZE, 291, 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(jButtonRemoveIngredient, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jButtonAddIngredient, 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, 127, Short.MAX_VALUE))
);
starRatingPanel.setScale(5);
javax.swing.GroupLayout starRatingPanelLayout = new javax.swing.GroupLayout(starRatingPanel);
starRatingPanel.setLayout(starRatingPanelLayout);
starRatingPanelLayout.setHorizontalGroup(
starRatingPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 100, Short.MAX_VALUE)
);
starRatingPanelLayout.setVerticalGroup(
starRatingPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 20, Short.MAX_VALUE)
);
jSpinnerMakes.setModel(new javax.swing.SpinnerNumberModel(Double.valueOf(1.0d), Double.valueOf(0.0d), null, Double.valueOf(0.25d)));
jSpinnerMakes.addChangeListener(new javax.swing.event.ChangeListener() {
public void stateChanged(javax.swing.event.ChangeEvent evt) {
jSpinnerMakesStateChanged(evt);
}
});
lblName2.setFont(new java.awt.Font("Tahoma", 1, 11));
lblName2.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
lblName2.setText("Makes:");
lblName3.setFont(new java.awt.Font("Tahoma", 1, 11));
lblName3.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
lblName3.setText("Serving Size:");
jTextFieldServingSize.setText("1.0");
jTextFieldServingSize.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyReleased(java.awt.event.KeyEvent evt) {
jTextFieldServingSizeKeyReleased(evt);
}
});
jComboBoxServingSizeUnit.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
jComboBoxServingSizeUnit.addItemListener(new java.awt.event.ItemListener() {
public void itemStateChanged(java.awt.event.ItemEvent evt) {
jComboBoxServingSizeUnitItemStateChanged(evt);
}
});
jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Instructions", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 1, 11))); // NOI18N
jTextAreaInstructions.setColumns(20);
jTextAreaInstructions.setLineWrap(true);
jTextAreaInstructions.setRows(5);
jTextAreaInstructions.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyReleased(java.awt.event.KeyEvent evt) {
jTextAreaInstructionsKeyReleased(evt);
}
});
jScrollPane1.setViewportView(jTextAreaInstructions);
javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
jPanel2.setLayout(jPanel2Layout);
jPanel2Layout.setHorizontalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 513, Short.MAX_VALUE)
);
jPanel2Layout.setVerticalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 115, Short.MAX_VALUE)
);
linkLabelAddToMeal.setText("Add to a new meal plan");
linkLabelAddToMeal.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
linkLabelAddToMealActionPerformed(evt);
}
});
linkLabelPrint.setText("Print this recipe");
linkLabelPrint.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
linkLabelPrintActionPerformed(evt);
}
});
linkLabelDelete.setText("Delete this recipe");
linkLabelDelete.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
linkLabelDeleteActionPerformed(evt);
}
});
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel2, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(layout.createSequentialGroup()
.addComponent(jLabelTitle, javax.swing.GroupLayout.DEFAULT_SIZE, 456, Short.MAX_VALUE)
.addGap(1, 1, 1)
.addComponent(jComboBoxMeMenu, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
.addComponent(lblName, javax.swing.GroupLayout.PREFERRED_SIZE, 51, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jTextName))
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
.addComponent(lblName3, javax.swing.GroupLayout.PREFERRED_SIZE, 85, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jTextFieldServingSize, javax.swing.GroupLayout.PREFERRED_SIZE, 39, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jComboBoxServingSizeUnit, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
.addComponent(lblName1, javax.swing.GroupLayout.PREFERRED_SIZE, 51, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(starRatingPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(lblName2, javax.swing.GroupLayout.PREFERRED_SIZE, 51, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jSpinnerMakes, javax.swing.GroupLayout.PREFERRED_SIZE, 46, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(scrollPaneNutrition, javax.swing.GroupLayout.PREFERRED_SIZE, 216, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(layout.createSequentialGroup()
.addComponent(jButtonSave)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(btnCancel)
.addGap(18, 18, 18)
.addComponent(linkLabelAddToMeal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(linkLabelPrint, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(linkLabelDelete, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabelTitle)
.addComponent(jComboBoxMeMenu, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(lblName, javax.swing.GroupLayout.PREFERRED_SIZE, 18, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jTextName, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(59, 59, 59))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addGap(28, 28, 28)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(lblName1)
.addComponent(starRatingPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(lblName2, javax.swing.GroupLayout.PREFERRED_SIZE, 18, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jSpinnerMakes, 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(jComboBoxServingSizeUnit, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(lblName3, javax.swing.GroupLayout.PREFERRED_SIZE, 18, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jTextFieldServingSize, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGroup(layout.createSequentialGroup()
.addComponent(scrollPaneNutrition, javax.swing.GroupLayout.DEFAULT_SIZE, 275, Short.MAX_VALUE)
.addGap(1, 1, 1)))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jButtonSave)
.addComponent(btnCancel)
.addComponent(linkLabelAddToMeal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(linkLabelPrint, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.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 jComboBoxMeMenuActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jComboBoxMeMenuActionPerformed
// process me menu
//if user hit Profile Home
if (((String)this.jComboBoxMeMenu.getSelectedItem()).equals("Profile Home"))
//then tell the controller about it
UserManagement.viewHome();
//if user hit Edit User
else if (((String)this.jComboBoxMeMenu.getSelectedItem()).equals("Edit Profile"))
//then tell the controller about it
UserManagement.editRegistration(UserManagement.getCurrentUser());
//if user hit Logout
else if (((String)this.jComboBoxMeMenu.getSelectedItem()).equals("Logout"))
//ask controller for logout
UserManagement.logout();
//and no matter what, be sure to reset this combo box back to index 0
this.jComboBoxMeMenu.setSelectedIndex(0);
}//GEN-LAST:event_jComboBoxMeMenuActionPerformed
private void jButtonSaveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonSaveActionPerformed
removeEmptyIngredientRows();
//if the form is invalid, then don't save
if (!this.validateForm()) return;
//if its a new recipe
if (this.getCreateEditMode() == CreateEditMode.CREATE)
//then save it and go back to the last panel
RecipeManagement.createRecipeAndGoBack(this.getRecipe());
//if its an existing recipe
else if (this.getCreateEditMode() == CreateEditMode.EDIT)
RecipeManagement.updateRecipeAndGoBack(this.recipe.getName(), this.getRecipe());
}//GEN-LAST:event_jButtonSaveActionPerformed
private void btnCancelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCancelActionPerformed
//go back to the last panel
Application.getMainFrame().setPanel(this.previousPanel);
}//GEN-LAST:event_btnCancelActionPerformed
private void jButtonRemoveIngredientActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonRemoveIngredientActionPerformed
removeIngredient();
}//GEN-LAST:event_jButtonRemoveIngredientActionPerformed
private void jButtonAddIngredientActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonAddIngredientActionPerformed
DefaultTableModel dtm = (DefaultTableModel)jTableIngredients.getModel();
dtm.addRow(new Object [] {"", "", null});
jTableIngredients.setModel(dtm);
jTableIngredients.revalidate();
}//GEN-LAST:event_jButtonAddIngredientActionPerformed
private void jTextNameKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jTextNameKeyReleased
this.validateForm();
}//GEN-LAST:event_jTextNameKeyReleased
private void jTextFieldServingSizeKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jTextFieldServingSizeKeyReleased
this.validateForm();
}//GEN-LAST:event_jTextFieldServingSizeKeyReleased
private void jTextAreaInstructionsKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jTextAreaInstructionsKeyReleased
this.validateForm();
}//GEN-LAST:event_jTextAreaInstructionsKeyReleased
private void jComboBoxServingSizeUnitItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_jComboBoxServingSizeUnitItemStateChanged
this.validateForm();
}//GEN-LAST:event_jComboBoxServingSizeUnitItemStateChanged
private void jSpinnerMakesStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_jSpinnerMakesStateChanged
this.validateForm();
}//GEN-LAST:event_jSpinnerMakesStateChanged
private void linkLabelAddToMealActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_linkLabelAddToMealActionPerformed
//make a list
List<Recipe> recipes = new ArrayList<Recipe>();
//add me to the list
recipes.add(this.getRecipe());
//then call up the controller for a new panel
MealPlanner.insertMealPlan(Calendar.getInstance().getTime(), recipes);
}//GEN-LAST:event_linkLabelAddToMealActionPerformed
private void linkLabelPrintActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_linkLabelPrintActionPerformed
RecipeManagement.printRecipe(this.getRecipe());
}//GEN-LAST:event_linkLabelPrintActionPerformed
private void linkLabelDeleteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_linkLabelDeleteActionPerformed
if (this.getCreateEditMode() == CreateEditMode.EDIT)
if (RecipeManagement.deleteRecipe(this.recipe))
//if all went well go back
Application.getMainFrame().goBack();
}//GEN-LAST:event_linkLabelDeleteActionPerformed
/**
* Delete any rows that have an empty cell.
*/
private void removeEmptyIngredientRows() {
DefaultTableModel dtm = (DefaultTableModel)jTableIngredients.getModel();
for (int r=0; r<dtm.getRowCount(); r++) {
boolean empty = false;
for (int c=0; c<dtm.getColumnCount(); c++) {
if(dtm.getValueAt(r, c) == null) empty = true;
else if(dtm.getValueAt(r, c).equals("")) empty = true;
}
if(empty) {
dtm.removeRow(r);
r--; //this keeps it from skipping a row
}
}
jTableIngredients.setModel(dtm);
jTableIngredients.revalidate();
}
private void removeIngredient() {
int currentRow = jTableIngredients.getSelectedRow();
if (currentRow != -1) {
DefaultTableModel dtm = (DefaultTableModel)jTableIngredients.getModel();
dtm.removeRow(currentRow);
jTableIngredients.setModel(dtm);
jTableIngredients.revalidate();
if (currentRow < jTableIngredients.getRowCount())
jTableIngredients.setRowSelectionInterval(currentRow, currentRow);
}
}
/**
* 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();
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton btnCancel;
private javax.swing.JButton jButtonAddIngredient;
private javax.swing.JButton jButtonRemoveIngredient;
private javax.swing.JButton jButtonSave;
private javax.swing.JComboBox jComboBoxMeMenu;
private javax.swing.JComboBox jComboBoxServingSizeUnit;
private javax.swing.JLabel jLabelTitle;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JSpinner jSpinnerMakes;
private javax.swing.JTable jTableIngredients;
private javax.swing.JTable jTableNutritionFacts;
private javax.swing.JTextArea jTextAreaInstructions;
private javax.swing.JTextField jTextFieldServingSize;
private javax.swing.JTextField jTextName;
private javax.swing.JLabel lblName;
private javax.swing.JLabel lblName1;
private javax.swing.JLabel lblName2;
private javax.swing.JLabel lblName3;
private com.customfit.ctg.view.LinkLabel linkLabelAddToMeal;
private com.customfit.ctg.view.LinkLabel linkLabelDelete;
private com.customfit.ctg.view.LinkLabel linkLabelPrint;
private javax.swing.JScrollPane scrollPaneIngedients;
private javax.swing.JScrollPane scrollPaneNutrition;
private com.customfit.ctg.view.StarRatingPanel starRatingPanel;
// End of variables declaration//GEN-END:variables
/**
* Sets recipe to edit in view.
*
* @param recipe Recipe to edit.
*/
public void setRecipe(Recipe recipe)
{
this.recipe = recipe;
this.jTextName.setText(recipe.getName());
this.starRatingPanel.setRating(recipe.getRating());
this.jSpinnerMakes.setValue(recipe.getServings());
this.jTextFieldServingSize.setText(Double.valueOf(recipe.getServingSize().getQuantity()).toString());
this.jComboBoxServingSizeUnit.setSelectedItem(recipe.getServingSize().getUnit());
for (RecipeIngredient ingredient: recipe.getIngredients())
{
DefaultTableModel dtm = (DefaultTableModel)this.jTableIngredients.getModel();
Object[] objArray = new Object[]
{
ingredient.getAmount().toString(),
ingredient.getName()
};
dtm.addRow(objArray);
}
this.jTextAreaInstructions.setText(recipe.getInstructions());
for (int nutritionRow = 0; nutritionRow < this.jTableNutritionFacts.getModel().getRowCount(); nutritionRow++)
{
String nutrient = (String)this.jTableNutritionFacts.getModel().getValueAt(nutritionRow, 0);
Measurement measurement = recipe.getNutritionInformation().getNutrient(nutrient);
if (measurement != null && measurement.getQuantity() > 0)
this.jTableNutritionFacts.getModel().setValueAt(measurement.toString(), nutritionRow, 1);
}
}
/**
* Builds Recipe object from view inputs.
*/
public Recipe getRecipe()
{
Recipe recipe = new Recipe();
recipe.setName(this.jTextName.getText().trim());
recipe.setRating(this.starRatingPanel.getRating());
recipe.setServings((Double)this.jSpinnerMakes.getValue());
if (this.jTextFieldServingSize.getText().isEmpty()) this.jTextFieldServingSize.setText("1.0");
recipe.getServingSize().setQuantity(Double.parseDouble(this.jTextFieldServingSize.getText()));
recipe.getServingSize().setUnit((String)this.jComboBoxServingSizeUnit.getSelectedItem());
for (int ingredientRow = 0; ingredientRow < this.jTableIngredients.getModel().getRowCount(); ingredientRow++)
{
String amount = (String)this.jTableIngredients.getModel().getValueAt(ingredientRow, 0);
String ingredient = (String)this.jTableIngredients.getModel().getValueAt(ingredientRow, 1);
//add ingredient to recipe
recipe.getIngredients().add(new RecipeIngredient(ingredient, amount));
}
recipe.setInstructions(this.jTextAreaInstructions.getText());
for (int nutritionRow = 0; nutritionRow < this.jTableNutritionFacts.getModel().getRowCount(); nutritionRow++)
{
String nutrient = (String)this.jTableNutritionFacts.getModel().getValueAt(nutritionRow, 0);
if (this.jTableNutritionFacts.getModel().getValueAt(nutritionRow, 1) != null)
recipe.getNutritionInformation().setNutrient(nutrient, new Measurement((String)this.jTableNutritionFacts.getModel().getValueAt(nutritionRow, 1)).getQuantity());
}
return recipe;
}
/**
* Gets the last panel that was open before this one was opened.
* @return
*/
public SubPanel getPreviousPanel() {
return previousPanel;
}
/**
* Makes sure we are good to save before actually enabling the save button.
*/
private boolean validateForm()
{
boolean disableSaves = false;
if (this.jTextName.getText().trim().length() < 5)
disableSaves = true;
else if (this.jTextFieldServingSize.getText().trim().isEmpty())
disableSaves = true;
else if (this.jTableIngredients.getModel().getRowCount() <= 0)
disableSaves = true;
else if (this.jTextAreaInstructions.getText().trim().isEmpty())
disableSaves = true;
else if (this.getCreateEditMode() == CreateEditMode.EDIT && this.recipe.equals(this.getRecipe()))
disableSaves = true;
this.jButtonSave.setEnabled(!disableSaves);
return !disableSaves;
}
}