Deprecated Ref, Func and Predicate in favor of java.util.function
authorKasper Sørensen <i.am.kasper.sorensen@gmail.com>
Sat, 29 Apr 2017 23:05:07 +0000 (16:05 -0700)
committerKasper Sørensen <i.am.kasper.sorensen@gmail.com>
Sat, 29 Apr 2017 23:27:52 +0000 (16:27 -0700)
"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.

51 files changed:
core/src/main/java/org/apache/metamodel/CompositeDataContext.java
core/src/main/java/org/apache/metamodel/CompositeQueryDelegate.java
core/src/main/java/org/apache/metamodel/MetaModelHelper.java
core/src/main/java/org/apache/metamodel/UpdateScript.java
core/src/main/java/org/apache/metamodel/convert/StringToDateConverter.java
core/src/main/java/org/apache/metamodel/intercept/InterceptableDataContext.java
core/src/main/java/org/apache/metamodel/query/AbstractQueryClause.java
core/src/main/java/org/apache/metamodel/query/QueryClause.java
core/src/main/java/org/apache/metamodel/schema/AbstractSchema.java
core/src/main/java/org/apache/metamodel/schema/AbstractTable.java
core/src/main/java/org/apache/metamodel/util/AbstractResource.java
core/src/main/java/org/apache/metamodel/util/Action.java
core/src/main/java/org/apache/metamodel/util/CollectionUtils.java
core/src/main/java/org/apache/metamodel/util/ConstantFunc.java
core/src/main/java/org/apache/metamodel/util/ExclusionPredicate.java
core/src/main/java/org/apache/metamodel/util/FalsePredicate.java
core/src/main/java/org/apache/metamodel/util/FileHelper.java
core/src/main/java/org/apache/metamodel/util/Func.java
core/src/main/java/org/apache/metamodel/util/HasNameMapper.java
core/src/main/java/org/apache/metamodel/util/ImmutableRef.java
core/src/main/java/org/apache/metamodel/util/InclusionPredicate.java
core/src/main/java/org/apache/metamodel/util/LazyRef.java
core/src/main/java/org/apache/metamodel/util/MutableRef.java
core/src/main/java/org/apache/metamodel/util/Predicate.java
core/src/main/java/org/apache/metamodel/util/Ref.java
core/src/main/java/org/apache/metamodel/util/Resource.java
core/src/main/java/org/apache/metamodel/util/SerializableRef.java
core/src/main/java/org/apache/metamodel/util/TruePredicate.java
core/src/main/java/org/apache/metamodel/util/UncheckedFunc.java
core/src/test/java/org/apache/metamodel/util/ClasspathResourceTest.java
core/src/test/java/org/apache/metamodel/util/CollectionUtilsTest.java
core/src/test/java/org/apache/metamodel/util/ExclusionPredicateTest.java
core/src/test/java/org/apache/metamodel/util/FileResourceTest.java
core/src/test/java/org/apache/metamodel/util/InclusionPredicateTest.java
core/src/test/java/org/apache/metamodel/util/SimpleRefTest.java
csv/src/main/java/org/apache/metamodel/csv/CsvDataContext.java
full/src/main/java/org/apache/metamodel/DataContextFactory.java
hadoop/src/test/java/org/apache/metamodel/util/HdfsResourceIntegrationTest.java
jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcDataContext.java
jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/OracleQueryRewriter.java
jdbc/src/test/java/org/apache/metamodel/dialects/SQLServerQueryRewriterTest.java
jdbc/src/test/java/org/apache/metamodel/jdbc/dialects/OracleQueryRewriterTest.java
pom.xml
salesforce/src/main/java/org/apache/metamodel/salesforce/SalesforceDataContext.java
salesforce/src/main/java/org/apache/metamodel/salesforce/SalesforceSchema.java
salesforce/src/main/java/org/apache/metamodel/salesforce/SalesforceTable.java
salesforce/src/main/java/org/apache/metamodel/salesforce/SalesforceUpdateCallback.java
sugarcrm/src/main/java/org/apache/metamodel/sugarcrm/SugarCrmSchema.java
sugarcrm/src/main/java/org/apache/metamodel/sugarcrm/SugarCrmTable.java
xml/src/main/java/org/apache/metamodel/xml/XmlDomDataContext.java
xml/src/main/java/org/apache/metamodel/xml/XmlSaxDataContext.java

