/**
   * Retrives the allowed technologies per endpoint
   *
   * @return map of string and string list
   */
  public static Map<String, List<String>> getAllowedTechnologiesPerEndpoint() {
    Map<String, List<String>> measToAllowedTechs = new HashMap<String, List<String>>();

    for (MappingObject mo : getMappings()) {
      if (!measToAllowedTechs.containsKey(mo.getMeasurementEndpointType())) {
        measToAllowedTechs.put(mo.getMeasurementEndpointType(), new ArrayList<String>());
      }
      measToAllowedTechs.get(mo.getMeasurementEndpointType()).add(mo.getTechnologyType());
    }

    return measToAllowedTechs;
  }
 public static MappingObject getMappingObjectForMeasurementAndTechnology(
     String measurementEndpoint, String techType) {
   measurementEndpoint = getTrimmedName(measurementEndpoint);
   techType = getTrimmedName(techType);
   for (MappingObject mappingObject : mappings) {
     if (mappingObject.getMeasurementEndpointType().equals(measurementEndpoint)
         && mappingObject.getTechnologyType().equals(techType)) {
       return mappingObject;
     }
   }
   return null;
 }
  /**
   * Select the TableReferenceObject which is required for a given tableType
   *
   * @param tableType - e.g. study sample or investigation
   * @return TableReferenceObject if one exists, null otherwise.
   */
  public static TableReferenceObject selectTROForUserSelection(String tableType) {
    for (MappingObject mo : mappings) {

      if (mo.getTableType().equals(tableType)) {
        for (TableReferenceObject tro : assayDefinitions) {
          if (tro.getTableName().equalsIgnoreCase(mo.getAssayName())) {
            return new TableReferenceObject(tro.getTableFields());
          }
        }
      }
    }

    return null;
  }
 public static TableReferenceObject searchMappingsForMatch(
     String measurementEndpoint, String technologyType) {
   for (MappingObject mo : getMappings()) {
     if (mo.getMeasurementEndpointType().equalsIgnoreCase(measurementEndpoint)
         && mo.getTechnologyType().equalsIgnoreCase(technologyType)) {
       for (TableReferenceObject tro : assayDefinitions) {
         if (tro.getTableName().equalsIgnoreCase(mo.getAssayName())) {
           return tro;
         }
       }
     }
   }
   return null;
 }
  /**
   * Retrieves technology types
   *
   * @return array of strings
   */
  public static String[] getTechnologyTypes() {
    List<MappingObject> assayToTypeMapping = getMappings();
    Set<String> techTypeSet = new HashSet<String>();

    for (MappingObject mo : assayToTypeMapping) {
      if (!mo.getTechnologyType().equals("n/a") && !mo.getTechnologyType().equals("")) {
        techTypeSet.add(mo.getTechnologyType());
      }
    }

    List<String> tempTechTypes = new ArrayList<String>();
    tempTechTypes.addAll(techTypeSet);

    Collections.sort(tempTechTypes);

    tempTechTypes.add(0, AutoFilterComboCellEditor.BLANK_VALUE);

    return tempTechTypes.toArray(new String[tempTechTypes.size()]);
  }
  /**
   * Retrieves the measurement endpoints
   *
   * @return array of strings with measurement endpoints
   */
  public static String[] getMeasurementEndpoints() {
    List<MappingObject> assayToTypeMapping = getMappings();
    Set<String> measTypeSet = new HashSet<String>();

    for (MappingObject mo : assayToTypeMapping) {
      if (!mo.getTechnologyType().equals("n/a")
          && !mo.getMeasurementEndpointType().equalsIgnoreCase("[sample]")
          && !mo.getMeasurementEndpointType().equalsIgnoreCase("[investigation]")) {
        measTypeSet.add(mo.getMeasurementEndpointType());
      }
    }

    List<String> tempMeasTypes = new ArrayList<String>();
    tempMeasTypes.addAll(measTypeSet);

    Collections.sort(tempMeasTypes);

    return tempMeasTypes.toArray(new String[tempMeasTypes.size()]);
  }