@Override public RecommendationVO<Integer, Integer> convertTypedRecommendationVO( Integer tenantId, RecommendationVO<Integer, String> typedRecommendation) { if (typedRecommendation == null) { return null; } return new RecommendationVO<Integer, Integer>( typedRecommendation.getId(), typedRecommendation.getTenant(), typedRecommendation.getUser(), typedRecommendation.getQueriedItem(), itemTypeDAO.getIdOfType(tenantId, typedRecommendation.getQueriedItemType()), assocTypeDAO.getIdOfType(tenantId, typedRecommendation.getQueriedAssocType()), actionTypeDAO.getIdOfType(tenantId, typedRecommendation.getRelatedActionType()), typedRecommendation.getRecommendationStrategy(), typedRecommendation.getExplanation(), typedRecommendation.getRecommendationTime(), convertListOfTypedRecommendedItemVOs(tenantId, typedRecommendation.getRecommendedItems())); }
query.append("=NOW()"); Object[] args = {recommendation.getTenant(), recommendation.getUser(), recommendation.getQueriedItem(), recommendation.getQueriedItemType(), recommendation.getQueriedAssocType(), recommendation.getRelatedActionType(), recommendation.getRecommendationStrategy(), recommendation.getExplanation()}; int[] argTypes = {Types.INTEGER, Types.INTEGER, Types.INTEGER, Types.INTEGER, Types.INTEGER, Types.INTEGER, Types.VARCHAR, Types.VARCHAR}; recommendation.setId(keyHolder.getKey().intValue()); if (recommendation.getRecommendedItems() != null && recommendation.getRecommendedItems().size() > 0) { for (RecommendedItemVO<Integer, Integer> recommendedItem : recommendation.getRecommendedItems()) { recommendedItem.setRecommendationId(recommendation.getId()); recommendedItemDAO.insertRecommendedItem(recommendedItem);
RecommendationVO<Integer, Integer> recommendation = new RecommendationVO<Integer, Integer>( tenantId, userId, null, requestedItemTypeId, assocTypeId, consideredActionTypeId, RECOMMENDATION_STRATEGY_ITEMS_BASED_ON_ACTION_HISTORY, EXPLANATION_ITEMS_BASED_ON_ACTION_HISTORY,
private void validateUniqueKey( RecommendationVO<Integer, Integer> recommendation) { // NOTE: leave out check for 'recommendationTime' since it is automatically generated on database level // do not check for recommended items either, since each recommendation should be stored for future evaluations, // store recommendations even if no items could be recommended. if (recommendation.getTenant() == null) { throw new IllegalArgumentException( "missing constraints, unique key (tenantId, recommendationTime) must be set, missing 'itemId'"); } }
@Override public RecommendationVO<Integer, Integer> getAlsoActedItems(Integer tenantId, Integer userId, String sessionId, Integer assocTypeId, ItemVO<Integer, Integer> item, Integer filteredActionTypeId, Integer requestedItemTypeId) { List<AssociatedItemVO<Integer, Integer>> associatedItems = itemAssocService .getItemsTo(item, assocTypeId, requestedItemTypeId, new IAConstraintVO<Integer, Integer>(maximumNumberOfRelatedItemsPerItem, null, null, null, tenantId, true, false)); List<RecommendedItemVO<Integer, Integer>> recommendedItems = convertAssociatedItems(associatedItems, item); // filter duplicates and history if (filterResults) { recommendedItems = doFiltering(tenantId, userId, sessionId, filteredActionTypeId, requestedItemTypeId, recommendedItems, DEFAULT_USE_AVERAGE_PREDICTION_VALUES_FOR_DUPLICATES); } RecommendationVO<Integer, Integer> recommendation = new RecommendationVO<Integer, Integer>( tenantId, userId, item.getItem(), item.getType(), assocTypeId, null, RECOMMENDATION_STRATEGY_ITEMS_ALSO_ACTED_ON, EXPLANATION_ITEMS_ALSO_ACTED_ON, recommendedItems); // HINT: implement an aspect (instead of directly using this) (Mantis Issue: #650) if (recommendationHistoryService != null) recommendationHistoryService.insertRecommendation(recommendation); return recommendation; }
@Override public int insertRecommendation( RecommendationVO<Integer, String> typedRecommendation) { Integer tenantId = typedRecommendation.getTenant(); if (tenantId == null) { throw new IllegalArgumentException("tenant not specified, can not retrieve type mapping without tenant"); } return recommendationDAO .insertRecommendation(typeMappingService.convertTypedRecommendationVO(tenantId, typedRecommendation)); }
@Override public RecommendationVO<Integer, String> convertRecommendationVO(Integer tenantId, RecommendationVO<Integer, Integer> recommendation) { if (recommendation == null) { return null; } return new RecommendationVO<Integer, String>( recommendation.getId(), recommendation.getTenant(), recommendation.getUser(), recommendation.getQueriedItem(), itemTypeDAO.getTypeById(tenantId, recommendation.getQueriedItemType()), assocTypeDAO.getTypeById(tenantId, recommendation.getQueriedAssocType()), actionTypeDAO.getTypeById(tenantId, recommendation.getRelatedActionType()), recommendation.getRecommendationStrategy(), recommendation.getExplanation(), recommendation.getRecommendationTime(), convertListOfRecommendedItemVOs(tenantId, recommendation.getRecommendedItems())); }
public RecommendationVO<Integer, String> mapRow(ResultSet rs, int rowNum) throws SQLException { Integer tenantId = DaoUtils.getInteger(rs, DEFAULT_TENANT_COLUMN_NAME); if (tenantId == null) { throw new IllegalArgumentException( "tenant not specified, can not retrieve type mapping without tenant"); } return new RecommendationVO<Integer, String>( DaoUtils.getInteger(rs, DEFAULT_ID_COLUMN_NAME), tenantId, DaoUtils.getInteger(rs, DEFAULT_USER_COLUMN_NAME), DaoUtils.getInteger(rs, DEFAULT_QUERIED_ITEM_COLUMN_NAME), typeMappingService .getItemTypeById(tenantId, DaoUtils.getInteger(rs, DEFAULT_QUERIED_ITEM_TYPE_COLUMN_NAME)), typeMappingService.getAssocTypeById(tenantId, DaoUtils.getInteger(rs, DEFAULT_QUERIED_ASSOC_TYPE_COLUMN_NAME)), typeMappingService .getActionTypeById(tenantId, DaoUtils.getInteger(rs, DEFAULT_RELATED_ACTION_TYPE_COLUMN_NAME)), DaoUtils.getStringIfPresent(rs, DEFAULT_RECOMMENDATION_STRATEGY_COLUMN_NAME), DaoUtils.getStringIfPresent(rs, DEFAULT_EXPLANATION_COLUMN_NAME), DaoUtils.getDate(rs, DEFAULT_RECOMMENDATION_TIME_COLUMN_NAME), typeMappingService .convertListOfRecommendedItemVOs(tenantId, recommendedItemDAO .getRecommendedItemsOfRecommendation(DaoUtils.getInteger(rs, DEFAULT_ID_COLUMN_NAME)))); } }
@Override public RecommendationVO<Integer, String> loadRecommendation( Integer recommendationId) { RecommendationVO<Integer, Integer> loadedRecommendation = recommendationDAO .loadRecommendation(recommendationId); Integer tenantId = loadedRecommendation.getTenant(); if (tenantId == null) { throw new IllegalArgumentException("tenant not specified, can not retrieve type mapping without tenant"); } return typeMappingService.convertRecommendationVO(tenantId, loadedRecommendation); }
public RecommendationVO<Integer, Integer> mapRow(ResultSet rs, int rowNum) throws SQLException { RecommendationVO<Integer, Integer> recommendation = new RecommendationVO<Integer, Integer>( DaoUtils.getInteger(rs, DEFAULT_ID_COLUMN_NAME), DaoUtils.getInteger(rs, DEFAULT_TENANT_COLUMN_NAME), DaoUtils.getInteger(rs, DEFAULT_USER_COLUMN_NAME), DaoUtils.getInteger(rs, DEFAULT_QUERIED_ITEM_COLUMN_NAME), DaoUtils.getInteger(rs, DEFAULT_QUERIED_ITEM_TYPE_COLUMN_NAME), DaoUtils.getInteger(rs, DEFAULT_QUERIED_ASSOC_TYPE_COLUMN_NAME), DaoUtils.getInteger(rs, DEFAULT_RELATED_ACTION_TYPE_COLUMN_NAME), DaoUtils.getStringIfPresent(rs, DEFAULT_RECOMMENDATION_STRATEGY_COLUMN_NAME), DaoUtils.getStringIfPresent(rs, DEFAULT_EXPLANATION_COLUMN_NAME), DaoUtils.getDate(rs, DEFAULT_RECOMMENDATION_TIME_COLUMN_NAME), recommendedItemDAO .getRecommendedItemsOfRecommendation(DaoUtils.getInteger(rs, DEFAULT_ID_COLUMN_NAME))); return recommendation; } }