public static GridPanel getSamplePairsByAnalysisPanel(
      List<FileGroup> analysisFileGroupList,
      Map<FileGroup, Sample> fileGroupHpa2SampleMap,
      Map<FileGroup, Sample> fileGroupMsp1SampleMap) {
    GridPanel panel = new GridPanel();
    panel.setTitle("Sample Pairs");
    panel.setResizable(true);
    panel.setMaximizable(true);
    panel.setOrder(1);

    GridContent content = new GridContent();
    content.addDataFields(new GridDataField("Analysis", "String")); // dataIndex, datatype
    content.addDataFields(
        new GridDataField("Hpa2/Beta-GT Sample", "String")); // dataIndex, datatype
    content.addDataFields(new GridDataField("Msp1 Sample", "String")); // dataIndex, datatype

    content.addColumn(
        new GridColumn("Analysis", "Analysis", 500, 0)); // header,dataIndex	     width=250; flex=0
    content.addColumn(
        new GridColumn(
            "Hpa2/Beta-GT Sample",
            "Hpa2/Beta-GT Sample",
            250,
            0)); // header,dataIndex width=250; flex=0
    content.addColumn(
        new GridColumn("Msp1 Sample", "Msp1 Sample", 1)); // header,dataIndex width=250; flex=0

    // create rows with  information
    for (FileGroup fileGroup : analysisFileGroupList) {

      if (fileGroupHpa2SampleMap.isEmpty()) {
        logger.debug("fileGroupHpa2SampleMap is empty ");
      }
      List<String> row = new ArrayList<String>();
      row.add(fileGroup.getDescription());
      Sample hpa2Sample = fileGroupHpa2SampleMap.get(fileGroup);
      String hpa2SampleName = "Unexpected Error";
      if (hpa2Sample != null) {
        hpa2SampleName = hpa2Sample.getName();

      } else {
        logger.debug("hpa2Sample is null");
      }
      Sample msp1Sample = fileGroupMsp1SampleMap.get(fileGroup);
      String msp1SampleName = "Standard Reference";
      if (msp1Sample != null && msp1Sample.getId().intValue() > 0) {
        msp1SampleName = msp1Sample.getName();
      }
      logger.debug("hpa2SampleName = " + hpa2SampleName);
      logger.debug("msp1SampleName = " + msp1SampleName);
      row.add(hpa2SampleName);
      row.add(msp1SampleName);
      content.addDataRow(row);
    }

    panel.setContent(content);
    return panel;
  }
 @Override
 public String getTypeOfHelpLibrary(Sample sample) {
   try {
     return (String)
         MetaHelper.getMetaValue(
             HELPTAG_LIB_AREA, RESTRICTION_ENZYME_META_KEY, sample.getSampleMeta());
   } catch (MetadataException e) {
   }
   // not found
   return null;
 }
 @Override
 public String getTypeOfHelpLibraryRequestedForMacromolecule(Sample sample) {
   try {
     return (String)
         MetaHelper.getMetaValue(
             HELPTAG_DNA_AREA, TYPE_OF_HELP_LIBRARY_REQUESTED_META_KEY, sample.getSampleMeta());
   } catch (MetadataException e) {
   }
   // not found
   return null;
 }
  @Override
  public boolean isBetaGTMspI(Sample s) {
    String enzymeString;
    try {
      if (s.getParentId() != null) {
        // if it has a parent sample, which means it's a facility library, use its parent sample to
        // check for library type
        s = sampleService.getSampleById(s.getParentId());
      }
      if (!s.getSampleType().getIName().equalsIgnoreCase("dna")) { // not dna, so must be library
        enzymeString =
            (String)
                MetaHelper.getMetaValue(
                    HELPTAG_LIB_AREA, RESTRICTION_ENZYME_META_KEY, s.getSampleMeta());
      } else { // genomic DNA
        enzymeString =
            (String)
                MetaHelper.getMetaValue(
                    HELPTAG_DNA_AREA, TYPE_OF_HELP_LIBRARY_REQUESTED_META_KEY, s.getSampleMeta());
      }

      if (enzymeString.equals("beta-GT-MspI")) {
        return true;
      }
    } catch (MetadataException e) {
      // not found
      logger.debug(
          "Restriction Enzyme Meta (and libraryToCreate meta) not found for Sample id = "
              + s.getId());
    }
    return false;
  }
  public static GridPanel getLibrariesAndHcountFilesUsedByAnalysisPanel(
      List<FileGroup> analysisFileGroupList,
      Map<FileGroup, List<Sample>> fileGroupLibrariesUsedMap,
      Map<FileGroup, List<FileHandle>> fileGroupHcountFilesUsedMap) {

    GridPanel panel = new GridPanel();
    panel.setTitle("Libraries & Hcount Files Used");
    panel.setResizable(true);
    panel.setMaximizable(true);
    panel.setOrder(1);

    GridContent content = new GridContent();
    content.addDataFields(new GridDataField("Analysis", "String")); // dataIndex, datatype
    content.addDataFields(new GridDataField("Libraries Used", "String")); // dataIndex, datatype
    content.addDataFields(new GridDataField("Hcount Files Used", "String")); // dataIndex, datatype

    content.addColumn(
        new GridColumn("Analysis", "Analysis", 500, 0)); // header,dataIndex	     width=500; flex=0
    content.addColumn(
        new GridColumn(
            "Libraries Used", "Libraries Used", 150, 0)); // header,dataIndex	width=300;      flex=0
    content.addColumn(
        new GridColumn("Hcount Files Used", "Hcount Files Used", 1)); // header,dataIndex flex=1

    // create rows with  information
    for (FileGroup fileGroup : analysisFileGroupList) {

      List<String> row = new ArrayList<String>();
      row.add(fileGroup.getDescription());

      List<Sample> libraries = fileGroupLibrariesUsedMap.get(fileGroup);
      if (libraries.isEmpty()) {
        row.add("Error");
      } else {
        StringBuilder libraryNamesAsStringBuilder = new StringBuilder();
        for (Sample library : libraries) {
          if (libraryNamesAsStringBuilder.length() > 0) {
            libraryNamesAsStringBuilder.append("<br />");
          }
          libraryNamesAsStringBuilder.append(library.getName());
        }
        row.add(new String(libraryNamesAsStringBuilder));
      }

      List<FileHandle> bamFiles = fileGroupHcountFilesUsedMap.get(fileGroup);
      if (bamFiles.isEmpty()) {
        row.add("Error");
      } else {
        StringBuilder fileNamesAsStringBuilder = new StringBuilder();
        for (FileHandle fh : bamFiles) {
          if (fileNamesAsStringBuilder.length() > 0) {
            fileNamesAsStringBuilder.append("<br />");
          }
          fileNamesAsStringBuilder.append(fh.getFileName());
        }
        row.add(new String(fileNamesAsStringBuilder));
      }

      content.addDataRow(row);
    }

    panel.setContent(content);
    return panel;
  }