/** * Copyright 2010 JBoss Inc * * 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. */ package org.drools.ide.common.client.modeldriven.brl; /** * This is a field constraint that may span multiple fields. * * @author Michael Neale */ public class CompositeFieldConstraint implements FieldConstraint { /** * Means that any of the children can resolve to be true. */ public static final String COMPOSITE_TYPE_OR = "||"; /** * Means that ALL of the children constraints must resolve to be true. */ public static final String COMPOSITE_TYPE_AND = "&&"; /** * The type of composite that it is. */ public String compositeJunctionType = null; /** * This is the child field constraints of the composite. * They may be single constraints, or composite themselves. * If this composite is it at the "top level" - then * there is no need to look at the compositeType property * (as they are all children that are "anded" together anyway in the fact * pattern that contains it). */ public FieldConstraint[] constraints = null; //Note this is a bit ugly, GWT had some early limitations which required this to kind of work this way. //when generics are available, could probably switch to it, but remember this is persistent stuff //so don't want to break backwards compat (as XStream is used) public void addConstraint(final FieldConstraint constraint) { if ( this.constraints == null ) { this.constraints = new FieldConstraint[1]; this.constraints[0] = constraint; } else { final FieldConstraint[] newList = new FieldConstraint[this.constraints.length + 1]; for ( int i = 0; i < this.constraints.length; i++ ) { newList[i] = this.constraints[i]; } newList[this.constraints.length] = constraint; this.constraints = newList; } } public void removeConstraint(final int idx) { //Unfortunately, this is kinda duplicate code with other methods, //but with typed arrays, and GWT, its not really possible to do anything "better" //at this point in time. 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; } }