package zenproject.meditation.android.sketch.painting.flowers; import android.support.annotation.DrawableRes; import java.util.Arrays; import java.util.List; import zenproject.meditation.android.ContextRetriever; import zenproject.meditation.android.R; /** * Here I am trying to introduce a possible enum factory pattern for easily creating flower drawers from resource elements */ public enum Flower { NONE(Constants.DEFAULT_MIN_SIZE, Constants.DEFAULT_MAX_SIZE), BIRDSFOOT(Constants.DEFAULT_MIN_SIZE * Constants.BIGGER_FLOWER_FACTOR, Constants.DEFAULT_MAX_SIZE * Constants.BIGGER_FLOWER_FACTOR, R.drawable.birdsfoot_1, R.drawable.birdsfoot_2, R.drawable.birdsfoot_3, R.drawable.birdsfoot_4, R.drawable.birdsfoot_5), POPPY(Constants.DEFAULT_MIN_SIZE, Constants.DEFAULT_MAX_SIZE, R.drawable.poppy_1, R.drawable.poppy_2, R.drawable.poppy_3, R.drawable.poppy_4, R.drawable.poppy_5), MECONOPSIS(Constants.DEFAULT_MIN_SIZE * Constants.SMALLER_FLOWER_FACTOR, Constants.DEFAULT_MAX_SIZE * Constants.SMALLER_FLOWER_FACTOR, R.drawable.meconopsis_1, R.drawable.meconopsis_2, R.drawable.meconopsis_3, R.drawable.meconopsis_4, R.drawable.meconopsis_5), CHERRY(Constants.DEFAULT_MIN_SIZE, Constants.DEFAULT_MAX_SIZE, R.drawable.cherry_1, R.drawable.cherry_2, R.drawable.cherry_3, R.drawable.cherry_4, R.drawable.cherry_5); @DrawableRes private Integer[] flowerLeafsRes; private float minSize; private float maxSize; Flower(float minSize, float maxSize, @DrawableRes Integer... flowerLeafsRes) { this.flowerLeafsRes = flowerLeafsRes; this.minSize = minSize; this.maxSize = maxSize; } public static Flower from(int value) { for (Flower flower : values()) { if (flower.ordinal() == value) { return flower; } } return NONE; } public List<Integer> getFlowerLeafRes() { return Arrays.asList(flowerLeafsRes); } public float getMaxSize() { return maxSize; } public float getMinSize() { return minSize; } @SuppressWarnings("PMD.UnusedModifier") private static class Constants { private static final float SMALLER_FLOWER_FACTOR = 0.8f; private static final float BIGGER_FLOWER_FACTOR = 1.2f; private static final float DEFAULT_MAX_SIZE = ContextRetriever.INSTANCE.getResources().getDimension(R.dimen.max_flower_size); private static final float DEFAULT_MIN_SIZE = ContextRetriever.INSTANCE.getResources().getDimension(R.dimen.min_flower_size); } }