- Where missing added final qualifiers to method parameters. - Moved static methods around to more logic locations. From my point of view the HBaseColumn class is not a Helper class to provide those. - Changed the signature of the HBaseRowInsertionBuilder constructor, so it take a List of HBaseColumn object as a parameter, this makes it possible to remove a few of the Helper methods which cast List<HBaseColumn> to List<Column> and vice versa. - Refactored the logic which looks up the id column in an array or list. - Removed the "public" getHBaseColumnsInternal() method from HBaseTable, which essentially was only invoked in combination with a static getColumnFamilies method. Instead I added a getColumnFamilies() method to the HBaseTable class which return the column families for that HBase table.
Project: http://git-wip-us.apache.org/repos/asf/metamodel/repo Commit: http://git-wip-us.apache.org/repos/asf/metamodel/commit/5a28d73c Tree: http://git-wip-us.apache.org/repos/asf/metamodel/tree/5a28d73c Diff: http://git-wip-us.apache.org/repos/asf/metamodel/diff/5a28d73c Branch: refs/heads/master Commit: 5a28d73cdddfc8b11ca2478e390c8c94bcf34310 Parents: 54a900b Author: Arjan Seijkens <[email protected]> Authored: Thu May 31 10:38:13 2018 +0200 Committer: Arjan Seijkens <[email protected]> Committed: Thu May 31 10:38:13 2018 +0200 ---------------------------------------------------------------------- .../org/apache/metamodel/hbase/HBaseColumn.java | 108 ------------------- .../hbase/HBaseRowInsertionBuilder.java | 79 +++++++++++--- .../org/apache/metamodel/hbase/HBaseTable.java | 76 +++++++------ .../metamodel/hbase/HBaseUpdateCallback.java | 17 +-- .../apache/metamodel/hbase/CreateTableTest.java | 18 +++- .../apache/metamodel/hbase/InsertRowTest.java | 22 ++-- 6 files changed, 144 insertions(+), 176 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/metamodel/blob/5a28d73c/hbase/src/main/java/org/apache/metamodel/hbase/HBaseColumn.java ---------------------------------------------------------------------- diff --git a/hbase/src/main/java/org/apache/metamodel/hbase/HBaseColumn.java b/hbase/src/main/java/org/apache/metamodel/hbase/HBaseColumn.java index d6554c4..4470e10 100644 --- a/hbase/src/main/java/org/apache/metamodel/hbase/HBaseColumn.java +++ b/hbase/src/main/java/org/apache/metamodel/hbase/HBaseColumn.java @@ -18,14 +18,6 @@ */ package org.apache.metamodel.hbase; -import java.util.Arrays; -import java.util.Iterator; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Set; -import java.util.stream.Collectors; - -import org.apache.metamodel.schema.Column; import org.apache.metamodel.schema.ColumnType; import org.apache.metamodel.schema.ColumnTypeImpl; import org.apache.metamodel.schema.MutableColumn; @@ -128,104 +120,4 @@ public final class HBaseColumn extends MutableColumn { public String getQuote() { return null; } - - /** - * Creates a set of columnFamilies out of a list of hbaseColumns - * @param columns - * @return {@link LinkedHashSet} - */ - public static Set<String> getColumnFamilies(List<HBaseColumn> columns) { - final LinkedHashSet<String> columnFamilies = new LinkedHashSet<>(); - for (HBaseColumn column : columns) { - columnFamilies.add(column.getColumnFamily()); - } - return columnFamilies; - } - - /** - * Returns the index of the ID-column (see {@link HBaseDataContext#FIELD_ID}) in an array of HBaseColumns. - * When no ID-column is found, then null is returned. - * @param columns - * @return {@link Integer} - */ - public static Integer findIndexOfIdColumn(List<HBaseColumn> columns) { - int i = 0; - Integer indexOfIDColumn = null; - Iterator<HBaseColumn> iterator = columns.iterator(); - while (indexOfIDColumn == null && iterator.hasNext()) { - indexOfIDColumn = findIndexOfIdColumn(iterator.next().getColumnFamily(), i); - if (indexOfIDColumn == null) { - i++; - } - } - return indexOfIDColumn; - } - - /** - * Returns the index of the ID-column (see {@link HBaseDataContext#FIELD_ID}) in an array of columnNames. - * When no ID-column is found, then null is returned. - * @param columnNames - * @return {@link Integer} - */ - public static Integer findIndexOfIdColumn(String[] columnNames) { - int i = 0; - Integer indexOfIDColumn = null; - while (indexOfIDColumn == null && i < columnNames.length) { - indexOfIDColumn = findIndexOfIdColumn(columnNames[i], i); - if (indexOfIDColumn == null) { - i++; - } - } - return indexOfIDColumn; - } - - /** - * Returns the index of the ID-column (see {@link HBaseDataContext#FIELD_ID}) - * When no ID-column is found, then null is returned. - * @param columnNames - * @return {@link Integer} - */ - private static Integer findIndexOfIdColumn(String columnName, int index) { - Integer indexOfIDColumn = null; - if (columnName.equals(HBaseDataContext.FIELD_ID)) { - indexOfIDColumn = new Integer(index); - } - return indexOfIDColumn; - } - - /** - * Converts a list of {@link Column}'s to a list of {@link HBaseColumn}'s - * @param columns - * @return {@link List}<{@link HBaseColumn}> - */ - public static List<HBaseColumn> convertToHBaseColumnsList(List<Column> columns) { - return columns.stream().map(column -> (HBaseColumn) column).collect(Collectors.toList()); - } - - /** - * Converts a list of {@link HBaseColumn}'s to a list of {@link Column}'s - * @param columns - * @return {@link List}<{@link Column}> - */ - public static List<Column> convertToColumnsList(List<HBaseColumn> columns) { - return columns.stream().map(column -> (Column) column).collect(Collectors.toList()); - } - - /** - * Converts a list of {@link HBaseColumn}'s to an array of {@link HBaseColumn}'s - * @param columns - * @return Array of {@link HBaseColumn} - */ - public static HBaseColumn[] convertToHBaseColumnsArray(List<HBaseColumn> columns) { - return columns.stream().map(column -> column).toArray(size -> new HBaseColumn[size]); - } - - /** - * Converts a array of {@link Column}'s to an array of {@link HBaseColumn}'s - * @param columns - * @return Array of {@link HBaseColumn} - */ - public static HBaseColumn[] convertToHBaseColumnsArray(Column[] columns) { - return Arrays.stream(columns).map(column -> (HBaseColumn) column).toArray(size -> new HBaseColumn[size]); - } } http://git-wip-us.apache.org/repos/asf/metamodel/blob/5a28d73c/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 9e36a4d..9091788 100644 --- a/hbase/src/main/java/org/apache/metamodel/hbase/HBaseRowInsertionBuilder.java +++ b/hbase/src/main/java/org/apache/metamodel/hbase/HBaseRowInsertionBuilder.java @@ -18,7 +18,12 @@ */ package org.apache.metamodel.hbase; +import java.util.Arrays; +import java.util.Iterator; +import java.util.LinkedHashSet; import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; import org.apache.metamodel.MetaModelException; import org.apache.metamodel.insert.AbstractRowInsertionBuilder; @@ -30,7 +35,7 @@ import org.apache.metamodel.schema.Column; // TODO: Possible future improvement: Make it possible to change the columns for each execute. // Now each row will get exactly the same columns. public class HBaseRowInsertionBuilder extends AbstractRowInsertionBuilder<HBaseUpdateCallback> { - final Integer _indexOfIdColumn; + final int _indexOfIdColumn; /** * Creates a {@link HBaseRowInsertionBuilder}. The table and the column's columnFamilies are checked to exist in the schema. @@ -41,25 +46,41 @@ public class HBaseRowInsertionBuilder extends AbstractRowInsertionBuilder<HBaseU * @throws MetaModelException when no ID-column is found. */ public HBaseRowInsertionBuilder(final HBaseUpdateCallback updateCallback, final HBaseTable table, - final List<Column> columns) { - super(updateCallback, table, columns); + final List<HBaseColumn> columns) { + super(updateCallback, table, columns.stream().map(column -> (Column) column).collect(Collectors.toList())); if (columns.isEmpty()) { // TODO: Columns null will already result in a NullPointer at the super. Should the // super get a extra check? throw new IllegalArgumentException("The hbaseColumns list is null or empty"); } - this._indexOfIdColumn = HBaseColumn.findIndexOfIdColumn(HBaseColumn.convertToHBaseColumnsList(columns)); - if (_indexOfIdColumn == null) { + this._indexOfIdColumn = getIndexOfIdColumn(columns); + if (_indexOfIdColumn == -1) { throw new MetaModelException("The ID-Column was not found"); } checkTable(updateCallback, table); - table.checkForNotMatchingColumnFamilies(HBaseColumn.getColumnFamilies(HBaseColumn.convertToHBaseColumnsList( - columns))); + checkForNotMatchingColumnFamilies(table, getColumnFamilies(columns)); + } + + /** + * Returns the index of the ID-column (see {@link HBaseDataContext#FIELD_ID}) in an array of HBaseColumns. When no + * ID-column is found, then null is returned. + * + * @param columns + * @return {@link Integer} + */ + private static Integer getIndexOfIdColumn(final List<HBaseColumn> columns) { + for (int i = 0; i < columns.size(); i++) { + if (HBaseDataContext.FIELD_ID.equals(columns.get(i).getColumnFamily())) { + return i; + } + } + return -1; } /** * Check if the table and it's columnFamilies exist in the schema + * * @param updateCallback * @param tableGettingInserts * @throws MetaModelException If the table or the columnFamilies don't exist @@ -71,18 +92,52 @@ public class HBaseRowInsertionBuilder extends AbstractRowInsertionBuilder<HBaseU throw new MetaModelException("Trying to insert data into table: " + tableGettingInserts.getName() + ", which doesn't exist yet"); } - tableInSchema.checkForNotMatchingColumnFamilies(HBaseColumn.getColumnFamilies(tableGettingInserts - .getHBaseColumnsInternal())); + checkForNotMatchingColumnFamilies(tableInSchema, tableGettingInserts.getColumnFamilies()); + } + + /** + * Check if a list of columnNames all exist in this table + * + * @param columnNamesOfCheckedTable + * @throws MetaModelException If a column doesn't exist + */ + public void checkForNotMatchingColumnFamilies(final HBaseTable table, final Set<String> columnNamesOfCheckedTable) { + Set<String> columnFamilyNamesOfExistingTable = table.getColumnFamilies(); + + for (String columnNameOfCheckedTable : columnNamesOfCheckedTable) { + boolean matchingColumnFound = false; + Iterator<String> iterator = columnFamilyNamesOfExistingTable.iterator(); + while (!matchingColumnFound && iterator.hasNext()) { + if (columnNameOfCheckedTable.equals(iterator.next())) { + matchingColumnFound = true; + } + } + if (!matchingColumnFound) { + throw new MetaModelException(String.format("ColumnFamily: %s doesn't exist in the schema of the table", + columnNameOfCheckedTable)); + } + } + } + + /** + * Creates a set of columnFamilies out of a list of hbaseColumns + * + * @param columns + * @return {@link LinkedHashSet} + */ + private static Set<String> getColumnFamilies(final List<HBaseColumn> columns) { + return columns.stream().map(HBaseColumn::getColumnFamily).distinct().collect(Collectors.toSet()); } @Override public synchronized void execute() { - getUpdateCallback().getHBaseClient().insertRow(getTable().getName(), getColumns(), getValues(), _indexOfIdColumn - .intValue()); + getUpdateCallback().getHBaseClient().insertRow(getTable().getName(), getColumns(), getValues(), + _indexOfIdColumn); } @Override public HBaseColumn[] getColumns() { - return HBaseColumn.convertToHBaseColumnsArray(super.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/5a28d73c/hbase/src/main/java/org/apache/metamodel/hbase/HBaseTable.java ---------------------------------------------------------------------- diff --git a/hbase/src/main/java/org/apache/metamodel/hbase/HBaseTable.java b/hbase/src/main/java/org/apache/metamodel/hbase/HBaseTable.java index 9f482ac..0dd2558 100644 --- a/hbase/src/main/java/org/apache/metamodel/hbase/HBaseTable.java +++ b/hbase/src/main/java/org/apache/metamodel/hbase/HBaseTable.java @@ -18,9 +18,9 @@ */ package org.apache.metamodel.hbase; -import java.util.Iterator; import java.util.List; import java.util.Set; +import java.util.stream.Collectors; import org.apache.hadoop.hbase.HColumnDescriptor; import org.apache.metamodel.MetaModelException; @@ -45,16 +45,16 @@ final class HBaseTable extends MutableTable { private final transient ColumnType _defaultRowKeyColumnType; /** - * Creates an HBaseTable. If the tableDef variable doesn't include the ID-column (see {@link HBaseDataContext#FIELD_ID}). + * Creates an HBaseTable. If the tableDef variable doesn't include the ID-column (see {@link HBaseDataContext#FIELD_ID}). * Then it's first added. * @param dataContext * @param tableDef Table definition. The tableName, columnNames and columnTypes variables are used. * @param schema {@link MutableSchema} where the table belongs to. - * @param defaultRowKeyColumnType This variable determines the {@link ColumnType}, - * used when the tableDef doesn't include the ID column (see {@link HBaseDataContext#FIELD_ID}). + * @param defaultRowKeyColumnType This variable determines the {@link ColumnType}, + * used when the tableDef doesn't include the ID column (see {@link HBaseDataContext#FIELD_ID}). */ - public HBaseTable(HBaseDataContext dataContext, SimpleTableDef tableDef, MutableSchema schema, - ColumnType defaultRowKeyColumnType) { + public HBaseTable(final HBaseDataContext dataContext, final SimpleTableDef tableDef, final MutableSchema schema, + final ColumnType defaultRowKeyColumnType) { super(tableDef.getName(), TableType.TABLE, schema); _dataContext = dataContext; _defaultRowKeyColumnType = defaultRowKeyColumnType; @@ -66,7 +66,7 @@ final class HBaseTable extends MutableTable { * @param tableDef * @param defaultRowKeyColumnType */ - private void addColumns(SimpleTableDef tableDef, ColumnType defaultRowKeyColumnType) { + private void addColumns(final SimpleTableDef tableDef, final ColumnType defaultRowKeyColumnType) { // Add the columns final String[] columnNames = tableDef.getColumnNames(); if (columnNames == null || columnNames.length == 0) { @@ -75,13 +75,12 @@ final class HBaseTable extends MutableTable { final ColumnType[] columnTypes = tableDef.getColumnTypes(); // Find the ID-Column - Integer indexOfIDColumn = HBaseColumn.findIndexOfIdColumn(columnNames); - boolean idColumnFound = indexOfIDColumn != null; + int indexOfIDColumn = getIndexOfIdColumn(columnNames); + boolean idColumnFound = indexOfIDColumn != -1; // ColumnNumbers start from 1 if (idColumnFound) { - addColumn(HBaseDataContext.FIELD_ID, columnTypes[indexOfIDColumn.intValue()], indexOfIDColumn.intValue() - + 1); + addColumn(HBaseDataContext.FIELD_ID, columnTypes[indexOfIDColumn], indexOfIDColumn + 1); } else { addColumn(HBaseDataContext.FIELD_ID, defaultRowKeyColumnType, 1); } @@ -100,7 +99,24 @@ final class HBaseTable extends MutableTable { } /** + * Returns the index of the ID-column (see {@link HBaseDataContext#FIELD_ID}) in an array of columnNames. When no + * ID-column is found, then -1 is returned. + * + * @param columnNames + * @return {@link Integer} + */ + private static int getIndexOfIdColumn(final String[] columnNames) { + for (int i = 0; i < columnNames.length; i++) { + if (HBaseDataContext.FIELD_ID.equals(columnNames[i])) { + return i; + } + } + return -1; + } + + /** * Add a column to this table + * * @param columnName * @param columnType * @param columnNumber @@ -133,34 +149,16 @@ final class HBaseTable extends MutableTable { } /** - * Check if a list of columnNames all exist in this table - * @param columnNamesOfCheckedTable - * @throws MetaModelException If a column doesn't exist - */ - public void checkForNotMatchingColumnFamilies(final Set<String> columnNamesOfCheckedTable) { - Set<String> columnFamilyNamesOfExistingTable = HBaseColumn.getColumnFamilies(getHBaseColumnsInternal()); - - for (String columnNameOfCheckedTable : columnNamesOfCheckedTable) { - boolean matchingColumnFound = false; - Iterator<String> iterator = columnFamilyNamesOfExistingTable.iterator(); - while (!matchingColumnFound && iterator.hasNext()) { - if (columnNameOfCheckedTable.equals(iterator.next())) { - matchingColumnFound = true; - } - } - if (!matchingColumnFound) { - throw new MetaModelException(String.format("ColumnFamily: %s doesn't exist in the schema of the table", - columnNameOfCheckedTable)); - } - } - } - - /** - * Returns a list of {@link HBaseColumn}'s from {@link HBaseTable#getColumnsInternal()}, - * which returns a list of {@link Column}'s - * @return {@link List}<{@link HBaseColumn}> + * Returns the column families for this HBase table. + * + * @return {@link Set} */ - public List<HBaseColumn> getHBaseColumnsInternal() { - return HBaseColumn.convertToHBaseColumnsList(getColumnsInternal()); + Set<String> getColumnFamilies() { + return getColumnsInternal() + .stream() + .map(column -> (HBaseColumn) column) + .map(HBaseColumn::getColumnFamily) + .distinct() + .collect(Collectors.toSet()); } } http://git-wip-us.apache.org/repos/asf/metamodel/blob/5a28d73c/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 b154275..9273b07 100644 --- a/hbase/src/main/java/org/apache/metamodel/hbase/HBaseUpdateCallback.java +++ b/hbase/src/main/java/org/apache/metamodel/hbase/HBaseUpdateCallback.java @@ -37,13 +37,13 @@ public class HBaseUpdateCallback extends AbstractUpdateCallback implements Updat private final HBaseClient _hBaseClient; - public HBaseUpdateCallback(HBaseDataContext dataContext) { + public HBaseUpdateCallback(final HBaseDataContext dataContext) { super(dataContext); _hBaseClient = new HBaseClient(dataContext.getConnection()); } @Override - public TableCreationBuilder createTable(Schema schema, String name) { + public TableCreationBuilder createTable(final Schema schema, final String name) { return new HBaseCreateTableBuilder(this, schema, name); } @@ -54,7 +54,8 @@ public class HBaseUpdateCallback extends AbstractUpdateCallback implements Updat * @param columnFamilies the columnFamilies of the new table * @return {@link HBaseCreateTableBuilder} */ - public HBaseCreateTableBuilder createTable(Schema schema, String name, Set<String> columnFamilies) { + public HBaseCreateTableBuilder createTable(final Schema schema, final String name, + final Set<String> columnFamilies) { return new HBaseCreateTableBuilder(this, schema, name, columnFamilies); } @@ -64,7 +65,7 @@ public class HBaseUpdateCallback extends AbstractUpdateCallback implements Updat } @Override - public TableDropBuilder dropTable(Table table) { + public TableDropBuilder dropTable(final Table table) { return new HBaseTableDropBuilder(table, this); } @@ -78,7 +79,7 @@ public class HBaseUpdateCallback extends AbstractUpdateCallback implements Updat } /** - * Initiates the building of a row insertion operation. + * Initiates the building of a row insertion operation. * @param table Table to get inserts. * @param columns List of {@link HBaseColumn} to insert on. * @return {@link HBaseRowInsertionBuilder} @@ -89,7 +90,7 @@ public class HBaseUpdateCallback extends AbstractUpdateCallback implements Updat throw new IllegalArgumentException("The hbaseColumns list is null or empty"); } if (table instanceof HBaseTable) { - return new HBaseRowInsertionBuilder(this, (HBaseTable) table, HBaseColumn.convertToColumnsList(columns)); + return new HBaseRowInsertionBuilder(this, (HBaseTable) table, columns); } else { throw new IllegalArgumentException("Not an HBase table: " + table); } @@ -104,9 +105,9 @@ public class HBaseUpdateCallback extends AbstractUpdateCallback implements Updat * @throws IllegalArgumentException when table isn't a {@link HBaseTable} */ @Override - public RowDeletionBuilder deleteFrom(Table table) { + public RowDeletionBuilder deleteFrom(final Table table) { if (table instanceof HBaseTable) { - return new HBaseRowDeletionBuilder(_hBaseClient, (HBaseTable) table); + return new HBaseRowDeletionBuilder(_hBaseClient, table); } else { throw new IllegalArgumentException("Not an HBase table: " + table); } http://git-wip-us.apache.org/repos/asf/metamodel/blob/5a28d73c/hbase/src/test/java/org/apache/metamodel/hbase/CreateTableTest.java ---------------------------------------------------------------------- diff --git a/hbase/src/test/java/org/apache/metamodel/hbase/CreateTableTest.java b/hbase/src/test/java/org/apache/metamodel/hbase/CreateTableTest.java index 5655e4a..9ea04df 100644 --- a/hbase/src/test/java/org/apache/metamodel/hbase/CreateTableTest.java +++ b/hbase/src/test/java/org/apache/metamodel/hbase/CreateTableTest.java @@ -20,7 +20,9 @@ package org.apache.metamodel.hbase; import java.util.LinkedHashMap; import java.util.LinkedHashSet; +import java.util.List; import java.util.Set; +import java.util.stream.Collectors; import org.apache.metamodel.MetaModelException; import org.apache.metamodel.schema.ImmutableSchema; @@ -116,7 +118,7 @@ public class CreateTableTest extends HBaseUpdateCallbackTest { if (isConfigured()) { final HBaseTable table = createHBaseTable(TABLE_NAME, HBaseDataContext.FIELD_ID, CF_FOO, CF_BAR, null); final LinkedHashMap<HBaseColumn, Object> row = createRow(table, null, CF_FOO, CF_BAR); - final Set<String> columnFamilies = HBaseColumn.getColumnFamilies(getHBaseColumnsFromMap(row)); + final Set<String> columnFamilies = getColumnFamilies(getHBaseColumnsFromMap(row)); try { final HBaseCreateTableBuilder hBaseCreateTableBuilder = (HBaseCreateTableBuilder) getUpdateCallback() .createTable(getSchema(), TABLE_NAME); @@ -194,7 +196,7 @@ public class CreateTableTest extends HBaseUpdateCallbackTest { if (isConfigured()) { final HBaseTable table = createHBaseTable(TABLE_NAME, HBaseDataContext.FIELD_ID, CF_FOO, CF_BAR, null); final LinkedHashMap<HBaseColumn, Object> row = createRow(table, HBaseDataContext.FIELD_ID, CF_FOO, CF_BAR); - final Set<String> columnFamilies = HBaseColumn.getColumnFamilies(getHBaseColumnsFromMap(row)); + final Set<String> columnFamilies = getColumnFamilies(getHBaseColumnsFromMap(row)); try { final HBaseCreateTableBuilder hBaseCreateTableBuilder = (HBaseCreateTableBuilder) getUpdateCallback() .createTable(getSchema(), TABLE_NAME); @@ -218,7 +220,7 @@ public class CreateTableTest extends HBaseUpdateCallbackTest { if (isConfigured()) { final HBaseTable table = createHBaseTable(TABLE_NAME, HBaseDataContext.FIELD_ID, CF_FOO, CF_BAR, null); final LinkedHashMap<HBaseColumn, Object> row = createRow(table, HBaseDataContext.FIELD_ID, CF_FOO, CF_BAR); - final Set<String> columnFamilies = HBaseColumn.getColumnFamilies(getHBaseColumnsFromMap(row)); + final Set<String> columnFamilies = getColumnFamilies(getHBaseColumnsFromMap(row)); try { getUpdateCallback().createTable(getSchema(), TABLE_NAME, columnFamilies).execute(); checkSuccesfullyInsertedTable(); @@ -230,4 +232,14 @@ public class CreateTableTest extends HBaseUpdateCallbackTest { }.getClass().getEnclosingMethod().getName()); } } + + /** + * Creates a set of columnFamilies out of a list of hbaseColumns + * + * @param columns + * @return {@link LinkedHashSet} + */ + private static Set<String> getColumnFamilies(List<HBaseColumn> columns) { + return columns.stream().map(HBaseColumn::getColumnFamily).distinct().collect(Collectors.toSet()); + } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/metamodel/blob/5a28d73c/hbase/src/test/java/org/apache/metamodel/hbase/InsertRowTest.java ---------------------------------------------------------------------- diff --git a/hbase/src/test/java/org/apache/metamodel/hbase/InsertRowTest.java b/hbase/src/test/java/org/apache/metamodel/hbase/InsertRowTest.java index 7a1705f..1a9a424 100644 --- a/hbase/src/test/java/org/apache/metamodel/hbase/InsertRowTest.java +++ b/hbase/src/test/java/org/apache/metamodel/hbase/InsertRowTest.java @@ -24,7 +24,6 @@ import java.util.LinkedHashMap; import java.util.List; import org.apache.metamodel.MetaModelException; -import org.apache.metamodel.schema.Column; import org.apache.metamodel.schema.MutableTable; public class InsertRowTest extends HBaseUpdateCallbackTest { @@ -135,7 +134,7 @@ public class InsertRowTest extends HBaseUpdateCallbackTest { try { final HBaseTable existingTable = createAndInsertTable(TABLE_NAME, HBaseDataContext.FIELD_ID, CF_FOO, CF_BAR); - List<Column> emptyList = new ArrayList<>(); + List<HBaseColumn> emptyList = new ArrayList<>(); new HBaseRowInsertionBuilder(getUpdateCallback(), existingTable, emptyList); fail("Should get an exception that the columns list is empty."); } catch (IllegalArgumentException e) { @@ -258,7 +257,7 @@ public class InsertRowTest extends HBaseUpdateCallbackTest { final HBaseTable table = createHBaseTable(TABLE_NAME, HBaseDataContext.FIELD_ID, CF_FOO, CF_BAR, null); final LinkedHashMap<HBaseColumn, Object> row = createRow(table, HBaseDataContext.FIELD_ID, CF_FOO, CF_BAR); - final HBaseColumn[] columns = HBaseColumn.convertToHBaseColumnsArray(getHBaseColumnsFromMap(row)); + final HBaseColumn[] columns = convertToHBaseColumnsArray(getHBaseColumnsFromMap(row)); final Object[] values = new String[] { "Values" }; new HBaseClient(getDataContext().getConnection()).insertRow(null, columns, values, 0); fail("Should get an exception that tableName is null"); @@ -302,7 +301,7 @@ public class InsertRowTest extends HBaseUpdateCallbackTest { final HBaseTable table = createHBaseTable(TABLE_NAME, HBaseDataContext.FIELD_ID, CF_FOO, CF_BAR, null); final LinkedHashMap<HBaseColumn, Object> row = createRow(table, HBaseDataContext.FIELD_ID, CF_FOO, CF_BAR); - final HBaseColumn[] columns = HBaseColumn.convertToHBaseColumnsArray(getHBaseColumnsFromMap(row)); + final HBaseColumn[] columns = convertToHBaseColumnsArray(getHBaseColumnsFromMap(row)); new HBaseClient(getDataContext().getConnection()).insertRow(table.getName(), columns, null, 0); fail("Should get an exception that values is null"); } catch (IllegalArgumentException e) { @@ -325,7 +324,7 @@ public class InsertRowTest extends HBaseUpdateCallbackTest { final HBaseTable table = createHBaseTable(TABLE_NAME, HBaseDataContext.FIELD_ID, CF_FOO, CF_BAR, null); final LinkedHashMap<HBaseColumn, Object> row = createRow(table, HBaseDataContext.FIELD_ID, CF_FOO, CF_BAR); - final HBaseColumn[] columns = HBaseColumn.convertToHBaseColumnsArray(getHBaseColumnsFromMap(row)); + final HBaseColumn[] columns = convertToHBaseColumnsArray(getHBaseColumnsFromMap(row)); final Object[] values = new String[] { "Values" }; new HBaseClient(getDataContext().getConnection()).insertRow(table.getName(), columns, values, 10); fail("Should get an exception that the indexOfIdColumn is incorrect"); @@ -349,7 +348,7 @@ public class InsertRowTest extends HBaseUpdateCallbackTest { final HBaseTable table = createHBaseTable(TABLE_NAME, HBaseDataContext.FIELD_ID, CF_FOO, CF_BAR, null); final LinkedHashMap<HBaseColumn, Object> row = createRow(table, HBaseDataContext.FIELD_ID, CF_FOO, CF_BAR); - final HBaseColumn[] columns = HBaseColumn.convertToHBaseColumnsArray(getHBaseColumnsFromMap(row)); + final HBaseColumn[] columns = convertToHBaseColumnsArray(getHBaseColumnsFromMap(row)); final Object[] values = new String[] { null }; new HBaseClient(getDataContext().getConnection()).insertRow(table.getName(), columns, values, 0); fail("Should get an exception that the indexOfIdColumn is incorrect"); @@ -437,4 +436,15 @@ public class InsertRowTest extends HBaseUpdateCallbackTest { }.getClass().getEnclosingMethod().getName()); } } + + /** + * Converts a list of {@link HBaseColumn}'s to an array of {@link HBaseColumn}'s + * + * @param columns + * @return Array of {@link HBaseColumn} + */ + private static HBaseColumn[] convertToHBaseColumnsArray(List<HBaseColumn> columns) { + return columns.toArray(new HBaseColumn[columns.size()]); + } + }
