RecommendationAlgorithmImpl.java 8.34 KB
/*
 * 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));
    }
}