Split out BaseTypes
[ovsdb.git] / library / impl / src / main / java / org / opendaylight / ovsdb / lib / schema / TableSchema.java
index 2c7ee602cc97faac759f65567e1f40800e6ead66..ea63f412df02fd9c498f5f6b63920fb9a0a7c6a1 100644 (file)
@@ -5,13 +5,14 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
-
 package org.opendaylight.ovsdb.lib.schema;
 
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
@@ -22,23 +23,18 @@ import org.opendaylight.ovsdb.lib.notation.Column;
 import org.opendaylight.ovsdb.lib.notation.Row;
 import org.opendaylight.ovsdb.lib.notation.UUID;
 import org.opendaylight.ovsdb.lib.operations.Insert;
-import org.opendaylight.ovsdb.lib.schema.BaseType.UuidBaseType;
-import org.opendaylight.ovsdb.lib.schema.ColumnType.AtomicColumnType;
-
 
 public abstract class TableSchema<E extends TableSchema<E>> {
 
-    private String name;
-    private Map<String, ColumnSchema> columns;
-
-    public TableSchema() {
-    }
+    private final String name;
+    private final Map<String, ColumnSchema> columns;
 
-    protected TableSchema(String name) {
+    protected TableSchema(final String name) {
         this.name = name;
+        this.columns = new HashMap<>();
     }
 
-    public TableSchema(String name, Map<String, ColumnSchema> columns) {
+    protected TableSchema(final String name, final Map<String, ColumnSchema> columns) {
         this.name = name;
         this.columns = columns;
     }
@@ -51,20 +47,20 @@ public abstract class TableSchema<E extends TableSchema<E>> {
         return columns;
     }
 
-    public boolean hasColumn(String column) {
+    public boolean hasColumn(final String column) {
         return this.getColumns().contains(column);
     }
 
-
-    public ColumnType getColumnType(String column) {
+    public ColumnType getColumnType(final String column) {
         return this.columns.get(column).getType();
     }
 
-    public <E extends TableSchema<E>> E as(Class<E> clazz) {
+    public <E extends TableSchema<E>> E as(final Class<E> clazz) {
         try {
             Constructor<E> instance = clazz.getConstructor(TableSchema.class);
             return instance.newInstance(this);
-        } catch (Exception e) {
+        } catch (InstantiationException | IllegalAccessException
+                | InvocationTargetException | NoSuchMethodException e) {
             throw new RuntimeException("exception constructing instance of clazz " + clazz, e);
         }
     }
@@ -73,7 +69,7 @@ public abstract class TableSchema<E extends TableSchema<E>> {
         return new Insert<>(this);
     }
 
-    public <D> ColumnSchema<E, Set<D>> multiValuedColumn(String column, Class<D> type) {
+    public <D> ColumnSchema<E, Set<D>> multiValuedColumn(final String column, final Class<D> type) {
         //todo exception handling
 
         ColumnSchema<E, Set<D>> columnSchema = columns.get(column);
@@ -81,7 +77,8 @@ public abstract class TableSchema<E extends TableSchema<E>> {
         return columnSchema;
     }
 
-    public <K,V> ColumnSchema<E, Map<K,V>> multiValuedColumn(String column, Class<K> keyType, Class<V> valueType) {
+    public <K,V> ColumnSchema<E, Map<K,V>> multiValuedColumn(final String column, final Class<K> keyType,
+            final Class<V> valueType) {
         //todo exception handling
 
         ColumnSchema<E, Map<K, V>> columnSchema = columns.get(column);
@@ -89,7 +86,7 @@ public abstract class TableSchema<E extends TableSchema<E>> {
         return columnSchema;
     }
 
-    public <D> ColumnSchema<E, D> column(String column, Class<D> type) {
+    public <D> ColumnSchema<E, D> column(final String column, final Class<D> type) {
         //todo exception handling
 
         ColumnSchema<E, D> columnSchema = columns.get(column);
@@ -99,24 +96,15 @@ public abstract class TableSchema<E extends TableSchema<E>> {
         return columnSchema;
     }
 
-    public ColumnSchema column(String column) {
+    public ColumnSchema column(final String column) {
         return this.columns.get(column);
     }
 
-
     public String getName() {
         return name;
     }
 
-    protected void setName(String name) {
-        this.name = name;
-    }
-
-    protected void setColumns(Map<String, ColumnSchema> columns) {
-        this.columns = columns;
-    }
-
-    public TableUpdate<E> updatesFromJson(JsonNode value) {
+    public TableUpdate<E> updatesFromJson(final JsonNode value) {
         TableUpdate<E> tableUpdate = new TableUpdate<>();
         Iterator<Entry<String, JsonNode>> fields = value.fields();
         while (fields.hasNext()) {
@@ -134,8 +122,8 @@ public abstract class TableSchema<E extends TableSchema<E>> {
         return tableUpdate;
     }
 
-    public Row<E> createRow(ObjectNode rowNode) {
-        List<Column<E, ?>> columns = new ArrayList<>();
+    public Row<E> createRow(final ObjectNode rowNode) {
+        List<Column<E, ?>> newColumns = new ArrayList<>();
         for (Iterator<Map.Entry<String, JsonNode>> iter = rowNode.fields(); iter.hasNext();) {
             Map.Entry<String, JsonNode> next = iter.next();
             ColumnSchema<E, Object> schema = column(next.getKey(), Object.class);
@@ -147,13 +135,13 @@ public abstract class TableSchema<E extends TableSchema<E>> {
              */
             if (schema != null) {
                 Object value = schema.valueFromJson(next.getValue());
-                columns.add(new Column<>(schema, value));
+                newColumns.add(new Column<>(schema, value));
             }
         }
-        return new Row<>(this, columns);
+        return new Row<>(this, newColumns);
     }
 
-    public List<Row<E>> createRows(JsonNode rowsNode) {
+    public List<Row<E>> createRows(final JsonNode rowsNode) {
         List<Row<E>> rows = new ArrayList<>();
         for (JsonNode rowNode : rowsNode.get("rows")) {
             rows.add(createRow((ObjectNode)rowNode));