/*
* Hibernate Validator, declare and validate application constraints
*
* License: Apache License, Version 2.0
* See the license.txt file in the root directory or <http://www.apache.org/licenses/LICENSE-2.0>.
*/
package org.hibernate.validator.ap.testmodel.annotationparameters;
import javax.validation.GroupSequence;
/**
* @author Marko Bekhta
*/
public class InvalidGroupSequenceParameters {
/**
* Case 1: class present in a list of groups
*/
public static class Case1 {
public interface Group1 {
}
public class InvalidGroup1 {
}
public class InvalidGroup2 {
}
@GroupSequence(value = { Group1.class, InvalidGroup1.class })
public class SomeBean {
}
@GroupSequence(value = InvalidGroup2.class)
public class SomeOtherBean {
}
}
/**
* Case 2: primitive present in a list of groups
*/
public static class Case2 {
public interface Group1 {
}
public interface Group2 {
}
@GroupSequence(value = { Group1.class, int.class })
public class SomeBean {
}
@GroupSequence(value = boolean.class)
public class SomeOtherBean {
}
}
/**
* Case 3: Group sequence extending another interface
*/
public static class Case3 {
public interface Group1 {
}
public interface ParentInterface {
}
@GroupSequence(value = Group1.class)
public interface GroupSequence1 extends ParentInterface {
}
}
/**
* Case 4: Example of redefining a group sequence without declaring the class in the group sequence
*/
public static class Case4 {
public interface RentalChecks {
}
public interface CarChecks {
}
public class Car {
}
@GroupSequence({ RentalChecks.class, CarChecks.class })
public class RentalCar extends Car {
}
}
/**
* Case 5: Group sequence cyclic definition - incorrect
*/
public static class Case5 {
@GroupSequence(GroupSequence2.class)
public interface GroupSequence1 {
}
@GroupSequence(GroupSequence1.class)
public interface GroupSequence2 {
}
}
/**
* Case 6: Multiple usage of same interface in the same sequence
*/
public static class Case6 {
public interface Group1 {
}
public interface Group2 {
}
@GroupSequence(value = { Group1.class, Group2.class, Group1.class })
public interface MySequence {
}
}
/**
* Case 7: Deeper cyclic definition - incorrect
*/
public static class Case7 {
public interface Group1 {
}
public interface Group2 {
}
@GroupSequence(value = { Group1.class, GroupSequence2.class })
public interface GroupSequence1 {
}
@GroupSequence(value = GroupSequence3.class)
public interface GroupSequence2 {
}
@GroupSequence(value = { Group2.class, GroupSequence1.class })
public interface GroupSequence3 {
}
}
/**
* Case 8: Cyclic definition due to group inheritance - incorrect
*/
public static class Case8 {
public interface Group1 extends Group2 {
}
public interface Group2 {
}
@GroupSequence(value = { Group1.class, Group2.class })
public interface GroupSequence1 {
}
}
/**
* Case 9: Cyclic definition due to group inheritance and group sequence inheritance - incorrect
*/
public static class Case9 {
public interface Group1 extends Group2 {
}
public interface Group2 {
}
@GroupSequence(value = Group1.class)
public interface GroupSequence1 {
}
@GroupSequence(value = GroupSequence1.class)
public interface GroupSequence2 {
}
@GroupSequence(value = { Group2.class, GroupSequence2.class })
public interface GroupSequence3 {
}
}
}