private static Set<Link> getLinks(ArrayList<String> linkList, Entry entry) {
    Set<Link> existingLinks = entry.getLinks();
    Set<Link> links = new HashSet<>();

    if (existingLinks == null) existingLinks = new HashSet<>();

    if (linkList == null) return existingLinks;

    for (int i = 0; i < linkList.size(); i++) {
      String currentItem = linkList.get(i);
      Link link;

      if (existingLinks.size() > i) {
        link = (Link) existingLinks.toArray()[i];
      } else {
        link = new Link();
        existingLinks.add(link);
      }
      link.setLink(currentItem);
      link.setEntry(entry);
      links.add(link);
    }

    return links;
  }
  /**
   * Updates the entry based on the field that is specified. Mainly created for use by the bulk
   * import auto update
   *
   * @param entry entry to be updated
   * @param plasmid should be set if updating strain with plasmid
   * @param value value to be set
   * @param field to set
   * @return updated entry array containing both entry and plasmid. if plasmid is null only entry is
   *     returned
   */
  public static Entry[] infoToEntryForField(
      Entry entry, Entry plasmid, String value, EntryField field) {
    switch (field) {
      case PI:
        {
          entry.setPrincipalInvestigator(value);
          if (plasmid != null) plasmid.setPrincipalInvestigator(value);
          break;
        }

      case PI_EMAIL:
        {
          entry.setPrincipalInvestigatorEmail(value);
          break;
        }

      case FUNDING_SOURCE:
        {
          entry.setFundingSource(value);
          if (plasmid != null) plasmid.setFundingSource(value);
          break;
        }

      case IP:
        entry.setIntellectualProperty(value);
        if (plasmid != null) plasmid.setIntellectualProperty(value);
        break;

      case BIO_SAFETY_LEVEL:
        Integer level = BioSafetyOption.intValue(value);
        if (level == null) {
          if (value.contains("1")) level = 1;
          else if (value.contains("2")) level = 2;
          else break;
        }
        entry.setBioSafetyLevel(level);
        if (plasmid != null) {
          plasmid.setBioSafetyLevel(level);
        }
        break;

      case NAME:
        entry.setName(value);
        break;

      case ALIAS:
        entry.setAlias(value);
        break;

      case KEYWORDS:
        entry.setKeywords(value);
        break;

      case SUMMARY:
        entry.setShortDescription(value);
        break;

      case NOTES:
        entry.setLongDescription(value);
        break;

      case REFERENCES:
        entry.setReferences(value);
        break;

      case LINKS:
        HashSet<Link> links = new HashSet<>();
        Link link = new Link();
        link.setLink(value);
        link.setEntry(entry);
        links.add(link);
        entry.setLinks(links);
        break;

      case STATUS:
        entry.setStatus(value);
        if (plasmid != null) plasmid.setStatus(value);
        break;

      case SELECTION_MARKERS:
        HashSet<SelectionMarker> markers = new HashSet<>();
        SelectionMarker marker = new SelectionMarker(value, entry);
        markers.add(marker);
        entry.setSelectionMarkers(markers);
        break;

      case PARENTAL_STRAIN:
      case GENOTYPE_OR_PHENOTYPE:
      case PLASMIDS:
        entry = infoToStrainForField(entry, value, field);
        break;

      case BACKBONE:
      case ORIGIN_OF_REPLICATION:
      case CIRCULAR:
      case PROMOTERS:
      case REPLICATES_IN:
        entry = infoToPlasmidForField(entry, value, field);
        break;

      case HOMOZYGOSITY:
      case ECOTYPE:
      case HARVEST_DATE:
      case GENERATION:
      case SENT_TO_ABRC:
      case PLANT_TYPE:
      case PARENTS:
        entry = infoToSeedForField(entry, value, field);
        break;
      default:
        break;
    }
    if (plasmid == null) return new Entry[] {entry};

    return new Entry[] {entry, plasmid};
  }