private void ifMatch(DavRequest request, DavResponse response, DavResource resource)
      throws DavException, IOException {
    EntityTag[] requestEtags = request.getIfMatch();
    if (requestEtags.length == 0) return;

    EntityTag resourceEtag = etag(resource);
    if (resourceEtag == null) return;

    if (EntityTag.matchesAny(resourceEtag, requestEtags)) return;

    if (resourceEtag != null) response.setHeader("ETag", resourceEtag.toString());

    throw new PreconditionFailedException("If-Match disallows conditional request");
  }
  private void ifNoneMatch(DavRequest request, DavResponse response, DavResource resource)
      throws DavException, IOException {
    EntityTag[] requestEtags = request.getIfNoneMatch();
    if (requestEtags.length == 0) return;

    EntityTag resourceEtag = etag(resource);
    if (resourceEtag == null) return;

    if (!EntityTag.matchesAny(resourceEtag, requestEtags)) return;

    if (resourceEtag != null) response.addHeader("ETag", resourceEtag.toString());

    if (deservesNotModified(request)) throw new NotModifiedException();
    else throw new PreconditionFailedException("If-None-Match disallows conditional request");
  }