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 2017/05/11 02:17:34 UTC

[2/6] metamodel git commit: Deprecated Ref, Func and Predicate in favor of java.util.function

Deprecated Ref, Func and Predicate in favor of java.util.function

"Ref" to be replaced by Supplier.
"Func" to be replaced by Function.
"Predicate" to be replaced by Predicate.
"Action" to extend Consumer (allowing for throwing checked exceptions).
"UncheckedFunc to extend Function.

Also added `@SuppressWarning` on method that the Java 8 compiler is
emitting warnings for while the code being alright.

Project: http://git-wip-us.apache.org/repos/asf/metamodel/repo
Commit: http://git-wip-us.apache.org/repos/asf/metamodel/commit/f015665d
Tree: http://git-wip-us.apache.org/repos/asf/metamodel/tree/f015665d
Diff: http://git-wip-us.apache.org/repos/asf/metamodel/diff/f015665d

Branch: refs/heads/5.x
Commit: f015665d88ae5066e8657575bb01baa7af0a0f13
Parents: b0cfe3a
Author: Kasper Sørensen <i....@gmail.com>
Authored: Sat Apr 29 16:05:07 2017 -0700
Committer: Kasper Sørensen <i....@gmail.com>
Committed: Sat Apr 29 16:27:52 2017 -0700

----------------------------------------------------------------------
 .../apache/metamodel/CompositeDataContext.java  |  11 +-
 .../metamodel/CompositeQueryDelegate.java       |  11 +-
 .../org/apache/metamodel/MetaModelHelper.java   |  59 +++----
 .../java/org/apache/metamodel/UpdateScript.java |   6 +-
 .../convert/StringToDateConverter.java          | 154 +++++++++----------
 .../intercept/InterceptableDataContext.java     |   2 +-
 .../metamodel/query/AbstractQueryClause.java    |   6 +-
 .../org/apache/metamodel/query/QueryClause.java |  38 ++---
 .../apache/metamodel/schema/AbstractSchema.java |  29 ++--
 .../apache/metamodel/schema/AbstractTable.java  |  72 +++------
 .../apache/metamodel/util/AbstractResource.java |  18 ++-
 .../java/org/apache/metamodel/util/Action.java  |  25 ++-
 .../apache/metamodel/util/CollectionUtils.java  |  20 +--
 .../org/apache/metamodel/util/ConstantFunc.java |   6 +-
 .../metamodel/util/ExclusionPredicate.java      |   4 +-
 .../apache/metamodel/util/FalsePredicate.java   |   4 +-
 .../org/apache/metamodel/util/FileHelper.java   |   1 -
 .../java/org/apache/metamodel/util/Func.java    |  13 +-
 .../apache/metamodel/util/HasNameMapper.java    |   5 +-
 .../org/apache/metamodel/util/ImmutableRef.java |  26 ++--
 .../metamodel/util/InclusionPredicate.java      |   4 +-
 .../java/org/apache/metamodel/util/LazyRef.java |   3 +-
 .../org/apache/metamodel/util/MutableRef.java   |   4 +-
 .../org/apache/metamodel/util/Predicate.java    |  11 +-
 .../java/org/apache/metamodel/util/Ref.java     |  11 +-
 .../org/apache/metamodel/util/Resource.java     |  14 +-
 .../apache/metamodel/util/SerializableRef.java  |   3 +-
 .../apache/metamodel/util/TruePredicate.java    |   4 +-
 .../apache/metamodel/util/UncheckedFunc.java    |  18 ++-
 .../metamodel/util/ClasspathResourceTest.java   |  13 +-
 .../metamodel/util/CollectionUtilsTest.java     |  16 +-
 .../metamodel/util/ExclusionPredicateTest.java  |   8 +-
 .../apache/metamodel/util/FileResourceTest.java |  19 +--
 .../metamodel/util/InclusionPredicateTest.java  |   8 +-
 .../apache/metamodel/util/SimpleRefTest.java    |   4 +-
 .../apache/metamodel/csv/CsvDataContext.java    |  94 ++++++-----
 .../apache/metamodel/DataContextFactory.java    |   1 +
 .../util/HdfsResourceIntegrationTest.java       |  38 ++---
 .../apache/metamodel/jdbc/JdbcDataContext.java  |   1 +
 .../jdbc/dialects/OracleQueryRewriter.java      |   2 -
 .../dialects/SQLServerQueryRewriterTest.java    |   7 +-
 .../jdbc/dialects/OracleQueryRewriterTest.java  |   2 -
 pom.xml                                         |   4 +-
 .../salesforce/SalesforceDataContext.java       |   1 +
 .../metamodel/salesforce/SalesforceSchema.java  |   4 +-
 .../metamodel/salesforce/SalesforceTable.java   |   4 +-
 .../salesforce/SalesforceUpdateCallback.java    |   1 +
 .../metamodel/sugarcrm/SugarCrmSchema.java      |   4 +-
 .../metamodel/sugarcrm/SugarCrmTable.java       |   6 +-
 .../apache/metamodel/xml/XmlDomDataContext.java |  39 ++---
 .../apache/metamodel/xml/XmlSaxDataContext.java |  25 ++-
 51 files changed, 433 insertions(+), 450 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/metamodel/blob/f015665d/core/src/main/java/org/apache/metamodel/CompositeDataContext.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/metamodel/CompositeDataContext.java b/core/src/main/java/org/apache/metamodel/CompositeDataContext.java
index c7b6ee3..f70a0cd 100644
--- a/core/src/main/java/org/apache/metamodel/CompositeDataContext.java
+++ b/core/src/main/java/org/apache/metamodel/CompositeDataContext.java
@@ -27,6 +27,7 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.function.Function;
 
 import org.apache.metamodel.data.DataSet;
 import org.apache.metamodel.query.FromItem;
@@ -34,10 +35,9 @@ import org.apache.metamodel.query.Query;
 import org.apache.metamodel.schema.CompositeSchema;
 import org.apache.metamodel.schema.Schema;
 import org.apache.metamodel.schema.Table;
-import org.apache.metamodel.util.Func;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-
+//
 /**
  * DataContext for composite datacontexts. Composite DataContexts wrap several
  * other datacontexts and makes cross-datastore querying possible.
@@ -92,12 +92,7 @@ public class CompositeDataContext extends AbstractDataContext {
         } else {
             // we create a datacontext which can materialize tables from
             // separate datacontexts.
-            final Func<Table, DataContext> dataContextRetrievalFunction = new Func<Table, DataContext>() {
-                @Override
-                public DataContext eval(Table table) {
-                    return getDataContext(table);
-                }
-            };
+            final Function<Table, DataContext> dataContextRetrievalFunction = table -> getDataContext(table);
             return new CompositeQueryDelegate(dataContextRetrievalFunction).executeQuery(query);
         }
     }

http://git-wip-us.apache.org/repos/asf/metamodel/blob/f015665d/core/src/main/java/org/apache/metamodel/CompositeQueryDelegate.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/metamodel/CompositeQueryDelegate.java b/core/src/main/java/org/apache/metamodel/CompositeQueryDelegate.java
index 9a3517a..d3e1a04 100644
--- a/core/src/main/java/org/apache/metamodel/CompositeQueryDelegate.java
+++ b/core/src/main/java/org/apache/metamodel/CompositeQueryDelegate.java
@@ -18,18 +18,19 @@
  */
 package org.apache.metamodel;
 
+import java.util.function.Function;
+
 import org.apache.metamodel.data.DataSet;
 import org.apache.metamodel.query.Query;
 import org.apache.metamodel.schema.Column;
 import org.apache.metamodel.schema.Table;
