* 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 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;
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;
}
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);
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);
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);
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);
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()) {
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);
*/
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));