public static Slot digit() { return new Slot(null, new SlotValidators.DigitValidator()); }
public static Slot maskableDigit() { return new Slot(null, new SlotValidators.MaskedDigitValidator()); }
public static Slot any() { return new Slot(null, new SlotValidators.GenerousValidator()); }
@Test public void invalidValueNotCopiedFromNext() { Slot first = new Slot('0', new SlotValidators.DigitValidator()); Slot second = new Slot('a', new SlotValidators.LetterValidator()); first.setNextSlot(second); second.setPrevSlot(first); first.setValue(null); Assert.assertNull(first.getValue()); }
@Override protected Slot slotFromNonUnderscoredChar(char character) { if (!Character.isDigit(character)) { rule = Slot.RULE_INPUT_MOVES_INPUT | Slot.RULE_INPUT_REPLACE; final Slot hardcoded = PredefinedSlots.hardcodedSlot(character); return character == PLUS_SIGN ? hardcoded : hardcoded.withTags(Slot.TAG_DECORATION); } final Slot slot = new Slot(rule, character, SlotValidatorSet.setOf(new SlotValidators.DigitValidator())); rule = Slot.RULE_INPUT_MOVES_INPUT; return slot; } }
private int setValueInner(int offset, @Nullable Character newValue, boolean fromLeft) { newValue = valueInterpreter == null ? newValue : valueInterpreter.interpret(newValue); if (newValue == null) { removeCurrentValue(); return checkRule(RULE_FORBID_CURSOR_MOVE_LEFT) ? 1 : 0; } return setNewValue(offset, newValue, fromLeft); }
private void removeCurrentValue() { if (!hardcoded()) { value = pullValueFromSlot(nextSlot); } else if (prevSlot != null) { prevSlot.removeCurrentValue(); } }
public int hardcodedSequenceEndIndex(int fromIndex) { if (hardcoded() && (nextSlot == null || !nextSlot.hardcoded())) { // I'm last hardcoded slot return fromIndex + 1; } if (hardcoded() && nextSlot.hardcoded()) { // me and my next neighbour are hardcoded return nextSlot.hardcodedSequenceEndIndex(++fromIndex); } // i'm not even hardcoded return -1; }
public boolean anyInputToTheRight() { if (value != null && !hardcoded()) { return true; } if (nextSlot != null) { return nextSlot.anyInputToTheRight(); } return false; }
@Override public Slot next() { Slot current = nextSlot; nextSlot = nextSlot.getNextSlot(); return current; }
public static Slot[] copySlotArray(Slot[] arr) { Slot[] result = new Slot[arr.length]; for (int i = 0; i < arr.length; i++) { result[i] = new Slot(arr[i]); } return result; } }
@Override public boolean validate(final char value) { return validateEnglishLetter(value) || validateRussianLetter(value); }
@Override public boolean validate(char value) { if (super.validate(value)) { return true; } for (char aChar : maskChars) { if (aChar == value) { return true; } } return false; }
private int pushValueToSlot(int offset, Character newValue, Slot slot) { if (slot == null) { return 0; } return nextSlot.setValueInner(offset, newValue, true); }
@Override public boolean validate(char value) { for (Slot.SlotValidator validator : this) { if (validator.validate(value)) { return true; } } return false; } }