de.factoryfx.data.attribute.ImmutableValueAttribute Maven / Gradle / Ivy
package de.factoryfx.data.attribute;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.function.Function;
import com.fasterxml.jackson.annotation.JsonValue;
import de.factoryfx.data.Data;
/** base class for Attributes with immutable value(for Changelistener)*/
public abstract class ImmutableValueAttribute> extends Attribute {
// @JsonProperty
protected T value;
private final Class dataType;
public ImmutableValueAttribute(Class dataType) {
super();
this.dataType=dataType;
}
@Override
public boolean internal_match(T value) {
return Objects.equals(this.value, value);
}
@Override
public void internal_fixDuplicateObjects(Map idToDataMap) {
//do nothing
}
@Override
public T get() {
return value;
}
@Override
public void set(T value) {
this.value = value;
if (listeners!=null){
updateListeners(value);
}
}
List> listeners;
protected void updateListeners(T value){
if (listeners==null){
return;
}
for (AttributeChangeListener listener: listeners){
listener.changed(this,value);
}
}
protected boolean listenersEmpty(){
if (listeners==null){
return true;
}
return listeners.isEmpty();
}
//override to change copy e.g mutable value
protected void copyTo(Attribute copyAttribute){
copyAttribute.set(get());
}
@Override
public void internal_copyTo(A copyAttribute, Function dataCopyProvider) {
copyTo(copyAttribute);
}
@Override
public void internal_semanticCopyTo(A copyAttribute) {
copyTo(copyAttribute);
}
@Override
public void internal_addListener(AttributeChangeListener listener) {
if (listeners==null){
listeners=new ArrayList<>();
}
listeners.add(listener);
}
@Override
public void internal_removeListener(AttributeChangeListener listener) {
if (listeners==null){
return;
}
for (AttributeChangeListener listenerItem: new ArrayList<>(listeners)){
if (listenerItem.unwrap()==listener || listenerItem.unwrap()==null){
listeners.remove(listenerItem);
}
}
}
@Override
public String getDisplayText() {
if (value!=null){
return value.toString();
}
return "";
}
@Override
public AttributeTypeInfo internal_getAttributeType() {
return new AttributeTypeInfo(dataType);
}
@JsonValue
protected T getValue() {
return get();
}
@JsonValue
protected void setValue(T value) {
set(value);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy