/*
* Copyright (c) 2011-2014 Fernando Petrola
*
* 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.dragome.model.pectin;
import com.dragome.guia.components.AbstractVisualComponent;
import com.dragome.model.interfaces.HandlerRegistration;
import com.dragome.model.interfaces.HasRenderer;
import com.dragome.model.interfaces.HasValue;
import com.dragome.model.interfaces.Renderer;
import com.dragome.model.interfaces.ValueChangeEvent;
import com.dragome.model.interfaces.ValueChangeHandler;
public class ComponentWithValueAndRendererImpl<T> extends AbstractVisualComponent implements HasValue<T>, HasRenderer<T>
{
private T value;
private Renderer<T> renderer;
public ComponentWithValueAndRendererImpl()
{
}
public ComponentWithValueAndRendererImpl(String name)
{
super(name);
}
public ComponentWithValueAndRendererImpl(String aName, Renderer<T> renderer)
{
super(aName);
this.renderer= renderer;
}
public T getValue()
{
return value;
}
public void setValue(T value)
{
setValue(value, true);
}
public void setValue(T value, boolean fireEvents)
{
boolean changed= this.value != null ? !this.value.equals(value) : value != null;
this.value= value;
if (fireEvents && changed)
fireValueChange(value);
}
public void fireValueChange(T value)
{
if (hasListener(ValueChangeHandler.class))
getListener(ValueChangeHandler.class).onValueChange(new ValueChangeEvent<T>(value));
}
public HandlerRegistration addValueChangeHandler(ValueChangeHandler<T> handler)
{
addListener(ValueChangeHandler.class, handler);
return new DummyHandlerRegistration<T>();
}
public Renderer<T> getRenderer()
{
return renderer;
}
public void setRenderer(Renderer<T> renderer)
{
this.renderer= renderer;
}
}