예제 #1
0
 /**
  * Helper method that can be used to dynamically figure out enumeration type of given {@link
  * EnumSet}, without having access to its declaration. Code is needed to work around design flaw
  * in JDK.
  *
  * @since 1.5
  */
 public static Class<? extends Enum<?>> findEnumType(EnumSet<?> s) {
   // First things first: if not empty, easy to determine
   if (!s.isEmpty()) {
     return findEnumType(s.iterator().next());
   }
   // Otherwise need to locate using an internal field
   return EnumTypeLocator.instance.enumTypeFor(s);
 }
예제 #2
0
  /**
   * the actual constructor. Private access only
   *
   * @param source source
   * @param contig the contig
   * @param start the start base (one based)
   * @param stop the stop reference base (one based)
   * @param alleles alleles
   * @param genotypes genotypes map
   * @param log10PError qual
   * @param filters filters: use null for unfiltered and empty set for passes filters
   * @param attributes attributes
   * @param referenceBaseForIndel padded reference base
   * @param validationToPerform set of validation steps to take
   */
  protected VariantContext(
      String source,
      String ID,
      String contig,
      long start,
      long stop,
      Collection<Allele> alleles,
      GenotypesContext genotypes,
      double log10PError,
      Set<String> filters,
      Map<String, Object> attributes,
      Byte referenceBaseForIndel,
      EnumSet<Validation> validationToPerform) {
    if (contig == null) {
      throw new IllegalArgumentException("Contig cannot be null");
    }
    this.contig = contig;
    this.start = start;
    this.stop = stop;

    // intern for efficiency.  equals calls will generate NPE if ID is inappropriately passed in as
    // null
    if (ID == null || ID.equals(""))
      throw new IllegalArgumentException("ID field cannot be the null or the empty string");
    this.ID = ID.equals(VCFConstants.EMPTY_ID_FIELD) ? VCFConstants.EMPTY_ID_FIELD : ID;

    this.commonInfo = new CommonInfo(source, log10PError, filters, attributes);
    REFERENCE_BASE_FOR_INDEL = referenceBaseForIndel;

    // todo -- remove me when this check is no longer necessary
    if (this.commonInfo.hasAttribute(ID_KEY))
      throw new IllegalArgumentException(
          "Trying to create a VariantContext with a ID key.  Please use provided constructor argument ID");

    if (alleles == null) {
      throw new IllegalArgumentException("Alleles cannot be null");
    }

    // we need to make this a LinkedHashSet in case the user prefers a given ordering of alleles
    this.alleles = makeAlleles(alleles);

    if (genotypes == null || genotypes == NO_GENOTYPES) {
      this.genotypes = NO_GENOTYPES;
    } else {
      this.genotypes = genotypes.immutable();
    }

    // cache the REF and ALT alleles
    int nAlleles = alleles.size();
    for (Allele a : alleles) {
      if (a.isReference()) {
        REF = a;
      } else if (nAlleles == 2) { // only cache ALT when biallelic
        ALT = a;
      }
    }

    if (!validationToPerform.isEmpty()) {
      validate(validationToPerform);
    }
  }
예제 #3
0
  /**
   * Checks a function for RESTFful annotations.
   *
   * @return {@code true} if module contains relevant annotations
   * @throws QueryException query exception
   */
  boolean analyze() throws QueryException {
    // parse all annotations
    final EnumSet<HTTPMethod> mth = EnumSet.noneOf(HTTPMethod.class);
    final boolean[] declared = new boolean[function.args.length];
    boolean found = false;
    final int as = function.ann.size();
    for (int a = 0; a < as; a++) {
      final QNm name = function.ann.names[a];
      final Value value = function.ann.values[a];
      final byte[] local = name.local();
      final byte[] uri = name.uri();
      final boolean rexq = eq(uri, QueryText.RESTXQURI);
      if (rexq) {
        if (eq(PATH, local)) {
          // annotation "path"
          if (path != null) error(ANN_TWICE, "%", name.string());
          path = new RestXqPath(toString(value, name));
          for (final String s : path) {
            if (s.trim().startsWith("{")) checkVariable(s, AtomType.AAT, declared);
          }
        } else if (eq(CONSUMES, local)) {
          // annotation "consumes"
          strings(value, name, consumes);
        } else if (eq(PRODUCES, local)) {
          // annotation "produces"
          strings(value, name, produces);
        } else if (eq(QUERY_PARAM, local)) {
          // annotation "query-param"
          queryParams.add(param(value, name, declared));
        } else if (eq(FORM_PARAM, local)) {
          // annotation "form-param"
          formParams.add(param(value, name, declared));
        } else if (eq(HEADER_PARAM, local)) {
          // annotation "header-param"
          headerParams.add(param(value, name, declared));
        } else if (eq(COOKIE_PARAM, local)) {
          // annotation "cookie-param"
          cookieParams.add(param(value, name, declared));
        } else {
          // method annotations
          final HTTPMethod m = HTTPMethod.get(string(local));
          if (m == null) error(ANN_UNKNOWN, "%", name.string());
          if (!value.isEmpty()) {
            // remember post/put variable
            if (requestBody != null) error(ANN_TWICE, "%", name.string());
            if (m != POST && m != PUT) error(METHOD_VALUE, m);
            requestBody = checkVariable(toString(value, name), declared);
          }
          if (mth.contains(m)) error(ANN_TWICE, "%", name.string());
          mth.add(m);
        }
      } else if (eq(uri, QueryText.OUTPUTURI)) {
        // serialization parameters
        final String key = string(local);
        final String val = toString(value, name);
        if (output.get(key) == null) error(UNKNOWN_SER, key);
        output.set(key, val);
      }
      found |= rexq;
    }
    if (!mth.isEmpty()) methods = mth;

    if (found) {
      if (path == null) error(ANN_MISSING, PATH);
      for (int i = 0; i < declared.length; i++)
        if (!declared[i]) error(VAR_UNDEFINED, function.args[i].name.string());
    }
    return found;
  }