All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.pcsoft.framework.jfex.commons.property.ObjectInstanceEnumerationProperty Maven / Gradle / Ivy

The newest version!
package org.pcsoft.framework.jfex.commons.property;

import javafx.beans.property.Property;
import javafx.beans.property.SimpleObjectProperty;

import java.util.Map;
import java.util.concurrent.atomic.AtomicBoolean;

/**
 * Property to observe a lot of object instances via object properties. The usage is an enumeration for each settable
 * object instance. If enumeration value is set the object instances changed. If the object instances changed the
 * enumeration value changed. This behavior likes a choice in XSD.
* This property is usable in bidirectional mode. */ public class ObjectInstanceEnumerationProperty extends SimpleObjectProperty { public static final class Value { private final Property property; private final T cacheInstance; public Value(Property property, T cacheInstance) { this.property = property; this.cacheInstance = cacheInstance; } public Property getProperty() { return property; } public T getCacheInstance() { return cacheInstance; } } private final Map valueMap; public ObjectInstanceEnumerationProperty(final Map valueMap) { super(); this.valueMap = valueMap; final AtomicBoolean handle = new AtomicBoolean(true); for (final Value value : valueMap.values()) { value.property.addListener((v, o, n) -> { if (!handle.get()) return; //Reset values for all other values handle.set(false); for (final Value valueIn : this.valueMap.values()) { if (value != valueIn) { valueIn.property.setValue(null); } } handle.set(true); //Fire change event fireValueChangedEvent(); }); } } @Override public E get() { return this.getValue(); } @Override public void set(E newValue) { this.setValue(newValue); } @Override public void setValue(E v) { setEnumerationValue(v, valueMap); fireValueChangedEvent(); } @Override public E getValue() { return getEnumerationValue(valueMap); } private static E getEnumerationValue(final Map valueMap) { for (final E key : valueMap.keySet()) { if (valueMap.get(key).property.getValue() != null) return key; } return null; } private static void setEnumerationValue(E newValue, final Map valueMap) { for (final E key : valueMap.keySet()) { final Value value = valueMap.get(key); if (key.equals(newValue)) { value.property.setValue(value.cacheInstance); } else { value.property.setValue(null); } } } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy