Bug 1326334

Summary: [GSS](6.4.z) Group sequences don't honor inheritance relationships properly
Product: [JBoss] JBoss Enterprise Application Platform 6 Reporter: Tom Ross <tom.ross>
Component: HibernateAssignee: Gail Badner <gbadner>
Status: CLOSED CURRENTRELEASE QA Contact: Martin Simka <msimka>
Severity: unspecified Docs Contact:
Priority: unspecified    
Version: 6.4.5CC: bmaxwell, gbadner, jbilek, jtruhlar, msimka, rnetuka, smarlow
Target Milestone: CR1   
Target Release: EAP 6.4.9   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: 1326333 Environment:
Last Closed: 2017-01-17 12:56:39 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On: 1326333    
Bug Blocks: 1307264, 1324262    

Description Tom Ross 2016-04-12 12:58:47 UTC
Backport of HV-1057 (https://hibernate.atlassian.net/browse/HV-1057)

Assuming the following
public interface Min {}

public interface Max extends Min {}

@GroupSequence({Max.class, A.class})
public class A {
    @NotNull(groups=Max.class)
    public String foo;

    @NotNull(groups=Min.class)
    public String bar;
}

public class B {
    @NotNull(groups=Max.class)
    public String foo;

    @NotNull(groups=Min.class)
    public String bar;
}
The following code returns as expected
assert validator.validate(new B(), Max.class, B.class).size() == 2
But the following fails
// bar is ignored as Min is not considered when Max is evaluated for default sequence
// so size == 1
assert validator.validate(new A(), Max.class, A.class).size() == 2
Note that the actual test used group sequence provider but that's not relevant I think.

Comment 1 Tom Ross 2016-04-12 12:59:43 UTC
Group sequences may contain groups which are inherited from another group:
public class Try {

    @NotNull(message = "field1", groups = BaseComponent.class)
    public String field1;

    @NotNull(message = "field2", groups = Component.class)
    public String field2;

    @NotNull(message = "field3", groups = OtherComponent.class)
    public String field3 = "";

    public interface BaseComponent {}
    public interface Component extends BaseComponent {}
    public interface OtherComponent {}

    @GroupSequence({ Component.class, OtherComponent.class })
    public interface GlobalCheck {}
}
A validation validator.validate( new Try(), Try.GlobalCheck.class ); should yield the two constraints on field1 and field2 (as both constraints are in the Component group, which extends the BaseComponent group.
The current implementation returns only the constraint on field2, though. The reason being that all three groups which form the sequence are "flattened out", thus loosing the information that Component and BaseComponent need to be considered as one atomic unit here.

Comment 5 Jiří Bílek 2016-06-27 13:22:54 UTC
Verified with EAP 6.4.9.CP.CR2

Comment 6 Petr Penicka 2017-01-17 12:56:39 UTC
Retroactively bulk-closing issues from released EAP 6.4 cummulative patches.