diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/auth/Account.java b/FCLCore/src/main/java/com/tungsten/fclcore/auth/Account.java index 58595ee7..aa33cffd 100644 --- a/FCLCore/src/main/java/com/tungsten/fclcore/auth/Account.java +++ b/FCLCore/src/main/java/com/tungsten/fclcore/auth/Account.java @@ -3,10 +3,10 @@ package com.tungsten.fclcore.auth; import com.tungsten.fclcore.auth.yggdrasil.Texture; import com.tungsten.fclcore.auth.yggdrasil.TextureType; import com.tungsten.fclcore.util.ToStringBuilder; -import com.tungsten.fclcore.util.fakefx.fx.Bindings; -import com.tungsten.fclcore.util.fakefx.fx.InvalidationListener; -import com.tungsten.fclcore.util.fakefx.fx.ObjectBinding; -import com.tungsten.fclcore.util.fakefx.fx.Observable; +import com.tungsten.fclcore.fakefx.Bindings; +import com.tungsten.fclcore.fakefx.InvalidationListener; +import com.tungsten.fclcore.fakefx.ObjectBinding; +import com.tungsten.fclcore.fakefx.Observable; import com.tungsten.fclcore.util.fakefx.ObservableHelper; import java.util.Map; diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/auth/authlibinjector/AuthlibInjectorServer.java b/FCLCore/src/main/java/com/tungsten/fclcore/auth/authlibinjector/AuthlibInjectorServer.java index c9f993b9..9f1cb2c8 100644 --- a/FCLCore/src/main/java/com/tungsten/fclcore/auth/authlibinjector/AuthlibInjectorServer.java +++ b/FCLCore/src/main/java/com/tungsten/fclcore/auth/authlibinjector/AuthlibInjectorServer.java @@ -28,8 +28,8 @@ import com.google.gson.JsonParseException; import com.google.gson.JsonPrimitive; import com.google.gson.annotations.JsonAdapter; import com.tungsten.fclcore.auth.yggdrasil.YggdrasilService; -import com.tungsten.fclcore.util.fakefx.fx.InvalidationListener; -import com.tungsten.fclcore.util.fakefx.fx.Observable; +import com.tungsten.fclcore.fakefx.InvalidationListener; +import com.tungsten.fclcore.fakefx.Observable; import com.tungsten.fclcore.util.fakefx.ObservableHelper; @JsonAdapter(AuthlibInjectorServer.Deserializer.class) diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/auth/microsoft/MicrosoftAccount.java b/FCLCore/src/main/java/com/tungsten/fclcore/auth/microsoft/MicrosoftAccount.java index f81ab398..84e8117d 100644 --- a/FCLCore/src/main/java/com/tungsten/fclcore/auth/microsoft/MicrosoftAccount.java +++ b/FCLCore/src/main/java/com/tungsten/fclcore/auth/microsoft/MicrosoftAccount.java @@ -19,7 +19,7 @@ import com.tungsten.fclcore.auth.yggdrasil.Texture; import com.tungsten.fclcore.auth.yggdrasil.TextureType; import com.tungsten.fclcore.auth.yggdrasil.YggdrasilService; import com.tungsten.fclcore.util.fakefx.BindingMapping; -import com.tungsten.fclcore.util.fakefx.fx.ObjectBinding; +import com.tungsten.fclcore.fakefx.ObjectBinding; public class MicrosoftAccount extends OAuthAccount { diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/auth/offline/OfflineAccount.java b/FCLCore/src/main/java/com/tungsten/fclcore/auth/offline/OfflineAccount.java index 2757b757..c4b6f76e 100644 --- a/FCLCore/src/main/java/com/tungsten/fclcore/auth/offline/OfflineAccount.java +++ b/FCLCore/src/main/java/com/tungsten/fclcore/auth/offline/OfflineAccount.java @@ -26,7 +26,7 @@ import com.tungsten.fclcore.game.Arguments; import com.tungsten.fclcore.game.LaunchOptions; import com.tungsten.fclcore.util.StringUtils; import com.tungsten.fclcore.util.ToStringBuilder; -import com.tungsten.fclcore.util.fakefx.fx.ObjectBinding; +import com.tungsten.fclcore.fakefx.ObjectBinding; import com.tungsten.fclcore.util.gson.UUIDTypeAdapter; public class OfflineAccount extends Account { diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/auth/yggdrasil/YggdrasilAccount.java b/FCLCore/src/main/java/com/tungsten/fclcore/auth/yggdrasil/YggdrasilAccount.java index 2b1bb9f3..eb9b4838 100644 --- a/FCLCore/src/main/java/com/tungsten/fclcore/auth/yggdrasil/YggdrasilAccount.java +++ b/FCLCore/src/main/java/com/tungsten/fclcore/auth/yggdrasil/YggdrasilAccount.java @@ -17,7 +17,7 @@ import com.tungsten.fclcore.auth.CredentialExpiredException; import com.tungsten.fclcore.auth.NoCharacterException; import com.tungsten.fclcore.auth.ServerResponseMalformedException; import com.tungsten.fclcore.util.fakefx.BindingMapping; -import com.tungsten.fclcore.util.fakefx.fx.ObjectBinding; +import com.tungsten.fclcore.fakefx.ObjectBinding; import com.tungsten.fclcore.util.gson.UUIDTypeAdapter; public class YggdrasilAccount extends ClassicAccount { diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/util/fakefx/fx/Binding.java b/FCLCore/src/main/java/com/tungsten/fclcore/fakefx/Binding.java similarity index 73% rename from FCLCore/src/main/java/com/tungsten/fclcore/util/fakefx/fx/Binding.java rename to FCLCore/src/main/java/com/tungsten/fclcore/fakefx/Binding.java index 8a9ec6c7..9892ddc1 100644 --- a/FCLCore/src/main/java/com/tungsten/fclcore/util/fakefx/fx/Binding.java +++ b/FCLCore/src/main/java/com/tungsten/fclcore/fakefx/Binding.java @@ -1,4 +1,4 @@ -package com.tungsten.fclcore.util.fakefx.fx; +package com.tungsten.fclcore.fakefx; public interface Binding extends ObservableValue { diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/util/fakefx/fx/BindingHelperObserver.java b/FCLCore/src/main/java/com/tungsten/fclcore/fakefx/BindingHelperObserver.java similarity index 94% rename from FCLCore/src/main/java/com/tungsten/fclcore/util/fakefx/fx/BindingHelperObserver.java rename to FCLCore/src/main/java/com/tungsten/fclcore/fakefx/BindingHelperObserver.java index 5f19d5d9..9bfa7c2c 100644 --- a/FCLCore/src/main/java/com/tungsten/fclcore/util/fakefx/fx/BindingHelperObserver.java +++ b/FCLCore/src/main/java/com/tungsten/fclcore/fakefx/BindingHelperObserver.java @@ -1,4 +1,4 @@ -package com.tungsten.fclcore.util.fakefx.fx; +package com.tungsten.fclcore.fakefx; import java.lang.ref.WeakReference; diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/util/fakefx/fx/Bindings.java b/FCLCore/src/main/java/com/tungsten/fclcore/fakefx/Bindings.java similarity index 94% rename from FCLCore/src/main/java/com/tungsten/fclcore/util/fakefx/fx/Bindings.java rename to FCLCore/src/main/java/com/tungsten/fclcore/fakefx/Bindings.java index 61b836fc..77ecc2ab 100644 --- a/FCLCore/src/main/java/com/tungsten/fclcore/util/fakefx/fx/Bindings.java +++ b/FCLCore/src/main/java/com/tungsten/fclcore/fakefx/Bindings.java @@ -1,4 +1,4 @@ -package com.tungsten.fclcore.util.fakefx.fx; +package com.tungsten.fclcore.fakefx; import java.util.concurrent.Callable; diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/fakefx/BooleanBinding.java b/FCLCore/src/main/java/com/tungsten/fclcore/fakefx/BooleanBinding.java new file mode 100644 index 00000000..f140af84 --- /dev/null +++ b/FCLCore/src/main/java/com/tungsten/fclcore/fakefx/BooleanBinding.java @@ -0,0 +1,92 @@ +package com.tungsten.fclcore.fakefx; + +public abstract class BooleanBinding extends BooleanExpression implements + Binding { + + public BooleanBinding() { + } + + private boolean value; + private boolean valid = false; + private BindingHelperObserver observer; + private ExpressionHelper helper = null; + + @Override + public void addListener(InvalidationListener listener) { + helper = ExpressionHelper.addListener(helper, this, listener); + } + + @Override + public void removeListener(InvalidationListener listener) { + helper = ExpressionHelper.removeListener(helper, listener); + } + + @Override + public void addListener(ChangeListener listener) { + helper = ExpressionHelper.addListener(helper, this, listener); + } + + @Override + public void removeListener(ChangeListener listener) { + helper = ExpressionHelper.removeListener(helper, listener); + } + + protected final void bind(Observable... dependencies) { + if ((dependencies != null) && (dependencies.length > 0)) { + if (observer == null) { + observer = new BindingHelperObserver(this); + } + for (final Observable dep : dependencies) { + dep.addListener(observer); + } + } + } + + protected final void unbind(Observable... dependencies) { + if (observer != null) { + for (final Observable dep : dependencies) { + dep.removeListener(observer); + } + observer = null; + } + } + + @Override + public void dispose() { + } + + @Override + public final boolean get() { + if (!valid) { + value = computeValue(); + valid = true; + } + return value; + } + + protected void onInvalidating() { + } + + @Override + public final void invalidate() { + if (valid) { + valid = false; + onInvalidating(); + ExpressionHelper.fireValueChangedEvent(helper); + } + } + + @Override + public final boolean isValid() { + return valid; + } + + protected abstract boolean computeValue(); + + @Override + public String toString() { + return valid ? "BooleanBinding [value: " + get() + "]" + : "BooleanBinding [invalid]"; + } + +} diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/fakefx/BooleanExpression.java b/FCLCore/src/main/java/com/tungsten/fclcore/fakefx/BooleanExpression.java new file mode 100644 index 00000000..cf695768 --- /dev/null +++ b/FCLCore/src/main/java/com/tungsten/fclcore/fakefx/BooleanExpression.java @@ -0,0 +1,58 @@ +package com.tungsten.fclcore.fakefx; + +public abstract class BooleanExpression implements ObservableBooleanValue { + + public BooleanExpression() { + } + + @Override + public Boolean getValue() { + return get(); + } + + public static BooleanExpression booleanExpression( + final ObservableBooleanValue value) { + if (value == null) { + throw new NullPointerException("Value must be specified."); + } + return (value instanceof BooleanExpression) ? (BooleanExpression) value + : new BooleanBinding() { + { + super.bind(value); + } + + @Override + public void dispose() { + super.unbind(value); + } + + @Override + protected boolean computeValue() { + return value.get(); + } + }; + } + + public static BooleanExpression booleanExpression(final ObservableValue value) { + if (value == null) { + throw new NullPointerException("Value must be specified."); + } + return (value instanceof BooleanExpression) ? (BooleanExpression) value + : new BooleanBinding() { + { + super.bind(value); + } + + @Override + public void dispose() { + super.unbind(value); + } + + @Override + protected boolean computeValue() { + final Boolean val = value.getValue(); + return val == null ? false : val; + } + }; + } +} \ No newline at end of file diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/fakefx/BooleanProperty.java b/FCLCore/src/main/java/com/tungsten/fclcore/fakefx/BooleanProperty.java new file mode 100644 index 00000000..cc37c852 --- /dev/null +++ b/FCLCore/src/main/java/com/tungsten/fclcore/fakefx/BooleanProperty.java @@ -0,0 +1,43 @@ +package com.tungsten.fclcore.fakefx; + +public abstract class BooleanProperty extends ReadOnlyBooleanProperty implements + Property, WritableBooleanValue { + + public BooleanProperty() { + } + + @Override + public void setValue(Boolean v) { + if (v == null) { + set(false); + } else { + set(v.booleanValue()); + } + } + + @Override + public void bindBidirectional(Property other) { + + } + + @Override + public void unbindBidirectional(Property other) { + + } + + @Override + public String toString() { + final Object bean = getBean(); + final String name = getName(); + final StringBuilder result = new StringBuilder( + "BooleanProperty ["); + if (bean != null) { + result.append("bean: ").append(bean).append(", "); + } + if ((name != null) && (!name.equals(""))) { + result.append("name: ").append(name).append(", "); + } + result.append("value: ").append(get()).append("]"); + return result.toString(); + } +} diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/fakefx/BooleanPropertyBase.java b/FCLCore/src/main/java/com/tungsten/fclcore/fakefx/BooleanPropertyBase.java new file mode 100644 index 00000000..8342ebbe --- /dev/null +++ b/FCLCore/src/main/java/com/tungsten/fclcore/fakefx/BooleanPropertyBase.java @@ -0,0 +1,178 @@ +package com.tungsten.fclcore.fakefx; + +import java.lang.ref.WeakReference; + +public abstract class BooleanPropertyBase extends BooleanProperty { + + private boolean value; + private ObservableBooleanValue observable = null; + private InvalidationListener listener = null; + private boolean valid = true; + private ExpressionHelper helper = null; + + public BooleanPropertyBase() { + } + + public BooleanPropertyBase(boolean initialValue) { + this.value = initialValue; + } + + @Override + public void addListener(InvalidationListener listener) { + helper = ExpressionHelper.addListener(helper, this, listener); + } + + @Override + public void removeListener(InvalidationListener listener) { + helper = ExpressionHelper.removeListener(helper, listener); + } + + @Override + public void addListener(ChangeListener listener) { + helper = ExpressionHelper.addListener(helper, this, listener); + } + + @Override + public void removeListener(ChangeListener listener) { + helper = ExpressionHelper.removeListener(helper, listener); + } + + protected void fireValueChangedEvent() { + ExpressionHelper.fireValueChangedEvent(helper); + } + + private void markInvalid() { + if (valid) { + valid = false; + invalidated(); + fireValueChangedEvent(); + } + } + + protected void invalidated() { + } + + @Override + public boolean get() { + valid = true; + return observable == null ? value : observable.get(); + } + + @Override + public void set(boolean newValue) { + if (isBound()) { + throw new java.lang.RuntimeException((getBean() != null && getName() != null ? + getBean().getClass().getSimpleName() + "." + getName() + " : ": "") + "A bound value cannot be set."); + } + if (value != newValue) { + value = newValue; + markInvalid(); + } + } + + @Override + public boolean isBound() { + return observable != null; + } + + @Override + public void bind(final ObservableValue rawObservable) { + if (rawObservable == null) { + throw new NullPointerException("Cannot bind to null"); + } + + final ObservableBooleanValue newObservable = (rawObservable instanceof ObservableBooleanValue) ? (ObservableBooleanValue) rawObservable + : new ValueWrapper(rawObservable); + + if (!newObservable.equals(observable)) { + unbind(); + observable = newObservable; + if (listener == null) { + listener = new Listener(this); + } + observable.addListener(listener); + markInvalid(); + } + } + + @Override + public void unbind() { + if (observable != null) { + value = observable.get(); + observable.removeListener(listener); + if (observable instanceof ValueWrapper) { + ((ValueWrapper)observable).dispose(); + } + observable = null; + } + } + + @Override + public String toString() { + final Object bean = getBean(); + final String name = getName(); + final StringBuilder result = new StringBuilder("BooleanProperty ["); + if (bean != null) { + result.append("bean: ").append(bean).append(", "); + } + if ((name != null) && (!name.equals(""))) { + result.append("name: ").append(name).append(", "); + } + if (isBound()) { + result.append("bound, "); + if (valid) { + result.append("value: ").append(get()); + } else { + result.append("invalid"); + } + } else { + result.append("value: ").append(get()); + } + result.append("]"); + return result.toString(); + } + + private static class Listener implements InvalidationListener, WeakListener { + + private final WeakReference wref; + + public Listener(BooleanPropertyBase ref) { + this.wref = new WeakReference<>(ref); + } + + @Override + public void invalidated(Observable observable) { + BooleanPropertyBase ref = wref.get(); + if (ref == null) { + observable.removeListener(this); + } else { + ref.markInvalid(); + } + } + + @Override + public boolean wasGarbageCollected() { + return wref.get() == null; + } + } + + private class ValueWrapper extends BooleanBinding { + private ObservableValue observable; + + public ValueWrapper(ObservableValue observable) { + this.observable = observable; + bind(observable); + } + + @Override + protected boolean computeValue() { + final Boolean value = observable.getValue(); + return (value == null) ? false : value; + } + + @Override + public void dispose() { + unbind(observable); + } + } +} \ No newline at end of file diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/util/fakefx/fx/ChangeListener.java b/FCLCore/src/main/java/com/tungsten/fclcore/fakefx/ChangeListener.java similarity index 72% rename from FCLCore/src/main/java/com/tungsten/fclcore/util/fakefx/fx/ChangeListener.java rename to FCLCore/src/main/java/com/tungsten/fclcore/fakefx/ChangeListener.java index d4de315c..9bcdf3d9 100644 --- a/FCLCore/src/main/java/com/tungsten/fclcore/util/fakefx/fx/ChangeListener.java +++ b/FCLCore/src/main/java/com/tungsten/fclcore/fakefx/ChangeListener.java @@ -1,4 +1,4 @@ -package com.tungsten.fclcore.util.fakefx.fx; +package com.tungsten.fclcore.fakefx; public interface ChangeListener { diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/util/fakefx/fx/ExpressionHelper.java b/FCLCore/src/main/java/com/tungsten/fclcore/fakefx/ExpressionHelper.java similarity index 99% rename from FCLCore/src/main/java/com/tungsten/fclcore/util/fakefx/fx/ExpressionHelper.java rename to FCLCore/src/main/java/com/tungsten/fclcore/fakefx/ExpressionHelper.java index cb35eb6b..a9448280 100644 --- a/FCLCore/src/main/java/com/tungsten/fclcore/util/fakefx/fx/ExpressionHelper.java +++ b/FCLCore/src/main/java/com/tungsten/fclcore/fakefx/ExpressionHelper.java @@ -1,4 +1,4 @@ -package com.tungsten.fclcore.util.fakefx.fx; +package com.tungsten.fclcore.fakefx; import java.util.Arrays; diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/util/fakefx/fx/ExpressionHelperBase.java b/FCLCore/src/main/java/com/tungsten/fclcore/fakefx/ExpressionHelperBase.java similarity index 94% rename from FCLCore/src/main/java/com/tungsten/fclcore/util/fakefx/fx/ExpressionHelperBase.java rename to FCLCore/src/main/java/com/tungsten/fclcore/fakefx/ExpressionHelperBase.java index d2db8e24..7b48e925 100644 --- a/FCLCore/src/main/java/com/tungsten/fclcore/util/fakefx/fx/ExpressionHelperBase.java +++ b/FCLCore/src/main/java/com/tungsten/fclcore/fakefx/ExpressionHelperBase.java @@ -1,4 +1,4 @@ -package com.tungsten.fclcore.util.fakefx.fx; +package com.tungsten.fclcore.fakefx; import java.util.function.Predicate; diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/util/fakefx/fx/InvalidationListener.java b/FCLCore/src/main/java/com/tungsten/fclcore/fakefx/InvalidationListener.java similarity index 67% rename from FCLCore/src/main/java/com/tungsten/fclcore/util/fakefx/fx/InvalidationListener.java rename to FCLCore/src/main/java/com/tungsten/fclcore/fakefx/InvalidationListener.java index 7e1a4e1a..5c9cb68e 100644 --- a/FCLCore/src/main/java/com/tungsten/fclcore/util/fakefx/fx/InvalidationListener.java +++ b/FCLCore/src/main/java/com/tungsten/fclcore/fakefx/InvalidationListener.java @@ -1,4 +1,4 @@ -package com.tungsten.fclcore.util.fakefx.fx; +package com.tungsten.fclcore.fakefx; public interface InvalidationListener { diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/util/fakefx/fx/ObjectBinding.java b/FCLCore/src/main/java/com/tungsten/fclcore/fakefx/ObjectBinding.java similarity index 98% rename from FCLCore/src/main/java/com/tungsten/fclcore/util/fakefx/fx/ObjectBinding.java rename to FCLCore/src/main/java/com/tungsten/fclcore/fakefx/ObjectBinding.java index 771f0740..a973298e 100644 --- a/FCLCore/src/main/java/com/tungsten/fclcore/util/fakefx/fx/ObjectBinding.java +++ b/FCLCore/src/main/java/com/tungsten/fclcore/fakefx/ObjectBinding.java @@ -1,4 +1,4 @@ -package com.tungsten.fclcore.util.fakefx.fx; +package com.tungsten.fclcore.fakefx; public abstract class ObjectBinding extends ObjectExpression implements Binding { diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/util/fakefx/fx/ObjectExpression.java b/FCLCore/src/main/java/com/tungsten/fclcore/fakefx/ObjectExpression.java similarity index 80% rename from FCLCore/src/main/java/com/tungsten/fclcore/util/fakefx/fx/ObjectExpression.java rename to FCLCore/src/main/java/com/tungsten/fclcore/fakefx/ObjectExpression.java index dac5a37d..3da21f76 100644 --- a/FCLCore/src/main/java/com/tungsten/fclcore/util/fakefx/fx/ObjectExpression.java +++ b/FCLCore/src/main/java/com/tungsten/fclcore/fakefx/ObjectExpression.java @@ -1,4 +1,4 @@ -package com.tungsten.fclcore.util.fakefx.fx; +package com.tungsten.fclcore.fakefx; public abstract class ObjectExpression implements ObservableObjectValue { diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/util/fakefx/fx/Observable.java b/FCLCore/src/main/java/com/tungsten/fclcore/fakefx/Observable.java similarity index 75% rename from FCLCore/src/main/java/com/tungsten/fclcore/util/fakefx/fx/Observable.java rename to FCLCore/src/main/java/com/tungsten/fclcore/fakefx/Observable.java index 4687fb46..8efcae2d 100644 --- a/FCLCore/src/main/java/com/tungsten/fclcore/util/fakefx/fx/Observable.java +++ b/FCLCore/src/main/java/com/tungsten/fclcore/fakefx/Observable.java @@ -1,4 +1,4 @@ -package com.tungsten.fclcore.util.fakefx.fx; +package com.tungsten.fclcore.fakefx; public interface Observable { diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/fakefx/ObservableBooleanValue.java b/FCLCore/src/main/java/com/tungsten/fclcore/fakefx/ObservableBooleanValue.java new file mode 100644 index 00000000..bec00202 --- /dev/null +++ b/FCLCore/src/main/java/com/tungsten/fclcore/fakefx/ObservableBooleanValue.java @@ -0,0 +1,6 @@ +package com.tungsten.fclcore.fakefx; + +public interface ObservableBooleanValue extends ObservableValue { + + boolean get(); +} \ No newline at end of file diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/fakefx/ObservableList.java b/FCLCore/src/main/java/com/tungsten/fclcore/fakefx/ObservableList.java new file mode 100644 index 00000000..c9af8adc --- /dev/null +++ b/FCLCore/src/main/java/com/tungsten/fclcore/fakefx/ObservableList.java @@ -0,0 +1,19 @@ +package com.tungsten.fclcore.fakefx; + +import java.util.Collection; +import java.util.List; + +public interface ObservableList extends List, Observable { + + public boolean addAll(E... elements); + + public boolean setAll(E... elements); + + public boolean setAll(Collection col); + + public boolean removeAll(E... elements); + + public boolean retainAll(E... elements); + + public void remove(int from, int to); +} diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/util/fakefx/fx/ObservableObjectValue.java b/FCLCore/src/main/java/com/tungsten/fclcore/fakefx/ObservableObjectValue.java similarity index 65% rename from FCLCore/src/main/java/com/tungsten/fclcore/util/fakefx/fx/ObservableObjectValue.java rename to FCLCore/src/main/java/com/tungsten/fclcore/fakefx/ObservableObjectValue.java index 304c555d..cc11f46f 100644 --- a/FCLCore/src/main/java/com/tungsten/fclcore/util/fakefx/fx/ObservableObjectValue.java +++ b/FCLCore/src/main/java/com/tungsten/fclcore/fakefx/ObservableObjectValue.java @@ -1,4 +1,4 @@ -package com.tungsten.fclcore.util.fakefx.fx; +package com.tungsten.fclcore.fakefx; public interface ObservableObjectValue extends ObservableValue { diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/util/fakefx/fx/ObservableValue.java b/FCLCore/src/main/java/com/tungsten/fclcore/fakefx/ObservableValue.java similarity index 81% rename from FCLCore/src/main/java/com/tungsten/fclcore/util/fakefx/fx/ObservableValue.java rename to FCLCore/src/main/java/com/tungsten/fclcore/fakefx/ObservableValue.java index 0f8d6a64..9d8d09aa 100644 --- a/FCLCore/src/main/java/com/tungsten/fclcore/util/fakefx/fx/ObservableValue.java +++ b/FCLCore/src/main/java/com/tungsten/fclcore/fakefx/ObservableValue.java @@ -1,4 +1,4 @@ -package com.tungsten.fclcore.util.fakefx.fx; +package com.tungsten.fclcore.fakefx; public interface ObservableValue extends Observable { diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/fakefx/Property.java b/FCLCore/src/main/java/com/tungsten/fclcore/fakefx/Property.java new file mode 100644 index 00000000..55d180e6 --- /dev/null +++ b/FCLCore/src/main/java/com/tungsten/fclcore/fakefx/Property.java @@ -0,0 +1,15 @@ +package com.tungsten.fclcore.fakefx; + +public interface Property extends ReadOnlyProperty, WritableValue { + + void bind(ObservableValue observable); + + void unbind(); + + boolean isBound(); + + void bindBidirectional(Property other); + + void unbindBidirectional(Property other); + +} \ No newline at end of file diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/fakefx/ReadOnlyBooleanProperty.java b/FCLCore/src/main/java/com/tungsten/fclcore/fakefx/ReadOnlyBooleanProperty.java new file mode 100644 index 00000000..5e4d21e8 --- /dev/null +++ b/FCLCore/src/main/java/com/tungsten/fclcore/fakefx/ReadOnlyBooleanProperty.java @@ -0,0 +1,25 @@ +package com.tungsten.fclcore.fakefx; + +public abstract class ReadOnlyBooleanProperty extends BooleanExpression + implements ReadOnlyProperty { + + public ReadOnlyBooleanProperty() { + } + + @Override + public String toString() { + final Object bean = getBean(); + final String name = getName(); + final StringBuilder result = new StringBuilder( + "ReadOnlyBooleanProperty ["); + if (bean != null) { + result.append("bean: ").append(bean).append(", "); + } + if ((name != null) && !name.equals("")) { + result.append("name: ").append(name).append(", "); + } + result.append("value: ").append(get()).append("]"); + return result.toString(); + } + +} \ No newline at end of file diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/fakefx/ReadOnlyProperty.java b/FCLCore/src/main/java/com/tungsten/fclcore/fakefx/ReadOnlyProperty.java new file mode 100644 index 00000000..b33a9134 --- /dev/null +++ b/FCLCore/src/main/java/com/tungsten/fclcore/fakefx/ReadOnlyProperty.java @@ -0,0 +1,9 @@ +package com.tungsten.fclcore.fakefx; + +public interface ReadOnlyProperty extends ObservableValue { + + Object getBean(); + + String getName(); + +} \ No newline at end of file diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/fakefx/SimpleBooleanProperty.java b/FCLCore/src/main/java/com/tungsten/fclcore/fakefx/SimpleBooleanProperty.java new file mode 100644 index 00000000..d307e060 --- /dev/null +++ b/FCLCore/src/main/java/com/tungsten/fclcore/fakefx/SimpleBooleanProperty.java @@ -0,0 +1,39 @@ +package com.tungsten.fclcore.fakefx; + +public class SimpleBooleanProperty extends BooleanPropertyBase { + + private static final Object DEFAULT_BEAN = null; + private static final String DEFAULT_NAME = ""; + + private final Object bean; + private final String name; + + @Override + public Object getBean() { + return bean; + } + + @Override + public String getName() { + return name; + } + + public SimpleBooleanProperty() { + this(DEFAULT_BEAN, DEFAULT_NAME); + } + + public SimpleBooleanProperty(boolean initialValue) { + this(DEFAULT_BEAN, DEFAULT_NAME, initialValue); + } + + public SimpleBooleanProperty(Object bean, String name) { + this.bean = bean; + this.name = (name == null) ? DEFAULT_NAME : name; + } + + public SimpleBooleanProperty(Object bean, String name, boolean initialValue) { + super(initialValue); + this.bean = bean; + this.name = (name == null) ? DEFAULT_NAME : name; + } +} \ No newline at end of file diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/util/fakefx/fx/WeakListener.java b/FCLCore/src/main/java/com/tungsten/fclcore/fakefx/WeakListener.java similarity index 87% rename from FCLCore/src/main/java/com/tungsten/fclcore/util/fakefx/fx/WeakListener.java rename to FCLCore/src/main/java/com/tungsten/fclcore/fakefx/WeakListener.java index 84ff10cf..8892369c 100644 --- a/FCLCore/src/main/java/com/tungsten/fclcore/util/fakefx/fx/WeakListener.java +++ b/FCLCore/src/main/java/com/tungsten/fclcore/fakefx/WeakListener.java @@ -1,4 +1,4 @@ -package com.tungsten.fclcore.util.fakefx.fx; +package com.tungsten.fclcore.fakefx; public interface WeakListener { /** diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/fakefx/WritableBooleanValue.java b/FCLCore/src/main/java/com/tungsten/fclcore/fakefx/WritableBooleanValue.java new file mode 100644 index 00000000..83bec331 --- /dev/null +++ b/FCLCore/src/main/java/com/tungsten/fclcore/fakefx/WritableBooleanValue.java @@ -0,0 +1,12 @@ +package com.tungsten.fclcore.fakefx; + +public interface WritableBooleanValue extends WritableValue { + + boolean get(); + + void set(boolean value); + + @Override + void setValue(Boolean value); + +} \ No newline at end of file diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/fakefx/WritableValue.java b/FCLCore/src/main/java/com/tungsten/fclcore/fakefx/WritableValue.java new file mode 100644 index 00000000..d3cc8307 --- /dev/null +++ b/FCLCore/src/main/java/com/tungsten/fclcore/fakefx/WritableValue.java @@ -0,0 +1,9 @@ +package com.tungsten.fclcore.fakefx; + +public interface WritableValue { + + T getValue(); + + void setValue(T value); + +} \ No newline at end of file diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/mod/Datapack.java b/FCLCore/src/main/java/com/tungsten/fclcore/mod/Datapack.java index 9e92f3a5..1f7bd43a 100644 --- a/FCLCore/src/main/java/com/tungsten/fclcore/mod/Datapack.java +++ b/FCLCore/src/main/java/com/tungsten/fclcore/mod/Datapack.java @@ -2,20 +2,23 @@ package com.tungsten.fclcore.mod; import com.google.gson.JsonParseException; import com.tungsten.fclcore.util.Logging; +import com.tungsten.fclcore.util.StringUtils; +import com.tungsten.fclcore.fakefx.BooleanProperty; +import com.tungsten.fclcore.fakefx.SimpleBooleanProperty; import com.tungsten.fclcore.util.gson.JsonUtils; import com.tungsten.fclcore.util.io.CompressingUtils; import com.tungsten.fclcore.util.io.FileUtils; +import com.tungsten.fclcore.util.io.Unzipper; import java.io.IOException; import java.nio.file.*; import java.util.*; import java.util.logging.Level; -// Todo : fix public class Datapack { private boolean isMultiple; private final Path path; - private final ObservableList info = FXCollections.observableArrayList(); + private final ArrayList info = new ArrayList<>(); public Datapack(Path path) { this.path = path; @@ -25,7 +28,7 @@ public class Datapack { return path; } - public ObservableList getInfo() { + public ArrayList getInfo() { return info; } @@ -49,12 +52,9 @@ public class Datapack { if (isMultiple) { new Unzipper(path, worldPath) .setReplaceExistentFile(true) - .setFilter(new Unzipper.FileFilter() { - @Override - public boolean accept(Path destPath, boolean isDirectory, Path zipEntry, String entryPath) { - // We will merge resources.zip instead of replacement. - return !entryPath.equals("resources.zip"); - } + .setFilter((destPath, isDirectory, zipEntry, entryPath) -> { + // We will merge resources.zip instead of replacement. + return !entryPath.equals("resources.zip"); }) .unzip(); @@ -93,7 +93,7 @@ public class Datapack { else if (Files.isRegularFile(subPath)) Files.delete(subPath); - Platform.runLater(() -> info.removeIf(p -> p.getId().equals(pack.getId()))); + info.removeIf(p -> p.getId().equals(pack.getId())); } public void loadFromZip() throws IOException { @@ -107,7 +107,7 @@ public class Datapack { isMultiple = false; try { PackMcMeta pack = JsonUtils.fromNonNullJson(FileUtils.readText(mcmeta), PackMcMeta.class); - Platform.runLater(() -> info.add(new Pack(path, FileUtils.getNameWithoutExtension(path), pack.getPackInfo().getDescription(), this))); + info.add(new Pack(path, FileUtils.getNameWithoutExtension(path), pack.getPackInfo().getDescription(), this)); } catch (IOException | JsonParseException e) { Logging.LOG.log(Level.WARNING, "Failed to read datapack " + path, e); } @@ -172,7 +172,7 @@ public class Datapack { } } - Platform.runLater(() -> this.info.setAll(info)); + this.info.addAll(info); } public static class Pack { diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/mod/LocalModFile.java b/FCLCore/src/main/java/com/tungsten/fclcore/mod/LocalModFile.java index 256584bd..22526fbb 100644 --- a/FCLCore/src/main/java/com/tungsten/fclcore/mod/LocalModFile.java +++ b/FCLCore/src/main/java/com/tungsten/fclcore/mod/LocalModFile.java @@ -1,6 +1,8 @@ package com.tungsten.fclcore.mod; import com.tungsten.fclcore.util.Logging; +import com.tungsten.fclcore.fakefx.BooleanProperty; +import com.tungsten.fclcore.fakefx.SimpleBooleanProperty; import com.tungsten.fclcore.util.io.FileUtils; import java.io.IOException; @@ -9,7 +11,6 @@ import java.util.*; import java.util.logging.Level; import java.util.stream.Collectors; -// Todo : fix public final class LocalModFile implements Comparable { private Path file; diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/util/fakefx/BindingMapping.java b/FCLCore/src/main/java/com/tungsten/fclcore/util/fakefx/BindingMapping.java index 032e43ee..c87a7e78 100644 --- a/FCLCore/src/main/java/com/tungsten/fclcore/util/fakefx/BindingMapping.java +++ b/FCLCore/src/main/java/com/tungsten/fclcore/util/fakefx/BindingMapping.java @@ -9,10 +9,10 @@ import java.util.function.Supplier; import static java.util.Objects.requireNonNull; -import com.tungsten.fclcore.util.fakefx.fx.Bindings; -import com.tungsten.fclcore.util.fakefx.fx.ObjectBinding; -import com.tungsten.fclcore.util.fakefx.fx.Observable; -import com.tungsten.fclcore.util.fakefx.fx.ObservableValue; +import com.tungsten.fclcore.fakefx.Bindings; +import com.tungsten.fclcore.fakefx.ObjectBinding; +import com.tungsten.fclcore.fakefx.Observable; +import com.tungsten.fclcore.fakefx.ObservableValue; public abstract class BindingMapping extends ObjectBinding { diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/util/fakefx/ObservableCache.java b/FCLCore/src/main/java/com/tungsten/fclcore/util/fakefx/ObservableCache.java index 5b1d0ac4..4b75ce45 100644 --- a/FCLCore/src/main/java/com/tungsten/fclcore/util/fakefx/ObservableCache.java +++ b/FCLCore/src/main/java/com/tungsten/fclcore/util/fakefx/ObservableCache.java @@ -1,7 +1,7 @@ package com.tungsten.fclcore.util.fakefx; -import com.tungsten.fclcore.util.fakefx.fx.Bindings; -import com.tungsten.fclcore.util.fakefx.fx.ObjectBinding; +import com.tungsten.fclcore.fakefx.Bindings; +import com.tungsten.fclcore.fakefx.ObjectBinding; import com.tungsten.fclcore.util.function.ExceptionalFunction; import java.util.HashMap; diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/util/fakefx/ObservableHelper.java b/FCLCore/src/main/java/com/tungsten/fclcore/util/fakefx/ObservableHelper.java index 6e79be77..c71765e1 100644 --- a/FCLCore/src/main/java/com/tungsten/fclcore/util/fakefx/ObservableHelper.java +++ b/FCLCore/src/main/java/com/tungsten/fclcore/util/fakefx/ObservableHelper.java @@ -1,7 +1,7 @@ package com.tungsten.fclcore.util.fakefx; -import com.tungsten.fclcore.util.fakefx.fx.InvalidationListener; -import com.tungsten.fclcore.util.fakefx.fx.Observable; +import com.tungsten.fclcore.fakefx.InvalidationListener; +import com.tungsten.fclcore.fakefx.Observable; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/util/fakefx/ObservableOptionalCache.java b/FCLCore/src/main/java/com/tungsten/fclcore/util/fakefx/ObservableOptionalCache.java index 0574c2d2..2e922125 100644 --- a/FCLCore/src/main/java/com/tungsten/fclcore/util/fakefx/ObservableOptionalCache.java +++ b/FCLCore/src/main/java/com/tungsten/fclcore/util/fakefx/ObservableOptionalCache.java @@ -1,6 +1,6 @@ package com.tungsten.fclcore.util.fakefx; -import com.tungsten.fclcore.util.fakefx.fx.ObjectBinding; +import com.tungsten.fclcore.fakefx.ObjectBinding; import com.tungsten.fclcore.util.function.ExceptionalFunction; import java.util.Optional;