RecommendationAlgorithmImpl.java
8.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
/*
* Decompiled with CFR 0_118.
*
* Could not load the following classes:
* org.apache.sling.commons.json.JSONArray
* org.apache.sling.commons.json.JSONException
* org.apache.sling.commons.json.JSONObject
*/
package com.adobe.cq.targetrecommendations.impl.model;
import com.adobe.cq.targetrecommendations.api.TargetRecommendationsException;
import com.adobe.cq.targetrecommendations.api.model.DayCountInterval;
import com.adobe.cq.targetrecommendations.api.model.RecommendationAlgorithm;
import com.adobe.cq.targetrecommendations.api.model.RecommendationAlgorithmConfiguration;
import com.adobe.cq.targetrecommendations.api.model.RecommendationAlgorithmInclusionRule;
import com.adobe.cq.targetrecommendations.impl.model.RecommendationAlgorithmConfigurationImpl;
import com.adobe.cq.targetrecommendations.impl.model.RecommendationAlgorithmInclusionRuleImpl;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.sling.commons.json.JSONArray;
import org.apache.sling.commons.json.JSONException;
import org.apache.sling.commons.json.JSONObject;
public class RecommendationAlgorithmImpl
implements RecommendationAlgorithm {
private int id;
private String name;
private RecommendationAlgorithmConfiguration configuration;
public RecommendationAlgorithmImpl(int id, String name, RecommendationAlgorithmConfiguration configuration) {
this.id = id;
this.name = name;
this.configuration = configuration;
}
@Override
public int getId() {
return this.id;
}
@Override
public String getName() {
return this.name;
}
@Override
public RecommendationAlgorithmConfiguration getConfiguration() {
return this.configuration;
}
@Override
public String toJson() throws TargetRecommendationsException {
try {
JSONObject algJsonRepresentation = new JSONObject();
if (this.getId() > 0) {
algJsonRepresentation.put("id", this.getId());
}
algJsonRepresentation.put("name", (Object)this.getName());
RecommendationAlgorithmConfiguration configuration = this.getConfiguration();
JSONObject configurationJson = new JSONObject();
configurationJson.put("key", (Object)configuration.getConfigurationKey());
configurationJson.put("type", (Object)configuration.getConfigurationType());
configurationJson.put("datasource", (Object)configuration.getConfigurationDataSource());
configurationJson.put("attribute", (Object)configuration.getConfigurationAttribute());
JSONObject detailsJson = new JSONObject();
detailsJson.put("daysCount", (Object)configuration.getDayCount());
detailsJson.put("productConfidence", (Object)configuration.getProductConfidence());
detailsJson.put("minInventory", configuration.getMinInventory());
JSONObject priceRangeJson = new JSONObject();
if (configuration.getPriceRangeMax() > 0.0) {
priceRangeJson.put("max", configuration.getPriceRangeMax());
}
if (configuration.getPriceRangeMin() > 0.0) {
priceRangeJson.put("min", configuration.getPriceRangeMin());
}
if (priceRangeJson.length() > 0) {
detailsJson.put("priceRange", (Object)priceRangeJson);
}
JSONArray incusionRules = new JSONArray();
for (RecommendationAlgorithmInclusionRule inclusionRule : configuration.getInclusionRules()) {
JSONObject inclusionRuleJson = new JSONObject();
inclusionRuleJson.put("attribute", (Object)inclusionRule.getAttribute());
inclusionRuleJson.put("operation", (Object)inclusionRule.getOperation());
inclusionRuleJson.put("values", inclusionRule.getValues());
inclusionRuleJson.put("lowRange", inclusionRule.getLowRange());
inclusionRuleJson.put("highRange", inclusionRule.getHighRange());
incusionRules.put((Object)inclusionRuleJson);
}
if (incusionRules.length() > 0) {
detailsJson.put("inclusionRules", (Object)incusionRules);
}
algJsonRepresentation.put("configuration", (Object)configurationJson);
algJsonRepresentation.put("details", (Object)detailsJson);
return algJsonRepresentation.toString();
}
catch (Exception e) {
throw new TargetRecommendationsException(e);
}
}
public static RecommendationAlgorithm fromJson(JSONObject recommendationJsonRepresentation) throws JSONException {
int algId = -1;
ArrayList<RecommendationAlgorithmInclusionRuleImpl> algorithmInclusionRules = new ArrayList<RecommendationAlgorithmInclusionRuleImpl>();
if (recommendationJsonRepresentation.has("id")) {
algId = recommendationJsonRepresentation.getInt("id");
}
String algName = recommendationJsonRepresentation.getString("name");
JSONObject configJson = recommendationJsonRepresentation.getJSONObject("configuration");
JSONObject dataDetailsJson = recommendationJsonRepresentation.optJSONObject("details");
if (dataDetailsJson == null) {
dataDetailsJson = new JSONObject();
}
JSONArray inclusionRules = null;
if (dataDetailsJson.has("inclusionRules")) {
inclusionRules = dataDetailsJson.getJSONArray("inclusionRules");
for (int i = 0; i < inclusionRules.length(); ++i) {
JSONObject inclusionRuleConfigJson;
RecommendationAlgorithmInclusionRuleImpl inclusionRule = new RecommendationAlgorithmInclusionRuleImpl(inclusionRuleConfigJson.getString("attribute"), inclusionRuleConfigJson.getString("operation"), (inclusionRuleConfigJson = inclusionRules.getJSONObject(i)).has("values") ? inclusionRuleConfigJson.getString("values") : "", inclusionRuleConfigJson.has("lowRange") ? inclusionRuleConfigJson.getInt("lowRange") : -1, inclusionRuleConfigJson.has("highRange") ? inclusionRuleConfigJson.getInt("highRange") : -1);
algorithmInclusionRules.add(inclusionRule);
}
}
HashMap<Object, Object> configuration = new HashMap<Object, Object>();
configuration.put((Object)RecommendationAlgorithmConfigurationImpl.AlgorightmConfigurationProperty.KEY, (configJson.has("key") ? configJson.getString("key") : null));
configuration.put((Object)RecommendationAlgorithmConfigurationImpl.AlgorightmConfigurationProperty.TYPE, (configJson.has("type") ? configJson.getString("type") : null));
configuration.put((Object)RecommendationAlgorithmConfigurationImpl.AlgorightmConfigurationProperty.DATASOURCE, (configJson.has("datasource") ? configJson.getString("datasource") : null));
configuration.put((Object)RecommendationAlgorithmConfigurationImpl.AlgorightmConfigurationProperty.ATTRIBUTE, (configJson.has("attribute") ? configJson.getString("attribute") : null));
configuration.put((Object)RecommendationAlgorithmConfigurationImpl.AlgorightmConfigurationProperty.DAY_COUNT, (dataDetailsJson.has("daysCount") ? dataDetailsJson.get("daysCount") : null));
configuration.put((Object)RecommendationAlgorithmConfigurationImpl.AlgorightmConfigurationProperty.PRICE_MIN, dataDetailsJson.has("priceRange") ? dataDetailsJson.getJSONObject("priceRange").getDouble("min") : -1.0);
configuration.put((Object)RecommendationAlgorithmConfigurationImpl.AlgorightmConfigurationProperty.PRICE_MAX, dataDetailsJson.has("priceRange") ? dataDetailsJson.getJSONObject("priceRange").getDouble("max") : -1.0);
configuration.put((Object)RecommendationAlgorithmConfigurationImpl.AlgorightmConfigurationProperty.PRODUCT_CONFIDENCE, (dataDetailsJson.has("productConfidence") ? dataDetailsJson.get("productConfidence") : null));
configuration.put((Object)RecommendationAlgorithmConfigurationImpl.AlgorightmConfigurationProperty.PRODUCT_MIN_INVENTORY, dataDetailsJson.has("minInventory") ? dataDetailsJson.getInt("minInventory") : -1);
configuration.put((Object)RecommendationAlgorithmConfigurationImpl.AlgorightmConfigurationProperty.INCLUSION_RULES, algorithmInclusionRules);
return new RecommendationAlgorithmImpl(algId, algName, new RecommendationAlgorithmConfigurationImpl(configuration));
}
}