OSDN Git Service

add tests
[delesterandomselector/DelesteRandomSelector.git] / src / com / ranfa / lib / calc / PRPCalc.java
1 package com.ranfa.lib.calc;
2
3 import java.io.IOException;
4 import java.math.BigDecimal;
5 import java.math.RoundingMode;
6 import java.nio.file.Files;
7 import java.nio.file.Paths;
8 import java.util.List;
9
10 import org.slf4j.Logger;
11 import org.slf4j.LoggerFactory;
12
13 import com.fasterxml.jackson.core.type.TypeReference;
14 import com.fasterxml.jackson.databind.ObjectMapper;
15
16 public class PRPCalc {
17         
18         private final Logger logger = LoggerFactory.getLogger(PRPCalc.class);
19         
20         private static final String PRP_STORAGE_FILE_PATH = "generated/prp.json";
21         private static final BigDecimal THAUSAND = BigDecimal.valueOf(1000);
22         
23         private List<Integer> TotalPRPList;
24         private int TotalPRP;
25
26         public PRPCalc() {
27                 if(Files.notExists(Paths.get(PRP_STORAGE_FILE_PATH)))
28                         generateEmptyPRPFile();
29                 TypeReference<List<Integer>> typeref = new TypeReference<List<Integer>>() {};
30                 try {
31                         TotalPRPList = new ObjectMapper().readValue(Paths.get(PRP_STORAGE_FILE_PATH).toFile(), typeref);
32                 } catch (IOException e) {
33                         logger.error("Couldn't read prp file from disk.", e);
34                 }
35                 TotalPRP = calcCurrentTotal();
36         }
37         
38         public boolean generateEmptyPRPFile() {
39                 if(Files.notExists(Paths.get("generated")))
40                         try {
41                                 Files.createDirectory(Paths.get("generated"));
42                                 Files.createFile(Paths.get(PRP_STORAGE_FILE_PATH));
43                         } catch (IOException e) {
44                                 logger.error("cannot make prp file.", e);
45                                 return false;
46                         }
47                 return true;
48         }
49         
50         public int calcCurrentTotal() {
51                 int res = 0;
52                 for(int val : TotalPRPList)
53                         res += val;
54                 return res;
55         }
56         
57         public int getTotalPRP() {
58                 return TotalPRP;
59         }
60         
61         public static int calcPRPFromScore(int score) {
62                 BigDecimal scoreDecimal = BigDecimal.valueOf(score);
63                 return scoreDecimal.divide(THAUSAND, RoundingMode.DOWN).intValueExact();
64         }
65 }