Advertisement
Guest User

Untitled

a guest
Apr 8th, 2020
294
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.59 KB | None | 0 0
  1. package ru.focusstart.levchugov.task3.model;
  2.  
  3.  
  4. import com.fasterxml.jackson.core.type.TypeReference;
  5.  
  6. import com.fasterxml.jackson.databind.ObjectMapper;
  7. import org.jasypt.util.numeric.BasicIntegerNumberEncryptor;
  8. import org.slf4j.Logger;
  9. import org.slf4j.LoggerFactory;
  10. import ru.focusstart.levchugov.task3.settings.Setting;
  11.  
  12. import java.io.File;
  13. import java.io.IOException;
  14. import java.math.BigInteger;
  15. import java.nio.file.Files;
  16. import java.nio.file.Paths;
  17. import java.util.HashMap;
  18. import java.util.Map;
  19. import java.util.Set;
  20.  
  21. public class BestScoresStorage {
  22.     private static final Logger logger = LoggerFactory.getLogger(BestScoresStorage.class);
  23.  
  24.     private static final String FILE_NAME = "High_Scores.json";
  25.     private static final int DEFAULT_SCORE = 99999;
  26.  
  27.     private Map<String, Integer> scores;
  28.     private Map<String, BigInteger> encryptedScores;
  29.  
  30.     private BasicIntegerNumberEncryptor numberEncryptor = new BasicIntegerNumberEncryptor();
  31.     ObjectMapper objectMapper = new ObjectMapper();
  32.  
  33.     public BestScoresStorage() {
  34.         numberEncryptor.setPassword("pass");
  35.         scores = new HashMap<>();
  36.         readScores();
  37.     }
  38.  
  39.     private void readScores() {
  40.         if (Files.exists(Paths.get(FILE_NAME))) {
  41.             try {
  42.                 scores = objectMapper.readValue(new File(FILE_NAME),
  43.                         new TypeReference<HashMap<String, Integer>>() {
  44.                         });
  45.                 scores = decryptMap(scores);
  46.                 if (!isValidKeys()) {
  47.                     resetScores();
  48.                 }
  49.             } catch (IOException e) {
  50.                 logger.warn("Scores file reading problem", e);
  51.                 resetScores();
  52.             }
  53.         } else {
  54.             resetScores();
  55.         }
  56.     }
  57.  
  58.     private void resetScores() {
  59.         scores.clear();
  60.         scores.put(Setting.EASY.getName(), DEFAULT_SCORE);
  61.         scores.put(Setting.MIDDLE.getName(), DEFAULT_SCORE);
  62.         scores.put(Setting.HARD.getName(), DEFAULT_SCORE);
  63.     }
  64.  
  65.     public void writeScore() {
  66.         try {
  67.             scores = encryptMap(scores);
  68.             objectMapper.writeValue(new File(FILE_NAME), scores);
  69.         } catch (IOException e) {
  70.             logger.error("Scores file writing problem");
  71.         }
  72.     }
  73.  
  74.     private boolean isValidKeys() {
  75.         return scores.containsKey(Setting.EASY.getName()) && scores.containsKey(Setting.MIDDLE.getName()) && scores.containsKey(Setting.HARD.getName());
  76.     }
  77.  
  78.     private Map<String, Integer> encryptMap(Map<String, Integer> map) {
  79.         Map<String, Integer> encryptedMap = new HashMap<>();
  80.         Set<String> keys = map.keySet();
  81.         for (String key : keys) {
  82.             encryptedMap.put(key, numberEncryptor.encrypt(BigInteger.valueOf(map.get(key))).intValue());
  83.         }
  84.         return encryptedMap;
  85.     }
  86.  
  87.     private Map<String, Integer> decryptMap(Map<String, Integer> map) {
  88.         Map<String, Integer> encryptedMap = new HashMap<>();
  89.         Set<String> keys = map.keySet();
  90.         for (String key : keys) {
  91.             encryptedMap.put(key, numberEncryptor.encrypt(BigInteger.valueOf(map.get(key))).intValue());
  92.         }
  93.         return encryptedMap;
  94.     }
  95.  
  96.    // private void ะปัƒะป() {
  97.     //    BigInteger bigInteger = new BigInteger("2");
  98.      //   bigInteger.intValue();
  99.   //  }
  100.  
  101.     public int getScore(String difficulty) {
  102.         return scores.get(difficulty);
  103.     }
  104.  
  105.     public void setScore(String difficulty, int value) {
  106.         scores.remove(difficulty);
  107.         scores.put(difficulty, value);
  108.         writeScore();
  109.     }
  110. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement