package com.christophdietze.jack.shared.board; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import com.christophdietze.jack.shared.util.SimpleToStringBuilder; public class GameMetaInfo { private List<GameMetaInfoListener> listeners = new ArrayList<GameMetaInfoListener>(); private String whitePlayerName; private String blackPlayerName; private Map<String, String> additionalTags = new HashMap<String, String>(); /** * @return null if not set */ public String getWhitePlayerName() { return whitePlayerName; } /** * @return null if not set */ public String getBlackPlayerName() { return blackPlayerName; } public void setWhitePlayerName(String whitePlayerName) { this.whitePlayerName = whitePlayerName; fireMetaInfoChanged(); } public void setBlackPlayerName(String blackPlayerName) { this.blackPlayerName = blackPlayerName; fireMetaInfoChanged(); } public void clear() { whitePlayerName = null; blackPlayerName = null; additionalTags.clear(); fireMetaInfoChanged(); } public void addTag(String name, String value) { additionalTags.put(name, value); } public String getTag(String tagName) { return additionalTags.get(tagName); } public Map<String, String> getTags() { return additionalTags; } public void addListener(GameMetaInfoListener listener) { listeners.add(listener); } private void fireMetaInfoChanged() { for (GameMetaInfoListener listener : listeners) { listener.onMetaInfoChanged(); } } public static class TagPair { private String name; private String value; public TagPair(String name, String value) { this.name = name; this.value = value; } public TagPair(Map.Entry<String, String> mapEntry) { this(mapEntry.getKey(), mapEntry.getValue()); } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } @Override public String toString() { return SimpleToStringBuilder.create(this).append("name", name).append("value", value).toString(); } } }