Repository: metamodel
Updated Branches:
  refs/heads/5.x c5cc9febd -> c51994c1f


First attempts at making the API change for METAMODEL-6

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

Branch: refs/heads/5.x
Commit: a15ca724b5c4556ebb65700b4d50db878b6b159c
Parents: 2d291f4
Author: Kasper Sørensen <i.am.kasper.soren...@gmail.com>
Authored: Wed Dec 9 13:14:07 2015 +0100
Committer: Kasper Sørensen <i.am.kasper.soren...@gmail.com>
Committed: Wed Dec 9 16:06:59 2015 +0100

----------------------------------------------------------------------
 .../metamodel/AbstractUpdateCallback.java       | 10 ++-
 .../apache/metamodel/DefaultUpdateSummary.java  | 72 ++++++++++++++++++++
 .../org/apache/metamodel/UpdateSummary.java     | 48 +++++++++++++
 .../apache/metamodel/UpdateableDataContext.java | 25 +++----
 .../intercept/InterceptableDataContext.java     | 10 +--
 .../metamodel/MockUpdateableDataContext.java    | 10 ++-
 .../metamodel/couchdb/CouchDbDataContext.java   |  6 +-
 .../apache/metamodel/csv/CsvDataContext.java    |  7 +-
 .../nativeclient/ElasticSearchDataContext.java  | 18 +++--
 .../rest/ElasticSearchRestDataContext.java      | 58 +++++++++-------
 .../metamodel/excel/ExcelDataContext.java       |  6 +-
 .../apache/metamodel/jdbc/JdbcDataContext.java  |  5 +-
 .../metamodel/mongodb/MongoDbDataContext.java   | 11 +--
 .../apache/metamodel/pojo/PojoDataContext.java  |  6 +-
 .../salesforce/SalesforceDataContext.java       |  5 +-
 15 files changed, 227 insertions(+), 70 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/metamodel/blob/a15ca724/core/src/main/java/org/apache/metamodel/AbstractUpdateCallback.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/org/apache/metamodel/AbstractUpdateCallback.java 
