Procházet zdrojové kódy

simplify api, add OneWayFlag

tags/2.0.1
Jonathan Cobb před 5 roky
rodič
revize
9087017eda
2 změnil soubory, kde provedl 47 přidání a 2 odebrání
  1. +2
    -2
      src/main/java/org/cobbzilla/util/daemon/ZillaRuntime.java
  2. +45
    -0
      src/main/java/org/cobbzilla/util/system/OneWayFlag.java

+ 2
- 2
src/main/java/org/cobbzilla/util/daemon/ZillaRuntime.java Zobrazit soubor

@@ -170,12 +170,12 @@ public class ZillaRuntime {
throw e;
}

public static String shortErrorString(Exception e) { return e.getClass().getName()+": "+e.getMessage(); }
public static String shortError(Exception e) { return e.getClass().getName()+": "+e.getMessage(); }

public static String errorString(Exception e) { return errorString(e, 1000); }

public static String errorString(Exception e, int maxlen) {
return truncate(shortErrorString(e)+"\n"+ getStackTrace(e), maxlen);
return truncate(shortError(e)+"\n"+ getStackTrace(e), maxlen);
}

public static boolean empty(String s) { return s == null || s.length() == 0; }


+ 45
- 0
src/main/java/org/cobbzilla/util/system/OneWayFlag.java Zobrazit soubor

@@ -0,0 +1,45 @@
package org.cobbzilla.util.system;

import lombok.extern.slf4j.Slf4j;

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

import static org.cobbzilla.util.daemon.ZillaRuntime.shortError;

/**
* Wraps an Atomic Boolean that can only go from false to true.
* Useful when you have a state where checking the current status is expensive,
* but once some condition evaluates to true, it is true forever thereafter.
*/
@Slf4j
public class OneWayFlag extends AtomicBoolean {

private final String name;
private final Callable<Boolean> check;

public OneWayFlag(String name, Callable<Boolean> check) {
this.name = name;
this.check = check;
try {
set(check.call());
} catch (Exception e) {
log.warn("OneWayFlag("+name+") constructor check failed (evaluates to false): "+shortError(e));
set(false);
}
}

public boolean check () {
if (get()) return true;
final Boolean ok;
try {
ok = check.call();
} catch (Exception e) {
log.warn("OneWayFlag("+name+") check failed (evaluates to false): "+shortError(e));
return false;
}
if (ok) set(true);
return ok;
}

}

Načítá se…
Zrušit
Uložit