001     /*
002     * $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons-sandbox//contract/src/java/org/apache/commons/contract/constraints/TreeConstraints.java,v 1.1 2004/10/08 09:36:19 dflorey Exp $
003     * $Revision: 155440 $
004     * $Date: 2005-02-26 13:18:56 +0000 (Sat, 26 Feb 2005) $
005     *
006     * ====================================================================
007     *
008     * Copyright 2004 The Apache Software Foundation 
009     *
010     * Licensed under the Apache License, Version 2.0 (the "License");
011     * you may not use this file except in compliance with the License.
012     * You may obtain a copy of the License at
013     *
014     *     http://www.apache.org/licenses/LICENSE-2.0
015     *
016     * Unless required by applicable law or agreed to in writing, software
017     * distributed under the License is distributed on an "AS IS" BASIS,
018     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
019     * See the License for the specific language governing permissions and
020     * limitations under the License.
021     *
022     */
023    
024    package org.apache.commons.contract.constraints;
025    
026    import org.apache.commons.contract.Context;
027    import org.apache.commons.i18n.bundles.TextBundle;
028    
029    /**
030     * The TreeValueDescriptor class
031     * 
032     */
033    public class TreeConstraints implements Constraints {
034            private Constraints entryConstraints;
035        private Constraints arrayConstraints;
036    
037        public TreeConstraints() {
038            this.entryConstraints = null;
039            arrayConstraints = new ArrayConstraints(this);
040        }
041    
042        public TreeConstraints(Constraints entryValueDescriptor) {
043            this.entryConstraints = entryValueDescriptor;
044            arrayConstraints = new ArrayConstraints(this);
045        }
046    
047        public Object cast(Object value, Context context) throws CastException {
048            try {
049                return arrayConstraints.cast(value, context);
050            } catch ( CastException exception ) {
051                return entryConstraints.cast(value,  context);
052            }
053        }
054    
055        public void validate(Object value, Context context) throws ValidationException {
056            if ( value instanceof Object[]) {
057                arrayConstraints.validate(value, context);
058            } else {
059                entryConstraints.validate(value,  context);
060            }
061        }
062        
063        public TextBundle verboseConstraints() {
064            return new TextBundle("booleansOnly");
065        }
066    }