b/core/src/main/java/org/apache/metamodel/AbstractUpdateCallback.java
index 472fb6f..20842a6 100644
--- a/core/src/main/java/org/apache/metamodel/AbstractUpdateCallback.java
+++ b/core/src/main/java/org/apache/metamodel/AbstractUpdateCallback.java
@@ -43,21 +43,21 @@ public abstract class AbstractUpdateCallback implements 
UpdateCallback {
     @Override
     public TableCreationBuilder createTable(String schemaName, String 
tableName) throws IllegalArgumentException,
             IllegalStateException {
-        Schema schema = getSchema(schemaName);
+        final Schema schema = getSchema(schemaName);
         return createTable(schema, tableName);
     }
 
     @Override
     public TableDropBuilder dropTable(String schemaName, String tableName) 
throws IllegalArgumentException,
             IllegalStateException, UnsupportedOperationException {
-        Table table = getTable(schemaName, tableName);
+        final Table table = getTable(schemaName, tableName);
         return dropTable(table);
     }
 
     @Override
     public TableDropBuilder dropTable(Schema schema, String tableName) throws 
IllegalArgumentException,
             IllegalStateException, UnsupportedOperationException {
-        Table table = schema.getTableByName(tableName);
+        final Table table = schema.getTableByName(tableName);
         if (table == null) {
             throw new IllegalArgumentException("Nu such table '" + tableName + 
"' found in schema: " + schema
                     + ". Available tables are: " + 
Arrays.toString(schema.getTableNames()));
@@ -159,4 +159,8 @@ public abstract class AbstractUpdateCallback implements 
UpdateCallback {
             UnsupportedOperationException {
         return new DeleteAndInsertBuilder(this, table);
     }
+    
+    public UpdateSummary getUpdateSummary() {
+        return DefaultUpdateSummary.unknownUpdates();
+    }
 }

http://git-wip-us.apache.org/repos/asf/metamodel/blob/a15ca724/core/src/main/java/org/apache/metamodel/DefaultUpdateSummary.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/metamodel/DefaultUpdateSummary.java 
b/core/src/main/java/org/apache/metamodel/DefaultUpdateSummary.java
new file mode 100644
index 0000000..9b02f22
--- /dev/null
+++ b/core/src/main/java/org/apache/metamodel/DefaultUpdateSummary.java
@@ -0,0 +1,72 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.metamodel;
+
+/**
+ * Default implementation of {@link UpdateSummary}.
+ */
+public class DefaultUpdateSummary implements UpdateSummary {
+
+    private static final UpdateSummary UNKNOWN_UPDATES = new 
DefaultUpdateSummary(null, null, null, null);
+
+    /**
+     * Gets an {@link UpdateSummary} object to return when the extent of the
+     * updates are unknown.
+     * 
+     * @return a {@link UpdateSummary} object without any knowledge of updates
+     *         performed.
+     */
+    public static UpdateSummary unknownUpdates() {
+        return UNKNOWN_UPDATES;
+    }
+
+    private final Integer _insertedRows;
+    private final Integer _updatedRows;
+    private final Integer _deletedRows;
+    private final Iterable<Object> _generatedKeys;
+
+    public DefaultUpdateSummary(Integer insertedRows, Integer updatedRows, 
Integer deletedRows,
+            Iterable<Object> generatedKeys) {
+        _insertedRows = insertedRows;
+        _updatedRows = updatedRows;
+        _deletedRows = deletedRows;
+        _generatedKeys = generatedKeys;
+    }
+
+    @Override
+    public Integer getInsertedRows() {
+        return _insertedRows;
+    }
+
+    @Override
+    public Integer getUpdatedRows() {
+        return _updatedRows;
+    }
+
+    @Override
+    public Integer getDeletedRows() {
+        return _deletedRows;
+    }
+
+    @Override
+    public Iterable<Object> getGeneratedKeys() {
+        return _generatedKeys;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/metamodel/blob/a15ca724/core/src/main/java/org/apache/metamodel/UpdateSummary.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/metamodel/UpdateSummary.java 
b/core/src/main/java/org/apache/metamodel/UpdateSummary.java
new file mode 100644
index 0000000..57ca52f
--- /dev/null
+++ b/core/src/main/java/org/apache/metamodel/UpdateSummary.java
@@ -0,0 +1,48 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.metamodel;
+
+/**
+ * Represents a summary of changes made in a given
+ * {@link UpdateableDataContext#executeUpdate(UpdateScript)} call.
+ * 
+ * The amount of information available from an update varies a lot between
+ * different implementations of {@link UpdateableDataContext}. This interface
+ * represents the most common elements of interest, but not all elements may be
+ * available for a given update. For this reason any method call on this
+ * interface should be considered not guaranteed to return a value (so expect
+ * nulls to represent "not known/available").
+ */
+public interface UpdateSummary {
+
+    public Integer getInsertedRows();
+
+    public Integer getUpdatedRows();
+
+    public Integer getDeletedRows();
+
+    /**
+     * Gets a collection of keys that was generated as part of the update -
+     * typically because INSERTs where executed on an underlying database which
+     * generated record IDs for each insert.
+     * 
+     * @return a collection of generated keys, or null if not available.
+     */
+    public Iterable<Object> getGeneratedKeys();
+}

http://git-wip-us.apache.org/repos/asf/metamodel/blob/a15ca724/core/src/main/java/org/apache/metamodel/UpdateableDataContext.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/metamodel/UpdateableDataContext.java 
b/core/src/main/java/org/apache/metamodel/UpdateableDataContext.java
index 09bd234..6c369ea 100644
--- a/core/src/main/java/org/apache/metamodel/UpdateableDataContext.java
+++ b/core/src/main/java/org/apache/metamodel/UpdateableDataContext.java
@@ -23,17 +23,18 @@ package org.apache.metamodel;
  */
 public interface UpdateableDataContext extends DataContext {
 
-       /**
-        * Submits an {@link UpdateScript} for execution on the {@link 
DataContext}.
-        * 
-        * Since implementations of the {@link DataContext} vary quite a lot, 
there
-        * is no golden rule as to how an update script will be executed. But 
the
-        * implementors should strive towards handling an {@link UpdateScript} 
as a
-        * single transactional change to the data store.
-        * 
-        * @param update
-        *            the update script to execute
-        */
-       public void executeUpdate(UpdateScript update);
+    /**
+     * Submits an {@link UpdateScript} for execution on the {@link 
DataContext}.
+     * 
+     * Since implementations of the {@link DataContext} vary quite a lot, there
+     * is no golden rule as to how an update script will be executed. But the
+     * implementors should strive towards handling an {@link UpdateScript} as a
+     * single transactional change to the data store.
+     * 
+     * @param update
+     *            the update script to execute
+     * @return a summary of the updates performed
+     */
+    public UpdateSummary executeUpdate(UpdateScript update);
 
 }

http://git-wip-us.apache.org/repos/asf/metamodel/blob/a15ca724/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..5d482b1 100644
--- 
a/core/src/main/java/org/apache/metamodel/intercept/InterceptableDataContext.java
+++ 
b/core/src/main/java/org/apache/metamodel/intercept/InterceptableDataContext.java
@@ -21,6 +21,7 @@ package org.apache.metamodel.intercept;
 import org.apache.metamodel.DataContext;
 import org.apache.metamodel.MetaModelException;
 import org.apache.metamodel.UpdateScript;
+import org.apache.metamodel.UpdateSummary;
 import org.apache.metamodel.UpdateableDataContext;
 import org.apache.metamodel.create.TableCreationBuilder;
 import org.apache.metamodel.data.DataSet;
@@ -241,7 +242,7 @@ public class InterceptableDataContext implements 
UpdateableDataContext {
     }
 
     @Override
-    public void executeUpdate(UpdateScript update) {
+    public UpdateSummary executeUpdate(UpdateScript update) {
         if (!(_delegate instanceof UpdateableDataContext)) {
             throw new UnsupportedOperationException("Delegate is not an 
UpdateableDataContext");
         }
@@ -250,14 +251,13 @@ public class InterceptableDataContext implements 
UpdateableDataContext {
         if (_tableCreationInterceptors.isEmpty() && 
_tableDropInterceptors.isEmpty()
                 && _rowInsertionInterceptors.isEmpty() && 
_rowUpdationInterceptors.isEmpty()
                 && _rowDeletionInterceptors.isEmpty()) {
-            delegate.executeUpdate(update);
-            return;
+            return delegate.executeUpdate(update);
         }
 
-        UpdateScript interceptableUpdateScript = new 
InterceptableUpdateScript(this, update,
+        final UpdateScript interceptableUpdateScript = new 
InterceptableUpdateScript(this, update,
                 _tableCreationInterceptors, _tableDropInterceptors, 
_rowInsertionInterceptors,
                 _rowUpdationInterceptors, _rowDeletionInterceptors);
-        delegate.executeUpdate(interceptableUpdateScript);
+        return delegate.executeUpdate(interceptableUpdateScript);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/metamodel/blob/a15ca724/core/src/test/java/org/apache/metamodel/MockUpdateableDataContext.java
----------------------------------------------------------------------
diff --git 
a/core/src/test/java/org/apache/metamodel/MockUpdateableDataContext.java 
b/core/src/test/java/org/apache/metamodel/MockUpdateableDataContext.java
index b006a7c..8d6d48e 100644
--- a/core/src/test/java/org/apache/metamodel/MockUpdateableDataContext.java
+++ b/core/src/test/java/org/apache/metamodel/MockUpdateableDataContext.java
@@ -100,8 +100,8 @@ public class MockUpdateableDataContext extends 
QueryPostprocessDataContext imple
     }
 
     @Override
-    public void executeUpdate(UpdateScript update) {
-        update.run(new AbstractUpdateCallback(this) {
+    public UpdateSummary executeUpdate(UpdateScript update) {
+        final AbstractUpdateCallback callback = new 
AbstractUpdateCallback(this) {
 
             @Override
             public boolean isDeleteSupported() {
@@ -153,7 +153,11 @@ public class MockUpdateableDataContext extends 
QueryPostprocessDataContext imple
                     IllegalStateException {
                 throw new UnsupportedOperationException();
             }
-        });
+        };
+        
+        update.run(callback);
+        
+        return callback.getUpdateSummary();
     }
 
     private void delete(List<FilterItem> whereItems) {

http://git-wip-us.apache.org/repos/asf/metamodel/blob/a15ca724/couchdb/src/main/java/org/apache/metamodel/couchdb/CouchDbDataContext.java
----------------------------------------------------------------------
diff --git 
a/couchdb/src/main/java/org/apache/metamodel/couchdb/CouchDbDataContext.java 
b/couchdb/src/main/java/org/apache/metamodel/couchdb/CouchDbDataContext.java
index 33cab20..f98fa81 100644
--- a/couchdb/src/main/java/org/apache/metamodel/couchdb/CouchDbDataContext.java
+++ b/couchdb/src/main/java/org/apache/metamodel/couchdb/CouchDbDataContext.java
@@ -24,6 +24,7 @@ import org.apache.metamodel.MetaModelException;
 import org.apache.metamodel.MetaModelHelper;
 import org.apache.metamodel.QueryPostprocessDataContext;
 import org.apache.metamodel.UpdateScript;
+import org.apache.metamodel.UpdateSummary;
 import org.apache.metamodel.UpdateableDataContext;
 import org.apache.metamodel.data.DataSet;
 import org.apache.metamodel.data.DocumentSource;
@@ -167,13 +168,14 @@ public class CouchDbDataContext extends 
QueryPostprocessDataContext implements U
     }
 
     @Override
-    public void executeUpdate(UpdateScript script) {
-        CouchDbUpdateCallback callback = new CouchDbUpdateCallback(this);
+    public UpdateSummary executeUpdate(UpdateScript script) {
+        final CouchDbUpdateCallback callback = new CouchDbUpdateCallback(this);
         try {
             script.run(callback);
         } finally {
             callback.close();
         }
+        return callback.getUpdateSummary();
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/metamodel/blob/a15ca724/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 3787453..d7a8b47 100644
--- a/csv/src/main/java/org/apache/metamodel/csv/CsvDataContext.java
+++ b/csv/src/main/java/org/apache/metamodel/csv/CsvDataContext.java
@@ -33,6 +33,7 @@ import java.util.List;
 import org.apache.metamodel.MetaModelException;
 import org.apache.metamodel.QueryPostprocessDataContext;
 import org.apache.metamodel.UpdateScript;
+import org.apache.metamodel.UpdateSummary;
 import org.apache.metamodel.UpdateableDataContext;
 import org.apache.metamodel.data.DataSet;
 import org.apache.metamodel.data.EmptyDataSet;
@@ -423,9 +424,10 @@ public final class CsvDataContext extends 
QueryPostprocessDataContext implements
     }
 
     @Override
-    public void executeUpdate(UpdateScript update) {
+    public UpdateSummary executeUpdate(UpdateScript update) {
         checkWritable();
-        CsvUpdateCallback callback = new CsvUpdateCallback(this);
+        
+        final CsvUpdateCallback callback = new CsvUpdateCallback(this);
         synchronized (WRITE_LOCK) {
             try {
                 update.run(callback);
@@ -433,5 +435,6 @@ public final class CsvDataContext extends 
QueryPostprocessDataContext implements
                 callback.close();
             }
         }
+        return callback.getUpdateSummary();
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/metamodel/blob/a15ca724/elasticsearch/native/src/main/java/org/apache/metamodel/elasticsearch/nativeclient/ElasticSearchDataContext.java
----------------------------------------------------------------------
diff --git 
a/elasticsearch/native/src/main/java/org/apache/metamodel/elasticsearch/nativeclient/ElasticSearchDataContext.java
 
b/elasticsearch/native/src/main/java/org/apache/metamodel/elasticsearch/nativeclient/ElasticSearchDataContext.java
index 8232394..f3c5875 100644
--- 
a/elasticsearch/native/src/main/java/org/apache/metamodel/elasticsearch/nativeclient/ElasticSearchDataContext.java
+++ 
b/elasticsearch/native/src/main/java/org/apache/metamodel/elasticsearch/nativeclient/ElasticSearchDataContext.java
@@ -29,6 +29,7 @@ import org.apache.metamodel.DataContext;
 import org.apache.metamodel.MetaModelException;
 import org.apache.metamodel.QueryPostprocessDataContext;
 import org.apache.metamodel.UpdateScript;
+import org.apache.metamodel.UpdateSummary;
 import org.apache.metamodel.UpdateableDataContext;
 import org.apache.metamodel.data.DataSet;
 import org.apache.metamodel.data.DataSetHeader;
@@ -90,7 +91,8 @@ public class ElasticSearchDataContext extends 
QueryPostprocessDataContext implem
 
     private final Client elasticSearchClient;
     private final String indexName;
-    // Table definitions that are set from the beginning, not supposed to be 
changed.
+    // Table definitions that are set from the beginning, not supposed to be
+    // changed.
     private final List<SimpleTableDef> staticTableDefinitions;
 
     // Table definitions that are discovered, these can change
@@ -124,8 +126,8 @@ public class ElasticSearchDataContext extends 
QueryPostprocessDataContext implem
 
     /**
      * Constructs a {@link ElasticSearchDataContext} and automatically detects
-     * the schema structure/view on all indexes (see
-     * {@link this.detectSchema(Client, String)}).
+     * the schema structure/view on all indexes (see {@link
+     * this.detectSchema(Client, String)}).
      *
      * @param client
      *            the ElasticSearch client
@@ -149,8 +151,8 @@ public class ElasticSearchDataContext extends 
QueryPostprocessDataContext implem
         logger.info("Detecting schema for index '{}'", indexName);
 
         final ClusterState cs;
-        final ClusterStateRequestBuilder clusterStateRequestBuilder =
-                getElasticSearchClient().admin().cluster().prepareState();
+        final ClusterStateRequestBuilder clusterStateRequestBuilder = 
getElasticSearchClient().admin().cluster()
+                .prepareState();
 
         // different methods here to set the index name, so we have to use
         // reflection :-/
@@ -280,7 +282,8 @@ public class ElasticSearchDataContext extends 
QueryPostprocessDataContext implem
     @Override
     protected DataSet materializeMainSchemaTable(Table table, List<SelectItem> 
selectItems,
             List<FilterItem> whereItems, int firstRow, int maxRows) {
-        final QueryBuilder queryBuilder = 
ElasticSearchUtils.createQueryBuilderForSimpleWhere(whereItems, 
LogicalOperator.AND);
+        final QueryBuilder queryBuilder = 
ElasticSearchUtils.createQueryBuilderForSimpleWhere(whereItems,
+                LogicalOperator.AND);
         if (queryBuilder != null) {
             // where clause can be pushed down to an ElasticSearch query
             final SearchRequestBuilder searchRequest = 
createSearchRequest(table, firstRow, maxRows, queryBuilder);
@@ -358,10 +361,11 @@ public class ElasticSearchDataContext extends 
QueryPostprocessDataContext implem
     }
 
     @Override
-    public void executeUpdate(UpdateScript update) {
+    public UpdateSummary executeUpdate(UpdateScript update) {
         final ElasticSearchUpdateCallback callback = new 
ElasticSearchUpdateCallback(this);
         update.run(callback);
         callback.onExecuteUpdateFinished();
+        return callback.getUpdateSummary();
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/metamodel/blob/a15ca724/elasticsearch/rest/src/main/java/org/apache/metamodel/elasticsearch/rest/ElasticSearchRestDataContext.java
----------------------------------------------------------------------
diff --git 
a/elasticsearch/rest/src/main/java/org/apache/metamodel/elasticsearch/rest/ElasticSearchRestDataContext.java
 
b/elasticsearch/rest/src/main/java/org/apache/metamodel/elasticsearch/rest/ElasticSearchRestDataContext.java
index 2219b89..e762050 100644
--- 
a/elasticsearch/rest/src/main/java/org/apache/metamodel/elasticsearch/rest/ElasticSearchRestDataContext.java
+++ 
b/elasticsearch/rest/src/main/java/org/apache/metamodel/elasticsearch/rest/ElasticSearchRestDataContext.java
@@ -29,6 +29,7 @@ import org.apache.metamodel.DataContext;
 import org.apache.metamodel.MetaModelException;
 import org.apache.metamodel.QueryPostprocessDataContext;
 import org.apache.metamodel.UpdateScript;
+import org.apache.metamodel.UpdateSummary;
 import org.apache.metamodel.UpdateableDataContext;
 import org.apache.metamodel.data.DataSet;
 import org.apache.metamodel.data.DataSetHeader;
@@ -82,7 +83,8 @@ import io.searchbox.params.Parameters;
  * This implementation supports either automatic discovery of a schema or 
manual
  * specification of a schema, through the {@link SimpleTableDef} class.
  */
-public class ElasticSearchRestDataContext extends QueryPostprocessDataContext 
implements DataContext, UpdateableDataContext {
+public class ElasticSearchRestDataContext extends QueryPostprocessDataContext 
implements DataContext,
+        UpdateableDataContext {
 
     private static final Logger logger = 
LoggerFactory.getLogger(ElasticSearchRestDataContext.class);
 
@@ -94,16 +96,17 @@ public class ElasticSearchRestDataContext extends 
QueryPostprocessDataContext im
     private final JestClient elasticSearchClient;
 
     private final String indexName;
-    // Table definitions that are set from the beginning, not supposed to be 
changed.
+    // Table definitions that are set from the beginning, not supposed to be
+    // changed.
     private final List<SimpleTableDef> staticTableDefinitions;
 
     // Table definitions that are discovered, these can change
     private final List<SimpleTableDef> dynamicTableDefinitions = new 
ArrayList<>();
 
     /**
-     * Constructs a {@link ElasticSearchRestDataContext}. This constructor 
accepts a
-     * custom array of {@link SimpleTableDef}s which allows the user to define
-     * his own view on the indexes in the engine.
+     * Constructs a {@link ElasticSearchRestDataContext}. This constructor
+     * accepts a custom array of {@link SimpleTableDef}s which allows the user
+     * to define his own view on the indexes in the engine.
      *
      * @param client
      *            the ElasticSearch client
@@ -127,9 +130,9 @@ public class ElasticSearchRestDataContext extends 
QueryPostprocessDataContext im
     }
 
     /**
-     * Constructs a {@link ElasticSearchRestDataContext} and automatically 
detects
-     * the schema structure/view on all indexes (see
-     * {@link this.detectSchema(JestClient, String)}).
+     * Constructs a {@link ElasticSearchRestDataContext} and automatically
+     * detects the schema structure/view on all indexes (see {@link
+     * this.detectSchema(JestClient, String)}).
      *
      * @param client
      *            the ElasticSearch client
@@ -157,20 +160,20 @@ public class ElasticSearchRestDataContext extends 
QueryPostprocessDataContext im
             final GetMapping getMapping = new 
GetMapping.Builder().addIndex(indexName).build();
             jestResult = elasticSearchClient.execute(getMapping);
         } catch (Exception e) {
-            logger.error("Failed to retrieve mappings" , e);
+            logger.error("Failed to retrieve mappings", e);
             throw new MetaModelException("Failed to execute request for index 
information needed to detect schema", e);
         }
 
-        if(!jestResult.isSucceeded()){
+        if (!jestResult.isSucceeded()) {
             logger.error("Failed to retrieve mappings; {}", 
jestResult.getErrorMessage());
             throw new MetaModelException("Failed to retrieve mappings; " + 
jestResult.getErrorMessage());
         }
 
         final List<SimpleTableDef> result = new ArrayList<>();
 
-        final Set<Map.Entry<String, JsonElement>> mappings =
-                
jestResult.getJsonObject().getAsJsonObject(indexName).getAsJsonObject("mappings").entrySet();
-        if(mappings.size() == 0){
+        final Set<Map.Entry<String, JsonElement>> mappings = 
jestResult.getJsonObject().getAsJsonObject(indexName)
+                .getAsJsonObject("mappings").entrySet();
+        if (mappings.size() == 0) {
             logger.warn("No metadata returned for index name '{}' - no tables 
will be detected.");
         } else {
 
@@ -178,7 +181,8 @@ public class ElasticSearchRestDataContext extends 
QueryPostprocessDataContext im
                 final String documentType = entry.getKey();
 
                 try {
-                    final SimpleTableDef table = 
detectTable(entry.getValue().getAsJsonObject().get("properties").getAsJsonObject(),
 documentType);
+                    final SimpleTableDef table = 
detectTable(entry.getValue().getAsJsonObject().get("properties")
+                            .getAsJsonObject(), documentType);
                     result.add(table);
                 } catch (Exception e) {
                     logger.error("Unexpected error during detectTable for 
document type '{}'", documentType, e);
@@ -198,8 +202,8 @@ public class ElasticSearchRestDataContext extends 
QueryPostprocessDataContext im
 
     /**
      * Performs an analysis of an available index type in an ElasticSearch
-     * {@link JestClient} client and tries to detect the index structure based 
on
-     * the metadata provided by the java client.
+     * {@link JestClient} client and tries to detect the index structure based
+     * on the metadata provided by the java client.
      *
      * @param metadataProperties
      *            the ElasticSearch mapping
@@ -209,8 +213,7 @@ public class ElasticSearchRestDataContext extends 
QueryPostprocessDataContext im
      */
     private static SimpleTableDef detectTable(JsonObject metadataProperties, 
String documentType) {
         final ElasticSearchMetaData metaData = 
JestElasticSearchMetaDataParser.parse(metadataProperties);
-        return new SimpleTableDef(documentType, metaData.getColumnNames(),
-                metaData.getColumnTypes());
+        return new SimpleTableDef(documentType, metaData.getColumnNames(), 
metaData.getColumnTypes());
     }
 
     @Override
@@ -254,8 +257,8 @@ public class ElasticSearchRestDataContext extends 
QueryPostprocessDataContext im
     @Override
     protected DataSet materializeMainSchemaTable(Table table, List<SelectItem> 
selectItems,
             List<FilterItem> whereItems, int firstRow, int maxRows) {
-        final QueryBuilder queryBuilder = ElasticSearchUtils
-                .createQueryBuilderForSimpleWhere(whereItems, 
LogicalOperator.AND);
+        final QueryBuilder queryBuilder = 
ElasticSearchUtils.createQueryBuilderForSimpleWhere(whereItems,
+                LogicalOperator.AND);
         if (queryBuilder != null) {
             // where clause can be pushed down to an ElasticSearch query
             SearchSourceBuilder searchSourceBuilder = 
createSearchRequest(firstRow, maxRows, queryBuilder);
@@ -267,8 +270,9 @@ public class ElasticSearchRestDataContext extends 
QueryPostprocessDataContext im
     }
 
     private SearchResult executeSearch(Table table, SearchSourceBuilder 
searchSourceBuilder, boolean scroll) {
-        Search.Builder builder = new 
Search.Builder(searchSourceBuilder.toString()).addIndex(getIndexName()).addType(table.getName());
-        if(scroll){
+        Search.Builder builder = new 
Search.Builder(searchSourceBuilder.toString()).addIndex(getIndexName()).addType(
+                table.getName());
+        if (scroll) {
             builder.setParameter(Parameters.SCROLL, TIMEOUT_SCROLL);
         }
 
@@ -276,7 +280,7 @@ public class ElasticSearchRestDataContext extends 
QueryPostprocessDataContext im
         SearchResult result;
         try {
             result = elasticSearchClient.execute(search);
-        } catch (Exception e){
+        } catch (Exception e) {
             logger.warn("Could not execute ElasticSearch query", e);
             throw new MetaModelException("Could not execute ElasticSearch 
query", e);
         }
@@ -285,7 +289,8 @@ public class ElasticSearchRestDataContext extends 
QueryPostprocessDataContext im
 
     @Override
     protected DataSet materializeMainSchemaTable(Table table, Column[] 
columns, int maxRows) {
-        SearchResult searchResult = executeSearch(table, 
createSearchRequest(1, maxRows, null), limitMaxRowsIsSet(maxRows));
+        SearchResult searchResult = executeSearch(table, 
createSearchRequest(1, maxRows, null),
+                limitMaxRowsIsSet(maxRows));
 
         return new JestElasticSearchDataSet(elasticSearchClient, searchResult, 
columns);
     }
@@ -340,7 +345,7 @@ public class ElasticSearchRestDataContext extends 
QueryPostprocessDataContext im
         CountResult countResult;
         try {
             countResult = elasticSearchClient.execute(count);
-        } catch (Exception e){
+        } catch (Exception e) {
             logger.warn("Could not execute ElasticSearch get query", e);
             throw new MetaModelException("Could not execute ElasticSearch get 
query", e);
         }
@@ -353,10 +358,11 @@ public class ElasticSearchRestDataContext extends 
QueryPostprocessDataContext im
     }
 
     @Override
-    public void executeUpdate(UpdateScript update) {
+    public UpdateSummary executeUpdate(UpdateScript update) {
         final JestElasticSearchUpdateCallback callback = new 
JestElasticSearchUpdateCallback(this);
         update.run(callback);
         callback.onExecuteUpdateFinished();
+        return callback.getUpdateSummary();
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/metamodel/blob/a15ca724/excel/src/main/java/org/apache/metamodel/excel/ExcelDataContext.java
----------------------------------------------------------------------
diff --git 
a/excel/src/main/java/org/apache/metamodel/excel/ExcelDataContext.java 
b/excel/src/main/java/org/apache/metamodel/excel/ExcelDataContext.java
index 28c1f8e..df93990 100644
--- a/excel/src/main/java/org/apache/metamodel/excel/ExcelDataContext.java
+++ b/excel/src/main/java/org/apache/metamodel/excel/ExcelDataContext.java
@@ -26,6 +26,7 @@ import org.apache.metamodel.DataContext;
 import org.apache.metamodel.MetaModelException;
 import org.apache.metamodel.QueryPostprocessDataContext;
 import org.apache.metamodel.UpdateScript;
+import org.apache.metamodel.UpdateSummary;
 import org.apache.metamodel.UpdateableDataContext;
 import org.apache.metamodel.data.DataSet;
 import org.apache.metamodel.schema.Column;
@@ -225,8 +226,8 @@ public final class ExcelDataContext extends 
QueryPostprocessDataContext implemen
     }
 
     @Override
-    public void executeUpdate(UpdateScript update) {
-        ExcelUpdateCallback updateCallback = new ExcelUpdateCallback(this);
+    public UpdateSummary executeUpdate(UpdateScript update) {
+        final ExcelUpdateCallback updateCallback = new 
ExcelUpdateCallback(this);
         synchronized (WRITE_LOCK) {
             try {
                 update.run(updateCallback);
@@ -234,5 +235,6 @@ public final class ExcelDataContext extends 
QueryPostprocessDataContext implemen
                 updateCallback.close();
             }
         }
+        return updateCallback.getUpdateSummary();
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/metamodel/blob/a15ca724/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 84254f9..a878a6d 100644
--- a/jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcDataContext.java
+++ b/jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcDataContext.java
@@ -39,6 +39,7 @@ import org.apache.metamodel.BatchUpdateScript;
 import org.apache.metamodel.MetaModelException;
 import org.apache.metamodel.MetaModelHelper;
 import org.apache.metamodel.UpdateScript;
+import org.apache.metamodel.UpdateSummary;
 import org.apache.metamodel.UpdateableDataContext;
 import org.apache.metamodel.data.DataSet;
 import org.apache.metamodel.data.EmptyDataSet;
@@ -819,7 +820,7 @@ public class JdbcDataContext extends AbstractDataContext 
implements UpdateableDa
     }
 
     @Override
-    public void executeUpdate(final UpdateScript update) {
+    public UpdateSummary executeUpdate(final UpdateScript update) {
         final JdbcUpdateCallback updateCallback;
 
         if (_supportsBatchUpdates && update instanceof BatchUpdateScript) {
@@ -844,6 +845,8 @@ public class JdbcDataContext extends AbstractDataContext 
implements UpdateableDa
             updateCallback.close(false);
             throw e;
         }
+        
+        return updateCallback.getUpdateSummary();
     }
 
     protected boolean isSingleConnection() {

http://git-wip-us.apache.org/repos/asf/metamodel/blob/a15ca724/mongodb/src/main/java/org/apache/metamodel/mongodb/MongoDbDataContext.java
----------------------------------------------------------------------
diff --git 
a/mongodb/src/main/java/org/apache/metamodel/mongodb/MongoDbDataContext.java 
b/mongodb/src/main/java/org/apache/metamodel/mongodb/MongoDbDataContext.java
index 26db6d4..3bc068d 100644
--- a/mongodb/src/main/java/org/apache/metamodel/mongodb/MongoDbDataContext.java
+++ b/mongodb/src/main/java/org/apache/metamodel/mongodb/MongoDbDataContext.java
@@ -31,6 +31,7 @@ import org.apache.metamodel.DataContext;
 import org.apache.metamodel.MetaModelException;
 import org.apache.metamodel.QueryPostprocessDataContext;
 import org.apache.metamodel.UpdateScript;
+import org.apache.metamodel.UpdateSummary;
 import org.apache.metamodel.UpdateableDataContext;
 import org.apache.metamodel.data.DataSet;
 import org.apache.metamodel.data.DataSetHeader;
@@ -467,14 +468,16 @@ public class MongoDbDataContext extends 
QueryPostprocessDataContext implements U
 
     /**
      * Executes an update with a specific {@link WriteConcernAdvisor}.
+     * @return 
      */
-    public void executeUpdate(UpdateScript update, WriteConcernAdvisor 
writeConcernAdvisor) {
-        MongoDbUpdateCallback callback = new MongoDbUpdateCallback(this, 
writeConcernAdvisor);
+    public UpdateSummary executeUpdate(UpdateScript update, 
WriteConcernAdvisor writeConcernAdvisor) {
+        final MongoDbUpdateCallback callback = new MongoDbUpdateCallback(this, 
writeConcernAdvisor);
         try {
             update.run(callback);
         } finally {
             callback.close();
         }
+        return callback.getUpdateSummary();
     }
 
     /**
@@ -485,8 +488,8 @@ public class MongoDbDataContext extends 
QueryPostprocessDataContext implements U
     }
 
     @Override
-    public void executeUpdate(UpdateScript update) {
-        executeUpdate(update, getWriteConcernAdvisor());
+    public UpdateSummary executeUpdate(UpdateScript update) {
+        return executeUpdate(update, getWriteConcernAdvisor());
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/metamodel/blob/a15ca724/pojo/src/main/java/org/apache/metamodel/pojo/PojoDataContext.java
----------------------------------------------------------------------
diff --git a/pojo/src/main/java/org/apache/metamodel/pojo/PojoDataContext.java 
b/pojo/src/main/java/org/apache/metamodel/pojo/PojoDataContext.java
index 2de3d59..9369e96 100644
--- a/pojo/src/main/java/org/apache/metamodel/pojo/PojoDataContext.java
+++ b/pojo/src/main/java/org/apache/metamodel/pojo/PojoDataContext.java
@@ -30,6 +30,7 @@ import org.apache.metamodel.MetaModelException;
 import org.apache.metamodel.MetaModelHelper;
 import org.apache.metamodel.QueryPostprocessDataContext;
 import org.apache.metamodel.UpdateScript;
+import org.apache.metamodel.UpdateSummary;
 import org.apache.metamodel.UpdateableDataContext;
 import org.apache.metamodel.data.DataSet;
 import org.apache.metamodel.data.MaxRowsDataSet;
@@ -140,11 +141,12 @@ public class PojoDataContext extends 
QueryPostprocessDataContext implements Upda
     }
 
     @Override
-    public void executeUpdate(UpdateScript update) {
-        PojoUpdateCallback updateCallback = new PojoUpdateCallback(this);
+    public UpdateSummary executeUpdate(UpdateScript update) {
+        final PojoUpdateCallback updateCallback = new PojoUpdateCallback(this);
         synchronized (this) {
             update.run(updateCallback);
         }
+        return updateCallback.getUpdateSummary();
     }
 
     protected void addTableDataProvider(TableDataProvider<?> 
tableDataProvider) {

http://git-wip-us.apache.org/repos/asf/metamodel/blob/a15ca724/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 c8add52..793c42d 100644
--- 
a/salesforce/src/main/java/org/apache/metamodel/salesforce/SalesforceDataContext.java
+++ 
b/salesforce/src/main/java/org/apache/metamodel/salesforce/SalesforceDataContext.java
@@ -25,9 +25,11 @@ import java.util.Locale;
 import java.util.TimeZone;
 
 import com.sforce.ws.ConnectorConfig;
+
 import org.apache.metamodel.MetaModelException;
 import org.apache.metamodel.QueryPostprocessDataContext;
 import org.apache.metamodel.UpdateScript;
+import org.apache.metamodel.UpdateSummary;
 import org.apache.metamodel.UpdateableDataContext;
 import org.apache.metamodel.data.DataSet;
 import org.apache.metamodel.data.FirstRowDataSet;
@@ -362,9 +364,10 @@ public class SalesforceDataContext extends 
QueryPostprocessDataContext implement
     }
 
     @Override
-    public void executeUpdate(UpdateScript update) {
+    public UpdateSummary executeUpdate(UpdateScript update) {
         final SalesforceUpdateCallback callback = new 
SalesforceUpdateCallback(this, _connection);
         update.run(callback);
         callback.close();
+        return callback.getUpdateSummary();
     }
 }

Reply via email to