/* * Copyright (c) 2019-2020. Developed by Hedgecode. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.hedgecode.chess.scanner.format; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.Map; /** * AbstractPGNFormat * * @author Dmitry Samoshin aka gotty */ public abstract class AbstractPGNFormat implements PGNFormat { private static final String MOVES_FORMAT = "%s %s"; private final DateFormat dateFormat = new SimpleDateFormat("yyyy.MM.dd"); private final DateFormat timeFormat = new SimpleDateFormat("HH:mm:ss"); private final Map pgnTags = new HashMap<>(); private String pgnMoves; @Override public void addTag(PGNTag tag, String value) { pgnTags.put(tag, value); } public String getTag(PGNTag tag) { return pgnTags.get(tag); } @Override public void addMoves(String moves) { pgnMoves = moves; } @Override public String formatDate(Date date) { return dateFormat.format(date); } @Override public String formatTime(Date time) { return timeFormat.format(time); } protected String formatMoves() { return String.format( MOVES_FORMAT, moves(), result() ); } protected String formatTagValue(String value) { return value.replaceAll("([\\\\\"])", "\\\\$1"); } private String moves() { return pgnMoves != null ? pgnMoves : PGNTag.EMPTY; } private String result() { String result = pgnTags.get(PGNTag.RESULT); return result != null ? result : PGNTag.RESULT.defaultValue(); } }