index c7b6ee3..f70a0cd 100644 (file)
@@ -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);
         }
     }
index 9a3517a..d3e1a04 100644 (file)
  */
 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);
                }
index 7ffa870..435e9a7 100644 (file)
@@ -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]);
     }
 
index 44be200..bc344ff 100644 (file)
@@ -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);
 }
index ed7704e..b27e3b2 100644 (file)
@@ -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);
+    }
 
 }
index a356b9a..394d8c4 100644 (file)
@@ -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;
     }
index 572d69f..6f2e198 100644 (file)
@@ -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);
index 19a9472..b87d141 100644 (file)
@@ -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);
 }
index a69382d..e44737a 100644 (file)
@@ -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();
index 7af3656..4f5ad7f 100644 (file)
@@ -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]);
     }
 
index 7f96973..fcc2628 100644 (file)
@@ -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);
index b602302..2dcb767 100644 (file)
  */
 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;
 }
index 2cd4e6a..5246a3a 100644 (file)
@@ -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;
index 9a48516..639b421 100644 (file)
  */
 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;
     }
 
index aec67c6..c3a8bfe 100644 (file)
@@ -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;
         }
index f1f4a8e..1b58069 100644 (file)
@@ -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;
     }
 
index 7465fd0..c955ec6 100644 (file)
@@ -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);
 
index 44014e0..687189a 100644 (file)
@@ -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.
index 3b41102..e0d253b 100644 (file)
 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();
        }
 
index adfde04..beb0f76 100644 (file)
  */
 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);
+    }
 
 }
index d8aab91..4baa108 100644 (file)
@@ -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;
         }
index 6db947d..24e3072 100644 (file)
@@ -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);
 
index c5010a1..b6f2f88 100644 (file)
  */
 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;
 
index ef585e7..73e6a22 100644 (file)
@@ -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);
+    }
 }
index baa8e34..927c606 100644 (file)
  */
 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();
 }
index becb79f..fe5386f 100644 (file)
@@ -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;
 }
index d3b56de..81a86f6 100644 (file)
@@ -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;
 
index f0d4745..e5acad4 100644 (file)
@@ -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;
     }
     
index ed5d89c..1e2b7dc 100644 (file)
  */
 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;
 }
index 72e49b8..885bf92 100644 (file)
@@ -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);
     }
index 5b1f013..c5a5a6f 100644 (file)
@@ -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());
index 405f9b3..ed11cc8 100644 (file)
@@ -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"));
     }
 }
index d0b8405..e305a6c 100644 (file)
  */
 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);
     }
index c3866e3..a3b4857 100644 (file)
@@ -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"));
     }
 }
index 8b4ec47..d128d63 100644 (file)
  */
 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());
 
index ee456f0..e369bfc 100644 (file)
@@ -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;
     }
 
