Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add translation keys, number properties, and other loop types #686

Open
wants to merge 6 commits into
base: uinverse
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,10 @@ dependencies {
'org.springframework:spring-core:3.2.13.RELEASE',
'org.springframework:spring-expression:3.2.13.RELEASE'

compile 'org.json'
compile 'it.unimi.dsi:fastutil:8.2.1'

testCompile 'junit:junit:4.8.2'
}

mainClassName = 'com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.Main'
mainClassName = 'com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.Main'
Original file line number Diff line number Diff line change
@@ -1,23 +1,73 @@
package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl;

import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.factories.SimpleExceptionType;
import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.factories.ExceptionType;
import java.io.File;
import java.io.FileInputStream;
import java.util.Properties;

/**
* Constants
*/
public class Constants {
private Constants() {}

private static final Object NULL_VALUE = null;
@SuppressWarnings("unchecked")
public static final <T> T NULL_VALUE() {
return (T) Constants.NULL_VALUE;
}

private static final TranslationKey A_CONDITIONAL_LOOP_HAS_NO_CONTROL_PARAMETER_KEY = new TranslationKeyImpl("fizzbuzz.string.error.A_CONDITIONAL_LOOP_HAS_NO_CONTROL_PARAMETER");
private static final TranslationKey A_CONDITIONAL_LOOP_HAS_NO_FINALIZATION_POINT_KEY = new TranslationKeyImpl("fizzbuzz.string.error.A_CONDITIONAL_LOOP_HAS_NO_FINALIZATION_POINT");
private static final TranslationKey A_CONDITIONAL_LOOP_HAS_NO_INITIALIZATION_POINT_KEY = new TranslationKeyImpl("fizzbuzz.string.error.A_CONDITIONAL_LOOP_HAS_NO_INITIALIZATION_POINT");
private static final TranslationKey AN_ATTEMPT_WAS_MADE_TO_DIVIDE_BY_ZERO_KEY = new TranslationKeyImpl("fizzbuzz.string.error.AN_ATTEMPT_WAS_MADE_TO_DIVIDE_BY_ZERO");
private static final TranslationKey COULD_NOT_DETERMINE_IF_THE_LOOP_WAS_FINISHED_KEY = new TranslationKeyImpl("fizzbuzz.string.error.COULD_NOT_DETERMINE_IF_THE_LOOP_WAS_FINISHED");
private static final TranslationKey KEY_NOT_FOUND_KEY = new TranslationKeyImpl("fizzbuzz.string.error.KEY_NOT_FOUND");
private static final TranslationKey THE_INTEGERS_COULD_NOT_BE_COMPARED_KEY = new TranslationKeyImpl("fizzbuzz.string.error.THE_INTEGERS_COULD_NOT_BE_COMPARED");
private static final TranslationKey THE_OBJECTS_COULD_NOT_BE_COMPARED_KEY = new TranslationKeyImpl("fizzbuzz.string.error.THE_OBJECTS_COULD_NOT_BE_COMPARED");
private static final TranslationKey THE_WRONG_TYPE_OF_LOOP_STATE_WAS_PROVIDED_KEY = new TranslationKeyImpl("fizzbuzz.string.error.THE_WRONG_TYPE_OF_LOOP_STATE_WAS_PROVIDED");

public static final String AN_ATTEMPT_WAS_MADE_TO_DIVIDE_BY_ZERO = "An attempt was made to divide by zero.";
public static final String BUZZ = "Buzz";
private static final TranslationKey FIZZ_KEY = new TranslationKeyImpl("fizzbuzz.string.output.FIZZ");
private static final TranslationKey BUZZ_KEY = new TranslationKeyImpl("fizzbuzz.string.output.BUZZ");

public static final Function<Language, ExceptionType> A_CONDITIONAL_LOOP_HAS_NO_CONTROL_PARAMETER = lang -> new SimpleExceptionType(lang.getStringForTranslationKey(A_CONDITIONAL_LOOP_HAS_NO_CONTROL_PARAMETER_KEY), UnsupportedOperationException::new);
public static final Function<Language, ExceptionType> A_CONDITIONAL_LOOP_HAS_NO_FINALIZATION_POINT = lang -> new SimpleExceptionType(lang.getStringForTranslationKey(A_CONDITIONAL_LOOP_HAS_NO_FINALIZATION_POINT_KEY), UnsupportedOperationException::new);
public static final Function<Language, ExceptionType> A_CONDITIONAL_LOOP_HAS_NO_INITIALIZATION_POINT = lang -> new SimpleExceptionType(lang.getStringForTranslationKey(A_CONDITIONAL_LOOP_HAS_NO_INITIALIZATION_POINT_KEY), UnsupportedOperationException::new);
public static final Function<Language, ExceptionType> AN_ATTEMPT_WAS_MADE_TO_DIVIDE_BY_ZERO = lang -> new SimpleExceptionType(lang.getStringForTranslationKey(AN_ATTEMPT_WAS_MADE_TO_DIVIDE_BY_ZERO_KEY), ArithmeticException::new);
public static final Function<Language, ExceptionType> COULD_NOT_DETERMINE_IF_THE_LOOP_WAS_FINISHED = lang -> new SimpleExceptionType(lang.getStringForTranslationKey(COULD_NOT_DETERMINE_IF_THE_LOOP_WAS_FINISHED_KEY), UnsupportedOperationException::new);
public static final Function<Language, ExceptionType> KEY_NOT_FOUND = lang -> new SimpleExceptionType(lang.getStringForTranslationKey(KEY_NOT_FOUND_KEY), IllegalArgumentException::new);
public static final Function<Language, ExceptionType> THE_INTEGERS_COULD_NOT_BE_COMPARED = lang -> new SimpleExceptionType(lang.getStringForTranslationKey(THE_INTEGERS_COULD_NOT_BE_COMPARED_KEY), UnsupportedOperationException::new);
public static final Function<Language, ExceptionType> THE_OBJECTS_COULD_NOT_BE_COMPARED = lang -> new SimpleExceptionType(lang.getStringForTranslationKey(THE_OBJECTS_COULD_NOT_BE_COMPARED_KEY), UnsupportedOperationException::new);
public static final Function<Language, ExceptionType> THE_WRONG_TYPE_OF_LOOP_STATE_WAS_PROVIDED = lang -> new SimpleExceptionType(lang.getStringForTranslationKey(THE_WRONG_TYPE_OF_LOOP_STATE_WAS_PROVIDED_KEY), IllegalArgumentException::new);

public static final Function<Language, String> BUZZ = FunctionBindAdapter.bindSecond(Language::getStringForTranslationKey, BUZZ_KEY);
public static final Function<Language, String> FIZZ = FunctionBindAdapter.bindSecond(Language::getStringForTranslationKey, FIZZ_KEY);

public static final String ASSETS_VALUES_NUMBERS_PROPERTIES = "assets/values/numbers.properties";
public static final String ASSETS_LANG = "assets/lang/";
public static final String COM_SERIOUSCOMPANY_BUSINESS_JAVA_FIZZBUZZ_PACKAGENAMINGPACKAGE_IMPL_PRINTERS_INTEGER_INTEGER_PRINTER_PRINT = "com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.printers.IntegerIntegerPrinter.print()";
public static final String FIZZ = "Fizz";
public static final String DEFAULT = "default";
public static final String LINE_SEPARATOR = "line.separator";
public static final String LOOP_COMPONENT_FACTORY = "loopComponentFactory";
public static final String SPRING_XML = "spring.xml";
public static final String STANDARD_FIZZ_BUZZ = "standardFizzBuzz";
public static final String THE_INTEGERS_COULD_NOT_BE_COMPARED = "The integers could not be compared.";
public static final int DEFAULT_FIZZ_BUZZ_UPPER_LIMIT_PARAMETER_VALUE = 100;
public static final int INTEGER_DIVIDE_ZERO_VALUE = 0;
public static final int INTEGER_ORIGIN_ZERO_VALUE = 0;
public static final int LOOP_INC_VALUE = 1;
public static final int LOOP_INIT_VALUE = 1;
public static final String TRANSLATIONS = "translations";

public static final int DEFAULT_FIZZ_BUZZ_UPPER_LIMIT_PARAMETER_VALUE;
public static final int INTEGER_DIVIDE_ZERO_VALUE;
public static final int INTEGER_ORIGIN_ZERO_VALUE;
public static final int LOOP_INC_VALUE;
public static final int LOOP_INIT_VALUE;

static {
InputStream inputStream = Constants.class.getClassLoader().getResourceAsStream(ASSETS_VALUES_NUMBERS_PROPERTIES);
Properties properties = new Properties();
properties.load(inputStream);
DEFAULT_FIZZ_BUZZ_UPPER_LIMIT_PARAMETER_VALUE = Integer.parseInt(properties.get("default_fizz_buzz_upper_limit_parameter_value"));
INTEGER_DIVIDE_ZERO_VALUE = Integer.parseInt(properties.get("integer_divide_zero_value"));
INTEGER_ORIGIN_ZERO_VALUE = Integer.parseInt(properties.get("integer_origin_zero_value"));
LOOP_INC_VALUE = Integer.parseInt(properties.get("loop_inc_value"));
LOOP_INIT_VALUE = Integer.parseInt(properties.get("loop_init_value"));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.strategies;

/**
* Result for Action
*/
public class ActionResult<T> implements Reslut<T> {
private T result;
public T getResult() {
return this.result;
}
public void setResult(T result) {
this.result = result;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.data;

import java.util.List;
import java.util.ArrayList;

/**
* ResultCollection for Action
*/
public class ActionResultCollection<T> implements ResultCollection<T> {
private final List<T> _results;

public ActionResultCollection() {
this._results = new ArrayList<>();
}

public List<T> getResults() {
return this._results;
}
public void addResult(T result) {
this._results.add(result);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.data;

import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.BiFunction;
import java.util.function.BiPredicate;

/**
* Result for Boolean
*/
public enum BooleanResult {
TRUE,
FALSE;

public static Function<T, BooleanResult> from(Predicate<T> predicate) {
return t -> predicate.test(t) ? BooleanResult.TRUE : BooleanResult.FALSE;
}
public static BiFunction<T, BooleanResult> from(BiPredicate<T> predicate) {
return (t, u) -> predicate.test(t, u) ? BooleanResult.TRUE : BooleanResult.FALSE;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.data;

public class TextComponent implements Component {
private String text;

public TextComponent(String text) {
this.text = text;
}

public String resolve() {
return text;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.data;

public class TranslationComponent implements Component {
private TranslationKey key;

public TranslationComponent(TranslationKey key) {
this.key = key;
}

public String resolve() {
return Language.DEFAULT.getStringForTranslationKey(key);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.factories;

import org.springframework.stereotype.Service;

import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.data.ActionResultCollection;
import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.data.ResultCollection;
import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.factories.ResultCollectionFactory;

/**
* Factory for ActionResultCollection
*/
@Service
public class ActionResultCollectionFactory<T> implements ResultCollectionFactory<T> {
public BuzzStrategyFactory(final Class<T> resultCollectionType) {
super();
}

@Override
public ResultCollection<T> createResultCollection() {
return new ActionResultCollection<>();
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.factories;

import it.unimi.dsi.fastutils.chars.CharacterList;

/**
* Factory for CharacterArray
*/
public class CharacterArrayFactory {
private final IntFunction<char[]> myCharacterArrayMakerFunction;

public CharacterArrayFactory(IntFunction<char[]> characterArrayMakerFunction) {
this.myCharacterArrayMakerFunction = characterArrayMakerFunction;
}

public char[] createCharacterArray(CharacterList characterList, final int characterArrayLength) {
char[] myCharacterArray = this.myCharacterArraySupplier.apply(characterArrayLength);
return myCharacterArray;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
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.ConditionalLoopCondition;
import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.loop.ConditionalLoopFinalizer;
import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.loop.ConditionalLoopInitializer;
import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.loop.ConditionalLoopStep;

/**
* Factory for ConditionalLoopComponent
*/
@Service
public class ConditionalLoopComponentFactory implements LoopComponentFactory {

private final ConditionalLoopCondition _loopCondition;

private final ConditionalLoopInitializer _loopInitializer;

private final ConditionalLoopStep _loopStep;

/**
* @param _loopCondition ConditionalLoopCondition
* @param _loopInitializer ConditionalLoopInitializer
* @param _loopStep ConditionalLoopStep
*/
@Autowired
public ConditionalLoopComponentFactory(final ConditionalLoopCondition _loopCondition, final ConditionalLoopInitializer _loopInitializer,
final ConditionalLoopStep _loopStep) {
super();
this._loopCondition = _loopCondition;
this._loopInitializer = _loopInitializer;
this._loopStep = _loopStep;
}

/**
* @return ConditionalLoopCondition
*/
public ConditionalLoopCondition createLoopCondition() {
return this._loopCondition;
}

/**
* @return ConditionalLoopInitializer
*/
public ConditionalLoopInitializer createLoopInitializer() {
return this._loopInitializer;
}

/**
* @param nConditionalLoopFinalValue int
* @return ConditionalLoopFinalizer
*/
public ConditionalLoopFinalizer createLoopFinalizer(final int nLoopFinalValue) {
final ConditionalLoopFinalizer myConditionalLoopFinalizer = new ConditionalLoopFinalizer();
return myConditionalLoopFinalizer;
}

/**
* @return ConditionalLoopStep
*/
public ConditionalLoopStep createLoopStep() {
return this._loopStep;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
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.CountBasedLoopCondition;
import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.loop.CountBasedLoopFinalizer;
import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.loop.CountBasedLoopInitializer;
import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.loop.CountBasedLoopStep;

/**
* Factory for CountBasedLoopComponent
*/
@Service
public class CountBasedLoopComponentFactory implements LoopComponentFactory {

private final CountBasedLoopCondition _loopCondition;

private final CountBasedLoopInitializer _loopInitializer;

private final CountBasedLoopStep _loopStep;

/**
* @param _loopCondition CountBasedLoopCondition
* @param _loopInitializer CountBasedLoopInitializer
* @param _loopStep CountBasedLoopStep
*/
@Autowired
public CountBasedLoopComponentFactory(final CountBasedLoopCondition _loopCondition, final CountBasedLoopInitializer _loopInitializer,
final CountBasedLoopStep _loopStep) {
super();
this._loopCondition = _loopCondition;
this._loopInitializer = _loopInitializer;
this._loopStep = _loopStep;
}

/**
* @return CountBasedLoopCondition
*/
public CountBasedLoopCondition createLoopCondition() {
return this._loopCondition;
}

/**
* @return CountBasedLoopInitializer
*/
public CountBasedLoopInitializer createLoopInitializer() {
return this._loopInitializer;
}

/**
* @param nCountBasedLoopFinalValue int
* @return CountBasedLoopFinalizer
*/
public CountBasedLoopFinalizer createLoopFinalizer(final int nLoopFinalValue) {
final CountBasedLoopFinalizer myCountBasedLoopFinalizer = new CountBasedLoopFinalizer(nLoopFinalValue);
return myCountBasedLoopFinalizer;
}

/**
* @return CountBasedLoopStep
*/
public CountBasedLoopStep createLoopStep() {
return this._loopStep;
}

}
Loading