-import org.apache.metamodel.util.Func;
 
 final class CompositeQueryDelegate extends QueryPostprocessDelegate {
 
-	private final Func<Table, DataContext> _dataContextRetrievalFunction;
+	private final Function<Table, DataContext> _dataContextRetrievalFunction;
 
 	public CompositeQueryDelegate(
-			Func<Table, DataContext> dataContextRetrievalFunction) {
+			Function<Table, DataContext> dataContextRetrievalFunction) {
 		_dataContextRetrievalFunction = dataContextRetrievalFunction;
 	}
 
@@ -38,8 +39,8 @@ final class CompositeQueryDelegate extends QueryPostprocessDelegate {
 			int maxRows) {
 		// find the appropriate datacontext to execute a simple
 		// table materialization query
-		DataContext dc = _dataContextRetrievalFunction.eval(table);
-		Query q = new Query().select(columns).from(table);
+		final DataContext dc = _dataContextRetrievalFunction.apply(table);
+		final Query q = new Query().select(columns).from(table);
 		if (maxRows >= 0) {
 			q.setMaxRows(maxRows);
 		}

http://git-wip-us.apache.org/repos/asf/metamodel/blob/f015665d/core/src/main/java/org/apache/metamodel/MetaModelHelper.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/metamodel/MetaModelHelper.java b/core/src/main/java/org/apache/metamodel/MetaModelHelper.java
index 7ffa870..435e9a7 100644
--- a/core/src/main/java/org/apache/metamodel/MetaModelHelper.java
+++ b/core/src/main/java/org/apache/metamodel/MetaModelHelper.java
@@ -19,6 +19,7 @@
 package org.apache.metamodel;
 
 import java.util.ArrayList;
+
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
@@ -45,6 +46,7 @@ import org.apache.metamodel.data.SimpleDataSetHeader;
 import org.apache.metamodel.data.SubSelectionDataSet;
 import org.apache.metamodel.query.FilterItem;
 import org.apache.metamodel.query.FromItem;
+import org.apache.metamodel.query.FunctionType;
 import org.apache.metamodel.query.GroupByItem;
 import org.apache.metamodel.query.OrderByItem;
 import org.apache.metamodel.query.Query;
@@ -58,9 +60,7 @@ import org.apache.metamodel.schema.SuperColumnType;
 import org.apache.metamodel.schema.Table;
 import org.apache.metamodel.util.AggregateBuilder;
 import org.apache.metamodel.util.CollectionUtils;
-import org.apache.metamodel.util.Func;
 import org.apache.metamodel.util.ObjectComparator;
-import org.apache.metamodel.util.Predicate;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -248,11 +248,8 @@ public final class MetaModelHelper {
     }
 
     public static DataSet getFiltered(DataSet dataSet, Iterable<FilterItem> filterItems) {
-        List<IRowFilter> filters = CollectionUtils.map(filterItems, new Func<FilterItem, IRowFilter>() {
-            @Override
-            public IRowFilter eval(FilterItem filterItem) {
-                return filterItem;
-            }
+        List<IRowFilter> filters = CollectionUtils.map(filterItems, filterItem -> {
+            return filterItem;
         });
         if (filters.isEmpty()) {
             return dataSet;
@@ -278,8 +275,8 @@ public final class MetaModelHelper {
 
         for (SelectItem selectItem : selectItems) {
             if (selectItem.getScalarFunction() != null) {
-                if (!dataSetSelectItems.contains(selectItem)
-                        && dataSetSelectItems.contains(selectItem.replaceFunction(null))) {
+                if (!dataSetSelectItems.contains(selectItem) && dataSetSelectItems.contains(selectItem.replaceFunction(
+                        null))) {
                     scalarFunctionSelectItemsToEvaluate.add(selectItem);
                 }
             }
@@ -518,29 +515,22 @@ public final class MetaModelHelper {
      */
     @Deprecated
     public static List<SelectItem> getFunctionSelectItems(Iterable<SelectItem> selectItems) {
-        return CollectionUtils.filter(selectItems, new Predicate<SelectItem>() {
-            @Override
-            public Boolean eval(SelectItem arg) {
-                return arg.getFunction() != null;
-            }
+        return CollectionUtils.filter(selectItems, selectItem -> {
+            @SuppressWarnings("deprecation")
+            final FunctionType function = selectItem.getFunction();
+            return function != null;
         });
     }
 
     public static List<SelectItem> getAggregateFunctionSelectItems(Iterable<SelectItem> selectItems) {
-        return CollectionUtils.filter(selectItems, new Predicate<SelectItem>() {
-            @Override
-            public Boolean eval(SelectItem arg) {
-                return arg.getAggregateFunction() != null;
-            }
+        return CollectionUtils.filter(selectItems, arg -> {
+            return arg.getAggregateFunction() != null;
         });
     }
 
     public static List<SelectItem> getScalarFunctionSelectItems(Iterable<SelectItem> selectItems) {
-        return CollectionUtils.filter(selectItems, new Predicate<SelectItem>() {
-            @Override
-            public Boolean eval(SelectItem arg) {
-                return arg.getScalarFunction() != null;
-            }
+        return CollectionUtils.filter(selectItems, arg -> {
+            return arg.getScalarFunction() != null;
         });
     }
 
@@ -716,10 +706,9 @@ public final class MetaModelHelper {
             List<Row> ds1rows = new ArrayList<Row>();
             ds1rows.add(ds1row);
 
-            DataSet carthesianProduct = getCarthesianProduct(
-                    new DataSet[] { new InMemoryDataSet(new CachingDataSetHeader(si1), ds1rows),
-                            new InMemoryDataSet(new CachingDataSetHeader(si2), ds2data) },
-                    onConditions);
+            DataSet carthesianProduct = getCarthesianProduct(new DataSet[] { new InMemoryDataSet(
+                    new CachingDataSetHeader(si1), ds1rows), new InMemoryDataSet(new CachingDataSetHeader(si2),
+                            ds2data) }, onConditions);
             List<Row> carthesianRows = readDataSetFull(carthesianProduct);
             if (carthesianRows.size() > 0) {
                 resultRows.addAll(carthesianRows);
@@ -787,20 +776,14 @@ public final class MetaModelHelper {
     }
 
     public static Column[] getColumnsByType(Column[] columns, final ColumnType columnType) {
-        return CollectionUtils.filter(columns, new Predicate<Column>() {
-            @Override
-            public Boolean eval(Column column) {
-                return column.getType() == columnType;
-            }
+        return CollectionUtils.filter(columns, column -> {
+            return column.getType() == columnType;
         }).toArray(new Column[0]);
     }
 
     public static Column[] getColumnsBySuperType(Column[] columns, final SuperColumnType superColumnType) {
-        return CollectionUtils.filter(columns, new Predicate<Column>() {
-            @Override
-            public Boolean eval(Column column) {
-                return column.getType().getSuperType() == superColumnType;
-            }
+        return CollectionUtils.filter(columns, column -> {
+            return column.getType().getSuperType() == superColumnType;
         }).toArray(new Column[0]);
     }
 

http://git-wip-us.apache.org/repos/asf/metamodel/blob/f015665d/core/src/main/java/org/apache/metamodel/UpdateScript.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/metamodel/UpdateScript.java b/core/src/main/java/org/apache/metamodel/UpdateScript.java
index 44be200..bc344ff 100644
--- a/core/src/main/java/org/apache/metamodel/UpdateScript.java
+++ b/core/src/main/java/org/apache/metamodel/UpdateScript.java
@@ -18,8 +18,6 @@
  */
 package org.apache.metamodel;
 
-import org.apache.metamodel.util.Action;
-
 /**
  * Represents any updating operation or update script that can be executed on a
  * {@link UpdateableDataContext}. Users of MetaModel should implement their own
@@ -27,13 +25,13 @@ import org.apache.metamodel.util.Action;
  * {@link UpdateableDataContext#executeUpdate(UpdateScript)} method for
  * execution.
  */
-public interface UpdateScript extends Action<UpdateCallback> {
+@FunctionalInterface
+public interface UpdateScript {
 
 	/**
 	 * Invoked by MetaModel when the update script should be run. User should
 	 * implement this method and invoke update operations on the
 	 * {@link UpdateCallback}.
 	 */
-	@Override
 	public void run(UpdateCallback callback);
 }

http://git-wip-us.apache.org/repos/asf/metamodel/blob/f015665d/core/src/main/java/org/apache/metamodel/convert/StringToDateConverter.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/metamodel/convert/StringToDateConverter.java b/core/src/main/java/org/apache/metamodel/convert/StringToDateConverter.java
index ed7704e..b27e3b2 100644
--- a/core/src/main/java/org/apache/metamodel/convert/StringToDateConverter.java
+++ b/core/src/main/java/org/apache/metamodel/convert/StringToDateConverter.java
@@ -22,8 +22,8 @@ import java.text.DateFormat;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.Date;
+import java.util.function.Function;
 
-import org.apache.metamodel.util.Func;
 import org.apache.metamodel.util.TimeComparator;
 
 /**
@@ -32,93 +32,79 @@ import org.apache.metamodel.util.TimeComparator;
  */
 public class StringToDateConverter implements TypeConverter<String, Date> {
 
-	private final Func<Date, String> _serializeFunc;
-	private final Func<String, Date> _deserializeFunc;
+    private final Function<Date, String> _serializeFunc;
+    private final Function<String, Date> _deserializeFunc;
 
-	/**
-	 * Constructs a new {@link StringToDateConverter} which will use the
-	 * {@link TimeComparator#toDate(Object)} method for parsing dates and the
-	 * {@link DateFormat#MEDIUM} date time format for physical representation.
-	 */
-	public StringToDateConverter() {
-		_deserializeFunc = new Func<String, Date>() {
-			@Override
-			public Date eval(String stringValue) {
-				return TimeComparator.toDate(stringValue);
-			}
-		};
-		_serializeFunc = new Func<Date, String>() {
-			@Override
-			public String eval(Date date) {
-				return DateFormat.getDateTimeInstance(DateFormat.MEDIUM,
-						DateFormat.MEDIUM).format(date);
-			}
-		};
-	}
+    /**
+     * Constructs a new {@link StringToDateConverter} which will use the
+     * {@link TimeComparator#toDate(Object)} method for parsing dates and the
+     * {@link DateFormat#MEDIUM} date time format for physical representation.
+     */
+    public StringToDateConverter() {
+        _deserializeFunc = stringValue -> {
+            return TimeComparator.toDate(stringValue);
+        };
+        _serializeFunc = date -> {
+            return DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM).format(date);
+        };
+    }
 
-	/**
-	 * Constructs a new {@link StringToDateConverter} using a given date
-	 * pattern.
-	 * 
-	 * @param datePattern
-	 *            a String date pattern, corresponding to the syntax of a
-	 *            {@link SimpleDateFormat}.
-	 */
-	public StringToDateConverter(String datePattern) {
-		this(new SimpleDateFormat(datePattern));
-	}
+    /**
+     * Constructs a new {@link StringToDateConverter} using a given date
+     * pattern.
+     * 
+     * @param datePattern
+     *            a String date pattern, corresponding to the syntax of a
+     *            {@link SimpleDateFormat}.
+     */
+    public StringToDateConverter(String datePattern) {
+        this(new SimpleDateFormat(datePattern));
+    }
 
-	/**
-	 * Constructs a new {@link StringToDateConverter} using a given
-	 * {@link DateFormat}.
-	 * 
-	 * @param dateFormat
-	 *            the {@link DateFormat} to use for parsing and formatting
-	 *            dates.
-	 */
-	public StringToDateConverter(final DateFormat dateFormat) {
-		if (dateFormat == null) {
-			throw new IllegalArgumentException("DateFormat cannot be null");
-		}
-		_deserializeFunc = new Func<String, Date>() {
-			@Override
-			public Date eval(String string) {
-				try {
-					return dateFormat.parse(string);
-				} catch (ParseException e) {
-					throw new IllegalArgumentException(
-							"Could not parse date string: " + string);
-				}
-			}
-		};
-		_serializeFunc = new Func<Date, String>() {
-			@Override
-			public String eval(Date date) {
-				return dateFormat.format(date);
-			}
-		};
-	}
+    /**
+     * Constructs a new {@link StringToDateConverter} using a given
+     * {@link DateFormat}.
+     * 
+     * @param dateFormat
+     *            the {@link DateFormat} to use for parsing and formatting
+     *            dates.
+     */
+    public StringToDateConverter(final DateFormat dateFormat) {
+        if (dateFormat == null) {
+            throw new IllegalArgumentException("DateFormat cannot be null");
+        }
+        _deserializeFunc = string -> {
+            try {
+                return dateFormat.parse(string);
+            } catch (ParseException e) {
+                throw new IllegalArgumentException("Could not parse date string: " + string);
+            }
+        };
+        _serializeFunc = date -> {
+            return dateFormat.format(date);
+        };
+    }
 
-	/**
-	 * {@inheritDoc}
-	 */
-	@Override
-	public String toPhysicalValue(Date virtualValue) {
-		if (virtualValue == null) {
-			return null;
-		}
-		return _serializeFunc.eval(virtualValue);
-	}
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public String toPhysicalValue(Date virtualValue) {
+        if (virtualValue == null) {
+            return null;
+        }
+        return _serializeFunc.apply(virtualValue);
+    }
 
-	/**
-	 * {@inheritDoc}
-	 */
-	@Override
-	public Date toVirtualValue(String physicalValue) {
-		if (physicalValue == null || physicalValue.length() == 0) {
-			return null;
-		}
-		return _deserializeFunc.eval(physicalValue);
-	}
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public Date toVirtualValue(String physicalValue) {
+        if (physicalValue == null || physicalValue.length() == 0) {
+            return null;
+        }
+        return _deserializeFunc.apply(physicalValue);
+    }
 
 }

http://git-wip-us.apache.org/repos/asf/metamodel/blob/f015665d/core/src/main/java/org/apache/metamodel/intercept/InterceptableDataContext.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/metamodel/intercept/InterceptableDataContext.java b/core/src/main/java/org/apache/metamodel/intercept/InterceptableDataContext.java
index a356b9a..394d8c4 100644
--- a/core/src/main/java/org/apache/metamodel/intercept/InterceptableDataContext.java
+++ b/core/src/main/java/org/apache/metamodel/intercept/InterceptableDataContext.java
@@ -206,7 +206,7 @@ public class InterceptableDataContext implements UpdateableDataContext {
         Schema[] schemas = getSchemas();
         String[] schemaNames = new String[schemas.length];
         for (int i = 0; i < schemaNames.length; i++) {
-            schemaNames[i] = new HasNameMapper().eval(schemas[i]);
+            schemaNames[i] = new HasNameMapper().apply(schemas[i]);
         }
         return schemaNames;
     }

http://git-wip-us.apache.org/repos/asf/metamodel/blob/f015665d/core/src/main/java/org/apache/metamodel/query/AbstractQueryClause.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/metamodel/query/AbstractQueryClause.java b/core/src/main/java/org/apache/metamodel/query/AbstractQueryClause.java
index 572d69f..6f2e198 100644
--- a/core/src/main/java/org/apache/metamodel/query/AbstractQueryClause.java
+++ b/core/src/main/java/org/apache/metamodel/query/AbstractQueryClause.java
@@ -57,13 +57,13 @@ public abstract class AbstractQueryClause<E extends QueryItem> extends BaseObjec
     }
 
     @Override
-    public QueryClause<E> setItems(E... items) {
+    public QueryClause<E> setItems(@SuppressWarnings("unchecked") E... items) {
         _items.clear();
         return addItems(items);
     }
 
     @Override
-    public QueryClause<E> addItems(E... items) {
+    public QueryClause<E> addItems(@SuppressWarnings("unchecked") E... items) {
         for (E item : items) {
             addItem(item);
         }
@@ -95,7 +95,7 @@ public abstract class AbstractQueryClause<E extends QueryItem> extends BaseObjec
     public int getItemCount() {
         return _items.size();
     }
-    
+
     @Override
     public int indexOf(E item) {
         return _items.indexOf(item);

http://git-wip-us.apache.org/repos/asf/metamodel/blob/f015665d/core/src/main/java/org/apache/metamodel/query/QueryClause.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/metamodel/query/QueryClause.java b/core/src/main/java/org/apache/metamodel/query/QueryClause.java
index 19a9472..b87d141 100644
--- a/core/src/main/java/org/apache/metamodel/query/QueryClause.java
+++ b/core/src/main/java/org/apache/metamodel/query/QueryClause.java
@@ -23,33 +23,33 @@ import java.util.List;
 
 public interface QueryClause<E> extends Serializable {
 
-	public QueryClause<E> setItems(E... items);
+    public QueryClause<E> setItems(@SuppressWarnings("unchecked") E... items);
 
-	public QueryClause<E> addItems(E... items);
+    public QueryClause<E> addItems(@SuppressWarnings("unchecked") E... items);
 
-	public QueryClause<E> addItems(Iterable<E> items);
+    public QueryClause<E> addItems(Iterable<E> items);
 
-	public QueryClause<E> addItem(int index, E item);
-	
-	public QueryClause<E> addItem(E item);
-	
-	public boolean isEmpty();
+    public QueryClause<E> addItem(int index, E item);
 
-	public int getItemCount();
+    public QueryClause<E> addItem(E item);
 
-	public E getItem(int index);
+    public boolean isEmpty();
 
-	public List<E> getItems();
+    public int getItemCount();
 
-	public QueryClause<E> removeItem(int index);
+    public E getItem(int index);
 
-	public QueryClause<E> removeItem(E item);
+    public List<E> getItems();
 
-	public QueryClause<E> removeItems();
-	
-	public String toSql(boolean includeSchemaInColumnPaths);
+    public QueryClause<E> removeItem(int index);
 
-	public String toSql();
-	
-	public int indexOf(E item);
+    public QueryClause<E> removeItem(E item);
+
+    public QueryClause<E> removeItems();
+
+    public String toSql(boolean includeSchemaInColumnPaths);
+
+    public String toSql();
+
+    public int indexOf(E item);
 }

http://git-wip-us.apache.org/repos/asf/metamodel/blob/f015665d/core/src/main/java/org/apache/metamodel/schema/AbstractSchema.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/metamodel/schema/AbstractSchema.java b/core/src/main/java/org/apache/metamodel/schema/AbstractSchema.java
index a69382d..e44737a 100644
--- a/core/src/main/java/org/apache/metamodel/schema/AbstractSchema.java
+++ b/core/src/main/java/org/apache/metamodel/schema/AbstractSchema.java
@@ -23,11 +23,9 @@ import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Set;
 
-import org.apache.metamodel.util.Action;
 import org.apache.metamodel.util.CollectionUtils;
 import org.apache.metamodel.util.EqualsBuilder;
 import org.apache.metamodel.util.HasNameMapper;
-import org.apache.metamodel.util.Predicate;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -53,14 +51,11 @@ public abstract class AbstractSchema implements Schema {
     @Override
     public Relationship[] getRelationships() {
         final Set<Relationship> result = new LinkedHashSet<Relationship>();
-        CollectionUtils.forEach(getTables(), new Action<Table>() {
-            @Override
-            public void run(Table table) {
-                Relationship[] relations = table.getRelationships();
-                for (int i = 0; i < relations.length; i++) {
-                    Relationship relation = relations[i];
-                    result.add(relation);
-                }
+        CollectionUtils.forEach(getTables(), table -> {
+            final Relationship[] relations = table.getRelationships();
+            for (int i = 0; i < relations.length; i++) {
+                final Relationship relation = relations[i];
+                result.add(relation);
             }
         });
         return result.toArray(new Relationship[result.size()]);
@@ -94,11 +89,8 @@ public abstract class AbstractSchema implements Schema {
 
     @Override
     public final Table[] getTables(final TableType type) {
-        return CollectionUtils.filter(getTables(), new Predicate<Table>() {
-            @Override
-            public Boolean eval(Table table) {
-                return table.getType() == type;
-            }
+        return CollectionUtils.filter(getTables(), table -> {
+            return table.getType() == type;
         }).toArray(new Table[0]);
     }
 
@@ -148,7 +140,7 @@ public abstract class AbstractSchema implements Schema {
     public final String toString() {
         return "Schema[name=" + getName() + "]";
     }
-    
+
     @Override
     public boolean equals(Object obj) {
         if (obj == null) {
@@ -168,14 +160,15 @@ public abstract class AbstractSchema implements Schema {
                     int tableCount2 = other.getTableCount();
                     eb.append(tableCount1, tableCount2);
                 } catch (Exception e) {
-                    // might occur when schemas are disconnected. Omit this check then.
+                    // might occur when schemas are disconnected. Omit this
+                    // check then.
                 }
             }
             return eb.isEquals();
         }
         return false;
     }
-    
+
     @Override
     public int hashCode() {
         String name = getName();

http://git-wip-us.apache.org/repos/asf/metamodel/blob/f015665d/core/src/main/java/org/apache/metamodel/schema/AbstractTable.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/metamodel/schema/AbstractTable.java b/core/src/main/java/org/apache/metamodel/schema/AbstractTable.java
index 7af3656..4f5ad7f 100644
--- a/core/src/main/java/org/apache/metamodel/schema/AbstractTable.java
+++ b/core/src/main/java/org/apache/metamodel/schema/AbstractTable.java
@@ -23,12 +23,11 @@ import java.util.Arrays;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
+import java.util.function.Predicate;
 
 import org.apache.metamodel.MetaModelHelper;
-import org.apache.metamodel.util.Action;
 import org.apache.metamodel.util.CollectionUtils;
 import org.apache.metamodel.util.HasNameMapper;
-import org.apache.metamodel.util.Predicate;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -101,7 +100,7 @@ public abstract class AbstractTable implements Table {
     public final Column[] getNumberColumns() {
         return CollectionUtils.filter(getColumns(), new Predicate<Column>() {
             @Override
-            public Boolean eval(Column col) {
+            public boolean test(Column col) {
                 ColumnType type = col.getType();
                 return type != null && type.isNumber();
             }
@@ -112,7 +111,7 @@ public abstract class AbstractTable implements Table {
     public final Column[] getLiteralColumns() {
         return CollectionUtils.filter(getColumns(), new Predicate<Column>() {
             @Override
-            public Boolean eval(Column col) {
+            public boolean test(Column col) {
                 ColumnType type = col.getType();
                 return type != null && type.isLiteral();
             }
@@ -121,53 +120,36 @@ public abstract class AbstractTable implements Table {
 
     @Override
     public final Column[] getTimeBasedColumns() {
-        return CollectionUtils.filter(getColumns(), new Predicate<Column>() {
-            @Override
-            public Boolean eval(Column col) {
-                ColumnType type = col.getType();
-                return type != null && type.isTimeBased();
-            }
+        return CollectionUtils.filter(getColumns(), col -> {
+            final ColumnType type = col.getType();
+            return type != null && type.isTimeBased();
         }).toArray(new Column[0]);
     }
 
     @Override
     public final Column[] getBooleanColumns() {
-        return CollectionUtils.filter(getColumns(), new Predicate<Column>() {
-            @Override
-            public Boolean eval(Column col) {
-                ColumnType type = col.getType();
-                return type != null && type.isBoolean();
-            }
+        return CollectionUtils.filter(getColumns(), col -> {
+            final ColumnType type = col.getType();
+            return type != null && type.isBoolean();
         }).toArray(new Column[0]);
     }
 
     @Override
     public final Column[] getIndexedColumns() {
-        return CollectionUtils.filter(getColumns(), new Predicate<Column>() {
-            @Override
-            public Boolean eval(Column col) {
-                return col.isIndexed();
-            }
-        }).toArray(new Column[0]);
+        return CollectionUtils.filter(getColumns(), Column::isIndexed).toArray(new Column[0]);
     }
 
     @Override
     public final Relationship[] getForeignKeyRelationships() {
-        return CollectionUtils.filter(getRelationships(), new Predicate<Relationship>() {
-            @Override
-            public Boolean eval(Relationship arg) {
-                return AbstractTable.this.equals(arg.getForeignTable());
-            }
+        return CollectionUtils.filter(getRelationships(), rel -> {
+            return AbstractTable.this.equals(rel.getForeignTable());
         }).toArray(new Relationship[0]);
     }
 
     @Override
     public final Relationship[] getPrimaryKeyRelationships() {
-        return CollectionUtils.filter(getRelationships(), new Predicate<Relationship>() {
-            @Override
-            public Boolean eval(Relationship arg) {
-                return AbstractTable.this.equals(arg.getPrimaryTable());
-            }
+        return CollectionUtils.filter(getRelationships(), rel -> {
+            return AbstractTable.this.equals(rel.getPrimaryTable());
         }).toArray(new Relationship[0]);
     }
 
@@ -175,13 +157,10 @@ public abstract class AbstractTable implements Table {
     public final Column[] getForeignKeys() {
         final Set<Column> columns = new HashSet<Column>();
         final Relationship[] relationships = getForeignKeyRelationships();
-        CollectionUtils.forEach(relationships, new Action<Relationship>() {
-            @Override
-            public void run(Relationship arg) {
-                Column[] foreignColumns = arg.getForeignColumns();
-                for (Column column : foreignColumns) {
-                    columns.add(column);
-                }
+        CollectionUtils.forEach(relationships, rel -> {
+            Column[] foreignColumns = rel.getForeignColumns();
+            for (Column column : foreignColumns) {
+                columns.add(column);
             }
         });
         return columns.toArray(new Column[columns.size()]);
@@ -221,16 +200,13 @@ public abstract class AbstractTable implements Table {
     public final Relationship[] getRelationships(final Table otherTable) {
         Relationship[] relationships = getRelationships();
 
-        return CollectionUtils.filter(relationships, new Predicate<Relationship>() {
-            @Override
-            public Boolean eval(Relationship relation) {
-                if (relation.getForeignTable() == otherTable && relation.getPrimaryTable() == AbstractTable.this) {
-                    return true;
-                } else if (relation.getForeignTable() == AbstractTable.this && relation.getPrimaryTable() == otherTable) {
-                    return true;
-                }
-                return false;
+        return CollectionUtils.filter(relationships, relation -> {
+            if (relation.getForeignTable() == otherTable && relation.getPrimaryTable() == AbstractTable.this) {
+                return true;
+            } else if (relation.getForeignTable() == AbstractTable.this && relation.getPrimaryTable() == otherTable) {
+                return true;
             }
+            return false;
         }).toArray(new Relationship[0]);
     }
 

http://git-wip-us.apache.org/repos/asf/metamodel/blob/f015665d/core/src/main/java/org/apache/metamodel/util/AbstractResource.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/metamodel/util/AbstractResource.java b/core/src/main/java/org/apache/metamodel/util/AbstractResource.java
index 7f96973..fcc2628 100644
--- a/core/src/main/java/org/apache/metamodel/util/AbstractResource.java
+++ b/core/src/main/java/org/apache/metamodel/util/AbstractResource.java
@@ -20,6 +20,7 @@ package org.apache.metamodel.util;
 
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.util.function.Function;
 
 /**
  * Abstract implementation of many methods in {@link Resource}
@@ -38,12 +39,25 @@ public abstract class AbstractResource implements Resource {
             FileHelper.safeClose(in);
         }
     }
+    
+    @Override
+    public <E> E read(Function<InputStream, E> readCallback) throws ResourceException {
+        final InputStream in = read();
+        try {
+            final E result = readCallback.apply(in);
+            return result;
+        } catch (Exception e) {
+            throw new ResourceException(this, "Error occurred in read callback", e);
+        } finally {
+            FileHelper.safeClose(in);
+        }
+    }
 
     @Override
-    public final <E> E read(Func<InputStream, E> readCallback) {
+    public final <E> E read(UncheckedFunc<InputStream, E> readCallback) {
         final InputStream in = read();
         try {
-            final E result = readCallback.eval(in);
+            final E result = readCallback.applyUnchecked(in);
             return result;
         } catch (Exception e) {
             throw new ResourceException(this, "Error occurred in read callback", e);

http://git-wip-us.apache.org/repos/asf/metamodel/blob/f015665d/core/src/main/java/org/apache/metamodel/util/Action.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/metamodel/util/Action.java b/core/src/main/java/org/apache/metamodel/util/Action.java
index b602302..2dcb767 100644
--- a/core/src/main/java/org/apache/metamodel/util/Action.java
+++ b/core/src/main/java/org/apache/metamodel/util/Action.java
@@ -18,15 +18,32 @@
  */
 package org.apache.metamodel.util;
 
+import java.util.function.Consumer;
+
 /**
  * Represents an abstract action, which is an executable piece of functionality
- * that takes an argument. An {@link Action} has no return type, unlike a
- * {@link Func}.
+ * that takes an argument. An action is very similar to a {@link Consumer},
+ * except that it allows for throwing exceptions, making it more appropriate for
+ * encapsulating code blocks that may fail.
  * 
  * @param <E>
  *            the argument type of the action
  */
-public interface Action<E> {
+@FunctionalInterface
+public interface Action<E> extends Consumer<E> {
+
+    @Override
+    default void accept(E t) {
+        // delegate to run method and propagate exceptions if needed
+        try {
+            run(t);
+        } catch (Exception e) {
+            if (e instanceof RuntimeException) {
+                throw (RuntimeException) e;
+            }
+            throw new RuntimeException(e);
+        }
+    }
 
-	public void run(E arg) throws Exception;
+    public void run(E arg) throws Exception;
 }

http://git-wip-us.apache.org/repos/asf/metamodel/blob/f015665d/core/src/main/java/org/apache/metamodel/util/CollectionUtils.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/metamodel/util/CollectionUtils.java b/core/src/main/java/org/apache/metamodel/util/CollectionUtils.java
index 2cd4e6a..5246a3a 100644
--- a/core/src/main/java/org/apache/metamodel/util/CollectionUtils.java
+++ b/core/src/main/java/org/apache/metamodel/util/CollectionUtils.java
@@ -26,6 +26,8 @@ import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.function.Consumer;
+import java.util.function.Function;
 
 /**
  * Various utility methods for handling of collections and arrays.
@@ -260,41 +262,41 @@ public final class CollectionUtils {
         return (E[]) result;
     }
 
-    public static <E> List<E> filter(E[] items, Predicate<? super E> predicate) {
+    public static <E> List<E> filter(E[] items, java.util.function.Predicate<? super E> predicate) {
         return filter(Arrays.asList(items), predicate);
     }
 
-    public static <E> List<E> filter(Iterable<E> items, Predicate<? super E> predicate) {
+    public static <E> List<E> filter(Iterable<E> items, java.util.function.Predicate<? super E> predicate) {
         List<E> result = new ArrayList<E>();
         for (E e : items) {
-            if (predicate.eval(e).booleanValue()) {
+            if (predicate.test(e)) {
                 result.add(e);
             }
         }
         return result;
     }
 
-    public static <I, O> List<O> map(I[] items, Func<? super I, O> func) {
+    public static <I, O> List<O> map(I[] items, Function<? super I, O> func) {
         return map(Arrays.asList(items), func);
     }
 
-    public static <I, O> List<O> map(Iterable<I> items, Func<? super I, O> func) {
+    public static <I, O> List<O> map(Iterable<I> items, Function<? super I, O> func) {
         List<O> result = new ArrayList<O>();
         for (I item : items) {
-            O output = func.eval(item);
+            O output = func.apply(item);
             result.add(output);
         }
         return result;
     }
 
-    public static <E> void forEach(E[] items, Action<? super E> action) {
+    public static <E> void forEach(E[] items, Consumer<? super E> action) {
         forEach(Arrays.asList(items), action);
     }
 
-    public static <E> void forEach(Iterable<E> items, Action<? super E> action) {
+    public static <E> void forEach(Iterable<E> items, Consumer<? super E> action) {
         for (E item : items) {
             try {
-                action.run(item);
+                action.accept(item);
             } catch (Exception e) {
                 if (e instanceof RuntimeException) {
                     throw (RuntimeException) e;

http://git-wip-us.apache.org/repos/asf/metamodel/blob/f015665d/core/src/main/java/org/apache/metamodel/util/ConstantFunc.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/metamodel/util/ConstantFunc.java b/core/src/main/java/org/apache/metamodel/util/ConstantFunc.java
index 9a48516..639b421 100644
--- a/core/src/main/java/org/apache/metamodel/util/ConstantFunc.java
+++ b/core/src/main/java/org/apache/metamodel/util/ConstantFunc.java
@@ -18,13 +18,15 @@
  */
 package org.apache.metamodel.util;
 
+import java.util.function.Function;
+
 /**
  * A function that always returns the same constant response.
  * 
  * @param <I>
  * @param <O>
  */
-public final class ConstantFunc<I, O> implements Func<I, O> {
+public final class ConstantFunc<I, O> implements Function<I, O> {
 
     private final O _response;
 
@@ -33,7 +35,7 @@ public final class ConstantFunc<I, O> implements Func<I, O> {
     }
 
     @Override
-    public O eval(I arg) {
+    public O apply(I arg) {
         return _response;
     }
 

http://git-wip-us.apache.org/repos/asf/metamodel/blob/f015665d/core/src/main/java/org/apache/metamodel/util/ExclusionPredicate.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/metamodel/util/ExclusionPredicate.java b/core/src/main/java/org/apache/metamodel/util/ExclusionPredicate.java
index aec67c6..c3a8bfe 100644
--- a/core/src/main/java/org/apache/metamodel/util/ExclusionPredicate.java
+++ b/core/src/main/java/org/apache/metamodel/util/ExclusionPredicate.java
@@ -27,7 +27,7 @@ import java.util.Collections;
  * 
  * @param <E>
  */
-public class ExclusionPredicate<E> implements Predicate<E> {
+public class ExclusionPredicate<E> implements java.util.function.Predicate<E> {
 
     private final Collection<E> _exclusionList;
 
@@ -36,7 +36,7 @@ public class ExclusionPredicate<E> implements Predicate<E> {
     }
 
     @Override
-    public Boolean eval(E arg) {
+    public boolean test(E arg) {
         if (_exclusionList.contains(arg)) {
             return false;
         }

http://git-wip-us.apache.org/repos/asf/metamodel/blob/f015665d/core/src/main/java/org/apache/metamodel/util/FalsePredicate.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/metamodel/util/FalsePredicate.java b/core/src/main/java/org/apache/metamodel/util/FalsePredicate.java
index f1f4a8e..1b58069 100644
--- a/core/src/main/java/org/apache/metamodel/util/FalsePredicate.java
+++ b/core/src/main/java/org/apache/metamodel/util/FalsePredicate.java
@@ -25,12 +25,12 @@ import java.io.Serializable;
  * 
  * @param <E>
  */
-public final class FalsePredicate<E> implements Predicate<E>, Serializable {
+public final class FalsePredicate<E> implements java.util.function.Predicate<E>, Serializable {
 
     private static final long serialVersionUID = 1L;
 
     @Override
-    public Boolean eval(E arg) {
+    public boolean test(E arg) {
         return false;
     }
 

http://git-wip-us.apache.org/repos/asf/metamodel/blob/f015665d/core/src/main/java/org/apache/metamodel/util/FileHelper.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/metamodel/util/FileHelper.java b/core/src/main/java/org/apache/metamodel/util/FileHelper.java
index 7465fd0..c955ec6 100644
--- a/core/src/main/java/org/apache/metamodel/util/FileHelper.java
+++ b/core/src/main/java/org/apache/metamodel/util/FileHelper.java
@@ -147,7 +147,6 @@ public final class FileHelper {
                 int unread;
 
                 // auto-detect byte-order-mark
-                @SuppressWarnings("resource")
                 final PushbackInputStream pushbackInputStream = new PushbackInputStream(inputStream, bom.length);
                 final int n = pushbackInputStream.read(bom, 0, bom.length);
 

http://git-wip-us.apache.org/repos/asf/metamodel/blob/f015665d/core/src/main/java/org/apache/metamodel/util/Func.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/metamodel/util/Func.java b/core/src/main/java/org/apache/metamodel/util/Func.java
index 44014e0..687189a 100644
--- a/core/src/main/java/org/apache/metamodel/util/Func.java
+++ b/core/src/main/java/org/apache/metamodel/util/Func.java
@@ -18,6 +18,8 @@
  */
 package org.apache.metamodel.util;
 
+import java.util.function.Function;
+
 /**
  * Represents an abstract function, which is an executable piece of
  * functionality that has an input and an output. A {@link Func} has a return
@@ -27,8 +29,17 @@ package org.apache.metamodel.util;
  *            the input type
  * @param <O>
  *            the output type
+ * @deprecated use {@link Function} instead
  */
-public interface Func<I, O> {
+@Deprecated
+@FunctionalInterface
+public interface Func<I, O> extends Function<I, O> {
+    
+    @Override
+    default O apply(I t) {
+        // defer to the deprecated signature
+        return eval(t);
+    }
 
     /**
      * Evaluates an element and transforms it using this function.

http://git-wip-us.apache.org/repos/asf/metamodel/blob/f015665d/core/src/main/java/org/apache/metamodel/util/HasNameMapper.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/metamodel/util/HasNameMapper.java b/core/src/main/java/org/apache/metamodel/util/HasNameMapper.java
index 3b41102..e0d253b 100644
--- a/core/src/main/java/org/apache/metamodel/util/HasNameMapper.java
+++ b/core/src/main/java/org/apache/metamodel/util/HasNameMapper.java
@@ -19,18 +19,19 @@
 package org.apache.metamodel.util;
 
 import java.io.Serializable;
+import java.util.function.Function;
 
 /**
  * {@link Func} useful for mapping {@link HasName} instances to names, using
  * {@link CollectionUtils#map(Object[], Func)} and
  * {@link CollectionUtils#map(Iterable, Func)}.
  */
-public final class HasNameMapper implements Func<HasName, String>, Serializable {
+public final class HasNameMapper implements Function<HasName, String>, Serializable {
 
     private static final long serialVersionUID = 1L;
 
     @Override
-	public String eval(HasName arg) {
+	public String apply(HasName arg) {
 		return arg.getName();
 	}
 

http://git-wip-us.apache.org/repos/asf/metamodel/blob/f015665d/core/src/main/java/org/apache/metamodel/util/ImmutableRef.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/metamodel/util/ImmutableRef.java b/core/src/main/java/org/apache/metamodel/util/ImmutableRef.java
index adfde04..beb0f76 100644
--- a/core/src/main/java/org/apache/metamodel/util/ImmutableRef.java
+++ b/core/src/main/java/org/apache/metamodel/util/ImmutableRef.java
@@ -18,26 +18,28 @@
  */
 package org.apache.metamodel.util;
 
+import java.util.function.Supplier;
+
 /**
  * Simple/hard implementation of the {@link Ref} interface.
  * 
  * @param <E>
  */
-public final class ImmutableRef<E> implements Ref<E> {
+public final class ImmutableRef<E> implements Supplier<E> {
 
-	private final E _object;
+    private final E _object;
 
-	public ImmutableRef(E object) {
-		_object = object;
-	}
+    public ImmutableRef(E object) {
+        _object = object;
+    }
 
-	@Override
-	public E get() {
-		return _object;
-	}
+    @Override
+    public E get() {
+        return _object;
+    }
 
-	public static <E> Ref<E> of(E object) {
-		return new ImmutableRef<E>(object);
-	}
+    public static <E> Supplier<E> of(E object) {
+        return new ImmutableRef<E>(object);
+    }
 
 }

http://git-wip-us.apache.org/repos/asf/metamodel/blob/f015665d/core/src/main/java/org/apache/metamodel/util/InclusionPredicate.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/metamodel/util/InclusionPredicate.java b/core/src/main/java/org/apache/metamodel/util/InclusionPredicate.java
index d8aab91..4baa108 100644
--- a/core/src/main/java/org/apache/metamodel/util/InclusionPredicate.java
+++ b/core/src/main/java/org/apache/metamodel/util/InclusionPredicate.java
@@ -27,7 +27,7 @@ import java.util.Collections;
  * 
  * @param <E>
  */
-public class InclusionPredicate<E> implements Predicate<E> {
+public class InclusionPredicate<E> implements java.util.function.Predicate<E> {
 
     private final Collection<E> _inclusionList;
 
@@ -36,7 +36,7 @@ public class InclusionPredicate<E> implements Predicate<E> {
     }
 
     @Override
-    public Boolean eval(E arg) {
+    public boolean test(E arg) {
         if (_inclusionList.contains(arg)) {
             return true;
         }

http://git-wip-us.apache.org/repos/asf/metamodel/blob/f015665d/core/src/main/java/org/apache/metamodel/util/LazyRef.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/metamodel/util/LazyRef.java b/core/src/main/java/org/apache/metamodel/util/LazyRef.java
index 6db947d..24e3072 100644
--- a/core/src/main/java/org/apache/metamodel/util/LazyRef.java
+++ b/core/src/main/java/org/apache/metamodel/util/LazyRef.java
@@ -20,6 +20,7 @@ package org.apache.metamodel.util;
 
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.function.Supplier;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -29,7 +30,7 @@ import org.slf4j.LoggerFactory;
  * 
  * @param <E>
  */
-public abstract class LazyRef<E> implements Ref<E> {
+public abstract class LazyRef<E> implements Supplier<E> {
 
     private static final Logger logger = LoggerFactory.getLogger(LazyRef.class);
 

http://git-wip-us.apache.org/repos/asf/metamodel/blob/f015665d/core/src/main/java/org/apache/metamodel/util/MutableRef.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/metamodel/util/MutableRef.java b/core/src/main/java/org/apache/metamodel/util/MutableRef.java
index c5010a1..b6f2f88 100644
--- a/core/src/main/java/org/apache/metamodel/util/MutableRef.java
+++ b/core/src/main/java/org/apache/metamodel/util/MutableRef.java
@@ -18,12 +18,14 @@
  */
 package org.apache.metamodel.util;
 
+import java.util.function.Supplier;
+
 /**
  * Represents a mutable reference to any object
  * 
  * @param <E>
  */
-public final class MutableRef<E> implements Ref<E> {
+public final class MutableRef<E> implements Supplier<E> {
 
 	private E _object;
 

http://git-wip-us.apache.org/repos/asf/metamodel/blob/f015665d/core/src/main/java/org/apache/metamodel/util/Predicate.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/metamodel/util/Predicate.java b/core/src/main/java/org/apache/metamodel/util/Predicate.java
index ef585e7..73e6a22 100644
--- a/core/src/main/java/org/apache/metamodel/util/Predicate.java
+++ b/core/src/main/java/org/apache/metamodel/util/Predicate.java
@@ -23,7 +23,16 @@ package org.apache.metamodel.util;
  * inclusion/exclusion criteria.
  * 
  * @param <E>
+ * 
+ * @deprecated use {@link java.util.function.Predicate} instead
  */
-public interface Predicate<E> extends Func<E, Boolean> {
+@Deprecated
+@FunctionalInterface
+public interface Predicate<E> extends Func<E, Boolean>, java.util.function.Predicate<E> {
 
+    @Override
+    default boolean test(E t) {
+        // delegate to the deprecated method signature
+        return eval(t);
+    }
 }

http://git-wip-us.apache.org/repos/asf/metamodel/blob/f015665d/core/src/main/java/org/apache/metamodel/util/Ref.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/metamodel/util/Ref.java b/core/src/main/java/org/apache/metamodel/util/Ref.java
index baa8e34..927c606 100644
--- a/core/src/main/java/org/apache/metamodel/util/Ref.java
+++ b/core/src/main/java/org/apache/metamodel/util/Ref.java
@@ -18,13 +18,20 @@
  */
 package org.apache.metamodel.util;
 
+import java.util.function.Supplier;
+
 /**
  * Represents an abstract reference. This interface enables use of both regular,
  * hard references, soft references and deferred/lazy references.
  * 
  * @param <E>
+ * 
+ * @deprecated use {@link Supplier} instead
  */
-public interface Ref<E> {
-
+@Deprecated
+@FunctionalInterface
+public interface Ref<E> extends Supplier<E> {
+    
+    @Override
 	public E get();
 }

http://git-wip-us.apache.org/repos/asf/metamodel/blob/f015665d/core/src/main/java/org/apache/metamodel/util/Resource.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/metamodel/util/Resource.java b/core/src/main/java/org/apache/metamodel/util/Resource.java
index becb79f..fe5386f 100644
--- a/core/src/main/java/org/apache/metamodel/util/Resource.java
+++ b/core/src/main/java/org/apache/metamodel/util/Resource.java
@@ -20,6 +20,7 @@ package org.apache.metamodel.util;
 
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.util.function.Function;
 
 /**
  * Represents a resource from which we can read and write bytes
@@ -159,5 +160,16 @@ public interface Resource extends HasName {
      * @throws ResourceException
      *             if an error occurs while reading
      */
-    public <E> E read(Func<InputStream, E> readCallback) throws ResourceException;
+    public <E> E read(UncheckedFunc<InputStream, E> readCallback) throws ResourceException;
+
+    /**
+     * * Opens up an {@link InputStream} to read from the resource, and allows a
+     * callback function to perform writing actions on it and return the
+     * function's result.
+     * 
+     * @param readCallback
+     * @return
+     * @throws ResourceException
+     */
+    public <E> E read(Function<InputStream, E> readCallback) throws ResourceException;
 }

http://git-wip-us.apache.org/repos/asf/metamodel/blob/f015665d/core/src/main/java/org/apache/metamodel/util/SerializableRef.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/metamodel/util/SerializableRef.java b/core/src/main/java/org/apache/metamodel/util/SerializableRef.java
index d3b56de..81a86f6 100644
--- a/core/src/main/java/org/apache/metamodel/util/SerializableRef.java
+++ b/core/src/main/java/org/apache/metamodel/util/SerializableRef.java
@@ -19,6 +19,7 @@
 package org.apache.metamodel.util;
 
 import java.io.Serializable;
+import java.util.function.Supplier;
 
 /**
  * A serializable reference to an object which may or may not be serializable.
@@ -27,7 +28,7 @@ import java.io.Serializable;
  * 
  * @param <E>
  */
-public final class SerializableRef<E> implements Ref<E>, Serializable {
+public final class SerializableRef<E> implements Supplier<E>, Serializable {
 
     private static final long serialVersionUID = 1L;
 

http://git-wip-us.apache.org/repos/asf/metamodel/blob/f015665d/core/src/main/java/org/apache/metamodel/util/TruePredicate.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/metamodel/util/TruePredicate.java b/core/src/main/java/org/apache/metamodel/util/TruePredicate.java
index f0d4745..e5acad4 100644
--- a/core/src/main/java/org/apache/metamodel/util/TruePredicate.java
+++ b/core/src/main/java/org/apache/metamodel/util/TruePredicate.java
@@ -25,12 +25,12 @@ import java.io.Serializable;
  * 
  * @param <E>
  */
-public final class TruePredicate<E> implements Predicate<E>, Serializable {
+public final class TruePredicate<E> implements java.util.function.Predicate<E>, Serializable {
 
     private static final long serialVersionUID = 1L;
 
     @Override
-    public Boolean eval(E arg) {
+    public boolean test(E arg) {
         return true;
     }
     

http://git-wip-us.apache.org/repos/asf/metamodel/blob/f015665d/core/src/main/java/org/apache/metamodel/util/UncheckedFunc.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/metamodel/util/UncheckedFunc.java b/core/src/main/java/org/apache/metamodel/util/UncheckedFunc.java
index ed5d89c..1e2b7dc 100644
--- a/core/src/main/java/org/apache/metamodel/util/UncheckedFunc.java
+++ b/core/src/main/java/org/apache/metamodel/util/UncheckedFunc.java
@@ -18,12 +18,22 @@
  */
 package org.apache.metamodel.util;
 
-public abstract class UncheckedFunc<I, O> implements Func<I, O> {
+import java.util.function.Function;
+
+/**
+ * Represents a {@link Function} that allows for throwing checked exceptions,
+ * making it more appropriate for encapsulating code blocks that may fail.
+ * 
+ * @param <I>
+ * @param <O>
+ */
+@FunctionalInterface
+public interface UncheckedFunc<I, O> extends Function<I, O> {
 
     @Override
-    public O eval(I arg) {
+    public default O apply(I arg) {
         try {
-            return evalUnchecked(arg);
+            return applyUnchecked(arg);
         } catch (Exception e) {
             if (e instanceof RuntimeException) {
                 throw (RuntimeException) e;
@@ -32,5 +42,5 @@ public abstract class UncheckedFunc<I, O> implements Func<I, O> {
         }
     }
 
-    protected abstract O evalUnchecked(I arg) throws Exception;
+    public O applyUnchecked(I arg) throws Exception;
 }

http://git-wip-us.apache.org/repos/asf/metamodel/blob/f015665d/core/src/test/java/org/apache/metamodel/util/ClasspathResourceTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/metamodel/util/ClasspathResourceTest.java b/core/src/test/java/org/apache/metamodel/util/ClasspathResourceTest.java
index 72e49b8..885bf92 100644
--- a/core/src/test/java/org/apache/metamodel/util/ClasspathResourceTest.java
+++ b/core/src/test/java/org/apache/metamodel/util/ClasspathResourceTest.java
@@ -18,8 +18,6 @@
  */
 package org.apache.metamodel.util;
 
-import java.io.InputStream;
-
 import junit.framework.TestCase;
 
 public class ClasspathResourceTest extends TestCase {
@@ -29,17 +27,14 @@ public class ClasspathResourceTest extends TestCase {
         assertEquals("foo", resource.getName());
         assertTrue(resource.isExists());
         assertTrue(resource.isReadOnly());
-        
+
         resource = new ClasspathResource("/folder/foo");
         assertEquals("foo", resource.getName());
         assertTrue(resource.isExists());
         assertTrue(resource.isReadOnly());
-        
-        String result = resource.read(new Func<InputStream, String>() {
-            @Override
-            public String eval(InputStream inputStream) {
-                return FileHelper.readInputStreamAsString(inputStream, "UTF8");
-            }
+
+        String result = resource.read(inputStream -> {
+            return FileHelper.readInputStreamAsString(inputStream, "UTF8");
         });
         assertEquals("bar-baz", result);
     }

http://git-wip-us.apache.org/repos/asf/metamodel/blob/f015665d/core/src/test/java/org/apache/metamodel/util/CollectionUtilsTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/metamodel/util/CollectionUtilsTest.java b/core/src/test/java/org/apache/metamodel/util/CollectionUtilsTest.java
index 5b1f013..c5a5a6f 100644
--- a/core/src/test/java/org/apache/metamodel/util/CollectionUtilsTest.java
+++ b/core/src/test/java/org/apache/metamodel/util/CollectionUtilsTest.java
@@ -73,7 +73,7 @@ public class CollectionUtilsTest extends TestCase {
         assertEquals("Stockholm", CollectionUtils.find(map, "Person.Addresses[0].city").toString());
         assertEquals("{city=Copenhagen, country=Denmark}", CollectionUtils.find(map, "Person.Addresses[1]").toString());
         assertEquals(null, CollectionUtils.find(map, "Person.Addresses[4].country"));
-        
+
         assertEquals(null, CollectionUtils.find(map, "Foo.bar"));
         assertEquals(null, CollectionUtils.find(map, "Person.Addresses.Foo"));
     }
@@ -111,12 +111,7 @@ public class CollectionUtilsTest extends TestCase {
         strings.add("hi");
         strings.add("world");
 
-        List<Integer> ints = CollectionUtils.map(strings, new Func<String, Integer>() {
-            @Override
-            public Integer eval(String arg) {
-                return arg.length();
-            }
-        });
+        List<Integer> ints = CollectionUtils.map(strings, String::length);
         assertEquals("[2, 5]", ints.toString());
     }
 
@@ -127,12 +122,7 @@ public class CollectionUtilsTest extends TestCase {
         list.add("3");
         list.add("2");
 
-        list = CollectionUtils.filter(list, new Predicate<String>() {
-            @Override
-            public Boolean eval(String arg) {
-                return arg.length() > 1;
-            }
-        });
+        list = CollectionUtils.filter(list, arg -> arg.length() > 1);
 
         assertEquals(2, list.size());
         assertEquals("[foo, bar]", list.toString());

http://git-wip-us.apache.org/repos/asf/metamodel/blob/f015665d/core/src/test/java/org/apache/metamodel/util/ExclusionPredicateTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/metamodel/util/ExclusionPredicateTest.java b/core/src/test/java/org/apache/metamodel/util/ExclusionPredicateTest.java
index 405f9b3..ed11cc8 100644
--- a/core/src/test/java/org/apache/metamodel/util/ExclusionPredicateTest.java
+++ b/core/src/test/java/org/apache/metamodel/util/ExclusionPredicateTest.java
@@ -27,10 +27,10 @@ public class ExclusionPredicateTest extends TestCase {
     public void testEval() throws Exception {
         ExclusionPredicate<String> predicate = new ExclusionPredicate<String>(Arrays.asList("foo","bar","baz"));
         
-        assertFalse(predicate.eval("foo"));
-        assertFalse(predicate.eval("bar"));
-        assertFalse(predicate.eval("baz"));
+        assertFalse(predicate.test("foo"));
+        assertFalse(predicate.test("bar"));
+        assertFalse(predicate.test("baz"));
         
-        assertTrue(predicate.eval("hello world"));
+        assertTrue(predicate.test("hello world"));
     }
 }

http://git-wip-us.apache.org/repos/asf/metamodel/blob/f015665d/core/src/test/java/org/apache/metamodel/util/FileResourceTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/metamodel/util/FileResourceTest.java b/core/src/test/java/org/apache/metamodel/util/FileResourceTest.java
index d0b8405..e305a6c 100644
--- a/core/src/test/java/org/apache/metamodel/util/FileResourceTest.java
+++ b/core/src/test/java/org/apache/metamodel/util/FileResourceTest.java
@@ -18,9 +18,10 @@
  */
 package org.apache.metamodel.util;
 
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
 
-import java.io.InputStream;
 import java.io.OutputStream;
 import java.util.Arrays;
 import java.util.Collections;
@@ -38,7 +39,7 @@ public class FileResourceTest {
     public void testCannotWriteToDirectory() throws Exception {
         FileResource dir = new FileResource(".");
         assertTrue(dir.isReadOnly());
-        
+
         try {
             dir.write();
             fail("Exception expected");
@@ -76,20 +77,14 @@ public class FileResourceTest {
 
         final FileResource res1 = new FileResource(folder.getRoot());
 
-        final String str1 = res1.read(new Func<InputStream, String>() {
-            @Override
-            public String eval(InputStream in) {
-                return FileHelper.readInputStreamAsString(in, "UTF8");
-            }
+        final String str1 = res1.read(in -> {
+            return FileHelper.readInputStreamAsString(in, "UTF8");
         });
 
         Assert.assertEquals(contentString, str1);
 
-        final String str2 = res1.read(new Func<InputStream, String>() {
-            @Override
-            public String eval(InputStream in) {
+        final String str2 = res1.read(in -> {
                 return FileHelper.readInputStreamAsString(in, "UTF8");
-            }
         });
         Assert.assertEquals(str1, str2);
     }

http://git-wip-us.apache.org/repos/asf/metamodel/blob/f015665d/core/src/test/java/org/apache/metamodel/util/InclusionPredicateTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/metamodel/util/InclusionPredicateTest.java b/core/src/test/java/org/apache/metamodel/util/InclusionPredicateTest.java
index c3866e3..a3b4857 100644
--- a/core/src/test/java/org/apache/metamodel/util/InclusionPredicateTest.java
+++ b/core/src/test/java/org/apache/metamodel/util/InclusionPredicateTest.java
@@ -27,10 +27,10 @@ public class InclusionPredicateTest extends TestCase {
     public void testEval() throws Exception {
         InclusionPredicate<String> predicate = new InclusionPredicate<String>(Arrays.asList("foo","bar","baz"));
         
-        assertTrue(predicate.eval("foo"));
-        assertTrue(predicate.eval("bar"));
-        assertTrue(predicate.eval("baz"));
+        assertTrue(predicate.test("foo"));
+        assertTrue(predicate.test("bar"));
+        assertTrue(predicate.test("baz"));
         
-        assertFalse(predicate.eval("hello world"));
+        assertFalse(predicate.test("hello world"));
     }
 }

http://git-wip-us.apache.org/repos/asf/metamodel/blob/f015665d/core/src/test/java/org/apache/metamodel/util/SimpleRefTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/metamodel/util/SimpleRefTest.java b/core/src/test/java/org/apache/metamodel/util/SimpleRefTest.java
index 8b4ec47..d128d63 100644
--- a/core/src/test/java/org/apache/metamodel/util/SimpleRefTest.java
+++ b/core/src/test/java/org/apache/metamodel/util/SimpleRefTest.java
@@ -18,12 +18,14 @@
  */
 package org.apache.metamodel.util;
 
+import java.util.function.Supplier;
+
 import junit.framework.TestCase;
 
 public class SimpleRefTest extends TestCase {
 
 	public void testGet() throws Exception {
-		Ref<String> lazyRef = new ImmutableRef<String>("foo");
+		Supplier<String> lazyRef = new ImmutableRef<String>("foo");
 
 		assertEquals("foo", lazyRef.get());
 

http://git-wip-us.apache.org/repos/asf/metamodel/blob/f015665d/csv/src/main/java/org/apache/metamodel/csv/CsvDataContext.java
----------------------------------------------------------------------
diff --git a/csv/src/main/java/org/apache/metamodel/csv/CsvDataContext.java b/csv/src/main/java/org/apache/metamodel/csv/CsvDataContext.java
index ee456f0..e369bfc 100644
--- a/csv/src/main/java/org/apache/metamodel/csv/CsvDataContext.java
+++ b/csv/src/main/java/org/apache/metamodel/csv/CsvDataContext.java
@@ -41,7 +41,6 @@ import org.apache.metamodel.schema.Column;
 import org.apache.metamodel.schema.Table;
 import org.apache.metamodel.util.FileHelper;
 import org.apache.metamodel.util.FileResource;
-import org.apache.metamodel.util.Func;
 import org.apache.metamodel.util.Resource;
 import org.apache.metamodel.util.ResourceUtils;
 import org.apache.metamodel.util.UrlResource;
@@ -67,9 +66,9 @@ public final class CsvDataContext extends QueryPostprocessDataContext implements
     /**
      * Constructs a CSV DataContext based on a file
      *
-     * The file provided can be either existing or non-existing. In the
-     * case of non-existing files, a file will be automatically created
-     * when a CREATE TABLE update is executed on the DataContext.
+     * The file provided can be either existing or non-existing. In the case of
+     * non-existing files, a file will be automatically created when a CREATE
+     * TABLE update is executed on the DataContext.
      * 
      * @param file
      * @param configuration
@@ -274,62 +273,59 @@ public final class CsvDataContext extends QueryPostprocessDataContext implements
         if (!functionApproximationAllowed) {
             return null;
         }
-        
+
         if (whereItems != null && !whereItems.isEmpty()) {
             return null;
         }
-        
+
         final long length = _resource.getSize();
         if (length < 0) {
             // METAMODEL-30: Sometimes the size of the resource is not known
             return null;
         }
 
-        return _resource.read(new Func<InputStream, Number>() {
-            @Override
-            public Number eval(InputStream inputStream) {
-                try {
-                    // read up to 5 megs of the file and approximate number of
-                    // lines based on that.
-
-                    final int sampleSize = (int) Math.min(length, 1024 * 1024 * 5);
-                    final int chunkSize = Math.min(sampleSize, 1024 * 1024);
-
-                    int readSize = 0;
-                    int newlines = 0;
-                    int carriageReturns = 0;
-                    byte[] byteBuffer = new byte[chunkSize];
-                    char[] charBuffer = new char[chunkSize];
-
-                    while (readSize < sampleSize) {
-                        final int read = inputStream.read(byteBuffer);
-                        if (read == -1) {
-                            break;
-                        } else {
-                            readSize += read;
-                        }
+        return _resource.read(inputStream -> {
+            try {
+                // read up to 5 megs of the file and approximate number of
+                // lines based on that.
+
+                final int sampleSize = (int) Math.min(length, 1024 * 1024 * 5);
+                final int chunkSize = Math.min(sampleSize, 1024 * 1024);
+
+                int readSize = 0;
+                int newlines = 0;
+                int carriageReturns = 0;
+                byte[] byteBuffer = new byte[chunkSize];
+                char[] charBuffer = new char[chunkSize];
+
+                while (readSize < sampleSize) {
+                    final int read = inputStream.read(byteBuffer);
+                    if (read == -1) {
+                        break;
+                    } else {
+                        readSize += read;
+                    }
 
-                        Reader reader = getReader(byteBuffer, _configuration.getEncoding());
-                        reader.read(charBuffer);
-                        for (char c : charBuffer) {
-                            if ('\n' == c) {
-                                newlines++;
-                            } else if ('\r' == c) {
-                                carriageReturns++;
-                            }
+                    Reader reader = getReader(byteBuffer, _configuration.getEncoding());
+                    reader.read(charBuffer);
+                    for (char c : charBuffer) {
+                        if ('\n' == c) {
+                            newlines++;
+                        } else if ('\r' == c) {
+                            carriageReturns++;
                         }
                     }
+                }
 
-                    int lines = Math.max(newlines, carriageReturns);
+                int lines = Math.max(newlines, carriageReturns);
 
-                    logger.info("Found {} lines breaks in {} bytes", lines, sampleSize);
+                logger.info("Found {} lines breaks in {} bytes", lines, sampleSize);
 
-                    long approxCount = (long) (lines * length / sampleSize);
-                    return approxCount;
-                } catch (IOException e) {
-                    logger.error("Unexpected error during COUNT(*) approximation", e);
-                    throw new IllegalStateException(e);
-                }
+                long approxCount = (long) (lines * length / sampleSize);
+                return approxCount;
+            } catch (IOException e) {
+                logger.error("Unexpected error during COUNT(*) approximation", e);
+                throw new IllegalStateException(e);
             }
         });
     }
@@ -386,14 +382,14 @@ public final class CsvDataContext extends QueryPostprocessDataContext implements
 
     protected CSVReader createCsvReader(int skipLines) {
         final Reader reader = FileHelper.getReader(_resource.read(), _configuration.getEncoding());
-        final CSVReader csvReader = new CSVReader(reader, _configuration.getSeparatorChar(),
-                _configuration.getQuoteChar(), _configuration.getEscapeChar(), skipLines);
+        final CSVReader csvReader = new CSVReader(reader, _configuration.getSeparatorChar(), _configuration
+                .getQuoteChar(), _configuration.getEscapeChar(), skipLines);
         return csvReader;
     }
 
     protected CSVReader createCsvReader(BufferedReader reader) {
-        final CSVReader csvReader = new CSVReader(reader, _configuration.getSeparatorChar(),
-                _configuration.getQuoteChar(), _configuration.getEscapeChar());
+        final CSVReader csvReader = new CSVReader(reader, _configuration.getSeparatorChar(), _configuration
+                .getQuoteChar(), _configuration.getEscapeChar());
         return csvReader;
     }
 

http://git-wip-us.apache.org/repos/asf/metamodel/blob/f015665d/full/src/main/java/org/apache/metamodel/DataContextFactory.java
----------------------------------------------------------------------
diff --git a/full/src/main/java/org/apache/metamodel/DataContextFactory.java b/full/src/main/java/org/apache/metamodel/DataContextFactory.java
index af12604..427101e 100644
--- a/full/src/main/java/org/apache/metamodel/DataContextFactory.java
+++ b/full/src/main/java/org/apache/metamodel/DataContextFactory.java
@@ -558,6 +558,7 @@ public class DataContextFactory {
      *            should be autodetected.
      * @return a DataContext object that matches the request
      */
+    @SuppressWarnings("resource")
     public static UpdateableDataContext createMongoDbDataContext(String hostname, Integer port, String databaseName,
             String username, char[] password, SimpleTableDef[] tableDefs) {
         try {

http://git-wip-us.apache.org/repos/asf/metamodel/blob/f015665d/hadoop/src/test/java/org/apache/metamodel/util/HdfsResourceIntegrationTest.java
----------------------------------------------------------------------
diff --git a/hadoop/src/test/java/org/apache/metamodel/util/HdfsResourceIntegrationTest.java b/hadoop/src/test/java/org/apache/metamodel/util/HdfsResourceIntegrationTest.java
index e6119b8..ca2aa2f 100644
--- a/hadoop/src/test/java/org/apache/metamodel/util/HdfsResourceIntegrationTest.java
+++ b/hadoop/src/test/java/org/apache/metamodel/util/HdfsResourceIntegrationTest.java
@@ -98,8 +98,8 @@ public class HdfsResourceIntegrationTest {
         int i = contents.length;
         Collections.reverse(Arrays.asList(contents));
         for (final String contentPart : contents) {
-            final HdfsResource partResource = new HdfsResource(_hostname, _port,
-                    _filePath + "/part-" + String.format("%02d", i--));
+            final HdfsResource partResource = new HdfsResource(_hostname, _port, _filePath + "/part-" + String.format(
+                    "%02d", i--));
             partResource.write(new Action<OutputStream>() {
                 @Override
                 public void run(OutputStream out) throws Exception {
@@ -113,21 +113,15 @@ public class HdfsResourceIntegrationTest {
         try {
             logger.info(stopwatch.elapsed(TimeUnit.MILLISECONDS) + " - start");
 
-            final String str1 = res1.read(new Func<InputStream, String>() {
-                @Override
-                public String eval(InputStream in) {
-                    return FileHelper.readInputStreamAsString(in, "UTF8");
-                }
+            final String str1 = res1.read(in -> {
+                return FileHelper.readInputStreamAsString(in, "UTF8");
             });
 
             Assert.assertEquals(contentString, str1);
             logger.info(stopwatch.elapsed(TimeUnit.MILLISECONDS) + " - read1");
 
-            final String str2 = res1.read(new Func<InputStream, String>() {
-                @Override
-                public String eval(InputStream in) {
-                    return FileHelper.readInputStreamAsString(in, "UTF8");
-                }
+            final String str2 = res1.read(in -> {
+                return FileHelper.readInputStreamAsString(in, "UTF8");
             });
             Assert.assertEquals(str1, str2);
             logger.info(stopwatch.elapsed(TimeUnit.MILLISECONDS) + " - read2");
@@ -173,20 +167,14 @@ public class HdfsResourceIntegrationTest {
 
         Assert.assertTrue(res1.isExists());
 
-        final String str1 = res1.read(new Func<InputStream, String>() {
-            @Override
-            public String eval(InputStream in) {
-                return FileHelper.readInputStreamAsString(in, "UTF8");
-            }
+        final String str1 = res1.read(in -> {
+            return FileHelper.readInputStreamAsString(in, "UTF8");
         });
         Assert.assertEquals(contentString, str1);
         logger.info(stopwatch.elapsed(TimeUnit.MILLISECONDS) + " - read1");
 
-        final String str2 = res1.read(new Func<InputStream, String>() {
-            @Override
-            public String eval(InputStream in) {
-                return FileHelper.readInputStreamAsString(in, "UTF8");
-            }
+        final String str2 = res1.read(in -> {
+            return FileHelper.readInputStreamAsString(in, "UTF8");
         });
         Assert.assertEquals(str1, str2);
         logger.info(stopwatch.elapsed(TimeUnit.MILLISECONDS) + " - read2");
@@ -243,7 +231,7 @@ public class HdfsResourceIntegrationTest {
 
                     }
                 });
-                
+
                 thread.setUncaughtExceptionHandler(exceptionHandler);
                 thread.start();
                 threads[i] = thread;
@@ -252,12 +240,12 @@ public class HdfsResourceIntegrationTest {
             for (int i = 0; i < threads.length; i++) {
                 threads[i].join();
             }
-            
+
             Throwable error = throwableRef.get();
             if (error != null) {
                 throw error;
             }
-            
+
         } finally {
             if (resourceToRead != null) {
                 final FileSystem fileSystem = resourceToRead.getHadoopFileSystem();

http://git-wip-us.apache.org/repos/asf/metamodel/blob/f015665d/jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcDataContext.java
----------------------------------------------------------------------
diff --git a/jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcDataContext.java b/jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcDataContext.java
index ef0b549..59b695d 100644
--- a/jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcDataContext.java
+++ b/jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcDataContext.java
@@ -343,6 +343,7 @@ public class JdbcDataContext extends AbstractDataContext implements UpdateableDa
         return dataSet;
     }
 
+    @SuppressWarnings("resource")
     private DataSet execute(Connection connection, Query query, Statement statement, JdbcCompiledQuery compiledQuery,
             JdbcCompiledQueryLease lease, Object[] values) throws SQLException, MetaModelException {
         Integer maxRows = query.getMaxRows();

http://git-wip-us.apache.org/repos/asf/metamodel/blob/f015665d/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/OracleQueryRewriter.java
----------------------------------------------------------------------
diff --git a/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/OracleQueryRewriter.java b/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/OracleQueryRewriter.java
index 647035e..f3108fb 100644
--- a/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/OracleQueryRewriter.java
+++ b/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/OracleQueryRewriter.java
@@ -18,8 +18,6 @@
  */
 package org.apache.metamodel.jdbc.dialects;
 
-import static org.apache.metamodel.jdbc.JdbcDataContext.DATABASE_PRODUCT_ORACLE;
-
 import org.apache.metamodel.jdbc.JdbcDataContext;
 import org.apache.metamodel.query.FilterItem;
 import org.apache.metamodel.schema.ColumnType;

http://git-wip-us.apache.org/repos/asf/metamodel/blob/f015665d/jdbc/src/test/java/org/apache/metamodel/dialects/SQLServerQueryRewriterTest.java
----------------------------------------------------------------------
diff --git a/jdbc/src/test/java/org/apache/metamodel/dialects/SQLServerQueryRewriterTest.java b/jdbc/src/test/java/org/apache/metamodel/dialects/SQLServerQueryRewriterTest.java
index 86f9828..d01e603 100644
--- a/jdbc/src/test/java/org/apache/metamodel/dialects/SQLServerQueryRewriterTest.java
+++ b/jdbc/src/test/java/org/apache/metamodel/dialects/SQLServerQueryRewriterTest.java
@@ -20,11 +20,6 @@ package org.apache.metamodel.dialects;
 
 import static org.apache.metamodel.jdbc.JdbcDataContext.DATABASE_PRODUCT_SQLSERVER;
 
-import java.sql.Connection;
-import java.sql.DatabaseMetaData;
-
-import junit.framework.TestCase;
-
 import org.apache.metamodel.jdbc.JdbcDataContext;
 import org.apache.metamodel.jdbc.dialects.SQLServerQueryRewriter;
 import org.apache.metamodel.query.FilterItem;
@@ -39,6 +34,8 @@ import org.apache.metamodel.schema.MutableTable;
 import org.apache.metamodel.util.TimeComparator;
 import org.easymock.EasyMock;
 
+import junit.framework.TestCase;
+
 public class SQLServerQueryRewriterTest extends TestCase {
 
     private MutableTable table;

http://git-wip-us.apache.org/repos/asf/metamodel/blob/f015665d/jdbc/src/test/java/org/apache/metamodel/jdbc/dialects/OracleQueryRewriterTest.java
----------------------------------------------------------------------
diff --git a/jdbc/src/test/java/org/apache/metamodel/jdbc/dialects/OracleQueryRewriterTest.java b/jdbc/src/test/java/org/apache/metamodel/jdbc/dialects/OracleQueryRewriterTest.java
index a36a4ba..a1a141a 100644
--- a/jdbc/src/test/java/org/apache/metamodel/jdbc/dialects/OracleQueryRewriterTest.java
+++ b/jdbc/src/test/java/org/apache/metamodel/jdbc/dialects/OracleQueryRewriterTest.java
@@ -21,8 +21,6 @@ package org.apache.metamodel.jdbc.dialects;
 import static org.apache.metamodel.jdbc.JdbcDataContext.DATABASE_PRODUCT_ORACLE;
 import static org.junit.Assert.assertEquals;
 
-import java.sql.Connection;
-import java.sql.DatabaseMetaData;
 import java.sql.SQLException;
 
 import org.apache.metamodel.jdbc.JdbcDataContext;

http://git-wip-us.apache.org/repos/asf/metamodel/blob/f015665d/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 65fa153..0380eeb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -171,8 +171,8 @@ under the License.
 				<groupId>org.apache.maven.plugins</groupId>
 				<artifactId>maven-compiler-plugin</artifactId>
 				<configuration>
-					<source>1.7</source>
-					<target>1.7</target>
+					<source>1.8</source>
+					<target>1.8</target>
 					<encoding>utf-8</encoding>
 				</configuration>
 			</plugin>

http://git-wip-us.apache.org/repos/asf/metamodel/blob/f015665d/salesforce/src/main/java/org/apache/metamodel/salesforce/SalesforceDataContext.java
----------------------------------------------------------------------
diff --git a/salesforce/src/main/java/org/apache/metamodel/salesforce/SalesforceDataContext.java b/salesforce/src/main/java/org/apache/metamodel/salesforce/SalesforceDataContext.java
index e1f95aa..4032150 100644
--- a/salesforce/src/main/java/org/apache/metamodel/salesforce/SalesforceDataContext.java
+++ b/salesforce/src/main/java/org/apache/metamodel/salesforce/SalesforceDataContext.java
@@ -345,6 +345,7 @@ public class SalesforceDataContext extends QueryPostprocessDataContext implement
         }
     }
 
+    @SuppressWarnings("deprecation")
     private static void validateSoqlSupportedSelectItem(SelectItem selectItem) throws UnsupportedOperationException {
         if (selectItem.getFunction() != null) {
             throw new UnsupportedOperationException("Function select items not supported: " + selectItem);

http://git-wip-us.apache.org/repos/asf/metamodel/blob/f015665d/salesforce/src/main/java/org/apache/metamodel/salesforce/SalesforceSchema.java
----------------------------------------------------------------------
diff --git a/salesforce/src/main/java/org/apache/metamodel/salesforce/SalesforceSchema.java b/salesforce/src/main/java/org/apache/metamodel/salesforce/SalesforceSchema.java
index 90e5a66..d5f70c9 100644
--- a/salesforce/src/main/java/org/apache/metamodel/salesforce/SalesforceSchema.java
+++ b/salesforce/src/main/java/org/apache/metamodel/salesforce/SalesforceSchema.java
@@ -20,11 +20,11 @@ package org.apache.metamodel.salesforce;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.function.Supplier;
 
 import org.apache.metamodel.schema.AbstractSchema;
 import org.apache.metamodel.schema.Table;
 import org.apache.metamodel.util.LazyRef;
-import org.apache.metamodel.util.Ref;
 
 import com.sforce.soap.partner.DescribeGlobalResult;
 import com.sforce.soap.partner.DescribeGlobalSObjectResult;
@@ -40,7 +40,7 @@ final class SalesforceSchema extends AbstractSchema {
     private static final long serialVersionUID = 1L;
 
     private final String _name;
-    private final transient Ref<List<Table>> _tableRef;
+    private final transient Supplier<List<Table>> _tableRef;
     private final transient PartnerConnection _connection;
 
     public SalesforceSchema(String name, PartnerConnection connection) {

http://git-wip-us.apache.org/repos/asf/metamodel/blob/f015665d/salesforce/src/main/java/org/apache/metamodel/salesforce/SalesforceTable.java
----------------------------------------------------------------------
diff --git a/salesforce/src/main/java/org/apache/metamodel/salesforce/SalesforceTable.java b/salesforce/src/main/java/org/apache/metamodel/salesforce/SalesforceTable.java
index 0c1c113..5db2b47 100644
--- a/salesforce/src/main/java/org/apache/metamodel/salesforce/SalesforceTable.java
+++ b/salesforce/src/main/java/org/apache/metamodel/salesforce/SalesforceTable.java
@@ -20,6 +20,7 @@ package org.apache.metamodel.salesforce;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.function.Supplier;
 
 import org.apache.metamodel.schema.AbstractTable;
 import org.apache.metamodel.schema.Column;
@@ -29,7 +30,6 @@ import org.apache.metamodel.schema.Relationship;
 import org.apache.metamodel.schema.Schema;
 import org.apache.metamodel.schema.TableType;
 import org.apache.metamodel.util.LazyRef;
-import org.apache.metamodel.util.Ref;
 
 import com.sforce.soap.partner.DescribeSObjectResult;
 import com.sforce.soap.partner.Field;
@@ -45,7 +45,7 @@ final class SalesforceTable extends AbstractTable {
 
     private static final long serialVersionUID = 1L;
 
-    private final transient Ref<List<Column>> _columnRef;
+    private final transient Supplier<List<Column>> _columnRef;
     private final transient PartnerConnection _connection;
     private final String _name;
     private final String _remarks;

http://git-wip-us.apache.org/repos/asf/metamodel/blob/f015665d/salesforce/src/main/java/org/apache/metamodel/salesforce/SalesforceUpdateCallback.java
----------------------------------------------------------------------
diff --git a/salesforce/src/main/java/org/apache/metamodel/salesforce/SalesforceUpdateCallback.java b/salesforce/src/main/java/org/apache/metamodel/salesforce/SalesforceUpdateCallback.java
index 757cb95..bf70380 100644
--- a/salesforce/src/main/java/org/apache/metamodel/salesforce/SalesforceUpdateCallback.java
+++ b/salesforce/src/main/java/org/apache/metamodel/salesforce/SalesforceUpdateCallback.java
@@ -215,6 +215,7 @@ final class SalesforceUpdateCallback extends AbstractUpdateCallback implements C
      * @param idList
      * @param whereItem
      */
+    @SuppressWarnings("deprecation")
     protected void buildIdList(List<String> idList, FilterItem whereItem) {
         if (whereItem.isCompoundFilter()) {
             final LogicalOperator logicalOperator = whereItem.getLogicalOperator();