public ArrayList<String> loadPrintJobSelection(String name) {
   ArrayList<String> list = new ArrayList();
   PrintJobSelection job;
   job = db.getPrintJobSelection(name);
   list.add(job.getName());
   list.add(job.getPrinterConfiguration());
   MasterSubsectionPane pane = MainWindow.printJobPanel.getMasterSubsectionPane();
   pane.removeAllSubsections();
   for (SubsetSelection subset : job.getSubsetConfigurationList()) {
     pane.addNewSubsectionPanel(new SubsectionPanel(subset));
   }
   for (ExtruderMaterialSelection extruder : job.getMaterials()) {
     PrintJobPanel.extruderMaterialArrayListForPrintJob.add(extruder.getMaterial());
   }
   return list;
 }
  public Boolean savePrintJobConfiguration(
      String name,
      String printerName,
      ArrayList<SubsectionPanel> panels,
      JList extruderMaterialsMapList)
      throws BadFieldException {
    PrintJobSelection job = new PrintJobSelection();
    PrinterConfiguration printer = db.getPrinterConfiguration(printerName);
    job.setName(name);
    job.setPrinterConfiguration(printerName);
    if (printer.getExtruderList().size()
        < PrintJobPanel.extruderMaterialArrayListForPrintJob.size())
      throw new BadFieldException("You can not assign more Materials than you have extruders.");
    ArrayList<ExtruderMaterialSelection> extruderMaterialSelection = new ArrayList<>();
    for (int i = 0; i < PrintJobPanel.extruderMaterialArrayListForPrintJob.size(); i++) {
      extruderMaterialSelection.add(
          new ExtruderMaterialSelection(
              printer.getExtruderList().get(i).getName(),
              PrintJobPanel.extruderMaterialArrayListForPrintJob.get(i)));
    }
    job.setMaterials(extruderMaterialSelection);

    job.setSubsetConfigurationList(new ArrayList<SubsetSelection>());
    for (int i = 0; i < panels.size(); i++) {

      SubsetSelection subset = new SubsetSelection();

      if (panels.get(i).getFileList().size() != panels.get(i).getExtruderList().size()) {
        throw new BadFieldException("All files must have a material associated with it.");
      }

      subset.setFileConfigurations(new ArrayList<FileSelection>());

      for (int j = 0; j < panels.get(i).getFileList().size(); j++) {
        String extruderName = panels.get(i).getExtruderList().get(j);
        int extruderNum = Integer.parseInt(extruderName.substring(0, 2));
        String materialName =
            PrintJobPanel.extruderMaterialArrayListForPrintJob.get(j).substring(3);
        String fileName = panels.get(i).getFileList().get(j);

        FileSelection fileSelection = new FileSelection(extruderName, materialName, fileName);
        fileSelection.setExtruderNum(extruderNum);

        /*
        for(int k = 0; k < PrintJobPanel.extruderMaterialArrayListForPrintJob.size(); k++) {
            if(PrintJobPanel.extruderMaterialArrayListForPrintJob.get(k).equals(extruderName)) {
                fileSelection.setExtruderNum(k);
            }
        }
        */

        subset.getFileConfigurations().add(fileSelection);

        subset.setPrintConfiguration(panels.get(i).getPrint());
      }
      try {
        d = Double.valueOf(panels.get(i).getStartZ());
        if (d < 0)
          throw new BadFieldException(
              "Subset start must be a double precision value greater than or equal to 0.");
        subset.setBottomZ(d);
      } catch (NumberFormatException e) {
        throw new BadFieldException(
            "Subset start must be a double precision value greater than or equal to 0.");
      }

      try {
        d = Double.valueOf(panels.get(i).getFinishZ());
        if (d < 0)
          throw new BadFieldException(
              "Subset finish must be a double precision value greater than or equal to 0.");
        subset.setTopZ(d);
      } catch (NumberFormatException e) {
        throw new BadFieldException(
            "Subset finish must be a double precision value greater than or equal to 0.");
      }
      job.getSubsetConfigurationList().add(subset);
    }
    return db.savePrintJobSelection(job);
  }