Repository: wicket Updated Branches: refs/heads/master c60209315 -> 63aa52b04
WICKET-6379 IModel's default models should detach the target model Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/63aa52b0 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/63aa52b0 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/63aa52b0 Branch: refs/heads/master Commit: 63aa52b04df11e87ae20cda744465c4d77dde05b Parents: c602093 Author: Martin Tzvetanov Grigorov <[email protected]> Authored: Sat May 27 22:47:07 2017 +0200 Committer: Martin Tzvetanov Grigorov <[email protected]> Committed: Sat May 27 22:47:07 2017 +0200 ---------------------------------------------------------------------- .../java/org/apache/wicket/model/IModel.java | 111 +++++++++++++------ 1 file changed, 80 insertions(+), 31 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/63aa52b0/wicket-core/src/main/java/org/apache/wicket/model/IModel.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/model/IModel.java b/wicket-core/src/main/java/org/apache/wicket/model/IModel.java index d8a9800..f34645e 100644 --- a/wicket-core/src/main/java/org/apache/wicket/model/IModel.java +++ b/wicket-core/src/main/java/org/apache/wicket/model/IModel.java @@ -101,15 +101,26 @@ public interface IModel<T> extends IDetachable default IModel<T> filter(SerializablePredicate<? super T> predicate) { Args.notNull(predicate, "predicate"); - return (IModel<T>)() -> { - T object = IModel.this.getObject(); - if (object != null && predicate.test(object)) + return new IModel<T>() + { + @Override + public T getObject() { - return object; + T object = IModel.this.getObject(); + if (object != null && predicate.test(object)) + { + return object; + } + else + { + return null; + } } - else + + @Override + public void detach() { - return null; + IModel.this.detach(); } }; } @@ -126,15 +137,24 @@ public interface IModel<T> extends IDetachable default <R> IModel<R> map(SerializableFunction<? super T, R> mapper) { Args.notNull(mapper, "mapper"); - return (IModel<R>)() -> { - T object = IModel.this.getObject(); - if (object == null) + return new IModel<R>() { + @Override + public R getObject() { - return null; + T object = IModel.this.getObject(); + if (object == null) + { + return null; + } else + { + return mapper.apply(object); + } } - else + + @Override + public void detach() { - return mapper.apply(object); + IModel.this.detach(); } }; } @@ -158,16 +178,26 @@ public interface IModel<T> extends IDetachable { Args.notNull(combiner, "combiner"); Args.notNull(other, "other"); - return (IModel<R>)() -> { - T t = IModel.this.getObject(); - U u = other.getObject(); - if (t != null && u != null) + return new IModel<R>() { + @Override + public R getObject() { - return combiner.apply(t, u); + T t = IModel.this.getObject(); + U u = other.getObject(); + if (t != null && u != null) + { + return combiner.apply(t, u); + } else + { + return null; + } } - else + + @Override + public void detach() { - return null; + other.detach(); + IModel.this.detach(); } }; } @@ -229,6 +259,7 @@ public interface IModel<T> extends IDetachable public void detach() { T object = IModel.this.getObject(); + IModel.this.detach(); if (object != null) { IModel<R> model = mapper.apply(object); @@ -251,15 +282,24 @@ public interface IModel<T> extends IDetachable */ default IModel<T> orElse(T other) { - return (IModel<T>)() -> { - T object = IModel.this.getObject(); - if (object == null) + return new IModel<T>() { + @Override + public T getObject() { - return other; + T object = IModel.this.getObject(); + if (object == null) + { + return other; + } else + { + return object; + } } - else + + @Override + public void detach() { - return object; + IModel.this.detach(); } }; } @@ -275,15 +315,24 @@ public interface IModel<T> extends IDetachable default IModel<T> orElseGet(SerializableSupplier<? extends T> other) { Args.notNull(other, "other"); - return (IModel<T>)() -> { - T object = IModel.this.getObject(); - if (object == null) + return new IModel<T>() { + @Override + public T getObject() { - return other.get(); + T object = IModel.this.getObject(); + if (object == null) + { + return other.get(); + } else + { + return object; + } } - else + + @Override + public void detach() { - return object; + IModel.this.detach(); } }; }
