/** * Recursively add constraints and their parents. * @param sortedConst the array to fill. * @param fieldConst the constraint to investigate. */ private void insertSingleFieldConstraint( SingleFieldConstraint fieldConst, List<FieldConstraint> sortedConst ) { if ( fieldConst.getParent() instanceof SingleFieldConstraint ) { insertSingleFieldConstraint( (SingleFieldConstraint) fieldConst.getParent(), sortedConst ); } sortedConst.add( fieldConst ); }
public void removeConstraint( final int idx ) { //If the constraint being is a parent of another correct the other constraint's parent accordingly FieldConstraint constraintToRemove = this.constraints[ idx ]; if ( constraintToRemove instanceof SingleFieldConstraint ) { final SingleFieldConstraint sfc = (SingleFieldConstraint) constraintToRemove; FieldConstraint parent = sfc.getParent(); for ( FieldConstraint child : this.constraints ) { if ( child instanceof SingleFieldConstraint ) { SingleFieldConstraint sfcChild = (SingleFieldConstraint) child; if ( sfcChild.getParent() == constraintToRemove ) { sfcChild.setParent( parent ); break; } } } } final FieldConstraint[] newList = new FieldConstraint[ this.constraints.length - 1 ]; int newIdx = 0; for ( int i = 0; i < this.constraints.length; i++ ) { if ( i != idx ) { newList[ newIdx ] = this.constraints[ i ]; newIdx++; } } this.constraints = newList; }
/** * Sort the rule constraints such that parent rules are inserted directly * before their child rules. * @param constraints the list of inheriting constraints to sort. * @return a sorted list of constraints ready for display. */ private List<FieldConstraint> sortConstraints( FieldConstraint[] constraints ) { List<FieldConstraint> sortedConst = new ArrayList<FieldConstraint>( constraints.length ); for ( int i = 0; i < constraints.length; i++ ) { FieldConstraint current = constraints[ i ]; if ( current instanceof SingleFieldConstraint ) { SingleFieldConstraint single = (SingleFieldConstraint) current; int index = sortedConst.indexOf( single.getParent() ); if ( single.getParent() == null ) { sortedConst.add( single ); } else if ( index >= 0 ) { sortedConst.add( index + 1, single ); } else { insertSingleFieldConstraint( single, sortedConst ); } } else { sortedConst.add( current ); } } return sortedConst; }
if ( current instanceof SingleFieldConstraint ) { SingleFieldConstraint single = (SingleFieldConstraint) current; FieldConstraint parent = single.getParent();
|| constr.getConstraintValueType() == BaseSingleFieldConstraint.TYPE_EXPR_BUILDER_VALUE || constr instanceof SingleFieldConstraintEBLeftSide ) { SingleFieldConstraint parent = (SingleFieldConstraint) constr.getParent(); StringBuilder parentBuf = new StringBuilder(); while ( parent != null ) { parentBuf.insert( 0, fieldName + "." ); parent = (SingleFieldConstraint) parent.getParent();