public Slot(@Nullable Character value, @Nullable SlotValidator... validators) { this(RULES_DEFAULT, value, SlotValidatorSet.setOf(validators)); }
public static SlotValidatorSet setOf(Slot.SlotValidator... validators) { if (validators == null) { return new SlotValidatorSet(); } SlotValidatorSet result = new SlotValidatorSet(validators.length); for (Slot.SlotValidator one : validators) { if (one instanceof SlotValidatorSet) { result.addAll((SlotValidatorSet) one); } else { result.add(one); } } return result; }
@Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Slot slot = (Slot) o; if (rulesFlags != slot.rulesFlags) return false; if (value != null ? !value.equals(slot.value) : slot.value != null) return false; if (tags != null ? !tags.equals(slot.tags) : slot.tags != null) return false; return validators != null ? validators.equals(slot.validators) : slot.validators == null; }
private boolean validate(char val) { return validators == null || validators.validate(val); }
public Slot(int rules, @Nullable Character value, @Nullable SlotValidatorSet validators) { this.rulesFlags = rules; this.value = value; this.validators = validators == null ? new SlotValidatorSet() : validators; }
@Override public int hashCode() { int result = rulesFlags; result = 31 * result + (value != null ? value.hashCode() : 0); result = 31 * result + (tags != null ? tags.hashCode() : 0); result = 31 * result + (validators != null ? validators.hashCode() : 0); return result; }
public int countValidIn(Collection<Character> chars) { if (chars == null) { throw new IllegalArgumentException("String to validate cannot be null"); } int result = 0; for (Character c : chars) { if (c == null) { throw new NullPointerException("We don't support collections with null elements"); } if (validate(c)) { result++; } } return result; }
@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; } }
@Test public void replace(){ Mask mask = new MaskImpl( new Slot[]{ new Slot(Slot.RULE_INPUT_REPLACE, '1', SlotValidatorSet.setOf(new SlotValidators.GenerousValidator())), new Slot(Slot.RULE_INPUT_REPLACE, '2', SlotValidatorSet.setOf(new SlotValidators.GenerousValidator())), new Slot(Slot.RULE_INPUT_REPLACE, '3', SlotValidatorSet.setOf(new SlotValidators.GenerousValidator())), new Slot(Slot.RULE_INPUT_REPLACE, null, SlotValidatorSet.setOf(new SlotValidators.GenerousValidator())) }, true ); assertEquals("123", mask.toString()); assertEquals(1,mask.insertFront("0")); assertEquals(2,mask.insertAt(1, "1")); assertEquals("013", mask.toString()); }
@Test public void parcelable() { Slot before = new Slot(Slot.RULES_DEFAULT, 'x', SlotValidatorSet.setOf(new SlotValidators.MaskedDigitValidator())); Parcel parcel = Parcel.obtain(); before.writeToParcel(parcel, 0); parcel.setDataPosition(0); Slot after = Slot.CREATOR.createFromParcel(parcel); assertEquals(before, after); parcel.recycle(); }