/*
* Copyright 2000-2016 Vaadin Ltd.
*
* 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 com.vaadin.v7.data.util;
import com.vaadin.data.Binder;
import com.vaadin.data.ValueProvider;
import com.vaadin.server.Setter;
import com.vaadin.v7.data.Property;
/**
* A simple data object containing one typed value. This class is a
* straightforward implementation of the the {@link Property} interface.
*
* @author Vaadin Ltd.
* @since 3.0
*
* @deprecated As of 8.0, replaced by {@link ValueProvider}, {@link Setter}, see {@link Binder}
*/
@Deprecated
@SuppressWarnings("serial")
public class ObjectProperty<T> extends AbstractProperty<T> {
/**
* The value contained by the Property.
*/
private T value;
/**
* Data type of the Property's value.
*/
private final Class<T> type;
/**
* Creates a new instance of ObjectProperty with the given value. The type
* of the property is automatically initialized to be the type of the given
* value.
*
* @param value
* the Initial value of the Property.
*/
@SuppressWarnings("unchecked")
// the cast is safe, because an object of type T has class Class<T>
public ObjectProperty(T value) {
this(value, (Class<T>) value.getClass());
}
/**
* Creates a new instance of ObjectProperty with the given value and type.
*
* Since Vaadin 7, only values of the correct type are accepted, and no
* automatic conversions are performed.
*
* @param value
* the Initial value of the Property.
* @param type
* the type of the value. The value must be assignable to given
* type.
*/
public ObjectProperty(T value, Class<T> type) {
// Set the values
this.type = type;
setValue(value);
}
/**
* Creates a new instance of ObjectProperty with the given value, type and
* read-only mode status.
*
* Since Vaadin 7, only the correct type of values is accepted, see
* {@link #ObjectProperty(Object, Class)}.
*
* @param value
* the Initial value of the property.
* @param type
* the type of the value. <code>value</code> must be assignable
* to this type.
* @param readOnly
* Sets the read-only mode.
*/
public ObjectProperty(T value, Class<T> type, boolean readOnly) {
this(value, type);
setReadOnly(readOnly);
}
/**
* Returns the type of the ObjectProperty. The methods <code>getValue</code>
* and <code>setValue</code> must be compatible with this type: one must be
* able to safely cast the value returned from <code>getValue</code> to the
* given type and pass any variable assignable to this type as an argument
* to <code>setValue</code>.
*
* @return type of the Property
*/
@Override
public final Class<T> getType() {
return type;
}
/**
* Gets the value stored in the Property.
*
* @return the value stored in the Property
*/
@Override
public T getValue() {
return value;
}
/**
* Sets the value of the property.
*
* Note that since Vaadin 7, no conversions are performed and the value must
* be of the correct type.
*
* @param newValue
* the New value of the property.
* @throws <code>Property.ReadOnlyException</code>
* if the object is in read-only mode
*/
@Override
public void setValue(T newValue) throws Property.ReadOnlyException {
// Checks the mode
if (isReadOnly()) {
throw new Property.ReadOnlyException();
}
this.value = newValue;
fireValueChange();
}
}