YoungPolicy.java
package es.um.atica.faker.users.domain.policy.age;
import java.util.Arrays;
import java.util.List;
import es.um.atica.faker.users.domain.model.UserAge;
import es.um.atica.faker.users.domain.model.UserPreference;
import es.um.atica.faker.users.domain.policy.UserPolicy;
import es.um.atica.faker.users.domain.policy.UserPolicyData;
public class YoungPolicy implements UserPolicy {
private static final int MAX_YOUNG_AGE = 28;
// OldRange = (OldMax - OldMin)
// NewRange = (NewMax - NewMin)
// NewValue = (((OldValue - OldMin) * NewRange) / OldRange) + NewMin
protected int likeProportional(int age) {
int oldRange = UserAge.MAX_AGE - UserAge.MIN_AGE;
int newRange = UserPreference.MAX_RANGE - UserPreference.MIN_RANGE;
return Math.round((((age - UserAge.MIN_AGE) * newRange) / oldRange) + UserPreference.MIN_RANGE);
}
protected int likeInvProportional(int age) {
return UserPreference.MAX_RANGE - likeProportional(age);
}
@Override
public boolean isApplicable(UserPolicyData data) {
return data.getAge() <= MAX_YOUNG_AGE;
}
@Override
public List<UserPreference> applyDefaultPreferences(UserPolicyData data) {
return Arrays.asList(
UserPreference.of("twitch", likeInvProportional(data.getAge())),
UserPreference.of("youtube", likeProportional(data.getAge())),
UserPreference.of("twitter", likeProportional(data.getAge())),
UserPreference.of("facebook", 0), // Do not like at all
UserPreference.of("tiktok", likeInvProportional(data.getAge()))
);
}
}