package com.github.liblevenshtein.transducer.factory; import java.io.Serializable; import lombok.AccessLevel; import lombok.NoArgsConstructor; import lombok.Setter; import com.github.liblevenshtein.transducer.MergeAndSplitPositionTransitionFunction; import com.github.liblevenshtein.transducer.PositionTransitionFunction; import com.github.liblevenshtein.transducer.StandardPositionTransitionFunction; import com.github.liblevenshtein.transducer.TranspositionPositionTransitionFunction; /** * Builds position-transition functions for Levenshtein states. * @author Dylon Edwards * @since 2.1.0 */ @Setter @NoArgsConstructor(access = AccessLevel.PROTECTED) public abstract class PositionTransitionFactory implements Serializable { private static final long serialVersionUID = 1L; /** * Builds Levenshtein states. */ protected StateFactory stateFactory; /** * Builds Levenshtein positions. */ protected PositionFactory positionFactory; /** * Builds a new position-transition function. * @return New position-transition function. */ public abstract PositionTransitionFunction build(); /** * Builds position-transition functions for standard, Levenshtein states. * @author Dylon Edwards * @since 2.1.0 */ public static class ForStandardPositions extends PositionTransitionFactory { private static final long serialVersionUID = 1L; /** * {@inheritDoc} */ @Override public PositionTransitionFunction build() { return new StandardPositionTransitionFunction() .stateFactory(stateFactory) .positionFactory(positionFactory); } } /** * Builds position-transition functions for transposition, Levenshtein states. * @author Dylon Edwards * @since 2.1.0 */ public static class ForTranspositionPositions extends PositionTransitionFactory { private static final long serialVersionUID = 1L; /** * {@inheritDoc} */ @Override public PositionTransitionFunction build() { return new TranspositionPositionTransitionFunction() .stateFactory(stateFactory) .positionFactory(positionFactory); } } /** * Builds position-transition functions for merge-and-split, Levenshtein states. * @author Dylon Edwards * @since 2.1.0 */ public static class ForMergeAndSplitPositions extends PositionTransitionFactory { private static final long serialVersionUID = 1L; /** * {@inheritDoc} */ @Override public PositionTransitionFunction build() { return new MergeAndSplitPositionTransitionFunction() .stateFactory(stateFactory) .positionFactory(positionFactory); } } }