package dials.filter.impl; import dials.filter.DynamicDataFilter; import dials.filter.DynamicFilterDataConstants; import dials.filter.FilterDataException; import dials.filter.FilterDataHelper; import dials.messages.ContextualMessage; import dials.messages.DataFilterApplicationMessage; import java.util.Random; public class SeededPercentageFeatureFilter extends PercentageFeatureFilter implements DynamicDataFilter { private Long seed; @Override protected Random getRandom() { return new Random(seed); } @Override public void applyDynamicData(DataFilterApplicationMessage message) { FilterDataHelper helper = new FilterDataHelper(message.getFilterData()); applyRequiredData(message, helper); } private void applyRequiredData(ContextualMessage message, FilterDataHelper helper) { try { seed = generateSeed(helper.getData(DynamicFilterDataConstants.SEED, Object.class), message.getExecutionContext().getFeatureName()); recordSuccessfulDataApply(message, DynamicFilterDataConstants.SEED); } catch (FilterDataException e) { recordUnsuccessfulDataApply(message, DynamicFilterDataConstants.SEED, true, e.getMessage()); } } private Long generateSeed(Object dynamicSeed, String featureName) { return ((long) dynamicSeed.hashCode()) + ((long) featureName.hashCode()); } }