/** * Generate a random uuid of the specified length. Example: uuid(15) returns * "VcydxgltxrVZSTV" * * @param len * the desired number of characters */ public static String uuid(int len) { return uuid(len, CHARS.length); } /**
private void signalChange(List<StoreCallback> acknowledgedCallbacks, Action action) { for (StoreCallback callback : acknowledgedCallbacks) { callback.signalChange(action); } }
public Iterable<Handler> getActionHandler() { return extractHandler(handler); }
private void executeInOrder(final Action action, final TopologicalOrderIterator<Class<?>, DefaultEdge> iterator, final List<StoreCallback> acknowledgedCallbacks) { if (!iterator.hasNext()) { signalChange(acknowledgedCallbacks, action); unlock(); if (!queue.isEmpty()) { dispatchInternal(queue.poll()); diagnostics.onExecute(store, action); callback.complete(action, new Channel() { @Override public void ack() {
@Override public HandlerRegistration addChangeHandler(Action action, Handler handler) { HandlerRef handlerRef = new HandlerRef(handler); this.handlerByInstance.put(action, handlerRef); return new ChangeHandlerRegistration(action, handlerRef); }
private DirectedGraph<Class<?>, DefaultEdge> createDag(final Map<Class<?>, Agreement> approvals) { DirectedGraph<Class<?>, DefaultEdge> dag = new DefaultDirectedGraph<>(new EdgeFactoryImpl()); Agreement agreement = entry.getValue(); dag.addVertex(store); for (Class<?> depStore : agreement.getDependencies()) { dag.addVertex(depStore); Class<?> store = entry.getKey(); Agreement agreement = entry.getValue(); for (Class<?> depStore : agreement.getDependencies()) { dag.addEdge(depStore, store); throw new CycleDetected(sb.toString());
private Map<Class<?>, Agreement> prepare(final Action action) { Map<Class<?>, Agreement> approvals = new HashMap<>(); for (Map.Entry<Class<?>, StoreCallback> entry : callbacks.entrySet()) { Class<?> store = entry.getKey(); StoreCallback callback = entry.getValue(); Agreement agreement = callback.voteFor(action); if (agreement.isApproved()) { approvals.put(store, agreement); } } return approvals; }
protected void fireChange(Action action) { List<HandlerRef> allHandler = new ArrayList<>(); allHandler.addAll(handler); allHandler.addAll(handlerByType.get(action.getClass())); allHandler.addAll(handlerByInstance.get(action)); Set<Throwable> causes = null; for (HandlerRef handlerRef : allHandler) { try { handlerRef.handler.onChange(action); } catch (Throwable e) { if (causes == null) { causes = new HashSet<>(); } causes.add(e); } } if (causes != null) { throw new UmbrellaException(causes); } } }
@Override public HandlerRegistration addChangeHandler(final Handler handler) { HandlerRef handlerRef = new HandlerRef(handler); this.handler.add(handlerRef); return new ChangeHandlerRegistration(handlerRef); }
public Iterable<Handler> getActionHandler(final Class<? extends Action> actionType) { Collection<HandlerRef> handlerRefs = handlerByType.get(actionType); // returns an empty list if nothing was found return extractHandler(handlerRefs); }
HandlerRef(final Handler handler) { this.id = UUID.uuid(); this.handler = handler; }
@Override public HandlerRegistration addChangeHandler(final Class<? extends Action> actionType, final Handler handler) { HandlerRef handlerRef = new HandlerRef(handler); this.handlerByType.put(actionType, handlerRef); return new ChangeHandlerRegistration(actionType, handlerRef); }
public Iterable<Handler> getActionHandler(final Action action) { Collection<HandlerRef> handlerRefs = handlerByInstance.get(action); // returns an empty list if nothing was found return extractHandler(handlerRefs); }