@Override public void check(final Node node) { // Store snapshot from last check if (stateMachine.getLastNode() != null) { history.store( stateMachine.getLastNode(), currentGroupify, stateMachine.getLastTransition().snapshot); } // Transition final Transition transition = stateMachine.transition(node); // Switch groupifies final IHashGroupify temp = lastGroupify; lastGroupify = currentGroupify; currentGroupify = temp; currentGroupify.clear(); // Apply transition switch (transition.type) { case UNOPTIMIZED: currentGroupify = transformer.apply(transition.projection, node.getTransformation(), currentGroupify); break; case ROLLUP: currentGroupify = transformer.applyRollup( transition.projection, node.getTransformation(), lastGroupify, currentGroupify); break; case SNAPSHOT: currentGroupify = transformer.applySnapshot( transition.projection, node.getTransformation(), currentGroupify, transition.snapshot); break; } // Mark as checked node.setChecked(); // Propagate k-anonymity node.setKAnonymous(currentGroupify.isKAnonymous()); // Propagate anonymity and information loss if (currentGroupify.isAnonymous()) { node.setAnonymous(true); metric.evaluate(node, currentGroupify); } else { node.setInformationLoss(null); node.setAnonymous(false); } }