aboutsummaryrefslogtreecommitdiffstats
path: root/config-model/src/main/java/com/yahoo/documentmodel/DataTypeRepo.java
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@yahoo-inc.com>2016-06-15 23:09:44 +0200
committerJon Bratseth <bratseth@yahoo-inc.com>2016-06-15 23:09:44 +0200
commit72231250ed81e10d66bfe70701e64fa5fe50f712 (patch)
tree2728bba1131a6f6e5bdf95afec7d7ff9358dac50 /config-model/src/main/java/com/yahoo/documentmodel/DataTypeRepo.java
Publish
Diffstat (limited to 'config-model/src/main/java/com/yahoo/documentmodel/DataTypeRepo.java')
-rw-r--r--config-model/src/main/java/com/yahoo/documentmodel/DataTypeRepo.java58
1 files changed, 58 insertions, 0 deletions
diff --git a/config-model/src/main/java/com/yahoo/documentmodel/DataTypeRepo.java b/config-model/src/main/java/com/yahoo/documentmodel/DataTypeRepo.java
new file mode 100644
index 00000000000..6d332ba16fb
--- /dev/null
+++ b/config-model/src/main/java/com/yahoo/documentmodel/DataTypeRepo.java
@@ -0,0 +1,58 @@
+// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.documentmodel;
+
+import com.yahoo.document.DataType;
+
+import java.util.Collection;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+/**
+ * @author <a href="mailto:balder@yahoo-inc.com">Henning Baldersheim</a>
+ */
+public class DataTypeRepo implements DataTypeCollection {
+ Map<Integer, DataType> typeById = new LinkedHashMap<>();
+ Map<String, DataType> typeByName = new LinkedHashMap<>();
+
+ public DataType getDataType(String name) {
+ return typeByName.get(name);
+ }
+
+ public DataType getDataType(int id) {
+ return typeById.get(id);
+ }
+
+ public Collection<DataType> getTypes() { return typeById.values(); }
+
+ public DataTypeRepo add(DataType type) {
+ if (typeByName.containsKey(type.getName()) ||
+ typeById.containsKey(type.getId()))
+ {
+ throw new IllegalStateException("Data type '" + type.getName() + "', id '" + type.getId() + "' is already registered.");
+ }
+ typeByName.put(type.getName(), type);
+ typeById.put(type.getId(), type);
+ return this;
+ }
+
+ public DataTypeRepo addAll(DataTypeCollection repo) {
+ for (DataType dataType : repo.getTypes()) {
+ add(dataType);
+ }
+ return this;
+ }
+
+ public DataTypeRepo replace(DataType type) {
+ if (!typeByName.containsKey(type.getName()) ||
+ !typeById.containsKey(type.getId()))
+ {
+ throw new IllegalStateException("Data type '" + type.getName() + "' is not registered.");
+ }
+ typeByName.remove(type.getName());
+ typeByName.put(type.getName(), type);
+ typeById.remove(type.getId());
+ typeById.put(type.getId(), type);
+ return this;
+ }
+
+}