Refactored HBaseRowInsertionBuilder, so it uses the _columns of the AbstractRowBuilder instead of its own, to make sure the model stays consistent.
Project: http://git-wip-us.apache.org/repos/asf/metamodel/repo Commit: http://git-wip-us.apache.org/repos/asf/metamodel/commit/ea7356a4 Tree: http://git-wip-us.apache.org/repos/asf/metamodel/tree/ea7356a4 Diff: http://git-wip-us.apache.org/repos/asf/metamodel/diff/ea7356a4 Branch: refs/heads/master Commit: ea7356a4228f700b1b8f7115762cfc42ca6c92fc Parents: 3ada7eb Author: arjansh <[email protected]> Authored: Fri May 25 12:08:05 2018 +0200 Committer: arjansh <[email protected]> Committed: Fri May 25 12:08:05 2018 +0200 ---------------------------------------------------------------------- .../insert/AbstractRowInsertionBuilder.java | 6 +++ .../hbase/HBaseRowInsertionBuilder.java | 39 +++++++------------- .../metamodel/hbase/HBaseUpdateCallback.java | 16 +++++++- 3 files changed, 34 insertions(+), 27 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/metamodel/blob/ea7356a4/core/src/main/java/org/apache/metamodel/insert/AbstractRowInsertionBuilder.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/metamodel/insert/AbstractRowInsertionBuilder.java b/core/src/main/java/org/apache/metamodel/insert/AbstractRowInsertionBuilder.java index 58c0da8..bf6dcd9 100644 --- a/core/src/main/java/org/apache/metamodel/insert/AbstractRowInsertionBuilder.java +++ b/core/src/main/java/org/apache/metamodel/insert/AbstractRowInsertionBuilder.java @@ -44,6 +44,12 @@ public abstract class AbstractRowInsertionBuilder<U extends UpdateCallback> exte _table = table; } + public AbstractRowInsertionBuilder(final U updateCallback, final Table table, final List<Column> columns) { + super(columns); + _updateCallback = updateCallback; + _table = table; + } + @Override public Table getTable() { return _table; http://git-wip-us.apache.org/repos/asf/metamodel/blob/ea7356a4/hbase/src/main/java/org/apache/metamodel/hbase/HBaseRowInsertionBuilder.java ---------------------------------------------------------------------- diff --git a/hbase/src/main/java/org/apache/metamodel/hbase/HBaseRowInsertionBuilder.java b/hbase/src/main/java/org/apache/metamodel/hbase/HBaseRowInsertionBuilder.java index 1c633f7..7272f76 100644 --- a/hbase/src/main/java/org/apache/metamodel/hbase/HBaseRowInsertionBuilder.java +++ b/hbase/src/main/java/org/apache/metamodel/hbase/HBaseRowInsertionBuilder.java @@ -19,21 +19,20 @@ package org.apache.metamodel.hbase; import java.io.IOException; -import java.util.ArrayList; -import java.util.Set; +import java.util.Arrays; +import java.util.List; import org.apache.metamodel.MetaModelException; import org.apache.metamodel.insert.AbstractRowInsertionBuilder; +import org.apache.metamodel.schema.Column; /** * A builder-class to insert rows in a HBase datastore */ public class HBaseRowInsertionBuilder extends AbstractRowInsertionBuilder<HBaseUpdateCallback> { - - private HBaseColumn[] _hbaseColumns; - - public HBaseRowInsertionBuilder(final HBaseUpdateCallback updateCallback, final HBaseTable table) { - super(updateCallback, table); + public HBaseRowInsertionBuilder(final HBaseUpdateCallback updateCallback, final HBaseTable table, + final List<Column> columns) { + super(updateCallback, table, columns); checkTable(updateCallback, table); } @@ -53,25 +52,9 @@ public class HBaseRowInsertionBuilder extends AbstractRowInsertionBuilder<HBaseU tableInSchema.checkForNotMatchingColumns(tableGettingInserts.getColumnNames()); } - /** - * Set the hbaseColumns. Checks if the columnFamilies exist in the table. - * @param hbaseColumns a {@link IllegalArgumentException} is thrown when this parameter is null or empty - */ - public void setHbaseColumns(HBaseColumn[] hbaseColumns) { - if (hbaseColumns == null || hbaseColumns.length == 0) { - throw new IllegalArgumentException("List of hbaseColumns is null or empty"); - } - final Set<String> columnFamilies = HBaseColumn.getColumnFamilies(hbaseColumns); - final HBaseTable tableInSchema = (HBaseTable) getTable(); - final ArrayList<String> columnFamiliesAsList = new ArrayList<String>(); - columnFamiliesAsList.addAll(columnFamilies); - tableInSchema.checkForNotMatchingColumns(columnFamiliesAsList); - this._hbaseColumns = hbaseColumns; - } - @Override public synchronized void execute() { - if (_hbaseColumns == null || _hbaseColumns.length == 0) { + if (getColumns() == null || getColumns().length == 0) { throw new MetaModelException("The hbaseColumns-array is null or empty"); } if (getValues() == null || getValues().length == 0) { @@ -79,9 +62,15 @@ public class HBaseRowInsertionBuilder extends AbstractRowInsertionBuilder<HBaseU } try { final HBaseClient hBaseClient = getUpdateCallback().getHBaseClient(); - hBaseClient.writeRow((HBaseTable) getTable(), _hbaseColumns, getValues()); + hBaseClient.writeRow((HBaseTable) getTable(), getColumns(), getValues()); } catch (IOException e) { throw new MetaModelException(e); } } + + @Override + public HBaseColumn[] getColumns() { + return Arrays.stream(super.getColumns()).map(column -> (HBaseColumn) column).toArray( + size -> new HBaseColumn[size]); + } } http://git-wip-us.apache.org/repos/asf/metamodel/blob/ea7356a4/hbase/src/main/java/org/apache/metamodel/hbase/HBaseUpdateCallback.java ---------------------------------------------------------------------- diff --git a/hbase/src/main/java/org/apache/metamodel/hbase/HBaseUpdateCallback.java b/hbase/src/main/java/org/apache/metamodel/hbase/HBaseUpdateCallback.java index e548229..6d35508 100644 --- a/hbase/src/main/java/org/apache/metamodel/hbase/HBaseUpdateCallback.java +++ b/hbase/src/main/java/org/apache/metamodel/hbase/HBaseUpdateCallback.java @@ -18,7 +18,9 @@ */ package org.apache.metamodel.hbase; +import java.util.List; import java.util.Set; +import java.util.stream.Collectors; import org.apache.metamodel.AbstractUpdateCallback; import org.apache.metamodel.UpdateCallback; @@ -26,6 +28,7 @@ import org.apache.metamodel.create.TableCreationBuilder; import org.apache.metamodel.delete.RowDeletionBuilder; import org.apache.metamodel.drop.TableDropBuilder; import org.apache.metamodel.insert.RowInsertionBuilder; +import org.apache.metamodel.schema.Column; import org.apache.metamodel.schema.Schema; import org.apache.metamodel.schema.Table; @@ -68,9 +71,18 @@ public class HBaseUpdateCallback extends AbstractUpdateCallback implements Updat } @Override - public RowInsertionBuilder insertInto(Table table) { + public RowInsertionBuilder insertInto(final Table table) { + throw new UnsupportedOperationException( + "We need an explicit list of columns when inserting into an HBase table."); + } + + public RowInsertionBuilder insertInto(final Table table, final List<HBaseColumn> columns) { if (table instanceof HBaseTable) { - return new HBaseRowInsertionBuilder(this, (HBaseTable) table); + return new HBaseRowInsertionBuilder(this, (HBaseTable) table, columns + .stream() + .map(obj -> (Column) obj) + .collect( + Collectors.toList())); } else { throw new IllegalArgumentException("Not an HBase table: " + table); }
