001
002 /*
003 * Copyright (C) 2011 Archie L. Cobbs. All rights reserved.
004 *
005 * $Id: Hostname.java 2 2011-02-05 21:51:43Z archie.cobbs $
006 */
007
008 package org.dellroad.stuff.validation;
009
010 import java.lang.annotation.Documented;
011 import java.lang.annotation.ElementType;
012 import java.lang.annotation.Retention;
013 import java.lang.annotation.RetentionPolicy;
014 import java.lang.annotation.Target;
015
016 import javax.validation.Constraint;
017 import javax.validation.Payload;
018 import javax.validation.ReportAsSingleViolation;
019 import javax.validation.constraints.Pattern;
020
021 /**
022 * Validation constraint requiring a {@link String} to be a valid DNS hostname (or hostname component).
023 */
024 @Documented
025 @Constraint(validatedBy = {})
026 @Target({ ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE })
027 @Retention(RetentionPolicy.RUNTIME)
028 @Pattern(regexp = "^(([\\p{Alnum}]([-\\p{Alnum}]*[\\p{Alnum}])?)\\.)*([\\p{Alpha}]([-\\p{Alnum}]*[\\p{Alnum}])?)$")
029 @ReportAsSingleViolation
030 public @interface Hostname {
031
032 String message() default "Invalid hostname or hostname component";
033
034 Class<?>[] groups() default {};
035
036 Class<? extends Payload>[] payload() default {};
037 }
038