package com.griddynamics.jagger.webclient.client.trends;
import com.griddynamics.jagger.webclient.client.dto.TestsMetrics;
import com.griddynamics.jagger.webclient.client.mvp.AbstractPlaceHistoryMapper;
import java.util.*;
/**
* User: amikryukov
* Date: 2/14/14
*/
public class LinkFragment {
private static final String PARAM_TESTS = "tests";
private static final String PARAM_SESSIONS = "sessions";
private Set<String> selectedSessionIds = Collections.EMPTY_SET;
private Set<TestsMetrics> selectedTestsMetrics = Collections.EMPTY_SET;
private Set<String> sessionTrends = Collections.EMPTY_SET;
public Set<String> getSelectedSessionIds() {
return selectedSessionIds;
}
public void setSelectedSessionIds(Set<String> selectedSessionIds) {
this.selectedSessionIds = selectedSessionIds;
}
public Set<TestsMetrics> getSelectedTestsMetrics() {
return selectedTestsMetrics;
}
public void setSelectedTestsMetrics(Set<TestsMetrics> selectedTestsMetrics) {
this.selectedTestsMetrics = selectedTestsMetrics;
}
public Set<String> getSessionTrends() {
return sessionTrends;
}
public void setSessionTrends(Set<String> sessionTrends) {
this.sessionTrends = sessionTrends;
}
public Map<String, Set<String>> getParameters() {
HashMap<String, Set<String>> parameters = new HashMap<String, Set<String>>();
if (!selectedSessionIds.isEmpty()){
StringBuilder sessionsBuilder = new StringBuilder("ids=");
for (String session : selectedSessionIds){
sessionsBuilder.append(session+",");
}
String sessions = sessionsBuilder.toString().substring(0, sessionsBuilder.length()-1);
String trends = "";
if (!sessionTrends.isEmpty()){
StringBuilder trendsBuilder = new StringBuilder("&trends=");
for (String trend : sessionTrends){
trendsBuilder.append(trend+",");
}
trends = trendsBuilder.toString().substring(0, trendsBuilder.length()-1);
}
parameters.put(PARAM_SESSIONS, new HashSet<String>(Arrays.asList("("+sessions+trends+")")));
}else{
return Collections.EMPTY_MAP;
}
HashSet<String> testMetrics = new HashSet<String>();
for (TestsMetrics testsMetric : selectedTestsMetrics){
StringBuilder builder = new StringBuilder();
String metricsString = "";
String trendsString = "";
if (!testsMetric.getMetrics().isEmpty()){
builder = new StringBuilder();
for (String metricString : testsMetric.getMetrics()){
builder.append(metricString);
builder.append(',');
}
metricsString = builder.toString().substring(0, builder.length()-1);
metricsString = "&metrics=" + metricsString;
}
if (!testsMetric.getTrends().isEmpty()){
builder = new StringBuilder();
for (String trendString : testsMetric.getTrends()){
builder.append(trendString);
builder.append(',');
}
trendsString = builder.toString().substring(0, builder.length()-1);
trendsString = "&trends=" + trendsString;
}
testMetrics.add("("+"name="+testsMetric.getTestName()+metricsString+trendsString+")");
}
if (!testMetrics.isEmpty()){
parameters.put(PARAM_TESTS, testMetrics);
}
return parameters;
}
public void setParameters(Map<String, Set<String>> parameters) {
selectedTestsMetrics = new HashSet<TestsMetrics>();
selectedSessionIds = new HashSet<String>();
if (parameters != null && !parameters.isEmpty()) {
Set<String> sessionGroups = parameters.get(PARAM_SESSIONS);
if (sessionGroups!=null && !sessionGroups.isEmpty()){
String group = sessionGroups.iterator().next();
String temp = group.substring(1, group.length()-1);
Map<String, Set<String>> idsAndTrends = AbstractPlaceHistoryMapper.getParameters(temp);
Set<String> sessions = idsAndTrends.get("ids");
sessions = sessions!=null ? sessions : Collections.EMPTY_SET;
Set<String> trends = idsAndTrends.get("trends");
trends = trends!=null ? trends : Collections.EMPTY_SET;
selectedSessionIds = sessions;
sessionTrends = trends;
}
Set<String> groups = parameters.get(PARAM_TESTS);
if (groups!=null && !groups.isEmpty()){
for (String group : groups){
String temp = group.substring(1, group.length()-1);
Map<String, Set<String>> metricsAndTests = AbstractPlaceHistoryMapper.getParameters(temp);
Set<String> testsNames = metricsAndTests.get("name");
testsNames = testsNames!=null ? testsNames : Collections.EMPTY_SET;
Set<String> metrics = metricsAndTests.get("metrics");
metrics = metrics!=null ? metrics : Collections.EMPTY_SET;
Set<String> trends = metricsAndTests.get("trends");
trends = trends!=null ? trends : Collections.EMPTY_SET;
selectedTestsMetrics.add(new TestsMetrics(testsNames.iterator().next(), metrics, trends));
}
}
}
}
public String getParametersAsString() {
Map<String, Set<String>> parameters = getParameters();
StringBuilder sb = new StringBuilder();
for (Map.Entry<String, Set<String>> entry : parameters.entrySet()) {
sb.append(entry.getKey()).append('=');
for (String string : entry.getValue()) {
sb.append(string).append(',');
}
sb.deleteCharAt(sb.length() - 1);
sb.append('&');
}
sb.deleteCharAt(sb.length()-1);
return sb.toString();
}
}