[LIB-13] Add PGN format classes
[chesshog-scanner.git] / src / main / java / org / hedgecode / chess / scanner / json / format / JSONGameFormat.java
index 2092d01..0db8233 100644 (file)
 
 package org.hedgecode.chess.scanner.json.format;
 
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-
 import com.google.gson.annotations.SerializedName;
 
-import org.hedgecode.chess.scanner.entity.PGNTag;
+import org.hedgecode.chess.scanner.format.PGNFormat;
+import org.hedgecode.chess.scanner.format.PGNTag;
 import org.hedgecode.chess.scanner.format.GameData;
 import org.hedgecode.chess.scanner.format.GameFormat;
+import org.hedgecode.chess.scanner.format.TypeMovesFormat;
+import org.hedgecode.chess.scanner.spi.ServiceRegistry;
 
 /**
  * JSONGameFormat
  *
  * @author Dmitry Samoshin aka gotty
  */
-public class JSONGameFormat extends AbstractPGNFormat implements GameFormat {
-
-    private final DateFormat dateFormat = new SimpleDateFormat("yyyy.MM.dd");
-    private final DateFormat timeFormat = new SimpleDateFormat("HH:mm:ss");
+public class JSONGameFormat extends AbstractBaseFormat implements GameFormat {
 
     @SerializedName("gameData")
     private JSONGameData gameData;
@@ -53,25 +50,31 @@ public class JSONGameFormat extends AbstractPGNFormat implements GameFormat {
         return gameData;
     }
 
+
     @Override
-    protected void assignPGN() {
-        addTag(PGNTag.EVENT, gameData.room().name());
-        addTag(PGNTag.DATE, dateFormat.format(gameData.game().startAt()));
-        addTag(PGNTag.TIME, timeFormat.format(gameData.game().startAt()));
-        addTag(PGNTag.ROUND, gameData.game().roundSlug());
-        addTag(PGNTag.WHITE, gameData.game().white().name());
-        addTag(PGNTag.BLACK, gameData.game().black().name());
-        addTag(PGNTag.WHITE_TITLE, gameData.game().white().title());
-        addTag(PGNTag.BLACK_TITLE, gameData.game().black().title());
-        addTag(PGNTag.WHITE_ELO, Integer.toString(gameData.game().whiteElo()));
-        addTag(PGNTag.BLACK_ELO, Integer.toString(gameData.game().blackElo()));
-        addTag(PGNTag.EVENT_DATE, dateFormat.format(gameData.room().startAt()));
-        addTag(PGNTag.RESULT, gameData.game().result());
+    public String pgn() {
+        PGNFormat pgnFormat = ServiceRegistry.singleProvider(
+                PGNFormat.class
+        );
+        pgnFormat.addTag(PGNTag.EVENT, gameData.room().name());
+        pgnFormat.addTag(PGNTag.DATE, pgnFormat.formatDate(gameData.game().startAt()));
+        pgnFormat.addTag(PGNTag.ROUND, gameData.game().roundSlug());
+        pgnFormat.addTag(PGNTag.WHITE, gameData.game().white().name());
+        pgnFormat.addTag(PGNTag.BLACK, gameData.game().black().name());
+        pgnFormat.addTag(PGNTag.WHITE_TITLE, gameData.game().white().title());
+        pgnFormat.addTag(PGNTag.BLACK_TITLE, gameData.game().black().title());
+        pgnFormat.addTag(PGNTag.WHITE_ELO, Integer.toString(gameData.game().whiteElo()));
+        pgnFormat.addTag(PGNTag.BLACK_ELO, Integer.toString(gameData.game().blackElo()));
+        pgnFormat.addTag(PGNTag.EVENT_DATE, pgnFormat.formatDate(gameData.room().startAt()));
+        pgnFormat.addTag(PGNTag.TIME, pgnFormat.formatTime(gameData.game().startAt()));
+        pgnFormat.addTag(PGNTag.RESULT, gameData.game().result());
         if (gameData.moves().length > 0) {
-            addTag(PGNTag.PLY_COUNT, Integer.toString(gameData.moves().length));
+            pgnFormat.addTag(PGNTag.PLY_COUNT, Integer.toString(gameData.moves().length));
         }
-
-        addMoves(gameData.formatMoves());
+        pgnFormat.addMoves(
+                TypeMovesFormat.WRAP.format(gameData.moves())
+        );
+        return pgnFormat.format();
     }
 
 }