Softwareprojektmanagement/src/main/java/de/hsel/spm/baudas/web/depiction/WeekOverviewChart.java

84 lines
2.5 KiB
Java

package de.hsel.spm.baudas.web.depiction;
import com.google.gson.Gson;
import de.hsel.spm.baudas.analysis.WeekOverview;
import de.hsel.spm.baudas.web.DatasetManagement;
import org.jetbrains.annotations.NotNull;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
/**
* changes data from week overview into readable format for chart.js
*
* @author Johannes Theiner
* @version 0.1
* @since 1.0
**/
@WebServlet("/week_overview")
public class WeekOverviewChart extends HttpServlet implements Depiction {
private static Map<UUID, Map> cache = new HashMap<>();
private static final long serialVersionUID = 8484151844118L;
/**
* returns formatted analysis result to HTTP GET request from supplied id.
*
* @param req request object
* @param resp response object
* @throws IOException failed to initialize print writer
*/
@Override
protected void doGet(@NotNull HttpServletRequest req, @NotNull HttpServletResponse resp) throws IOException {
UUID uuid = setup(req, resp, cache);
if (uuid == null) return;
List<String> definedOrder = Arrays.asList("Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag");
Map<String, List<String>> result = new HashMap<>();
File file = DatasetManagement.get(uuid);
WeekOverview overview = new WeekOverview(file);
List<String> count = new ArrayList<>();
List<String> revenue = new ArrayList<>();
List<String> labels = new ArrayList<>(overview.getResult().keySet());
Comparator<String> comparator = Comparator.comparingInt(definedOrder::indexOf);
labels.sort(comparator);
for (String label : labels) {
Map.Entry<Double, Integer> entry = overview.getResult().get(label);
revenue.add(entry.getKey().toString());
count.add(entry.getValue().toString());
}
result.put("labels", labels);
result.put("count", count);
result.put("revenue", revenue);
PrintWriter out = resp.getWriter();
Gson gson = new Gson();
cache.put(uuid, result);
out.print(gson.toJson(result));
}
}