diff src/nabble/model/AbstractType.java @ 0:7ecd1a4ef557

add content
author Franklin Schmidt <fschmidt@gmail.com>
date Thu, 21 Mar 2019 19:15:52 -0600
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/nabble/model/AbstractType.java	Thu Mar 21 19:15:52 2019 -0600
@@ -0,0 +1,44 @@
+package nabble.model;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.Map;
+
+
+abstract class AbstractType<T extends AbstractType> {
+
+	private static final Logger logger = LoggerFactory.getLogger(AbstractType.class);
+
+	private final char code;
+	private final String name;
+
+	@SuppressWarnings("unchecked")
+	AbstractType( Map<Character,T> map, char code, String name ) {
+		this.code = code;
+		this.name = name;
+		if( map.put(code,(T)this) != null )
+			throw new RuntimeException("duplicate code: "+code);
+	}
+
+	public final char getCode() {
+		return code;
+	}
+
+	public final String getName() {
+		return name;
+	}
+
+	public String toString() {
+		return getClass().getSimpleName()+"-"+getName();
+	}
+
+	static <T> T getType( Map<Character,T> map, char code ) {
+		T t = map.get(code);
+		if( t==null ) {
+			//throw new RuntimeException("code="+code);
+			logger.warn("Invalid code="+code);
+		}
+		return t;
+	}
+}