diff options
author | Benjamin, Max (mb388a) <mb388a@us.att.com> | 2018-03-21 14:16:56 -0400 |
---|---|---|
committer | Benjamin, Max (mb388a) <mb388a@us.att.com> | 2018-03-21 14:18:16 -0400 |
commit | db675a54e8e7bb3553e059d237774b4b737488f1 (patch) | |
tree | c2eaec34581f45ee16cb15ea3a208a61348b6fc0 /common/src/main/java/org/openecomp/mso/openpojo/rules/HasAnnotationMatcher.java | |
parent | 558a73181640d0d19f7f05cab6e0b8568574b504 (diff) |
added custom validators for use with openpojo
Change-Id: I7c9fdeb6bccddb1b7ec6bf845351731c3043aafa
Issue-ID: SO-510
Signed-off-by: Benjamin, Max (mb388a) <mb388a@us.att.com>
Diffstat (limited to 'common/src/main/java/org/openecomp/mso/openpojo/rules/HasAnnotationMatcher.java')
-rw-r--r-- | common/src/main/java/org/openecomp/mso/openpojo/rules/HasAnnotationMatcher.java | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/common/src/main/java/org/openecomp/mso/openpojo/rules/HasAnnotationMatcher.java b/common/src/main/java/org/openecomp/mso/openpojo/rules/HasAnnotationMatcher.java new file mode 100644 index 0000000000..fdfb9695e7 --- /dev/null +++ b/common/src/main/java/org/openecomp/mso/openpojo/rules/HasAnnotationMatcher.java @@ -0,0 +1,69 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.mso.openpojo.rules; + +import static org.hamcrest.CoreMatchers.anything; + +import java.lang.annotation.Annotation; +import java.lang.reflect.AnnotatedElement; + +import org.hamcrest.Description; +import org.hamcrest.Matcher; +import org.hamcrest.TypeSafeDiagnosingMatcher; + +public class HasAnnotationMatcher<T extends Annotation> extends TypeSafeDiagnosingMatcher<AnnotatedElement> { + private final Class<T> annotationType; + private final Matcher<? super T> annotationMatcher; + + public HasAnnotationMatcher(final Class<T> annotationType, final Matcher<? super T> annotationMatcher) { + this.annotationType = annotationType; + this.annotationMatcher = annotationMatcher; + } + + @Override + protected boolean matchesSafely(final AnnotatedElement item, final Description mismatchDescription) { + final T annotation = item.getAnnotation(this.annotationType); + if (annotation == null) { + mismatchDescription.appendText("does not have annotation ").appendText(this.annotationType.getName()); + return false; + } + + if (!this.annotationMatcher.matches(annotation)) { + this.annotationMatcher.describeMismatch(annotation, mismatchDescription); + return false; + } + + return true; + } + + @Override + public void describeTo(final Description description) { + // Intentionally left blank. + } + + public static Matcher<AnnotatedElement> hasAnnotation(final Class<? extends Annotation> annotationType) { + return hasAnnotation(annotationType, anything("")); + } + + public static <T extends Annotation> Matcher<AnnotatedElement> hasAnnotation(final Class<T> annotationType, final Matcher<? super T> annotationMatcher) { + return new HasAnnotationMatcher<T>(annotationType, annotationMatcher); + } +} |