001    /*
002     * Copyright 2002-2004 the original author or authors.
003     *
004     * Licensed under the Apache License, Version 2.0 (the "License"); you may not
005     * use this file except in compliance with the License. You may obtain a copy of
006     * the License at
007     *
008     * http://www.apache.org/licenses/LICENSE-2.0
009     *
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
012     * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
013     * License for the specific language governing permissions and limitations under
014     * the License.
015     */
016    package org.springframework.binding.value.support;
017    
018    import org.springframework.core.style.ToStringCreator;
019    
020    /**
021     * A simple value model that contains a single value. Notifies listeners when
022     * the contained value changes.
023     *
024     * @author Keith Donald
025     * @author Karsten Lentzsch
026     */
027    public class ValueHolder extends AbstractValueModel {
028    
029            private Object value;
030    
031            /**
032             * Constructs a <code>ValueHolder</code> with <code>null</code> as
033             * initial value.
034             */
035            public ValueHolder() {
036                    this(null);
037            }
038    
039            /**
040             * Constructs a <code>ValueHolder</code> with the given initial value.
041             *
042             * @param value the initial value
043             */
044            public ValueHolder(Object value) {
045                    this.value = value;
046            }
047    
048            public Object getValue() {
049                    return value;
050            }
051    
052            public void setValue(Object value) {
053                    if (hasValueChanged(this.value, value)) {
054                            Object oldValue = this.value;
055                            if (logger.isDebugEnabled()) {
056                                    logger.debug("Setting held value from '" + oldValue + "' to '" + value + "'");
057                            }
058                            this.value = value;
059                            fireValueChange(oldValue, this.value);
060                    }
061            }
062    
063            public String toString() {
064                    return new ToStringCreator(this).append("value", getValue()).toString();
065            }
066    }