package dan.dit.whatsthat.testsubject; import android.content.res.Resources; import dan.dit.whatsthat.achievement.Achievement; import dan.dit.whatsthat.riddle.types.PracticalRiddleType; import dan.dit.whatsthat.testsubject.shopping.ShopArticle; import dan.dit.whatsthat.util.dependencies.Dependency; /** * Created by daniel on 07.01.16. */ public class DependencyHolder { private DependencyHolder() {} public static class FeatureAvailableDependency extends Dependency { private ShopArticle mArticle; private int mRequiredAmount; public FeatureAvailableDependency(ShopArticle featureArticle, int requiredAmount) { mArticle = featureArticle; mRequiredAmount = requiredAmount; if (mArticle == null) { throw new IllegalArgumentException("No article given."); } } @Override public boolean isFulfilled() { return TestSubject.isInitialized() && TestSubject.getInstance().getShopValue(mArticle.getKey()) >= mRequiredAmount; } @Override public CharSequence getName(Resources res) { return mArticle.getName(res) + ">" + (mRequiredAmount - 1); } } public static class ProductPurchasedDependency extends Dependency { private final int mProduct; private final ShopArticle mArticle; public ProductPurchasedDependency(ShopArticle article, int product) { mArticle = article; mProduct = product; if (article == null) { throw new IllegalArgumentException("No article for dependency given."); } } @Override public boolean isFulfilled() { return mArticle.isPurchasable(mProduct) == ShopArticle.HINT_NOT_PURCHASABLE_ALREADY_PURCHASED; } @Override public CharSequence getName(Resources res) { if (mProduct < 0) { return mArticle.getName(res); } else { return mArticle.getName(res) + " #" + (mProduct + 1); } } } public static class RiddleTypeDependency extends Dependency { private final TestSubject mTestSubject; private final PracticalRiddleType mType; public RiddleTypeDependency(PracticalRiddleType type, TestSubject testSubject) { mType = type; mTestSubject = testSubject; } @Override public boolean isFulfilled() { for (TestSubjectRiddleType testType : mTestSubject.getTypesController().getAll()) { if (testType.getType().equals(mType)) { return true; } } return false; } @Override public CharSequence getName(Resources res) { return res.getString(mType.getNameResId()); } } public static class ClaimedAchievementDependency extends Dependency { private Achievement mAchievement; public ClaimedAchievementDependency(Achievement achievement) { mAchievement = achievement; if (mAchievement == null) { throw new IllegalArgumentException("No achievement given."); } } @Override public boolean isFulfilled() { return mAchievement.isAchieved() && !mAchievement.isRewardClaimable(); } @Override public CharSequence getName(Resources res) { return mAchievement.getName(res); } } }