You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@metamodel.apache.org by ka...@apache.org on 2018/06/21 05:51:04 UTC

[13/31] metamodel git commit: - 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

- 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 <a....@quadient.com>
Authored: Thu May 31 10:38:13 2018 +0200
Committer: Arjan Seijkens <a....@quadient.com>
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()]);
+    }
+
 }