Created
June 29, 2015 12:53
-
-
Save scriptum/dafdcbdcf024a7fd6b90 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl; | |
| import org.springframework.context.ApplicationContext; | |
| import org.springframework.context.ConfigurableApplicationContext; | |
| import org.springframework.context.support.ClassPathXmlApplicationContext; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.FizzBuzz; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.parameters.FizzBuzzUpperLimitParameter; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.parameters.DefaultFizzBuzzUpperLimitParameter; | |
| public final class Main { | |
| public static void main(final String[] args) { | |
| final ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml"); | |
| final FizzBuzz myFizzBuzz = (FizzBuzz) context.getBean("standardFizzBuzz"); | |
| final FizzBuzzUpperLimitParameter fizzBuzzUpperLimit = new DefaultFizzBuzzUpperLimitParameter(); | |
| myFizzBuzz.fizzBuzz(fizzBuzzUpperLimit.obtainUpperLimitValue()); | |
| ((ConfigurableApplicationContext) context).close(); | |
| } | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.parameters; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.parameters.FizzBuzzUpperLimitParameter; | |
| public final class DefaultFizzBuzzUpperLimitParameter implements FizzBuzzUpperLimitParameter { | |
| public static final int DEFAULT_FIZZ_BUZZ_UPPER_LIMIT_PARAMETER_VALUE = 100; | |
| private final int fizzBuzzUpperLimitParameterValue; | |
| public DefaultFizzBuzzUpperLimitParameter() { | |
| this.fizzBuzzUpperLimitParameterValue = DefaultFizzBuzzUpperLimitParameter.DEFAULT_FIZZ_BUZZ_UPPER_LIMIT_PARAMETER_VALUE; | |
| } | |
| public DefaultFizzBuzzUpperLimitParameter(final int fizzBuzzUpperLimitParameterValue) { | |
| this.fizzBuzzUpperLimitParameterValue = fizzBuzzUpperLimitParameterValue; | |
| } | |
| public int obtainUpperLimitValue() { | |
| return this.fizzBuzzUpperLimitParameterValue; | |
| } | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.printers; | |
| import org.springframework.beans.factory.annotation.Autowired; | |
| import org.springframework.stereotype.Service; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.factories.FizzStringReturnerFactory; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.factories.SystemOutFizzBuzzOutputStrategyFactory; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.printers.StringPrinter; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.stringreturners.StringStringReturner; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.strategies.adapters.FizzBuzzOutputStrategyToFizzBuzzExceptionSafeOutputStrategyAdapter; | |
| @Service | |
| public class FizzStringPrinter implements StringPrinter { | |
| private final SystemOutFizzBuzzOutputStrategyFactory _systemOutFizzBuzzOutputStrategyFactory; | |
| private final FizzStringReturnerFactory _fizzStringReturnerFactory; | |
| @Autowired | |
| public FizzStringPrinter(final FizzStringReturnerFactory _fizzStringReturnerFactory, | |
| final SystemOutFizzBuzzOutputStrategyFactory _systemOutFizzBuzzOutputStrategyFactory) { | |
| this._fizzStringReturnerFactory = _fizzStringReturnerFactory; | |
| this._systemOutFizzBuzzOutputStrategyFactory = _systemOutFizzBuzzOutputStrategyFactory; | |
| } | |
| public void print() { | |
| final StringStringReturner myFizzStringReturner = this._fizzStringReturnerFactory | |
| .createStringStringReturner(); | |
| final FizzBuzzOutputStrategyToFizzBuzzExceptionSafeOutputStrategyAdapter myOutputAdapter = | |
| new FizzBuzzOutputStrategyToFizzBuzzExceptionSafeOutputStrategyAdapter( | |
| this._systemOutFizzBuzzOutputStrategyFactory.createOutputStrategy()); | |
| myOutputAdapter.output(myFizzStringReturner.getReturnString()); | |
| } | |
| @Override | |
| public void printValue(final Object value) { | |
| this.print(); | |
| } | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.printers; | |
| import org.springframework.beans.factory.annotation.Autowired; | |
| import org.springframework.stereotype.Service; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.factories.SystemOutFizzBuzzOutputStrategyFactory; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.stringreturners.NewLineStringReturner; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.strategies.adapters.FizzBuzzOutputStrategyToFizzBuzzExceptionSafeOutputStrategyAdapter; | |
| @Service | |
| public class NewLinePrinter { | |
| private final SystemOutFizzBuzzOutputStrategyFactory _systemOutFizzBuzzOutputStrategyFactory; | |
| @Autowired | |
| public NewLinePrinter(final SystemOutFizzBuzzOutputStrategyFactory _systemOutFizzBuzzOutputStrategyFactory) { | |
| this._systemOutFizzBuzzOutputStrategyFactory = _systemOutFizzBuzzOutputStrategyFactory; | |
| } | |
| public void printNewLine() { | |
| final NewLineStringReturner myNewLineStringReturner = new NewLineStringReturner(); | |
| final String myNewLineString = myNewLineStringReturner.getReturnString(); | |
| final FizzBuzzOutputStrategyToFizzBuzzExceptionSafeOutputStrategyAdapter myOutputAdapter = | |
| new FizzBuzzOutputStrategyToFizzBuzzExceptionSafeOutputStrategyAdapter( | |
| this._systemOutFizzBuzzOutputStrategyFactory.createOutputStrategy()); | |
| myOutputAdapter.output(myNewLineString); | |
| } | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.printers; | |
| import org.springframework.beans.factory.annotation.Autowired; | |
| import org.springframework.stereotype.Service; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.factories.SystemOutFizzBuzzOutputStrategyFactory; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.stringreturners.BuzzStringReturner; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.strategies.adapters.FizzBuzzOutputStrategyToFizzBuzzExceptionSafeOutputStrategyAdapter; | |
| @Service | |
| public class BuzzPrinter { | |
| private final SystemOutFizzBuzzOutputStrategyFactory _systemOutFizzBuzzOutputStrategyFactory; | |
| @Autowired | |
| public BuzzPrinter(final SystemOutFizzBuzzOutputStrategyFactory _systemOutFizzBuzzOutputStrategyFactory) { | |
| this._systemOutFizzBuzzOutputStrategyFactory = _systemOutFizzBuzzOutputStrategyFactory; | |
| } | |
| public void printBuzz() { | |
| final BuzzStringReturner myBuzzStringReturner = new BuzzStringReturner(); | |
| final FizzBuzzOutputStrategyToFizzBuzzExceptionSafeOutputStrategyAdapter myOutputAdapter = | |
| new FizzBuzzOutputStrategyToFizzBuzzExceptionSafeOutputStrategyAdapter( | |
| this._systemOutFizzBuzzOutputStrategyFactory.createOutputStrategy()); | |
| myOutputAdapter.output(myBuzzStringReturner.getReturnString()); | |
| } | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.printers; | |
| import org.springframework.beans.factory.annotation.Autowired; | |
| import org.springframework.stereotype.Service; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.factories.NewLineStringReturnerFactory; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.factories.SystemOutFizzBuzzOutputStrategyFactory; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.printers.StringPrinter; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.stringreturners.StringStringReturner; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.strategies.adapters.FizzBuzzOutputStrategyToFizzBuzzExceptionSafeOutputStrategyAdapter; | |
| @Service | |
| public class NewLineStringPrinter implements StringPrinter { | |
| private final SystemOutFizzBuzzOutputStrategyFactory _systemOutFizzBuzzOutputStrategyFactory; | |
| private final NewLineStringReturnerFactory _newLineStringReturnerFactory; | |
| @Autowired | |
| public NewLineStringPrinter(final NewLineStringReturnerFactory _newLineStringReturnerFactory, | |
| final SystemOutFizzBuzzOutputStrategyFactory _systemOutFizzBuzzOutputStrategyFactory) { | |
| this._newLineStringReturnerFactory = _newLineStringReturnerFactory; | |
| this._systemOutFizzBuzzOutputStrategyFactory = _systemOutFizzBuzzOutputStrategyFactory; | |
| } | |
| public void print() { | |
| final StringStringReturner myNewLineStringReturner = this._newLineStringReturnerFactory | |
| .createStringStringReturner(); | |
| final String myNewLineString = myNewLineStringReturner.getReturnString(); | |
| final FizzBuzzOutputStrategyToFizzBuzzExceptionSafeOutputStrategyAdapter myOutputAdapter = | |
| new FizzBuzzOutputStrategyToFizzBuzzExceptionSafeOutputStrategyAdapter( | |
| this._systemOutFizzBuzzOutputStrategyFactory.createOutputStrategy()); | |
| myOutputAdapter.output(myNewLineString); | |
| } | |
| @Override | |
| public void printValue(final Object value) { | |
| this.print(); | |
| } | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.printers; | |
| import org.springframework.beans.factory.annotation.Autowired; | |
| import org.springframework.stereotype.Service; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.factories.BuzzStringReturnerFactory; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.factories.SystemOutFizzBuzzOutputStrategyFactory; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.printers.StringPrinter; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.stringreturners.StringStringReturner; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.strategies.adapters.FizzBuzzOutputStrategyToFizzBuzzExceptionSafeOutputStrategyAdapter; | |
| @Service | |
| public class BuzzStringPrinter implements StringPrinter { | |
| private final SystemOutFizzBuzzOutputStrategyFactory _outputStrategyFactory; | |
| private final BuzzStringReturnerFactory _buzzStringReturnerFactory; | |
| @Autowired | |
| public BuzzStringPrinter(final BuzzStringReturnerFactory _buzzStringReturnerFactory, | |
| final SystemOutFizzBuzzOutputStrategyFactory _outputStrategyFactory) { | |
| this._buzzStringReturnerFactory = _buzzStringReturnerFactory; | |
| this._outputStrategyFactory = _outputStrategyFactory; | |
| } | |
| public void print() { | |
| final StringStringReturner myBuzzStringReturner = this._buzzStringReturnerFactory | |
| .createStringStringReturner(); | |
| final FizzBuzzOutputStrategyToFizzBuzzExceptionSafeOutputStrategyAdapter myOutputAdapter = | |
| new FizzBuzzOutputStrategyToFizzBuzzExceptionSafeOutputStrategyAdapter( | |
| this._outputStrategyFactory.createOutputStrategy()); | |
| myOutputAdapter.output(myBuzzStringReturner.getReturnString()); | |
| } | |
| @Override | |
| public void printValue(final Object value) { | |
| this.print(); | |
| } | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.printers; | |
| import org.springframework.beans.factory.annotation.Autowired; | |
| import org.springframework.stereotype.Service; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.factories.IntegerIntegerStringReturnerFactory; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.factories.SystemOutFizzBuzzOutputStrategyFactory; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.printers.IntegerPrinter; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.stringreturners.IntegerStringReturner; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.strategies.adapters.FizzBuzzOutputStrategyToFizzBuzzExceptionSafeOutputStrategyAdapter; | |
| @Service | |
| public class IntegerIntegerPrinter implements IntegerPrinter { | |
| private final SystemOutFizzBuzzOutputStrategyFactory _systemOutFizzBuzzOutputStrategyFactory; | |
| private final IntegerIntegerStringReturnerFactory _integerIntegerStringReturnerFactory; | |
| @Autowired | |
| public IntegerIntegerPrinter(final IntegerIntegerStringReturnerFactory _integerIntegerStringReturnerFactory, | |
| final SystemOutFizzBuzzOutputStrategyFactory _systemOutFizzBuzzOutputStrategyFactory) { | |
| this._integerIntegerStringReturnerFactory = _integerIntegerStringReturnerFactory; | |
| this._systemOutFizzBuzzOutputStrategyFactory = _systemOutFizzBuzzOutputStrategyFactory; | |
| } | |
| public void printInteger(final int theInteger) { | |
| final IntegerStringReturner myIntegerStringReturner = | |
| this._integerIntegerStringReturnerFactory.createIntegerStringReturner(); | |
| final String myIntegerString = myIntegerStringReturner.getIntegerReturnString(theInteger); | |
| final FizzBuzzOutputStrategyToFizzBuzzExceptionSafeOutputStrategyAdapter myOutputAdapter = | |
| new FizzBuzzOutputStrategyToFizzBuzzExceptionSafeOutputStrategyAdapter( | |
| this._systemOutFizzBuzzOutputStrategyFactory.createOutputStrategy()); | |
| myOutputAdapter.output(myIntegerString); | |
| } | |
| @Override | |
| public void print() { | |
| throw new UnsupportedOperationException( | |
| "com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.printers.IntegerIntegerPrinter.print()"); | |
| } | |
| @Override | |
| public void printValue(final Object value) { | |
| this.printInteger((Integer) value); | |
| } | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.printers; | |
| import org.springframework.beans.factory.annotation.Autowired; | |
| import org.springframework.stereotype.Service; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.factories.SystemOutFizzBuzzOutputStrategyFactory; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.stringreturners.FizzStringReturner; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.strategies.adapters.FizzBuzzOutputStrategyToFizzBuzzExceptionSafeOutputStrategyAdapter; | |
| @Service | |
| public class FizzPrinter { | |
| private final SystemOutFizzBuzzOutputStrategyFactory _systemOutFizzBuzzOutputStrategyFactory; | |
| @Autowired | |
| public FizzPrinter(final SystemOutFizzBuzzOutputStrategyFactory _systemOutFizzBuzzOutputStrategyFactory) { | |
| this._systemOutFizzBuzzOutputStrategyFactory = _systemOutFizzBuzzOutputStrategyFactory; | |
| } | |
| public void printFizz() { | |
| final FizzStringReturner myFizzStringReturner = new FizzStringReturner(); | |
| final FizzBuzzOutputStrategyToFizzBuzzExceptionSafeOutputStrategyAdapter myOutputAdapter = | |
| new FizzBuzzOutputStrategyToFizzBuzzExceptionSafeOutputStrategyAdapter( | |
| this._systemOutFizzBuzzOutputStrategyFactory.createOutputStrategy()); | |
| myOutputAdapter.output(myFizzStringReturner.getReturnString()); | |
| } | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.printers; | |
| import org.springframework.beans.factory.annotation.Autowired; | |
| import org.springframework.stereotype.Service; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.factories.SystemOutFizzBuzzOutputStrategyFactory; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.stringreturners.IntegerIntegerStringReturner; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.stringreturners.IntegerStringReturner; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.strategies.adapters.FizzBuzzOutputStrategyToFizzBuzzExceptionSafeOutputStrategyAdapter; | |
| @Service | |
| public class IntegerPrinter { | |
| private final SystemOutFizzBuzzOutputStrategyFactory _systemOutFizzBuzzOutputStrategyFactory; | |
| @Autowired | |
| public IntegerPrinter(final SystemOutFizzBuzzOutputStrategyFactory _systemOutFizzBuzzOutputStrategyFactory) { | |
| this._systemOutFizzBuzzOutputStrategyFactory = _systemOutFizzBuzzOutputStrategyFactory; | |
| } | |
| public void printInteger(final int theInteger) { | |
| final IntegerStringReturner myIntegerIntegerStringReturner = new IntegerIntegerStringReturner(); | |
| final String myIntegerString = myIntegerIntegerStringReturner | |
| .getIntegerReturnString(theInteger); | |
| final FizzBuzzOutputStrategyToFizzBuzzExceptionSafeOutputStrategyAdapter myOutputAdapter = | |
| new FizzBuzzOutputStrategyToFizzBuzzExceptionSafeOutputStrategyAdapter( | |
| this._systemOutFizzBuzzOutputStrategyFactory.createOutputStrategy()); | |
| myOutputAdapter.output(myIntegerString); | |
| } | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl; | |
| import org.springframework.beans.factory.annotation.Autowired; | |
| import org.springframework.stereotype.Service; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.FizzBuzz; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.factories.FizzBuzzSolutionStrategyFactory; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.strategies.FizzBuzzSolutionStrategy; | |
| @Service | |
| public class StandardFizzBuzz implements FizzBuzz { | |
| private final FizzBuzzSolutionStrategyFactory _fizzBuzzSolutionStrategyFactory; | |
| @Autowired | |
| public StandardFizzBuzz(final FizzBuzzSolutionStrategyFactory _fizzBuzzSolutionStrategyFactory) { | |
| this._fizzBuzzSolutionStrategyFactory = _fizzBuzzSolutionStrategyFactory; | |
| } | |
| public void fizzBuzz(final int nFizzBuzzUpperLimit) { | |
| final FizzBuzzSolutionStrategy mySolutionStrategy = | |
| this._fizzBuzzSolutionStrategyFactory.createFizzBuzzSolutionStrategy(); | |
| mySolutionStrategy.runSolution(nFizzBuzzUpperLimit); | |
| } | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.stringreturners; | |
| import org.springframework.stereotype.Service; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.stringreturners.StringStringReturner; | |
| @Service | |
| public class FizzStringReturner implements StringStringReturner { | |
| public String getReturnString() { | |
| final StringBuilder myStringBuilder = new StringBuilder("Fizz"); | |
| final String myString = myStringBuilder.toString(); | |
| return new String(myString); | |
| } | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.stringreturners; | |
| import org.springframework.stereotype.Service; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.stringreturners.StringStringReturner; | |
| @Service | |
| public class BuzzStringReturner implements StringStringReturner { | |
| public String getReturnString() { | |
| final StringBuilder myStringBuilder = new StringBuilder("Buzz"); | |
| final String myString = myStringBuilder.toString(); | |
| return new String(myString); | |
| } | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.stringreturners; | |
| import org.springframework.stereotype.Service; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.stringreturners.StringStringReturner; | |
| @Service | |
| public class NewLineStringReturner implements StringStringReturner { | |
| public String getReturnString() { | |
| final String systemDefaultNewLineString = System.getProperty("line.separator"); | |
| final StringBuilder myStringBuilder = new StringBuilder(systemDefaultNewLineString); | |
| final String myString = myStringBuilder.toString(); | |
| return new String(myString); | |
| } | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.stringreturners; | |
| import org.springframework.stereotype.Service; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.stringreturners.IntegerStringReturner; | |
| @Service | |
| public class IntegerIntegerStringReturner implements IntegerStringReturner { | |
| public String getIntegerReturnString(final int theInteger) { | |
| final Integer myIntegerToBeConvertedToString = new Integer(theInteger); | |
| final StringBuilder myStringBuilder = new StringBuilder(myIntegerToBeConvertedToString.toString()); | |
| final String myResultingStringFromIntegerToStringConversion = myStringBuilder.toString(); | |
| return new String(myResultingStringFromIntegerToStringConversion); | |
| } | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.visitors; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.printers.DataPrinter; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.strategies.IsEvenlyDivisibleStrategy; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.visitors.OutputGenerationContext; | |
| public final class FizzBuzzOutputGenerationContext implements OutputGenerationContext { | |
| private final DataPrinter printer; | |
| private final IsEvenlyDivisibleStrategy strategy; | |
| public FizzBuzzOutputGenerationContext(final IsEvenlyDivisibleStrategy strategy, | |
| final DataPrinter printer) { | |
| super(); | |
| this.strategy = strategy; | |
| this.printer = printer; | |
| } | |
| @Override | |
| public DataPrinter getPrinter() { | |
| return this.printer; | |
| } | |
| @Override | |
| public IsEvenlyDivisibleStrategy getStrategy() { | |
| return this.strategy; | |
| } | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.visitors; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.printers.DataPrinter; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.strategies.IsEvenlyDivisibleStrategy; | |
| import org.springframework.stereotype.Service; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.visitors.OutputGenerationContext; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.visitors.OutputGenerationContextVisitor; | |
| @Service | |
| public class FizzBuzzOutputGenerationContextVisitor implements | |
| OutputGenerationContextVisitor { | |
| @Override | |
| public void visit(final OutputGenerationContext context, final int nGenerationParameter) { | |
| final IsEvenlyDivisibleStrategy strategy = context.getStrategy(); | |
| if (strategy.isEvenlyDivisible(nGenerationParameter)) { | |
| final DataPrinter printer = context.getPrinter(); | |
| printer.printValue(new Integer(nGenerationParameter)); | |
| } | |
| } | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.factories; | |
| import org.springframework.beans.factory.annotation.Autowired; | |
| import org.springframework.stereotype.Service; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.strategies.NoFizzNoBuzzStrategy; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.strategies.IsEvenlyDivisibleStrategy; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.factories.IsEvenlyDivisibleStrategyFactory; | |
| @Service | |
| public class NoFizzNoBuzzStrategyFactory implements | |
| IsEvenlyDivisibleStrategyFactory { | |
| private final NoFizzNoBuzzStrategy _noFizzNoBuzzStrategy; | |
| @Autowired | |
| public NoFizzNoBuzzStrategyFactory(final NoFizzNoBuzzStrategy _noFizzNoBuzzStrategy) { | |
| this._noFizzNoBuzzStrategy = _noFizzNoBuzzStrategy; | |
| } | |
| @Override | |
| public IsEvenlyDivisibleStrategy createIsEvenlyDivisibleStrategy() { | |
| return this._noFizzNoBuzzStrategy; | |
| } | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.factories; | |
| import org.springframework.beans.factory.annotation.Autowired; | |
| import org.springframework.stereotype.Service; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.printers.FizzStringPrinter; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.factories.StringPrinterFactory; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.printers.StringPrinter; | |
| @Service | |
| public class FizzStringPrinterFactory implements StringPrinterFactory { | |
| private final FizzStringPrinter _fizzStringPrinter; | |
| @Autowired | |
| public FizzStringPrinterFactory(final FizzStringPrinter _fizzStringPrinter) { | |
| this._fizzStringPrinter = _fizzStringPrinter; | |
| } | |
| @Override | |
| public StringPrinter createStringPrinter() { | |
| return this._fizzStringPrinter; | |
| } | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.factories; | |
| import org.springframework.beans.factory.annotation.Autowired; | |
| import org.springframework.stereotype.Service; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.printers.NewLineStringPrinter; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.factories.StringPrinterFactory; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.printers.StringPrinter; | |
| @Service | |
| public class NewLineStringPrinterFactory implements StringPrinterFactory { | |
| private final NewLineStringPrinter _newLineStringPrinter; | |
| @Autowired | |
| public NewLineStringPrinterFactory(final NewLineStringPrinter _newLineStringPrinter) { | |
| this._newLineStringPrinter = _newLineStringPrinter; | |
| } | |
| @Override | |
| public StringPrinter createStringPrinter() { | |
| return this._newLineStringPrinter; | |
| } | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.factories; | |
| import org.springframework.beans.factory.annotation.Autowired; | |
| import org.springframework.stereotype.Service; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.stringreturners.BuzzStringReturner; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.factories.StringStringReturnerFactory; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.stringreturners.StringStringReturner; | |
| @Service | |
| public class BuzzStringReturnerFactory implements StringStringReturnerFactory { | |
| private final BuzzStringReturner _myBuzzStringReturner; | |
| @Autowired | |
| public BuzzStringReturnerFactory(final BuzzStringReturner _myBuzzStringReturner) { | |
| this._myBuzzStringReturner = _myBuzzStringReturner; | |
| } | |
| @Override | |
| public StringStringReturner createStringStringReturner() { | |
| return this._myBuzzStringReturner; | |
| } | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.factories; | |
| import org.springframework.beans.factory.annotation.Autowired; | |
| import org.springframework.stereotype.Service; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.stringreturners.NewLineStringReturner; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.factories.StringStringReturnerFactory; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.stringreturners.StringStringReturner; | |
| @Service | |
| public class NewLineStringReturnerFactory implements | |
| StringStringReturnerFactory { | |
| private final NewLineStringReturner _newlineStringReturner; | |
| @Autowired | |
| public NewLineStringReturnerFactory(final NewLineStringReturner _newlineStringReturner) { | |
| this._newlineStringReturner = _newlineStringReturner; | |
| } | |
| @Override | |
| public StringStringReturner createStringStringReturner() { | |
| return this._newlineStringReturner; | |
| } | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.factories; | |
| import org.springframework.beans.factory.annotation.Autowired; | |
| import org.springframework.stereotype.Service; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.printers.BuzzStringPrinter; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.factories.StringPrinterFactory; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.printers.StringPrinter; | |
| @Service | |
| public class BuzzStringPrinterFactory implements StringPrinterFactory { | |
| private final BuzzStringPrinter _buzzStringPrinter; | |
| @Autowired | |
| public BuzzStringPrinterFactory(final BuzzStringPrinter _buzzStringPrinter) { | |
| this._buzzStringPrinter = _buzzStringPrinter; | |
| } | |
| @Override | |
| public StringPrinter createStringPrinter() { | |
| return this._buzzStringPrinter; | |
| } | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.factories; | |
| import org.springframework.beans.factory.annotation.Autowired; | |
| import org.springframework.stereotype.Service; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.printers.IntegerIntegerPrinter; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.factories.IntegerPrinterFactory; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.printers.IntegerPrinter; | |
| @Service | |
| public class IntegerIntegerPrinterFactory implements IntegerPrinterFactory { | |
| private final IntegerIntegerPrinter _integerIntegerPrinter; | |
| @Autowired | |
| public IntegerIntegerPrinterFactory(final IntegerIntegerPrinter _integerIntegerPrinter) { | |
| this._integerIntegerPrinter = _integerIntegerPrinter; | |
| } | |
| @Override | |
| public IntegerPrinter createPrinter() { | |
| return this._integerIntegerPrinter; | |
| } | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.factories; | |
| import org.springframework.beans.factory.annotation.Autowired; | |
| import org.springframework.stereotype.Service; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.factories.FizzBuzzSolutionStrategyFactory; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.strategies.FizzBuzzSolutionStrategy; | |
| @Service | |
| public class EnterpriseGradeFizzBuzzSolutionStrategyFactory implements FizzBuzzSolutionStrategyFactory { | |
| private final FizzBuzzSolutionStrategy _fizzBuzzSolutionStrategy; | |
| @Autowired | |
| public EnterpriseGradeFizzBuzzSolutionStrategyFactory(final FizzBuzzSolutionStrategy _fizzBuzzSolutionStrategy) { | |
| this._fizzBuzzSolutionStrategy = _fizzBuzzSolutionStrategy; | |
| } | |
| @Override | |
| public FizzBuzzSolutionStrategy createFizzBuzzSolutionStrategy() { | |
| return this._fizzBuzzSolutionStrategy; | |
| } | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.factories; | |
| import org.springframework.beans.factory.annotation.Autowired; | |
| import org.springframework.stereotype.Service; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.loop.LoopCondition; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.loop.LoopFinalizer; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.loop.LoopInitializer; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.loop.LoopStep; | |
| @Service | |
| public class LoopComponentFactory { | |
| private final LoopCondition _loopCondition; | |
| private final LoopInitializer _loopInitializer; | |
| private final LoopStep _loopStep; | |
| @Autowired | |
| public LoopComponentFactory(final LoopCondition _loopCondition, final LoopInitializer _loopInitializer, | |
| final LoopStep _loopStep) { | |
| this._loopCondition = _loopCondition; | |
| this._loopInitializer = _loopInitializer; | |
| this._loopStep = _loopStep; | |
| } | |
| public LoopCondition createLoopCondition() { | |
| return this._loopCondition; | |
| } | |
| public LoopInitializer createLoopInitializer() { | |
| return this._loopInitializer; | |
| } | |
| public LoopFinalizer createLoopFinalizer(final int nLoopFinalValue) { | |
| final LoopFinalizer myLoopFinalizer = new LoopFinalizer(nLoopFinalValue); | |
| return myLoopFinalizer; | |
| } | |
| public LoopStep createLoopStep() { | |
| return this._loopStep; | |
| } | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.factories; | |
| import org.springframework.beans.factory.annotation.Autowired; | |
| import org.springframework.stereotype.Service; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.visitors.FizzBuzzOutputGenerationContextVisitor; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.factories.OutputGenerationContextVisitorFactory; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.visitors.OutputGenerationContextVisitor; | |
| @Service | |
| public class FizzBuzzOutputGenerationContextVisitorFactory implements | |
| OutputGenerationContextVisitorFactory { | |
| private final FizzBuzzOutputGenerationContextVisitor _fizzBuzzOutputGenerationContextVisitor; | |
| @Autowired | |
| public FizzBuzzOutputGenerationContextVisitorFactory( | |
| final FizzBuzzOutputGenerationContextVisitor _fizzBuzzOutputGenerationContextVisitor) { | |
| this._fizzBuzzOutputGenerationContextVisitor = _fizzBuzzOutputGenerationContextVisitor; | |
| } | |
| @Override | |
| public OutputGenerationContextVisitor createVisitor() { | |
| return this._fizzBuzzOutputGenerationContextVisitor; | |
| } | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.factories; | |
| import org.springframework.beans.factory.annotation.Autowired; | |
| import org.springframework.stereotype.Service; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.strategies.FizzStrategy; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.factories.IsEvenlyDivisibleStrategyFactory; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.strategies.IsEvenlyDivisibleStrategy; | |
| @Service | |
| public class FizzStrategyFactory implements IsEvenlyDivisibleStrategyFactory { | |
| private final FizzStrategy _fizzStrategy; | |
| @Autowired | |
| public FizzStrategyFactory(final FizzStrategy _fizzStrategy) { | |
| this._fizzStrategy = _fizzStrategy; | |
| } | |
| @Override | |
| public IsEvenlyDivisibleStrategy createIsEvenlyDivisibleStrategy() { | |
| return this._fizzStrategy; | |
| } | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.factories; | |
| import org.springframework.beans.factory.annotation.Autowired; | |
| import org.springframework.stereotype.Service; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.stringreturners.FizzStringReturner; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.factories.StringStringReturnerFactory; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.stringreturners.StringStringReturner; | |
| @Service | |
| public class FizzStringReturnerFactory implements StringStringReturnerFactory { | |
| private final FizzStringReturner _fizzStringReturner; | |
| @Autowired | |
| public FizzStringReturnerFactory(final FizzStringReturner _fizzStringReturner) { | |
| this._fizzStringReturner = _fizzStringReturner; | |
| } | |
| @Override | |
| public StringStringReturner createStringStringReturner() { | |
| return this._fizzStringReturner; | |
| } | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.factories; | |
| import org.springframework.beans.factory.annotation.Autowired; | |
| import org.springframework.stereotype.Service; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.strategies.BuzzStrategy; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.factories.IsEvenlyDivisibleStrategyFactory; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.strategies.IsEvenlyDivisibleStrategy; | |
| @Service | |
| public class BuzzStrategyFactory implements IsEvenlyDivisibleStrategyFactory { | |
| private final BuzzStrategy _buzzStrategy; | |
| @Autowired | |
| public BuzzStrategyFactory(final BuzzStrategy _buzzStrategy) { | |
| this._buzzStrategy = _buzzStrategy; | |
| } | |
| @Override | |
| public IsEvenlyDivisibleStrategy createIsEvenlyDivisibleStrategy() { | |
| return this._buzzStrategy; | |
| } | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.factories; | |
| import org.springframework.beans.factory.annotation.Autowired; | |
| import org.springframework.stereotype.Service; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.stringreturners.IntegerIntegerStringReturner; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.factories.IntegerStringReturnerFactory; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.stringreturners.IntegerStringReturner; | |
| @Service | |
| public class IntegerIntegerStringReturnerFactory implements | |
| IntegerStringReturnerFactory { | |
| private final IntegerIntegerStringReturner _integerIntegerStringReturner; | |
| @Autowired | |
| public IntegerIntegerStringReturnerFactory(final IntegerIntegerStringReturner _integerIntegerStringReturner) { | |
| this._integerIntegerStringReturner = _integerIntegerStringReturner; | |
| } | |
| @Override | |
| public IntegerStringReturner createIntegerStringReturner() { | |
| return this._integerIntegerStringReturner; | |
| } | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.factories; | |
| import org.springframework.beans.factory.annotation.Autowired; | |
| import org.springframework.stereotype.Service; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.strategies.SystemOutFizzBuzzOutputStrategy; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.factories.FizzBuzzOutputStrategyFactory; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.strategies.FizzBuzzOutputStrategy; | |
| @Service | |
| public class SystemOutFizzBuzzOutputStrategyFactory implements | |
| FizzBuzzOutputStrategyFactory { | |
| private final SystemOutFizzBuzzOutputStrategy _systemOutFizzBuzzOutputStrategy; | |
| @Autowired | |
| public SystemOutFizzBuzzOutputStrategyFactory(final SystemOutFizzBuzzOutputStrategy _systemOutFizzBuzzOutputStrategy) { | |
| this._systemOutFizzBuzzOutputStrategy = _systemOutFizzBuzzOutputStrategy; | |
| } | |
| @Override | |
| public FizzBuzzOutputStrategy createOutputStrategy() { | |
| return this._systemOutFizzBuzzOutputStrategy; | |
| } | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.loop; | |
| import org.springframework.stereotype.Service; | |
| @Service | |
| public class LoopInitializer { | |
| private static final int LOOP_INIT_VALUE = 1; | |
| public int getLoopInitializationPoint() { | |
| return LoopInitializer.LOOP_INIT_VALUE; | |
| } | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.loop; | |
| import org.springframework.context.ApplicationContext; | |
| import org.springframework.context.ConfigurableApplicationContext; | |
| import org.springframework.context.support.ClassPathXmlApplicationContext; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.factories.LoopComponentFactory; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.loop.LoopContextStateManipulation; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.loop.LoopContextStateRetrieval; | |
| public final class LoopContext implements LoopContextStateManipulation, LoopContextStateRetrieval { | |
| private final LoopInitializer myLoopInitializer; | |
| private final LoopFinalizer myLoopFinalizer; | |
| private final LoopCondition myLoopCondition; | |
| private final LoopStep myLoopStep; | |
| private int myCurrentControlParameterValue; | |
| public LoopContext(final int nLoopControlParameterFinalValue) { | |
| final ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml"); | |
| final LoopComponentFactory myLoopComponentFactory = context.getBean("loopComponentFactory", | |
| LoopComponentFactory.class); | |
| this.myLoopInitializer = myLoopComponentFactory.createLoopInitializer(); | |
| this.myLoopFinalizer = myLoopComponentFactory.createLoopFinalizer(nLoopControlParameterFinalValue); | |
| this.myLoopCondition = myLoopComponentFactory.createLoopCondition(); | |
| this.myLoopStep = myLoopComponentFactory.createLoopStep(); | |
| ((ConfigurableApplicationContext) context).close(); | |
| } | |
| @Override | |
| public void start() { | |
| this.myCurrentControlParameterValue = | |
| this.myLoopInitializer.getLoopInitializationPoint(); | |
| } | |
| @Override | |
| public boolean shouldProceed() { | |
| return this.myLoopCondition.evaluateLoop(this.myCurrentControlParameterValue, | |
| this.myLoopFinalizer.getLoopFinalizationPoint()); | |
| } | |
| @Override | |
| public void proceed() { | |
| this.myCurrentControlParameterValue = | |
| this.myLoopStep.stepLoop(this.myCurrentControlParameterValue); | |
| } | |
| @Override | |
| public int getControlParameter() { | |
| return this.myCurrentControlParameterValue; | |
| } | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.loop; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.loop.LoopContextStateManipulation; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.loop.LoopContextStateRetrieval; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.loop.LoopPayloadExecution; | |
| public final class LoopRunner { | |
| private final LoopContextStateManipulation myStateManipulation; | |
| private final LoopContextStateRetrieval myStateRetrieval; | |
| private final LoopPayloadExecution myPayload; | |
| public LoopRunner(final LoopContextStateManipulation stateManipulation, | |
| final LoopContextStateRetrieval stateRetrieval, final LoopPayloadExecution payload) { | |
| this.myStateManipulation = stateManipulation; | |
| this.myStateRetrieval = stateRetrieval; | |
| this.myPayload = payload; | |
| } | |
| public void runLoop() { | |
| for (this.myStateManipulation.start(); this.myStateManipulation.shouldProceed(); this.myStateManipulation.proceed()) { | |
| this.myPayload.runLoopPayload(this.myStateRetrieval); | |
| } | |
| } | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.loop; | |
| import org.springframework.stereotype.Service; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.strategies.comparators.integercomparator.ThreeWayIntegerComparisonResult; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.strategies.comparators.integercomparator.ThreeWayIntegerComparator; | |
| @Service | |
| public class LoopCondition { | |
| public boolean evaluateLoop(final int nCurrentNumber, final int nTotalCount) { | |
| final ThreeWayIntegerComparisonResult comparisonResult = ThreeWayIntegerComparator.Compare(nCurrentNumber, | |
| nTotalCount); | |
| if (comparisonResult == ThreeWayIntegerComparisonResult.FirstIsLessThanSecond) { | |
| return true; | |
| } else if (comparisonResult == ThreeWayIntegerComparisonResult.FirstEqualsSecond) { | |
| return true; | |
| } else { | |
| return false; | |
| } | |
| } | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.loop; | |
| public final class LoopFinalizer { | |
| private final int nStoredLoopFinalValue; | |
| public LoopFinalizer(final int nLoopFinalValue) { | |
| this.nStoredLoopFinalValue = nLoopFinalValue; | |
| } | |
| public int getLoopFinalizationPoint() { | |
| return this.nStoredLoopFinalValue; | |
| } | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.loop; | |
| import org.springframework.stereotype.Service; | |
| @Service | |
| public class LoopStep { | |
| private static final int LOOP_INC_VALUE = 1; | |
| public int stepLoop(final int nCurrentNumber) { | |
| return nCurrentNumber + LoopStep.LOOP_INC_VALUE; | |
| } | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.math.arithmetics; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.ApplicationContextHolder; | |
| import javax.annotation.PostConstruct; | |
| import org.springframework.context.ApplicationContext; | |
| import org.springframework.stereotype.Service; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.strategies.comparators.integercomparator.IntegerForEqualityComparator; | |
| @Service | |
| public class NumberIsMultipleOfAnotherNumberVerifier { | |
| private static IntegerDivider integerDivider; | |
| @PostConstruct | |
| public void init() { | |
| final ApplicationContext applicationContext = ApplicationContextHolder.getApplicationContext(); | |
| this.integerDivider = applicationContext.getBean(IntegerDivider.class); | |
| } | |
| public static boolean numberIsMultipleOfAnotherNumber(final int nFirstNumber, final int nSecondNumber) { | |
| try { | |
| final int nDivideFirstIntegerBySecondIntegerResult = | |
| (NumberIsMultipleOfAnotherNumberVerifier.integerDivider.divide(nFirstNumber, nSecondNumber)); | |
| final int nMultiplyDivisionResultBySecondIntegerResult = | |
| nDivideFirstIntegerBySecondIntegerResult * nSecondNumber; | |
| if (IntegerForEqualityComparator.areTwoIntegersEqual(nMultiplyDivisionResultBySecondIntegerResult, | |
| nFirstNumber)) { | |
| return true; | |
| } else { | |
| return false; | |
| } | |
| } catch (final ArithmeticException ae) { | |
| return false; | |
| } | |
| } | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.math.arithmetics; | |
| import org.springframework.beans.factory.annotation.Autowired; | |
| import org.springframework.stereotype.Service; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.strategies.comparators.integercomparator.IntegerForEqualityComparator; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.strategies.comparators.doublecomparator.FirstIsSmallerThanSecondDoubleComparator; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.strategies.comparators.doublecomparator.FirstIsLargerThanSecondDoubleComparator; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.strategies.converters.primitivetypesconverters.DoubleToIntConverter; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.strategies.converters.primitivetypesconverters.IntToDoubleConverter; | |
| @Service | |
| public class IntegerDivider { | |
| public static final int INTEGER_DIVIDE_ZERO_VALUE = 0; | |
| public static final int INTEGER_ORIGIN_ZERO_VALUE = 0; | |
| private final FirstIsSmallerThanSecondDoubleComparator firstIsSmallerThanSecondDoubleComparator; | |
| private final FirstIsLargerThanSecondDoubleComparator firstIsLargerThanSecondDoubleComparator; | |
| @Autowired | |
| public IntegerDivider(final FirstIsLargerThanSecondDoubleComparator firstIsLargerThanSecondDoubleComparator, | |
| final FirstIsSmallerThanSecondDoubleComparator firstIsSmallerThanSecondDoubleComparator) { | |
| this.firstIsLargerThanSecondDoubleComparator = firstIsLargerThanSecondDoubleComparator; | |
| this.firstIsSmallerThanSecondDoubleComparator = firstIsSmallerThanSecondDoubleComparator; | |
| } | |
| public int divide(final int nFirstInteger, final int nSecondInteger) { | |
| final boolean denominatorEqualsZero = | |
| IntegerForEqualityComparator.areTwoIntegersEqual(nSecondInteger, IntegerDivider.INTEGER_DIVIDE_ZERO_VALUE); | |
| if (denominatorEqualsZero) { | |
| throw new ArithmeticException("An attempt was made to divide by zero."); | |
| } else { | |
| final double dbFirstNumber = IntToDoubleConverter.Convert(nFirstInteger); | |
| final double dbSecondNumber = IntToDoubleConverter.Convert(nSecondInteger); | |
| final double dbQuotient = dbFirstNumber / dbSecondNumber; | |
| double dbRoundedQuotient = (double) IntegerDivider.INTEGER_ORIGIN_ZERO_VALUE; | |
| if (this.firstIsSmallerThanSecondDoubleComparator.FirstIsSmallerThanSecond(dbQuotient, | |
| (double) IntegerDivider.INTEGER_ORIGIN_ZERO_VALUE)) { | |
| dbRoundedQuotient = Math.ceil(dbQuotient); | |
| } else if (this.firstIsLargerThanSecondDoubleComparator.FirstIsLargerThanSecond(dbQuotient, | |
| (double) IntegerDivider.INTEGER_ORIGIN_ZERO_VALUE)) { | |
| dbRoundedQuotient = Math.floor(dbQuotient); | |
| } | |
| final int nIntegerQuotient = DoubleToIntConverter.Convert(dbRoundedQuotient); | |
| return nIntegerQuotient; | |
| } | |
| } | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.strategies; | |
| import org.springframework.stereotype.Service; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.strategies.IsEvenlyDivisibleStrategy; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.strategies.constants.BuzzStrategyConstants; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.math.arithmetics.NumberIsMultipleOfAnotherNumberVerifier; | |
| @Service | |
| public class BuzzStrategy implements IsEvenlyDivisibleStrategy { | |
| public boolean isEvenlyDivisible(final int theInteger) { | |
| if (NumberIsMultipleOfAnotherNumberVerifier.numberIsMultipleOfAnotherNumber(theInteger, | |
| BuzzStrategyConstants.BUZZ_INTEGER_CONSTANT_VALUE)) { | |
| return true; | |
| } else { | |
| return false; | |
| } | |
| } | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.strategies.adapters; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.loop.LoopContextStateRetrieval; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.strategies.SingleStepOutputGenerationParameter; | |
| public final class LoopContextStateRetrievalToSingleStepOutputGenerationAdapter implements SingleStepOutputGenerationParameter { | |
| private final LoopContextStateRetrieval _retrievalObjectToAdapt; | |
| public LoopContextStateRetrievalToSingleStepOutputGenerationAdapter(final LoopContextStateRetrieval retrievalObjectToAdapt) { | |
| this._retrievalObjectToAdapt = retrievalObjectToAdapt; | |
| } | |
| @Override | |
| public int retrieveIntegerValue() { | |
| return this._retrievalObjectToAdapt.getControlParameter(); | |
| } | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.strategies.adapters; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.strategies.FizzBuzzOutputStrategy; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.strategies.FizzBuzzExceptionSafeOutputStrategy; | |
| public final class FizzBuzzOutputStrategyToFizzBuzzExceptionSafeOutputStrategyAdapter implements FizzBuzzExceptionSafeOutputStrategy { | |
| private final FizzBuzzOutputStrategy _fizzBuzzOutputStrategy; | |
| public FizzBuzzOutputStrategyToFizzBuzzExceptionSafeOutputStrategyAdapter(final FizzBuzzOutputStrategy fizzBuzzOutputStrategy) { | |
| this._fizzBuzzOutputStrategy = fizzBuzzOutputStrategy; | |
| } | |
| @Override | |
| public void output(final String outputStringToOutput) { | |
| try { | |
| this._fizzBuzzOutputStrategy.output(outputStringToOutput); | |
| } catch (final Exception exceptionFromDoingOutput) { | |
| // We're the enterprise...we don't get exceptions! | |
| } catch (final Throwable throwableFromDoingOutput) { | |
| // We're the enterprise...we don't get throwables either! | |
| } | |
| } | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.strategies; | |
| import org.springframework.stereotype.Service; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.strategies.IsEvenlyDivisibleStrategy; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.strategies.constants.FizzStrategyConstants; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.math.arithmetics.NumberIsMultipleOfAnotherNumberVerifier; | |
| @Service | |
| public class FizzStrategy implements IsEvenlyDivisibleStrategy { | |
| public boolean isEvenlyDivisible(final int theInteger) { | |
| if (NumberIsMultipleOfAnotherNumberVerifier.numberIsMultipleOfAnotherNumber(theInteger, | |
| FizzStrategyConstants.FIZZ_INTEGER_CONSTANT_VALUE)) { | |
| return true; | |
| } else { | |
| return false; | |
| } | |
| } | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.strategies; | |
| import org.springframework.stereotype.Service; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.strategies.IsEvenlyDivisibleStrategy; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.strategies.constants.NoFizzNoBuzzStrategyConstants; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.math.arithmetics.NumberIsMultipleOfAnotherNumberVerifier; | |
| @Service | |
| public class NoFizzNoBuzzStrategy implements IsEvenlyDivisibleStrategy { | |
| public boolean isEvenlyDivisible(final int theInteger) { | |
| if (!NumberIsMultipleOfAnotherNumberVerifier.numberIsMultipleOfAnotherNumber(theInteger, | |
| NoFizzNoBuzzStrategyConstants.NO_FIZZ_INTEGER_CONSTANT_VALUE)) { | |
| if (!NumberIsMultipleOfAnotherNumberVerifier.numberIsMultipleOfAnotherNumber(theInteger, | |
| NoFizzNoBuzzStrategyConstants.NO_BUZZ_INTEGER_CONSTANT_VALUE)) { | |
| return true; | |
| } else { | |
| return false; | |
| } | |
| } else if (!NumberIsMultipleOfAnotherNumberVerifier.numberIsMultipleOfAnotherNumber(theInteger, | |
| NoFizzNoBuzzStrategyConstants.NO_BUZZ_INTEGER_CONSTANT_VALUE)) { | |
| if (!NumberIsMultipleOfAnotherNumberVerifier.numberIsMultipleOfAnotherNumber(theInteger, | |
| NoFizzNoBuzzStrategyConstants.NO_FIZZ_INTEGER_CONSTANT_VALUE)) { | |
| return true; | |
| } else { | |
| return false; | |
| } | |
| } else { | |
| return false; | |
| } | |
| } | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.strategies.comparators.integercomparator; | |
| public enum ThreeWayIntegerComparisonResult { | |
| FirstIsLessThanSecond, | |
| FirstEqualsSecond, | |
| FirstIsGreaterThanSecond | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.strategies.comparators.integercomparator; | |
| import org.springframework.stereotype.Service; | |
| @Service | |
| public class ThreeWayIntegerComparator { | |
| public static ThreeWayIntegerComparisonResult Compare(final int nFirstInteger, final int nSecondInteger) { | |
| if (nFirstInteger == nSecondInteger) { | |
| return ThreeWayIntegerComparisonResult.FirstEqualsSecond; | |
| } else if (nFirstInteger < nSecondInteger) { | |
| return ThreeWayIntegerComparisonResult.FirstIsLessThanSecond; | |
| } else if (nFirstInteger > nSecondInteger) { | |
| return ThreeWayIntegerComparisonResult.FirstIsGreaterThanSecond; | |
| } else { | |
| // If the integers cannot be compared, then something is seriously wrong with the numbers. | |
| throw new UnsupportedOperationException("The integers could not be compared."); | |
| } | |
| } | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.strategies.comparators.integercomparator; | |
| import org.springframework.stereotype.Service; | |
| @Service | |
| public class IntegerForEqualityComparator { | |
| public static boolean areTwoIntegersEqual(final int nFirstInteger, final int nSecondInteger) { | |
| final ThreeWayIntegerComparisonResult comparisonResult = | |
| ThreeWayIntegerComparator.Compare(nFirstInteger, nSecondInteger); | |
| if (comparisonResult == ThreeWayIntegerComparisonResult.FirstEqualsSecond) { | |
| return true; | |
| } else { | |
| return false; | |
| } | |
| } | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.strategies.comparators.doublecomparator; | |
| import org.springframework.stereotype.Service; | |
| @Service | |
| public class FirstIsLargerThanSecondDoubleComparator { | |
| public boolean FirstIsLargerThanSecond(final double dbFirstDoubleToCompare, final double dbSecondDoubleToCompare) { | |
| if (dbFirstDoubleToCompare > dbSecondDoubleToCompare) { | |
| return true; | |
| } else { | |
| return false; | |
| } | |
| } | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.strategies.comparators.doublecomparator; | |
| import org.springframework.stereotype.Service; | |
| @Service | |
| public class FirstIsSmallerThanSecondDoubleComparator { | |
| public boolean FirstIsSmallerThanSecond(final double dbFirstDoubleToCompare, final double dbSecondDoubleToCompare) { | |
| if (dbFirstDoubleToCompare < dbSecondDoubleToCompare) { | |
| return true; | |
| } else { | |
| return false; | |
| } | |
| } | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.strategies; | |
| import java.util.ArrayList; | |
| import java.util.Iterator; | |
| import java.util.List; | |
| import org.springframework.beans.factory.annotation.Autowired; | |
| import org.springframework.stereotype.Service; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.factories.BuzzStrategyFactory; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.factories.BuzzStringPrinterFactory; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.factories.FizzBuzzOutputGenerationContextVisitorFactory; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.factories.FizzStrategyFactory; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.factories.FizzStringPrinterFactory; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.factories.IntegerIntegerPrinterFactory; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.factories.NewLineStringPrinterFactory; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.factories.NoFizzNoBuzzStrategyFactory; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.visitors.FizzBuzzOutputGenerationContext; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.printers.StringPrinter; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.strategies.OutputGenerationStrategy; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.strategies.SingleStepOutputGenerationParameter; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.visitors.OutputGenerationContext; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.visitors.OutputGenerationContextVisitor; | |
| @Service | |
| public class SingleStepOutputGenerationStrategy implements OutputGenerationStrategy { | |
| private final List<OutputGenerationContext> contexts; | |
| private final OutputGenerationContextVisitor contextVisitor; | |
| private final StringPrinter myNewLinePrinter; | |
| @Autowired | |
| public SingleStepOutputGenerationStrategy( | |
| final FizzBuzzOutputGenerationContextVisitorFactory fizzBuzzOutputGenerationContextVisitorFactory, | |
| final FizzStrategyFactory fizzStrategyFactory, | |
| final FizzStringPrinterFactory fizzStringPrinterFactory, | |
| final BuzzStrategyFactory buzzStrategyFactory, | |
| final BuzzStringPrinterFactory buzzStringPrinterFactory, | |
| final NoFizzNoBuzzStrategyFactory noFizzNoBuzzStrategyFactory, | |
| final IntegerIntegerPrinterFactory integerIntegerPrinterFactory, | |
| final NewLineStringPrinterFactory newLineStringPrinterFactory) { | |
| this.contextVisitor = fizzBuzzOutputGenerationContextVisitorFactory.createVisitor(); | |
| this.contexts = new ArrayList<OutputGenerationContext>(); | |
| this.contexts.add(new FizzBuzzOutputGenerationContext(fizzStrategyFactory.createIsEvenlyDivisibleStrategy(), | |
| fizzStringPrinterFactory.createStringPrinter())); | |
| this.contexts.add(new FizzBuzzOutputGenerationContext(buzzStrategyFactory.createIsEvenlyDivisibleStrategy(), | |
| buzzStringPrinterFactory.createStringPrinter())); | |
| this.contexts.add(new FizzBuzzOutputGenerationContext( | |
| noFizzNoBuzzStrategyFactory.createIsEvenlyDivisibleStrategy(), | |
| integerIntegerPrinterFactory.createPrinter())); | |
| this.myNewLinePrinter = newLineStringPrinterFactory.createStringPrinter(); | |
| } | |
| public void performGenerationForCurrentStep(final SingleStepOutputGenerationParameter generationParameter) { | |
| final int nGenerationParameter = generationParameter.retrieveIntegerValue(); | |
| final Iterator<OutputGenerationContext> iterator = this.contexts.iterator(); | |
| while (iterator.hasNext()) { | |
| final OutputGenerationContext context = iterator.next(); | |
| this.contextVisitor.visit(context, nGenerationParameter); | |
| } | |
| this.myNewLinePrinter.print(); | |
| } | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.strategies; | |
| import org.springframework.beans.factory.annotation.Autowired; | |
| import org.springframework.stereotype.Service; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.loop.LoopPayloadExecution; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.strategies.FizzBuzzSolutionStrategy; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.loop.LoopContext; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.loop.LoopRunner; | |
| @Service | |
| public class EnterpriseGradeFizzBuzzSolutionStrategy implements FizzBuzzSolutionStrategy { | |
| private final LoopPayloadExecution _loopPayloadExecution; | |
| @Autowired | |
| public EnterpriseGradeFizzBuzzSolutionStrategy(final LoopPayloadExecution _loopPayloadExecution) { | |
| this._loopPayloadExecution = _loopPayloadExecution; | |
| } | |
| @Override | |
| public void runSolution(final int nFizzBuzzUpperLimit) { | |
| final LoopContext loopContext = new LoopContext(nFizzBuzzUpperLimit); | |
| final LoopRunner loopRunner = new LoopRunner(loopContext, loopContext, this._loopPayloadExecution); | |
| loopRunner.runLoop(); | |
| } | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.strategies.constants; | |
| import org.springframework.stereotype.Service; | |
| @Service | |
| public class NoFizzNoBuzzStrategyConstants | |
| { | |
| public static final int NO_BUZZ_INTEGER_CONSTANT_VALUE = BuzzStrategyConstants.BUZZ_INTEGER_CONSTANT_VALUE; | |
| public static final int NO_FIZZ_INTEGER_CONSTANT_VALUE = FizzStrategyConstants.FIZZ_INTEGER_CONSTANT_VALUE; | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.strategies.constants; | |
| import org.springframework.stereotype.Service; | |
| @Service | |
| public class BuzzStrategyConstants | |
| { | |
| public static final int BUZZ_INTEGER_CONSTANT_VALUE = 5; | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.strategies.constants; | |
| import org.springframework.stereotype.Service; | |
| @Service | |
| public class FizzStrategyConstants | |
| { | |
| public static final int FIZZ_INTEGER_CONSTANT_VALUE = 3; | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.strategies.converters.primitivetypesconverters; | |
| import org.springframework.stereotype.Service; | |
| @Service | |
| public class DoubleToIntConverter { | |
| public static int Convert(final double dbDoubleToConvert) { | |
| final int nConversionResult = (int) dbDoubleToConvert; | |
| return nConversionResult; | |
| } | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.strategies.converters.primitivetypesconverters; | |
| import org.springframework.stereotype.Service; | |
| @Service | |
| public class IntToDoubleConverter { | |
| public static double Convert(final int nIntegerToConvert) { | |
| final double dbConversionResult = (double) nIntegerToConvert; | |
| return dbConversionResult; | |
| } | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.strategies; | |
| import java.io.IOException; | |
| import org.springframework.stereotype.Service; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.strategies.FizzBuzzOutputStrategy; | |
| @Service | |
| public class SystemOutFizzBuzzOutputStrategy implements FizzBuzzOutputStrategy { | |
| @Override | |
| public void output(final String output) throws IOException { | |
| System.out.write(output.getBytes()); | |
| System.out.flush(); | |
| } | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.strategies; | |
| import org.springframework.beans.factory.annotation.Autowired; | |
| import org.springframework.stereotype.Service; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.loop.LoopPayloadExecution; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.loop.LoopContextStateRetrieval; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.strategies.OutputGenerationStrategy; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.strategies.adapters.LoopContextStateRetrievalToSingleStepOutputGenerationAdapter; | |
| @Service | |
| public class SingleStepPayload implements LoopPayloadExecution { | |
| private final OutputGenerationStrategy _outputGenerationStrategy; | |
| @Autowired | |
| public SingleStepPayload(final OutputGenerationStrategy _outputGenerationStrategy) { | |
| this._outputGenerationStrategy = _outputGenerationStrategy; | |
| } | |
| @Override | |
| public void runLoopPayload(final LoopContextStateRetrieval stateRetrieval) { | |
| final LoopContextStateRetrievalToSingleStepOutputGenerationAdapter adapter = | |
| new LoopContextStateRetrievalToSingleStepOutputGenerationAdapter(stateRetrieval); | |
| this._outputGenerationStrategy.performGenerationForCurrentStep(adapter); | |
| } | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl; | |
| import org.springframework.beans.BeansException; | |
| import org.springframework.context.*; | |
| import org.springframework.stereotype.Service; | |
| @Service | |
| public class ApplicationContextHolder implements ApplicationContextAware { | |
| private static ApplicationContext applicationContext; | |
| private ApplicationContextHolder() { | |
| } | |
| public void setApplicationContext(final ApplicationContext applicationContext) throws BeansException { | |
| ApplicationContextHolder.applicationContext = applicationContext; | |
| } | |
| public static ApplicationContext getApplicationContext() { | |
| return ApplicationContextHolder.applicationContext; | |
| } | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.parameters; | |
| public interface FizzBuzzUpperLimitParameter { | |
| public int obtainUpperLimitValue(); | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.printers; | |
| public interface StringPrinter extends DataPrinter { | |
| public void print(); | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.printers; | |
| public interface DataPrinter { | |
| public void print(); | |
| public void printValue(Object value); | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.printers; | |
| public interface IntegerPrinter extends DataPrinter { | |
| public void printInteger(int theInteger); | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces; | |
| public interface FizzBuzz { | |
| void fizzBuzz(int nFizzBuzzUpperLimit); | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.stringreturners; | |
| public interface IntegerStringReturner { | |
| public String getIntegerReturnString(int theInteger); | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.stringreturners; | |
| public interface StringStringReturner { | |
| public String getReturnString(); | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.visitors; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.printers.DataPrinter; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.strategies.IsEvenlyDivisibleStrategy; | |
| public interface OutputGenerationContext { | |
| public IsEvenlyDivisibleStrategy getStrategy(); | |
| public DataPrinter getPrinter(); | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.visitors; | |
| public interface OutputGenerationContextVisitor { | |
| public void visit(OutputGenerationContext context, int nGenerationParameter); | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.factories; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.strategies.IsEvenlyDivisibleStrategy; | |
| public interface IsEvenlyDivisibleStrategyFactory { | |
| public IsEvenlyDivisibleStrategy createIsEvenlyDivisibleStrategy(); | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.factories; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.stringreturners.IntegerStringReturner; | |
| public interface IntegerStringReturnerFactory { | |
| public IntegerStringReturner createIntegerStringReturner(); | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.factories; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.visitors.OutputGenerationContextVisitor; | |
| public interface OutputGenerationContextVisitorFactory { | |
| public OutputGenerationContextVisitor createVisitor(); | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.factories; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.printers.IntegerPrinter; | |
| public interface IntegerPrinterFactory { | |
| public IntegerPrinter createPrinter(); | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.factories; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.stringreturners.StringStringReturner; | |
| public interface StringStringReturnerFactory { | |
| public StringStringReturner createStringStringReturner(); | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.factories; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.strategies.FizzBuzzSolutionStrategy; | |
| public interface FizzBuzzSolutionStrategyFactory { | |
| public FizzBuzzSolutionStrategy createFizzBuzzSolutionStrategy(); | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.factories; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.strategies.FizzBuzzOutputStrategy; | |
| public interface FizzBuzzOutputStrategyFactory { | |
| public FizzBuzzOutputStrategy createOutputStrategy(); | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.factories; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.printers.StringPrinter; | |
| public interface StringPrinterFactory { | |
| public StringPrinter createStringPrinter(); | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.loop; | |
| public interface LoopContextStateRetrieval { | |
| public int getControlParameter(); | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.loop; | |
| public interface LoopContextStateManipulation { | |
| public void start(); | |
| public boolean shouldProceed(); | |
| public void proceed(); | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.loop; | |
| public interface LoopPayloadExecution { | |
| public void runLoopPayload(LoopContextStateRetrieval stateRetrieval); | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.strategies; | |
| public interface OutputGenerationStrategy { | |
| void performGenerationForCurrentStep(SingleStepOutputGenerationParameter generationParameter); | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.strategies; | |
| import java.io.IOException; | |
| public interface FizzBuzzOutputStrategy { | |
| public void output(String output) throws IOException; | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.strategies; | |
| public interface FizzBuzzExceptionSafeOutputStrategy { | |
| public void output(String output); | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.strategies; | |
| public interface FizzBuzzSolutionStrategy { | |
| public void runSolution(int nFizzBuzzUpperLimit); | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.strategies; | |
| public interface SingleStepOutputGenerationParameter { | |
| public int retrieveIntegerValue(); | |
| } | |
| package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.strategies; | |
| public interface IsEvenlyDivisibleStrategy { | |
| public boolean isEvenlyDivisible(int theInteger); | |
| } | |
| import org.junit.After; | |
| import org.junit.Before; | |
| import org.junit.Test; | |
| import org.springframework.context.ApplicationContext; | |
| import org.springframework.context.ConfigurableApplicationContext; | |
| import org.springframework.context.support.ClassPathXmlApplicationContext; | |
| import static org.junit.Assert.assertEquals; | |
| import java.io.BufferedOutputStream; | |
| import java.io.ByteArrayOutputStream; | |
| import java.io.IOException; | |
| import java.io.PrintStream; | |
| import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.FizzBuzz; | |
| public class FizzBuzzTest { | |
| private PrintStream out; | |
| private FizzBuzz fb; | |
| @Before | |
| public void setUp() { | |
| final ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml"); | |
| this.fb = (FizzBuzz) context.getBean("standardFizzBuzz"); | |
| this.out = System.out; | |
| ((ConfigurableApplicationContext) context).close(); | |
| } | |
| @After | |
| public void tearDown() { | |
| System.setOut(this.out); | |
| } | |
| private void doFizzBuzz(final int n, final String s) throws IOException { | |
| final ByteArrayOutputStream baos = new ByteArrayOutputStream(); | |
| final BufferedOutputStream bos = new BufferedOutputStream(baos); | |
| System.setOut(new PrintStream(bos)); | |
| this.fb.fizzBuzz(n); | |
| System.out.flush(); | |
| assertEquals(s, baos.toString()); | |
| } | |
| @Test | |
| public void testFizzBuzz() throws IOException { | |
| this.doFizzBuzz(1, "1\n"); | |
| this.doFizzBuzz(2, "1\n2\n"); | |
| this.doFizzBuzz(3, "1\n2\nFizz\n"); | |
| this.doFizzBuzz(4, "1\n2\nFizz\n4\n"); | |
| this.doFizzBuzz(5, "1\n2\nFizz\n4\nBuzz\n"); | |
| this.doFizzBuzz(6, "1\n2\nFizz\n4\nBuzz\nFizz\n"); | |
| this.doFizzBuzz(7, "1\n2\nFizz\n4\nBuzz\nFizz\n7\n"); | |
| this.doFizzBuzz(8, "1\n2\nFizz\n4\nBuzz\nFizz\n7\n8\n"); | |
| this.doFizzBuzz(9, "1\n2\nFizz\n4\nBuzz\nFizz\n7\n8\nFizz\n"); | |
| this.doFizzBuzz(10, "1\n2\nFizz\n4\nBuzz\nFizz\n7\n8\nFizz\nBuzz\n"); | |
| this.doFizzBuzz(11, "1\n2\nFizz\n4\nBuzz\nFizz\n7\n8\nFizz\nBuzz\n11\n"); | |
| this.doFizzBuzz(12, "1\n2\nFizz\n4\nBuzz\nFizz\n7\n8\nFizz\nBuzz\n11\nFizz\n"); | |
| this.doFizzBuzz(13, "1\n2\nFizz\n4\nBuzz\nFizz\n7\n8\nFizz\nBuzz\n11\nFizz\n13\n"); | |
| this.doFizzBuzz(14, "1\n2\nFizz\n4\nBuzz\nFizz\n7\n8\nFizz\nBuzz\n11\nFizz\n13\n14\n"); | |
| this.doFizzBuzz(15, "1\n2\nFizz\n4\nBuzz\nFizz\n7\n8\nFizz\nBuzz\n11\nFizz\n13\n14\nFizzBuzz\n"); | |
| this.doFizzBuzz(16, "1\n2\nFizz\n4\nBuzz\nFizz\n7\n8\nFizz\nBuzz\n11\nFizz\n13\n14\nFizzBuzz\n16\n"); | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment