* limitations under the License.
*/
-package org.hedgecode.chess.scanner.entity;
+package org.hedgecode.chess.scanner.format;
+
+import java.util.Arrays;
+import java.util.Comparator;
/**
* PGNTag
EVENT ( "Event", true, PGNTag.QUESTION ),
SITE ( "Site", true, PGNTag.QUESTION ),
DATE ( "Date", true, PGNTag.QUESTION_DATE ),
- TIME ( "Time", false, PGNTag.QUESTION_TIME ),
ROUND ( "Round", true, PGNTag.QUESTION ),
WHITE ( "White", true, PGNTag.QUESTION ),
BLACK ( "Black", true, PGNTag.QUESTION ),
+ RESULT ( "Result", true, PGNTag.NON_RESULT ),
WHITE_TITLE ( "WhiteTitle", false, PGNTag.HYPHEN ),
BLACK_TITLE ( "BlackTitle", false, PGNTag.HYPHEN ),
WHITE_ELO ( "WhiteElo", false, PGNTag.HYPHEN ),
SUBVARIATION ( "SubVariation", false, PGNTag.EMPTY ),
ECO ( "ECO", false, PGNTag.EMPTY ),
NIC ( "NIC", false, PGNTag.EMPTY ),
- UTC_DATE ( "UTCDate", false, PGNTag.QUESTION_DATE ),
+ TIME ( "Time", false, PGNTag.QUESTION_TIME ),
UTC_TIME ( "UTCTime", false, PGNTag.QUESTION_TIME ),
+ UTC_DATE ( "UTCDate", false, PGNTag.QUESTION_DATE ),
TIME_CONTROL ( "TimeControl", false, PGNTag.QUESTION ),
SETUP ( "SetUp", false, PGNTag.ZERO ),
FEN ( "FEN", false, PGNTag.EMPTY ),
TERMINATION ( "Termination", false, PGNTag.EMPTY ),
ANNOTATOR ( "Annotator", false, PGNTag.EMPTY ),
MODE ( "Mode", false, PGNTag.EMPTY ),
- PLY_COUNT ( "PlyCount", false, PGNTag.EMPTY ),
- RESULT ( "Result", true, PGNTag.NON_RESULT );
+ PLY_COUNT ( "PlyCount", false, PGNTag.EMPTY );
public static final String EMPTY = "";
public static final String HYPHEN = "-";
return defaultValue;
}
+ public static PGNTag[] tags() {
+ PGNTag[] tags = values();
+ Arrays.sort(
+ tags, new TagComparator()
+ );
+ return tags;
+ }
+
+ static class TagComparator implements Comparator<PGNTag> {
+
+ @Override
+ public int compare(PGNTag tag1, PGNTag tag2) {
+ if (tag1.isRequired && tag2.isRequired) {
+ return tag1.ordinal() - tag2.ordinal();
+ } else {
+ return tag1.isRequired ? -1
+ : tag2.isRequired ? 1
+ : tag1.name().compareTo(tag2.name());
+ }
+ }
+
+ }
+
}