package com.softwaremill.common.cdi.security; import javax.enterprise.inject.Model; import java.io.Serializable; import java.util.HashSet; import java.util.Set; import java.util.concurrent.Callable; /** * A bean for managing security flags. * @author Adam Warski (adam at warski dot org) */ @Model public class SecurityFlags implements Serializable{ private Set<String> flags = new HashSet<String>(); public boolean hasFlag(String name) { return flags.contains(name); } public <T> T doWithFlag(String flagName, Callable<T> callable) { flags.add(flagName); try { return callable.call(); } catch (RuntimeException e) { throw e; } catch (Exception e) { throw new RuntimeException(e); } finally { flags.remove(flagName); } } }