package com.customfit.ctg.view.meal; import com.customfit.ctg.controller.*; import com.customfit.ctg.model.*; import com.customfit.ctg.view.*; import java.util.*; import javax.swing.*; import javax.swing.table.*; import javax.swing.event.*; /** * This is the panel that lists recipes and provides options to interact * with the list. This can be used for either browsing or searching. * * @author Ryan Spoon, David */ public class MealMenuPanel extends SubPanel { public static final int WEEKS_TO_SHOW = 52; /** * This gets stored whenever the controller passes it this way. */ private List<Recipe> recipes; /** Creates new form RecipeListPanel */ public MealMenuPanel() { initComponents(); //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" })); //manually coded (netbeans issue?) on-select event jTableRecipes.getSelectionModel().addListSelectionListener(new ListSelectionListener() { @Override public void valueChanged(ListSelectionEvent evt) { jTableRecipesValueChanged(evt); } }); //figure out which weeks to display makeMenuColInvisible(); //setup combo box for weeks calculateWeeksForComboBox(); } private void calculateWeeksForComboBox() { //first remove all the old combo box data DefaultComboBoxModel comboBoxModel = (DefaultComboBoxModel)this.jComboBoxWeeks.getModel(); //clear old results comboBoxModel.removeAllElements(); //get a Calendar Calendar calendarToday = Calendar.getInstance(); Calendar calendarStart = Calendar.getInstance(); Calendar calendarEnd = Calendar.getInstance(); //go to the first day of the week if (calendarStart.get(Calendar.DAY_OF_WEEK) != Calendar.MONDAY) { switch (calendarStart.get(Calendar.DAY_OF_WEEK)) { case Calendar.SUNDAY: calendarStart.add(Calendar.DATE, -1); calendarEnd.add(Calendar.DATE, -1); case Calendar.SATURDAY: calendarStart.add(Calendar.DATE, -1); calendarEnd.add(Calendar.DATE, -1); case Calendar.FRIDAY: calendarStart.add(Calendar.DATE, -1); calendarEnd.add(Calendar.DATE, -1); case Calendar.THURSDAY: calendarStart.add(Calendar.DATE, -1); calendarEnd.add(Calendar.DATE, -1); case Calendar.WEDNESDAY: calendarStart.add(Calendar.DATE, -1); calendarEnd.add(Calendar.DATE, -1); case Calendar.TUESDAY: calendarStart.add(Calendar.DATE, -1); calendarEnd.add(Calendar.DATE, -1); } } //rewind 4 weeks calendarStart.add(Calendar.DATE, 7*WEEKS_TO_SHOW/2*-1); calendarEnd.add(Calendar.DATE, 7*WEEKS_TO_SHOW/2*-1); //then add 6 days to end date calendarEnd.add(Calendar.DATE, 6); //loop through weeks to display the comboBoxText int selectedWeek = 0; for (int week = 0; week < WEEKS_TO_SHOW; week++) { StringBuilder dateString = new StringBuilder(); dateString.append((calendarStart.get(Calendar.MONTH)+1)); dateString.append("/"); dateString.append(calendarStart.get(Calendar.DATE)); dateString.append("/"); dateString.append(calendarStart.get(Calendar.YEAR)); dateString.append(" - "); dateString.append((calendarEnd.get(Calendar.MONTH)+1)); dateString.append("/"); dateString.append(calendarEnd.get(Calendar.DATE)); dateString.append("/"); dateString.append(calendarEnd.get(Calendar.YEAR)); //insert dateString comboBoxModel.addElement(dateString.toString()); //check selected week if (calendarToday.after(calendarStart) && calendarToday.before(calendarEnd)) selectedWeek = week; //add 7 days, lather, rinse, repeat calendarStart.add(Calendar.DATE, 7); calendarEnd.add(Calendar.DATE, 7); } //then set the selected one this.jComboBoxWeeks.setSelectedIndex(selectedWeek); } public Date getStartDate() { String dateString = (String)this.jComboBoxWeeks.getSelectedItem(); if (dateString == null) return null; String[] dateStrings = dateString.split(" - "); dateString = dateStrings[0]; dateStrings = dateString.split("/"); int month = Integer.parseInt(dateStrings[0]) - 1; int date = Integer.parseInt(dateStrings[1]); int year = Integer.parseInt(dateStrings[2]); Calendar calendar = Calendar.getInstance(); calendar.set(year, month, date); return calendar.getTime(); } public Date getEndDate() { String dateString = (String)this.jComboBoxWeeks.getSelectedItem(); if (dateString == null) return null; String[] dateStrings = dateString.split(" - "); dateString = dateStrings[1]; dateStrings = dateString.split("/"); int month = Integer.parseInt(dateStrings[0]) - 1; int date = Integer.parseInt(dateStrings[1]); int year = Integer.parseInt(dateStrings[2]); Calendar calendar = Calendar.getInstance(); calendar.set(year, month, date); return calendar.getTime(); } private void makeMenuColInvisible() { jTableMenu.removeColumn(jTableMenu.getColumnModel().getColumn(2)); jTableMenu.removeColumn(jTableMenu.getColumnModel().getColumn(1)); } /** 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() { jLabelTitle = new javax.swing.JLabel(); jScrollPane2 = new javax.swing.JScrollPane(); jTextPane1 = new javax.swing.JTextPane(); jComboBoxMeMenu = new javax.swing.JComboBox(); linkLabelHome = new com.customfit.ctg.view.LinkLabel(); jPanel1 = new javax.swing.JPanel(); jButtonRemoveMealOrRecipe = new javax.swing.JButton(); scrollPaneTable1 = new javax.swing.JScrollPane(); jTableMenu = new javax.swing.JTable(); jButtonAddMealOrRecipe = new javax.swing.JButton(); jLabel1 = new javax.swing.JLabel(); jComboBoxWeeks = new javax.swing.JComboBox(); jPanel2 = new javax.swing.JPanel(); scrollPaneTable2 = new javax.swing.JScrollPane(); jTableRecipes = new javax.swing.JTable(); linkLabelAddNew = new com.customfit.ctg.view.LinkLabel(); jLabelTitle.setFont(new java.awt.Font("Tahoma", 3, 18)); jLabelTitle.setText("Plan Weekly Menu"); jScrollPane2.setBorder(null); jTextPane1.setBackground(javax.swing.UIManager.getDefaults().getColor("control")); jTextPane1.setBorder(null); jTextPane1.setEditable(false); jTextPane1.setText("To add a recipe to the menu, select the desired recipe on the left, select the meal or select \"Create a new meal...\", and click the plus (+) sign. If you would like to remove a recipe from a meal, select the recipe under the meal and click the minus (-) sign. To remove an entire meal, select the meal and click the minus (-) sign."); jTextPane1.setFocusable(false); jTextPane1.setMargin(new java.awt.Insets(0, 0, 0, 0)); jTextPane1.setOpaque(false); jTextPane1.setVerifyInputWhenFocusTarget(false); jScrollPane2.setViewportView(jTextPane1); 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); } }); linkLabelHome.setText("Return to home"); linkLabelHome.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { linkLabelHomeActionPerformed(evt); } }); jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Adjust your meal plans", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 1, 11))); // NOI18N jButtonRemoveMealOrRecipe.setIcon(new javax.swing.ImageIcon(getClass().getResource("/art/export/subtract-item.png"))); // NOI18N jButtonRemoveMealOrRecipe.setDefaultCapable(false); jButtonRemoveMealOrRecipe.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButtonRemoveMealOrRecipeActionPerformed(evt); } }); jTableMenu.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { }, new String [] { "Meal", "MealObject", "RecipeObject" } ) { Class[] types = new Class [] { java.lang.String.class, java.lang.Object.class, java.lang.Object.class }; boolean[] canEdit = new boolean [] { false, false, false }; public Class getColumnClass(int columnIndex) { return types [columnIndex]; } public boolean isCellEditable(int rowIndex, int columnIndex) { return canEdit [columnIndex]; } }); jTableMenu.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); jTableMenu.getTableHeader().setReorderingAllowed(false); jTableMenu.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { jTableMenuMouseClicked(evt); } }); scrollPaneTable1.setViewportView(jTableMenu); jButtonAddMealOrRecipe.setIcon(new javax.swing.ImageIcon(getClass().getResource("/art/export/add-item.png"))); // NOI18N jButtonAddMealOrRecipe.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButtonAddMealOrRecipeActionPerformed(evt); } }); jLabel1.setFont(new java.awt.Font("Tahoma", 1, 11)); jLabel1.setText("Week:"); jComboBoxWeeks.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" })); jComboBoxWeeks.addItemListener(new java.awt.event.ItemListener() { public void itemStateChanged(java.awt.event.ItemEvent evt) { jComboBoxWeeksItemStateChanged(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() .addContainerGap() .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(scrollPaneTable1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 261, Short.MAX_VALUE) .addGroup(jPanel1Layout.createSequentialGroup() .addComponent(jLabel1) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jComboBoxWeeks, javax.swing.GroupLayout.PREFERRED_SIZE, 139, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jButtonAddMealOrRecipe, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jButtonRemoveMealOrRecipe, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))) ); jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel1) .addComponent(jComboBoxWeeks, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addComponent(jButtonAddMealOrRecipe, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jButtonRemoveMealOrRecipe, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(scrollPaneTable1, javax.swing.GroupLayout.DEFAULT_SIZE, 69, Short.MAX_VALUE)) ); jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Select a recipe to add to your meal", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 1, 11))); // NOI18N jTableRecipes.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { }, new String [] { "Recipe", "Rating" } ) { Class[] types = new Class [] { java.lang.String.class, java.lang.Double.class }; boolean[] canEdit = new boolean [] { false, false }; public Class getColumnClass(int columnIndex) { return types [columnIndex]; } public boolean isCellEditable(int rowIndex, int columnIndex) { return canEdit [columnIndex]; } }); jTableRecipes.setColumnSelectionAllowed(true); jTableRecipes.getTableHeader().setReorderingAllowed(false); jTableRecipes.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { jTableRecipesMouseClicked(evt); } }); scrollPaneTable2.setViewportView(jTableRecipes); jTableRecipes.getColumnModel().getSelectionModel().setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); jTableRecipes.getColumnModel().getColumn(1).setCellRenderer(new StarRatingTableCellRenderer()); linkLabelAddNew.setText("Create a new recipe"); linkLabelAddNew.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { linkLabelAddNewActionPerformed(evt); } }); javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2); jPanel2.setLayout(jPanel2Layout); jPanel2Layout.setHorizontalGroup( jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel2Layout.createSequentialGroup() .addComponent(linkLabelAddNew, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap()) .addComponent(scrollPaneTable2, javax.swing.GroupLayout.DEFAULT_SIZE, 314, Short.MAX_VALUE) ); jPanel2Layout.setVerticalGroup( jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel2Layout.createSequentialGroup() .addComponent(linkLabelAddNew, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(scrollPaneTable2, javax.swing.GroupLayout.DEFAULT_SIZE, 80, Short.MAX_VALUE)) ); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(jScrollPane2, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 615, Short.MAX_VALUE) .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup() .addGap(10, 10, 10) .addComponent(linkLabelHome, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(layout.createSequentialGroup() .addComponent(jLabelTitle, javax.swing.GroupLayout.PREFERRED_SIZE, 268, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 279, Short.MAX_VALUE) .addComponent(jComboBoxMeMenu, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup() .addComponent(jPanel2, 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))) .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)) .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.TRAILING) .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(linkLabelHome, 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 linkLabelHomeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_linkLabelHomeActionPerformed //tell controller to go home UserManagement.viewHome(); }//GEN-LAST:event_linkLabelHomeActionPerformed private void linkLabelAddNewActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_linkLabelAddNewActionPerformed //tell controller to create a new recipe RecipeManagement.createRecipe(); }//GEN-LAST:event_linkLabelAddNewActionPerformed private void jTableMenuMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jTableMenuMouseClicked //same as recipes clicked jTableRecipesMouseClicked(evt); if (this.jTableMenu.getSelectedRowCount() > 0) this.jButtonRemoveMealOrRecipe.setEnabled(true); else if (this.jTableMenu.getSelectedRowCount() == 0) this.jButtonRemoveMealOrRecipe.setEnabled(false); }//GEN-LAST:event_jTableMenuMouseClicked private void jButtonRemoveMealOrRecipeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonRemoveMealOrRecipeActionPerformed //if a row is selected if (this.jTableMenu.getSelectedRowCount() > 0) { Object mealObject = jTableMenu.getModel().getValueAt(jTableMenu.getSelectedRow(), 1); Object recipeObject = jTableMenu.getModel().getValueAt(jTableMenu.getSelectedRow(), 2); //if a mealName exists (so not selecting a meal name if (mealObject != null) { Meal meal = (Meal)mealObject; if (recipeObject != null && meal.getRecipes().size() > 1) { for (Meal allMealsMeal: UserManagement.getCurrentUser().getAllMeals()) if (allMealsMeal.equals(meal)) { allMealsMeal.getRecipes().remove((Recipe)recipeObject); break; } } else { for (Meal allMealsMeal: UserManagement.getCurrentUser().getAllMeals()) if (allMealsMeal.equals(meal)) { UserManagement.getCurrentUser().getAllMeals().remove(allMealsMeal); break; } } Application.getDataDriver().updateUserByName(UserManagement.getCurrentUser().getName(), UserManagement.getCurrentUser()); this.refresh(); } } }//GEN-LAST:event_jButtonRemoveMealOrRecipeActionPerformed private void jTableRecipesMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jTableRecipesMouseClicked //toggle add button state if (this.jTableRecipes.getSelectedRowCount() > 0 && this.jTableMenu.getSelectedRowCount() > 0) this.jButtonAddMealOrRecipe.setEnabled(true); else if (this.jTableRecipes.getSelectedRowCount() == 0 || this.jTableMenu.getSelectedRowCount() == 0) this.jButtonAddMealOrRecipe.setEnabled(false); }//GEN-LAST:event_jTableRecipesMouseClicked private void jButtonAddMealOrRecipeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonAddMealOrRecipeActionPerformed //build a list of recipes List<Recipe> recipes = new ArrayList<Recipe>(); for (int recipeRow: this.jTableRecipes.getSelectedRows()) for (Recipe recipe: this.recipes) if (recipe.getName().equals((String)this.jTableRecipes.getModel().getValueAt(recipeRow, 0))) recipes.add(recipe); int selectedMenuRow = this.jTableMenu.getSelectedRow(); if (this.jTableMenu.getSelectedRowCount() > 0) { Object mealObject = jTableMenu.getModel().getValueAt(jTableMenu.getSelectedRow(), 1); Calendar calendarToday = Calendar.getInstance(); Calendar calendarStart = Calendar.getInstance(); calendarStart.setTime(this.getStartDate()); while (calendarToday.get(Calendar.DAY_OF_WEEK) > calendarStart.get(Calendar.DAY_OF_WEEK)) calendarStart.add(Calendar.DATE, 1); if (mealObject == null) { //tell controller to create a new meal MealPlanner.insertMealPlan(calendarStart.getTime(), recipes); //and refresh data this.refresh(); } else { //add these recipes to the selected meal for (int recipeRow: this.jTableRecipes.getSelectedRows()) for (Recipe recipe: this.recipes) if (recipe.getName().equals((String)this.jTableRecipes.getModel().getValueAt(recipeRow, 0))) UserManagement.getCurrentUser().addRecipeToMeal((Meal)mealObject, recipe); //and refresh data this.refresh(); } } }//GEN-LAST:event_jButtonAddMealOrRecipeActionPerformed private void jComboBoxWeeksItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_jComboBoxWeeksItemStateChanged this.refresh(); }//GEN-LAST:event_jComboBoxWeeksItemStateChanged // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton jButtonAddMealOrRecipe; private javax.swing.JButton jButtonRemoveMealOrRecipe; private javax.swing.JComboBox jComboBoxMeMenu; private javax.swing.JComboBox jComboBoxWeeks; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabelTitle; private javax.swing.JPanel jPanel1; private javax.swing.JPanel jPanel2; private javax.swing.JScrollPane jScrollPane2; private javax.swing.JTable jTableMenu; private javax.swing.JTable jTableRecipes; private javax.swing.JTextPane jTextPane1; private com.customfit.ctg.view.LinkLabel linkLabelAddNew; private com.customfit.ctg.view.LinkLabel linkLabelHome; private javax.swing.JScrollPane scrollPaneTable1; private javax.swing.JScrollPane scrollPaneTable2; // End of variables declaration//GEN-END:variables private void jTableRecipesValueChanged(javax.swing.event.ListSelectionEvent evt) { } /** * 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 initial list of recipes passed into the view. * * @param recipes List of recipes. */ public void setRecipes(List<Recipe> recipes) { this.recipes = recipes; DefaultTableModel tableModel = (DefaultTableModel) jTableRecipes.getModel(); //clear old results while (tableModel.getRowCount() > 0) { tableModel.removeRow(0); } //add recipes to list for (Recipe recipe : recipes) { Object[] row = {recipe.getName(), recipe.getRating()}; tableModel.addRow(row); } jTableRecipes.setModel(tableModel); if (this.jTableRecipes.getSelectedRowCount() > 0) this.jButtonAddMealOrRecipe.setEnabled(true); else if (this.jTableRecipes.getSelectedRowCount() == 0) this.jButtonAddMealOrRecipe.setEnabled(false); } /** * Sets the initial list of meals passed into the view. * * @param meals List of meals. */ public void setMeals(List<Meal> meals) { if (meals == null) { this.refresh(); return; } DefaultTableModel tableModel = (DefaultTableModel) jTableMenu.getModel(); //clear old results while (tableModel.getRowCount() > 0) { tableModel.removeRow(0); } //add recipes to list for (Meal meal : meals) { Object[] row = {"<html><b>" + meal.toString() + "</b></html>", meal, null}; tableModel.addRow(row); for (Recipe recipe : meal.getRecipes()) { Object[] rrow = {" " + recipe.getName(), meal, recipe }; tableModel.addRow(rrow); } } Object[] row = {"<html><b>" + "Create a new meal..." + "</b></html>", null, null}; tableModel.addRow(row); jTableMenu.setModel(tableModel); if (this.jTableMenu.getSelectedRowCount() > 0) this.jButtonRemoveMealOrRecipe.setEnabled(true); else if (this.jTableMenu.getSelectedRowCount() == 0) this.jButtonRemoveMealOrRecipe.setEnabled(false); } @Override public void refresh() { if (this.getStartDate() != null && this.getEndDate() != null) { this.setMeals(UserManagement.getCurrentUser().getMealsByDateRange(this.getStartDate(), this.getEndDate())); } this.setRecipes(RecipeManagement.getAllRecipes()); } }