/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you 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.
 */
package org.apache.bval.jsr303.groups.redefining;


import org.apache.bval.constraints.ZipCodeCityCoherence;
import org.apache.bval.jsr303.example.ZipCodeCityCarrier;

import javax.validation.GroupSequence;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

/**
 * Example 3.6. Redefining Default group for Address:
 * To redefine Default for a class, place a @GroupSequence annotation on the class ; 
 * this sequence expresses the sequence of groups that does
 * substitute Default for this class.
 */
@GroupSequence({Address.class, Address.HighLevelCoherence.class})
@ZipCodeCityCoherence(groups = Address.HighLevelCoherence.class)
public class Address implements ZipCodeCityCarrier {
    @NotNull @Size(max = 50)
    private String street1;

    @NotNull 
    private String zipCode;

    @NotNull
    @Size(max = 30)
    private String city;

    /**
     * check coherence on the overall object
     * Needs basic checking to be green first
     */
    public interface HighLevelCoherence {}

    public String getStreet1() {
        return street1;
    }

    public void setStreet1(String street1) {
        this.street1 = street1;
    }

    public String getZipCode() {
        return zipCode;
    }

    public void setZipCode(String zipCode) {
        this.zipCode = zipCode;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }
}
@@ -1407,11 +1407,40 @@
 lass
+, Address.ExtraCareful.class 
 %7D)%0A
-
 @Zip
@@ -1553,16 +1553,269 @@
 rrier %7B%0A
+    %0A    /**%0A     * check coherence on the overall object%0A     * Needs basic checking to be green first%0A     */%0A    public interface HighLevelCoherence %7B%7D%0A    %0A    /**%0A     * Extra-careful validation group.%0A     */%0A    public interface ExtraCareful %7B%7D%0A%0A
     @Not
@@ -1818,16 +1818,20 @@
 @NotNull
+%0A   
  @Size(m
@@ -1837,16 +1837,54 @@
 max = 50
+, min = 1, groups = ExtraCareful.class
 )%0A    pr
@@ -1948,17 +1948,21 @@
 ipCode;%0A
+    
 %0A
-
     @Not
@@ -1986,16 +1986,16 @@
 x = 30)%0A
+
     priv
@@ -2016,159 +2016,8 @@
 y;%0A%0A
-    /**%0A     * check coherence on the overall object%0A     * Needs basic checking to be green first%0A     */%0A    public interface HighLevelCoherence %7B%7D%0A%0A
     

add a group to the default group redefinition to apply to a property so we test more