package com.salesmanager.core.model.system;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.json.simple.JSONAware;
import org.json.simple.JSONObject;
import com.fasterxml.jackson.annotation.JsonProperty;
/**
* Object used to contain the integration information with an external gateway
* Uses simple JSON to encode the object in JSON by implementing JSONAware
* and uses jackson JSON decode to parse JSON String to an Object
* @author csamson
*
*/
public class IntegrationConfiguration implements JSONAware {
public final static String TEST_ENVIRONMENT = "TEST";
public final static String PRODUCTION_ENVIRONMENT = "PRODUCTION";
private String moduleCode;
private boolean active;
private boolean defaultSelected;
//private boolean customModule;
private Map<String,String> integrationKeys= new HashMap<String,String>();
private Map<String,List<String>> integrationOptions= new HashMap<String,List<String>>();
private String environment;
public String getModuleCode() {
return moduleCode;
}
@JsonProperty("moduleCode")
public void setModuleCode(String moduleCode) {
this.moduleCode = moduleCode;
}
public boolean isActive() {
return active;
}
@JsonProperty("active")
public void setActive(boolean active) {
this.active = active;
}
public Map<String, String> getIntegrationKeys() {
return integrationKeys;
}
@JsonProperty("integrationKeys")
public void setIntegrationKeys(Map<String, String> integrationKeys) {
this.integrationKeys = integrationKeys;
}
protected String getJsonInfo() {
StringBuilder returnString = new StringBuilder();
returnString.append("{");
returnString.append("\"moduleCode\"").append(":\"").append(this.getModuleCode()).append("\"");
returnString.append(",");
returnString.append("\"active\"").append(":").append(this.isActive());
returnString.append(",");
returnString.append("\"defaultSelected\"").append(":").append(this.isDefaultSelected());
returnString.append(",");
//returnString.append("\"customModule\"").append(":").append(this.isCustomModule());
//returnString.append(",");
returnString.append("\"environment\"").append(":\"").append(this.getEnvironment()).append("\"");
//returnString.append("}");
return returnString.toString();
}
@SuppressWarnings("unchecked")
@Override
public String toJSONString() {
StringBuilder returnString = new StringBuilder();
returnString.append(getJsonInfo());
if(this.getIntegrationKeys().size()>0) {
JSONObject data = new JSONObject();
Set<String> keys = this.getIntegrationKeys().keySet();
for(String key : keys) {
data.put(key, this.getIntegrationKeys().get(key));
}
String dataField = data.toJSONString();
returnString.append(",").append("\"integrationKeys\"").append(":");
returnString.append(dataField.toString());
}
if(this.getIntegrationOptions()!=null && this.getIntegrationOptions().size()>0) {
//JSONObject data = new JSONObject();
StringBuilder optionDataEntries = new StringBuilder();
Set<String> keys = this.getIntegrationOptions().keySet();
int countOptions = 0;
int keySize = 0;
for(String key : keys) {
List<String> values = this.getIntegrationOptions().get(key);
if(values!=null) {
keySize ++;
}
}
for(String key : keys) {
List<String> values = this.getIntegrationOptions().get(key);
if(values==null) {
continue;
}
StringBuilder optionsEntries = new StringBuilder();
StringBuilder dataEntries = new StringBuilder();
int count = 0;
for(String value : values) {
dataEntries.append("\"").append(value).append("\"");
if(count<values.size()-1) {
dataEntries.append(",");
}
count++;
}
optionsEntries.append("[").append(dataEntries.toString()).append("]");
optionDataEntries.append("\"").append(key).append("\":").append(optionsEntries.toString());
if(countOptions<keySize-1) {
optionDataEntries.append(",");
}
countOptions ++;
}
String dataField = optionDataEntries.toString();
returnString.append(",").append("\"integrationOptions\"").append(":{");
returnString.append(dataField.toString());
returnString.append("}");
}
returnString.append("}");
return returnString.toString();
}
public void setEnvironment(String environment) {
this.environment = environment;
}
public String getEnvironment() {
return environment;
}
public Map<String,List<String>> getIntegrationOptions() {
return integrationOptions;
}
public void setIntegrationOptions(Map<String,List<String>> integrationOptions) {
this.integrationOptions = integrationOptions;
}
public boolean isDefaultSelected() {
return defaultSelected;
}
public void setDefaultSelected(boolean defaultSelected) {
this.defaultSelected = defaultSelected;
}
}