index af12604..427101e 100644 (file)
@@ -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 {
index e6119b8..ca2aa2f 100644 (file)
@@ -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();
index ef0b549..59b695d 100644 (file)
@@ -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();
index 647035e..f3108fb 100644 (file)
@@ -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;
index 86f9828..d01e603 100644 (file)
@@ -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;
index a36a4ba..a1a141a 100644 (file)
@@ -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;
diff --git a/pom.xml b/pom.xml
index 65fa153..0380eeb 100644 (file)
--- 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>
index e1f95aa..4032150 100644 (file)
@@ -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);
index 90e5a66..d5f70c9 100644 (file)
@@ -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) {
index 0c1c113..5db2b47 100644 (file)
@@ -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;
index 757cb95..bf70380 100644 (file)
@@ -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();
index 35f98ab..49e24e7 100644 (file)
@@ -20,10 +20,10 @@ package org.apache.metamodel.sugarcrm;
 
 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.Ref;
 
 import com.sugarcrm.ws.soap.SugarsoapPortType;
 
@@ -34,7 +34,7 @@ final class SugarCrmSchema extends AbstractSchema {
     private final List<Table> _tables;
     private final String _name;
 
-    public SugarCrmSchema(String name, SugarsoapPortType service, Ref<String> sessionId) {
+    public SugarCrmSchema(String name, SugarsoapPortType service, Supplier<String> sessionId) {
         _name = name;
         _tables = new ArrayList<Table>();
         _tables.add(new SugarCrmTable("Accounts", this, service, sessionId));
index 1cb965e..1926d83 100644 (file)
@@ -22,6 +22,7 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.function.Supplier;
 
 import org.apache.metamodel.schema.AbstractTable;
 import org.apache.metamodel.schema.Column;
@@ -31,7 +32,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 org.w3c.dom.Node;
 
 import com.sugarcrm.ws.soap.FieldList;
@@ -79,9 +79,9 @@ final class SugarCrmTable extends AbstractTable {
 
     private final String _name;
     private final Schema _schema;
-    private final Ref<List<Column>> _columnsRef;
+    private final Supplier<List<Column>> _columnsRef;
 
-    public SugarCrmTable(String name, Schema schema, final SugarsoapPortType service, final Ref<String> sessionId) {
+    public SugarCrmTable(String name, Schema schema, final SugarsoapPortType service, final Supplier<String> sessionId) {
         _name = name;
         _schema = schema;
         _columnsRef = new LazyRef<List<Column>>() {
index c71d8ca..b9936af 100644 (file)
@@ -27,6 +27,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
+import java.util.function.Supplier;
 
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
@@ -57,7 +58,6 @@ import org.apache.metamodel.schema.TableType;
 import org.apache.metamodel.util.FileResource;
 import org.apache.metamodel.util.ImmutableRef;
 import org.apache.metamodel.util.NumberComparator;
-import org.apache.metamodel.util.Ref;
 import org.apache.metamodel.util.Resource;
 import org.apache.metamodel.util.UrlResource;
 import org.slf4j.Logger;
@@ -97,7 +97,7 @@ public class XmlDomDataContext extends QueryPostprocessDataContext {
 
     private static final String TEXT_CONTENT_TEMP_SUFFIX = "_metamodel_text_content";
 
-    private final Ref<InputSource> _inputSourceRef;
+    private final Supplier<InputSource> _inputSourceRef;
     private final Map<String, List<Object[]>> _tableData = new HashMap<String, List<Object[]>>();;
     private final String _schemaName;
 
@@ -152,13 +152,10 @@ public class XmlDomDataContext extends QueryPostprocessDataContext {
         this(new UrlResource(url), autoFlattenTables);
     }
 
-    private static Ref<InputSource> createInputSourceRef(final Resource resource) {
-        return new Ref<InputSource>() {
-            @Override
-            public InputSource get() {
+    private static Supplier<InputSource> createInputSourceRef(final Resource resource) {
+        return () -> {
                 final InputStream in = resource.read();
                 return new InputSource(in);
-            }
         };
     }
 
@@ -294,7 +291,8 @@ public class XmlDomDataContext extends QueryPostprocessDataContext {
                     // Rename all text content columns to reasonable
                     // names (preferably element node name)
                     String currentName = textContentColumn.getName();
-                    String preferredName = currentName.substring(0, currentName.length() - TEXT_CONTENT_TEMP_SUFFIX.length());
+                    String preferredName = currentName.substring(0, currentName.length() - TEXT_CONTENT_TEMP_SUFFIX
+                            .length());
                     column = (MutableColumn) table.getColumnByName(preferredName);
                     if (column == null) {
                         textContentColumn.setName(preferredName);
@@ -327,12 +325,13 @@ public class XmlDomDataContext extends QueryPostprocessDataContext {
 
                 if (parentKeyColumn != null) {
                     Table parentTable = parentKeyColumn.getTable();
-                    foreignKeyColumn = new MutableColumn(parentTable.getName() + "_id", parentKeyColumn.getType(), table,
-                            table.getColumnCount(), false);
+                    foreignKeyColumn = new MutableColumn(parentTable.getName() + "_id", parentKeyColumn.getType(),
+                            table, table.getColumnCount(), false);
                     foreignKeyColumn.setNativeType(NATIVE_TYPE_FOREIGN_KEY);
                     table.addColumn(foreignKeyColumn);
 
-                    MutableRelationship.createRelationship(new Column[] { parentKeyColumn }, new Column[] { foreignKeyColumn });
+                    MutableRelationship.createRelationship(new Column[] { parentKeyColumn }, new Column[] {
+                            foreignKeyColumn });
 
                 } else {
                     foreignKeyColumn = null;
@@ -412,8 +411,8 @@ public class XmlDomDataContext extends QueryPostprocessDataContext {
         }
         if (column == null && preferredColumnName != null) {
             logger.info("Creating text content column for table: " + table.getName());
-            column = new MutableColumn(preferredColumnName + TEXT_CONTENT_TEMP_SUFFIX, ColumnType.STRING, table,
-                    table.getColumnCount(), true);
+            column = new MutableColumn(preferredColumnName + TEXT_CONTENT_TEMP_SUFFIX, ColumnType.STRING, table, table
+                    .getColumnCount(), true);
             column.setNativeType(NATIVE_TYPE_TEXT);
             table.addColumn(column);
         }
@@ -432,8 +431,8 @@ public class XmlDomDataContext extends QueryPostprocessDataContext {
         if (column == null) {
             String tableName = table.getName();
             logger.info("Creating id column for table: " + tableName);
-            column = new MutableColumn(tableName + "_metamodel_surrogate_id", ColumnType.INTEGER, table, table.getColumnCount(),
-                    false);
+            column = new MutableColumn(tableName + "_metamodel_surrogate_id", ColumnType.INTEGER, table, table
+                    .getColumnCount(), false);
             column.setNativeType(NATIVE_TYPE_PRIMARY_KEY);
             column.setIndexed(true);
             table.addColumn(column);
@@ -543,8 +542,8 @@ public class XmlDomDataContext extends QueryPostprocessDataContext {
         List<Object[]> tableRows = executeQuery(q).toObjectArrays();
 
         for (Column foreignColumn : foreignColumns) {
-            MutableColumn newPrimaryColumn = new MutableColumn(foreignColumn.getName(), foreignColumn.getType(), primaryTable,
-                    primaryTable.getColumnCount(), foreignColumn.isNullable());
+            MutableColumn newPrimaryColumn = new MutableColumn(foreignColumn.getName(), foreignColumn.getType(),
+                    primaryTable, primaryTable.getColumnCount(), foreignColumn.isNullable());
             newPrimaryColumn.setIndexed(foreignColumn.isIndexed());
             newPrimaryColumn.setNativeType(foreignColumn.getNativeType());
             primaryTable.addColumn(newPrimaryColumn);
@@ -558,7 +557,8 @@ public class XmlDomDataContext extends QueryPostprocessDataContext {
         ((MutableRelationship) relationship).remove();
 
         if (logger.isInfoEnabled()) {
-            logger.info("Tables '" + primaryTableName + "' and '" + foreignTableName + "' flattened to: " + primaryTableName);
+            logger.info("Tables '" + primaryTableName + "' and '" + foreignTableName + "' flattened to: "
+                    + primaryTableName);
             if (logger.isDebugEnabled()) {
                 logger.debug(primaryTableName + " columns: " + Arrays.toString(primaryTable.getColumns()));
             }
@@ -608,7 +608,8 @@ public class XmlDomDataContext extends QueryPostprocessDataContext {
                         Column[] foreignColumns = foreignKeyRelationship.getForeignColumns();
 
                         SelectItem countAllItem = SelectItem.getCountAllItem();
-                        Query q = new Query().select(foreignColumns).select(countAllItem).from(table).groupBy(foreignColumns);
+                        Query q = new Query().select(foreignColumns).select(countAllItem).from(table).groupBy(
+                                foreignColumns);
                         DataSet data = executeQuery(q);
                         Comparable<Object> comparable = NumberComparator.getComparable(1);
                         while (data.next()) {
index fa7aa8b..f1c2d6c 100644 (file)
@@ -23,6 +23,7 @@ import java.io.InputStream;
 import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.Map;
+import java.util.function.Supplier;
 
 import javax.xml.parsers.SAXParser;
 import javax.xml.parsers.SAXParserFactory;
@@ -43,7 +44,6 @@ import org.apache.metamodel.schema.Schema;
 import org.apache.metamodel.schema.Table;
 import org.apache.metamodel.util.Action;
 import org.apache.metamodel.util.FileResource;
-import org.apache.metamodel.util.Ref;
 import org.apache.metamodel.util.Resource;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -67,7 +67,7 @@ public class XmlSaxDataContext extends QueryPostprocessDataContext {
 
     public static final String COLUMN_NAME_ROW_ID = "row_id";
 
-    private final Ref<InputSource> _inputSourceRef;
+    private final Supplier<InputSource> _inputSourceRef;
     private final Map<XmlSaxTableDef, Map<String, String>> _valueXpaths;
     private String _schemaName;
     private XmlSaxTableDef[] _tableDefs;
@@ -84,7 +84,7 @@ public class XmlSaxDataContext extends QueryPostprocessDataContext {
      * 
      * @see XmlSaxTableDef
      */
-    public XmlSaxDataContext(Ref<InputSource> inputSourceRef, XmlSaxTableDef... tableDefs) {
+    public XmlSaxDataContext(Supplier<InputSource> inputSourceRef, XmlSaxTableDef... tableDefs) {
         _inputSourceRef = inputSourceRef;
         _tableDefs = tableDefs;
         _valueXpaths = new HashMap<XmlSaxTableDef, Map<String, String>>();
@@ -108,13 +108,10 @@ public class XmlSaxDataContext extends QueryPostprocessDataContext {
         this(createInputSourceRef(new FileResource(file)), tableDefs);
     }
 
-    private static Ref<InputSource> createInputSourceRef(final Resource resource) {
-        return new Ref<InputSource>() {
-            @Override
-            public InputSource get() {
-                final InputStream in = resource.read();
-                return new InputSource(in);
-            }
+    private static Supplier<InputSource> createInputSourceRef(final Resource resource) {
+        return () -> {
+            final InputStream in = resource.read();
+            return new InputSource(in);
         };
     }
 
@@ -124,8 +121,8 @@ public class XmlSaxDataContext extends QueryPostprocessDataContext {
 
         for (XmlSaxTableDef tableDef : _tableDefs) {
             final String rowXpath = tableDef.getRowXpath();
-            final MutableTable table = new MutableTable(getTableName(tableDef)).setSchema(schema).setRemarks(
-                    "XPath: " + rowXpath);
+            final MutableTable table = new MutableTable(getTableName(tableDef)).setSchema(schema).setRemarks("XPath: "
+                    + rowXpath);
 
             final MutableColumn rowIndexColumn = new MutableColumn(COLUMN_NAME_ROW_ID, ColumnType.INTEGER)
                     .setColumnNumber(0).setNullable(false).setTable(table).setRemarks("Row/tag index (0-based)");
@@ -225,8 +222,8 @@ public class XmlSaxDataContext extends QueryPostprocessDataContext {
                 SAXParserFactory saxFactory = SAXParserFactory.newInstance();
                 SAXParser saxParser = saxFactory.newSAXParser();
                 XMLReader xmlReader = saxParser.getXMLReader();
-                xmlReader
-                        .setContentHandler(new XmlSaxContentHandler(tableDef.getRowXpath(), rowPublisher, valueXpaths));
+                xmlReader.setContentHandler(new XmlSaxContentHandler(tableDef.getRowXpath(), rowPublisher,
+                        valueXpaths));
                 try {
                     xmlReader.parse(_inputSourceRef.get());
                 } catch (XmlStopParsingException e) {