boot/src/main/java/org/apidesign/html/boot/impl/FnUtils.java
branchbatchnotify
changeset 294 7a3abb6bcfc9
parent 288 8c5b40231d26
child 298 06719f52f85a
     1.1 --- a/boot/src/main/java/org/apidesign/html/boot/impl/FnUtils.java	Thu Sep 12 09:33:50 2013 +0200
     1.2 +++ b/boot/src/main/java/org/apidesign/html/boot/impl/FnUtils.java	Thu Sep 12 17:59:10 2013 +0200
     1.3 @@ -36,6 +36,7 @@
     1.4   */
     1.5  public final class FnUtils {
     1.6      private static final ThreadLocal<Fn.Presenter> CURRENT = new ThreadLocal<Fn.Presenter>();
     1.7 +    private static final ThreadLocal<List<Runnable>> LATER = new ThreadLocal<List<Runnable>>();
     1.8      
     1.9      private FnUtils() {
    1.10      }
    1.11 @@ -130,8 +131,28 @@
    1.12      }
    1.13      
    1.14      public static Fn.Presenter currentPresenter(Fn.Presenter p) {
    1.15 +        List<Runnable> list = LATER.get();
    1.16 +        LATER.set(null);
    1.17 +        if (list != null) for (Runnable runnable : list) {
    1.18 +            try {
    1.19 +                runnable.run();
    1.20 +            } catch (Throwable t) {
    1.21 +                t.printStackTrace();
    1.22 +            }
    1.23 +        }
    1.24 +        
    1.25          Fn.Presenter prev = CURRENT.get();
    1.26          CURRENT.set(p);
    1.27          return prev;
    1.28      }
    1.29 +    
    1.30 +    public static void runLater(Runnable r) {
    1.31 +        currentPresenter();
    1.32 +        List<Runnable> list = LATER.get();
    1.33 +        if (list == null) {
    1.34 +            list = new ArrayList<Runnable>();
    1.35 +            LATER.set(list);
    1.36 +        }
    1.37 +        list.add(r);
    1.38 +    }
    1.39  }