private void validateItemFrom(ItemVO<Integer, Integer> itemFrom) { if (itemFrom == null) { throw new IllegalArgumentException("missing ItemVO 'itemFrom'"); } else if (itemFrom.getItem() == null) { throw new IllegalArgumentException("missing value, ItemVO 'itemFrom', missing 'id'"); } else if (itemFrom.getType() == null) { throw new IllegalArgumentException("missing value, ItemVO 'itemFrom', missing 'typeId'"); } }
private void validateItemTo(ItemVO<Integer, Integer> itemTo) { if (itemTo == null) { throw new IllegalArgumentException("missing ItemVO 'itemTo'"); } else if (itemTo.getItem() == null) { throw new IllegalArgumentException("missing value, ItemVO 'itemTo', missing 'id'"); } else if (itemTo.getType() == null) { throw new IllegalArgumentException("missing value, ItemVO 'itemTo', missing 'typeId'"); } }
public boolean didUserRateItem(final Integer userId, final ItemVO<Integer, Integer> item, final Integer actionTypeId) { final StringBuilder query = new StringBuilder("SELECT * FROM "); query.append(DEFAULT_TABLE_NAME); query.append(" WHERE "); query.append(DEFAULT_TENANT_COLUMN_NAME).append("=? AND "); query.append(DEFAULT_USER_COLUMN_NAME).append("=? AND "); query.append(DEFAULT_ITEM_COLUMN_NAME).append("=? AND "); query.append(DEFAULT_ITEM_TYPE_COLUMN_NAME).append("=? AND "); query.append(DEFAULT_ACTION_TYPE_COLUMN_NAME).append("=? LIMIT 1"); final Object[] args = new Object[]{item.getTenant(), userId, item.getItem(), item.getType(), actionTypeId}; final int[] argt = new int[]{Types.INTEGER, Types.INTEGER, Types.INTEGER, Types.INTEGER, Types.INTEGER}; final int count = getJdbcTemplate().queryForList(query.toString(), args, argt).size(); return count > 0; }
public Deviation(@Nullable Integer id, ItemVO<Integer, Integer> item1, ItemVO<Integer, Integer> item2, double numerator, long denominator) { validateItems(item1, item2); this.item1Id = item1.getItem(); this.item2Id = item2.getItem(); this.tenantId = item1.getTenant(); this.item1TypeId = item1.getType(); this.item2TypeId = item2.getType(); this.id = id; this.numerator = numerator; this.denominator = denominator; }
@Override protected Map<Integer, RatingVO<Integer, Integer>> getAverageItemRatings(final Integer tenantId, final Integer itemTypeId) { final List<RatingVO<Integer, Integer>> averageItemRatings = getLatestActionDao() .getAverageRatingsForItem(tenantId, itemTypeId); final Map<Integer, RatingVO<Integer, Integer>> averageItemRatingsPerItem = new HashMap<Integer, RatingVO<Integer, Integer>>( averageItemRatings.size()); for (final RatingVO<Integer, Integer> rating : averageItemRatings) averageItemRatingsPerItem.put(rating.getItem().getItem(), rating); return averageItemRatingsPerItem; } }
public void setItem1(ItemVO<Integer, Integer> item1) { validateItem(item1); item1Id = item1.getItem(); item1TypeId = item1.getType(); }
public void setItem2(ItemVO<Integer, Integer> item2) { validateItem(item2); item2Id = item2.getItem(); item2TypeId = item2.getType(); }
@Override protected double getAverage2(final RatedTogether<Integer, Integer> ratedTogether, final Map<Integer, RatingVO<Integer, Integer>> averageRatings) { return averageRatings.get(ratedTogether.getRating2().getItem().getItem()).getRatingValue(); }
@Override protected double getAverage1(final RatedTogether<Integer, Integer> ratedTogether, final Map<Integer, RatingVO<Integer, Integer>> averageRatings) { return averageRatings.get(ratedTogether.getRating1().getItem().getItem()).getRatingValue(); }
public int insertOrUpdateUserAssoc(final UserAssoc userAssoc) { ListIterator<UserAssoc> it = userAssocs.listIterator(); while (it.hasNext()) { UserAssoc ua = it.next(); if (!userAssoc.getTenantId().equals(ua.getTenantId())) continue; if (!userAssoc.getUserFrom().equals(ua.getUserFrom())) continue; if (!userAssoc.getItemTo().getItem().equals(ua.getItemTo().getItem())) continue; if (!userAssoc.getItemTo().getType().equals(ua.getItemTo().getType())) continue; if (!userAssoc.getSourceTypeId().equals(ua.getSourceTypeId())) continue; it.set(ua); return 1; } userAssocs.add(userAssoc); return 1; } }
public List<RatingVO<Integer, Integer>> getLatestRatingsForTenant(final Integer tenantId, final Integer itemTypeId, final Integer itemId, final Integer userId, final Date since) { List<RatingVO<Integer, Integer>> result = new LinkedList<RatingVO<Integer, Integer>>(); for (RatingVO<Integer, Integer> rating : ratings) { if (!rating.getItem().getTenant().equals(tenantId)) continue; if (!rating.getItem().getType().equals(itemTypeId)) continue; if (itemId != null && !rating.getItem().getItem().equals(itemId)) continue; if (userId != null && !rating.getUser().equals(userId)) continue; if (since != null && !rating.getLastActionTime().after(since)) continue; result.add(rating); } return result; }
public boolean didUserRateItem(final Integer userId, final ItemVO<Integer, Integer> item, final Integer actionTypeId) { final Object[] args = new Object[]{item.getTenant(), userId, item.getItem(), item.getType(), actionTypeId}; final int count = getJdbcTemplate().queryForList(QUERY_RATED, args, ARGT_RATED).size(); return count > 0; }
public int insertAction(ActionVO<Integer, Integer> action) { String query = QUERY_INSERT + QUERY_INSERT_VALUE; query = query.substring(0, query.length() - 2); Object[] args = new Object[]{action.getTenant(), action.getUser(), action.getItem().getItem(), action.getItem().getType(), action.getRatingValue(), action.getActionTime()}; return getJdbcTemplate().update(query, args, ARGT_INSERT); }
@Override public ItemVO<Integer, Integer> convertTypedItemVO(Integer tenantId, ItemVO<Integer, String> typedItem) { if (typedItem == null) { return null; } return new ItemVO<Integer, Integer>(typedItem.getTenant(), typedItem.getItem(), itemTypeDAO.getIdOfType(tenantId, typedItem.getType())); }
@Override public ItemVO<Integer, String> convertItemVO(Integer tenantId, ItemVO<Integer, Integer> item) { if (item == null) { return null; } return new ItemVO<Integer, String>(item.getTenant(), item.getItem(), itemTypeDAO.getTypeById(tenantId, item.getType())); }
private double plainRecommendations(final RatingVO<Integer, Integer> rating, final List<Deviation> deviations) { double numerator = 0.0; long denominator = 0L; int itemId = rating.getItem().getItem(); for (Deviation deviation : deviations) { if (deviation.getItem2Id() == itemId) continue; numerator += deviation.getDeviation() * rating.getRatingValue(); denominator++; } return numerator / denominator; } }
public int insertOrUpdateUserAssoc(final UserAssoc userAssoc) { final Object[] args = new Object[]{userAssoc.getTenantId(), userAssoc.getUserFrom(), userAssoc.getAssocValue(), userAssoc.getItemTo().getItem(), userAssoc.getItemTo().getType(), userAssoc.getSourceTypeId(), new Date()}; return getJdbcTemplate().update(QUERY_INSERT, args, ARGT_INSERT); } }
public ClusterVO apply( AssociatedItemVO<Integer, Integer> input) { return loadCluster(input.getItem().getTenant(),input.getItem().getItem(),input.getItem().getType()); } });
private double weightedRecommendations(final RatingVO<Integer, Integer> rating, final List<Deviation> deviations) { double numerator = 0.0; long denominator = 0L; int itemId = rating.getItem().getItem(); for (Deviation deviation : deviations) { if (deviation.getItem2Id() == itemId) continue; numerator += (deviation.getDeviation() * rating.getRatingValue()) * deviation.getDenominator(); denominator += deviation.getDenominator(); } return numerator / denominator; }