public Special addPizzaToSpecial(Special special, PizzaSize size, double price)
     throws PizzaException {
   if ((special == null)
       || !(parentSystem.getPizzaStore().getSpecials().contains(special))
       || (size == null)
       || !(parentSystem.getPizzaStore().getMenu().getPizzaSizes().contains(size))
       || (price < 0)
       || ((Double) price == null)) {
     throw new PizzaException(
         "Incorrect parameter addPizzaToSpecial(<"
             + special.getSpecialName()
             + ">:Special, <"
             + size.getDesc()
             + ">:PizzaSize, <"
             + price
             + ">:double)");
   } else {
     if (special.getSize() == null) {
       size.setPrice(price);
       special.addPizzaToSpecial(size, price);
       return special;
     } else {
       special.removePizzaSizeFromSpecial();
       special.addPizzaToSpecial(size, price);
       return special;
     }
   }
 }
 public Special createSpecialWithPizza(String name, PizzaSize size, double price)
     throws PizzaException {
   Special temp = new Special(name);
   if ((name.trim().equals(""))
       || (name == null)
       || (size == null)
       || !(parentSystem.getPizzaStore().getMenu().getPizzaSizes().contains(size))
       || (price < 0)
       || ((Double) price == null)) {
     throw new PizzaException(
         "Incorrect parameter createSpecialWithPizza(<"
             + name.trim()
             + ">:String, <"
             + size.getDesc()
             + ">:PizzaSize, <"
             + price
             + ">:double)");
   } else {
     // if special exists for size already, set that special's name to the new name.
     if (parentSystem.getPizzaStore().checkSpecialsForPizzaSize(size)) {
       temp = parentSystem.getPizzaStore().findSpecialBySize(size);
       temp.setSpecialName(name);
     } else {
       temp.addPizzaToSpecial(size, price);
       parentSystem.getPizzaStore().getSpecials().add(temp);
     }
   }
   return temp;
 }
  @Override
  public void actionPerformed(ActionEvent actionEvent) {
    String command = actionEvent.getActionCommand();
    System.out.println(command);
    switch (command) {
      case "comboBoxChanged":
        if (((JComboBox) components.get("typeComboBox")).getSelectedItem().equals("Side")
            || ((JComboBox) components.get("typeComboBox")).getSelectedItem().equals("Drink")) {
          components.get("priceContainer").setVisible(true);
          components.get("shortnameContainer").setVisible(false);
        } else if (((JComboBox) components.get("typeComboBox")).getSelectedItem().equals("Size")) {
          components.get("priceContainer").setVisible(true);
          components.get("shortnameContainer").setVisible(true);
        } else {
          components.get("priceContainer").setVisible(false);
          components.get("shortnameContainer").setVisible(true);
        }
        break;
      case "Back":
        manager.activateWindow(manager.MENU_EDIT, manager.MANAGE_MAIN);
        break;
      case "Delete":
        if (item != null) {
          model.getCatalog().deleteItem(item);
        }
        resetView();
        break;
      case "Cancel":
        resetView();
        break;
      case "Save":
        String itemName = ((JTextArea) components.get("itemNameEditText")).getText();
        String shortName = ((JTextArea) components.get("shortNameEditText")).getText();
        String priceString = ((JTextArea) components.get("priceEditText")).getText();
        double price;
        try {
          switch (((JComboBox) components.get("typeComboBox")).getSelectedItem().toString()) {
            case "Topping":
              if (model.getCatalog().getEntireCatalog().contains(item)) {
                ((Topping) item).setFullName(itemName);
                ((Topping) item).setShortName(shortName);
                model.getCatalog().updateItem(((Topping) item).getItemID());
              } else {
                item = new Topping(shortName, itemName);
                model.getCatalog().addItem(item);
              }
              break;
            case "Size":
              price = Double.parseDouble(priceString);
              if (model.getCatalog().getEntireCatalog().contains(item)) {
                ((PizzaSize) item).setFullName(itemName);
                ((PizzaSize) item).setShortName(shortName);
                ((PizzaSize) item).setPrice(price);
                model.getCatalog().updateItem(((PizzaSize) item).getItemID());
              } else {
                item = new PizzaSize(shortName, itemName, price);
                model.getCatalog().addItem(item);
              }
              break;
            case "Sauce":
              if (model.getCatalog().getEntireCatalog().contains(item)) {
                ((Sauce) item).setFullName(itemName);
                ((Sauce) item).setShortName(shortName);
                model.getCatalog().updateItem(((Sauce) item).getItemID());
              } else {
                item = new Sauce(shortName, itemName);
                model.getCatalog().addItem(item);
              }
              break;
            case "Side":
              price = Double.parseDouble(priceString);
              if (model.getCatalog().getEntireCatalog().contains(item)) {
                ((Side) item).setName(itemName);
                ((Side) item).setPrice(price);
                model.getCatalog().updateItem(((Side) item).getItemID());
              } else {
                item = new Side(itemName, price);
                model.getCatalog().addItem(item);
              }
              break;
            case "Drink":
              price = Double.parseDouble(priceString);
              if (model.getCatalog().getEntireCatalog().contains(item)) {
                ((Drink) item).setName(itemName);
                ((Drink) item).setPrice(price);
                model.getCatalog().updateItem(((Drink) item).getItemID());
              } else {
                item = new Drink(itemName, price);
                model.getCatalog().addItem(item);
              }
              break;
          }

          resetView();
        } catch (NumberFormatException e) {
          JOptionPane.showMessageDialog(
              view, "Price must be a number", "Error", JOptionPane.PLAIN_MESSAGE);
        }
        break;
    }
  }