You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by ch...@apache.org on 2014/06/08 16:01:57 UTC
git commit: [OLINGO-224] Update reference scenario to showcase Delta
Token Implementation
Repository: olingo-odata2
Updated Branches:
refs/heads/master 01db5f1ed -> 14e79efc6
[OLINGO-224] Update reference scenario to showcase Delta Token
Implementation
Signed-off-by: Chandan V A <ch...@sap.com>
Project: http://git-wip-us.apache.org/repos/asf/olingo-odata2/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata2/commit/14e79efc
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata2/tree/14e79efc
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata2/diff/14e79efc
Branch: refs/heads/master
Commit: 14e79efc6eb41d71271002416a1e1acea4fcb867
Parents: 01db5f1
Author: Chandan V A <ch...@sap.com>
Authored: Sun Jun 8 19:30:38 2014 +0530
Committer: Chandan V A <ch...@sap.com>
Committed: Sun Jun 8 19:30:38 2014 +0530
----------------------------------------------------------------------
.../SalesOrderItemTombstoneListener.java | 77 ++++++++++++++++++++
.../listeners/SalesOrderTombstoneListener.java | 39 ++++++++++
.../processor/ref/model/SalesOrderHeader.java | 23 ++----
.../jpa/processor/ref/model/SalesOrderItem.java | 2 +
4 files changed, 125 insertions(+), 16 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/14e79efc/odata2-jpa-processor/jpa-ref/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/listeners/SalesOrderItemTombstoneListener.java
----------------------------------------------------------------------
diff --git a/odata2-jpa-processor/jpa-ref/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/listeners/SalesOrderItemTombstoneListener.java b/odata2-jpa-processor/jpa-ref/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/listeners/SalesOrderItemTombstoneListener.java
new file mode 100644
index 0000000..c44bc62
--- /dev/null
+++ b/odata2-jpa-processor/jpa-ref/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/listeners/SalesOrderItemTombstoneListener.java
@@ -0,0 +1,77 @@
+package org.apache.olingo.odata2.jpa.processor.ref.listeners;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.Query;
+
+import org.apache.olingo.odata2.api.edm.EdmException;
+import org.apache.olingo.odata2.api.uri.info.GetEntitySetUriInfo;
+import org.apache.olingo.odata2.jpa.processor.api.ODataJPATombstoneContext;
+import org.apache.olingo.odata2.jpa.processor.api.ODataJPATombstoneEntityListener;
+import org.apache.olingo.odata2.jpa.processor.api.exception.ODataJPAModelException;
+import org.apache.olingo.odata2.jpa.processor.api.exception.ODataJPARuntimeException;
+import org.apache.olingo.odata2.jpa.processor.api.jpql.JPQLContext;
+import org.apache.olingo.odata2.jpa.processor.api.jpql.JPQLContextType;
+import org.apache.olingo.odata2.jpa.processor.api.jpql.JPQLStatement;
+
+public class SalesOrderItemTombstoneListener extends ODataJPATombstoneEntityListener {
+
+ @Override
+ public Query getQuery(final GetEntitySetUriInfo resultsView, final EntityManager em) {
+ JPQLContextType contextType = null;
+
+ try {
+ if (!resultsView.getStartEntitySet().getName().equals(resultsView.getTargetEntitySet().getName())) {
+ contextType = JPQLContextType.JOIN;
+ } else {
+ contextType = JPQLContextType.SELECT;
+ }
+
+ JPQLContext jpqlContext = JPQLContext.createBuilder(contextType, resultsView).build();
+ JPQLStatement jpqlStatement = JPQLStatement.createBuilder(jpqlContext).build();
+ String deltaToken = ODataJPATombstoneContext.getDeltaToken();
+
+ Query query = null;
+ if (deltaToken != null) {
+ String statement = jpqlStatement.toString();
+ String[] statementParts = statement.split(JPQLStatement.KEYWORD.WHERE);
+ String deltaCondition = jpqlContext.getJPAEntityAlias() + ".creationDate >= {ts '" + deltaToken + "'}";
+ if (statementParts.length > 1) {
+ statement =
+ statementParts[0] + JPQLStatement.DELIMITER.SPACE + JPQLStatement.KEYWORD.WHERE
+ + JPQLStatement.DELIMITER.SPACE + deltaCondition + JPQLStatement.DELIMITER.SPACE
+ + JPQLStatement.Operator.AND + statementParts[1];
+ } else {
+ statement =
+ statementParts[0] + JPQLStatement.DELIMITER.SPACE + JPQLStatement.KEYWORD.WHERE
+ + JPQLStatement.DELIMITER.SPACE + deltaCondition;
+ }
+
+ query = em.createQuery(statement);
+ } else {
+ query = em.createQuery(jpqlStatement.toString());
+ }
+
+ return query;
+ } catch (EdmException e) {
+ return null;
+ } catch (ODataJPAModelException e) {
+ return null;
+ } catch (ODataJPARuntimeException e) {
+ return null;
+ }
+ }
+
+ @Override
+ public String generateDeltaToken(final List<Object> deltas, final Query query) {
+ SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.000");
+
+ Date date = new Date(System.currentTimeMillis());
+ dateFormat.format(date);
+ return dateFormat.format(date);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/14e79efc/odata2-jpa-processor/jpa-ref/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/listeners/SalesOrderTombstoneListener.java
----------------------------------------------------------------------
diff --git a/odata2-jpa-processor/jpa-ref/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/listeners/SalesOrderTombstoneListener.java b/odata2-jpa-processor/jpa-ref/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/listeners/SalesOrderTombstoneListener.java
new file mode 100644
index 0000000..ae80c53
--- /dev/null
+++ b/odata2-jpa-processor/jpa-ref/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/listeners/SalesOrderTombstoneListener.java
@@ -0,0 +1,39 @@
+package org.apache.olingo.odata2.jpa.processor.ref.listeners;
+
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PostLoad;
+import javax.persistence.Query;
+
+import org.apache.olingo.odata2.api.uri.info.GetEntitySetUriInfo;
+import org.apache.olingo.odata2.jpa.processor.api.ODataJPATombstoneContext;
+import org.apache.olingo.odata2.jpa.processor.api.ODataJPATombstoneEntityListener;
+import org.apache.olingo.odata2.jpa.processor.ref.model.SalesOrderHeader;
+
+public class SalesOrderTombstoneListener extends ODataJPATombstoneEntityListener {
+
+ public static String ENTITY_NAME = "SalesOrderHeader";
+
+ @PostLoad
+ public void handleDelta(final Object entity) {
+ SalesOrderHeader so = (SalesOrderHeader) entity;
+
+ if (so.getCreationDate().getTime().getTime() < ODataJPATombstoneContext.getDeltaTokenUTCTimeStamp()) {
+ return;
+ } else {
+ addToDelta(entity, ENTITY_NAME);
+ }
+ }
+
+ @Override
+ public String generateDeltaToken(final List<Object> deltas, final Query query) {
+ return String.valueOf(System.currentTimeMillis());
+ }
+
+ @Override
+ public Query getQuery(final GetEntitySetUriInfo resultsView, final EntityManager em) {
+ return null;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/14e79efc/odata2-jpa-processor/jpa-ref/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/model/SalesOrderHeader.java
----------------------------------------------------------------------
diff --git a/odata2-jpa-processor/jpa-ref/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/model/SalesOrderHeader.java b/odata2-jpa-processor/jpa-ref/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/model/SalesOrderHeader.java
index 74a39c8..f54bbe7 100644
--- a/odata2-jpa-processor/jpa-ref/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/model/SalesOrderHeader.java
+++ b/odata2-jpa-processor/jpa-ref/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/model/SalesOrderHeader.java
@@ -20,15 +20,14 @@ package org.apache.olingo.odata2.jpa.processor.ref.model;
import java.util.ArrayList;
import java.util.Calendar;
-import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
-import java.util.TimeZone;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
+import javax.persistence.EntityListeners;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
@@ -40,6 +39,7 @@ import javax.persistence.TemporalType;
@Entity
@Table(name = "T_SALESORDERHEADER")
+@EntityListeners(org.apache.olingo.odata2.jpa.processor.ref.listeners.SalesOrderTombstoneListener.class)
public class SalesOrderHeader {
public SalesOrderHeader() {}
@@ -116,26 +116,17 @@ public class SalesOrderHeader {
this.soId = soId;
}
- public Date getCreationDate() {
+ public Calendar getCreationDate() {
if (creationDate == null) {
return null;
}
- long dbTime = creationDate.getTime().getTime();
- Date originalDate = new Date(dbTime + TimeZone.getDefault().getOffset(dbTime));
- return originalDate;
+
+ return creationDate;
}
public void setCreationDate(final Calendar creationDate) {
- long originalTime;
- if (creationDate != null) {
- originalTime = creationDate.getTime().getTime();
- } else {
- originalTime = Calendar.getInstance(TimeZone.getDefault()).getTime().getTime();
- }
- Date newDate = new Date(originalTime - TimeZone.getDefault().getOffset(originalTime));
- Calendar newCalendar = Calendar.getInstance();
- newCalendar.setTime(newDate);
- this.creationDate = newCalendar;
+
+ this.creationDate = creationDate;
}
public String getCurrencyCode() {
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/14e79efc/odata2-jpa-processor/jpa-ref/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/model/SalesOrderItem.java
----------------------------------------------------------------------
diff --git a/odata2-jpa-processor/jpa-ref/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/model/SalesOrderItem.java b/odata2-jpa-processor/jpa-ref/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/model/SalesOrderItem.java
index 412287b..44bf6c2 100644
--- a/odata2-jpa-processor/jpa-ref/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/model/SalesOrderItem.java
+++ b/odata2-jpa-processor/jpa-ref/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/model/SalesOrderItem.java
@@ -21,6 +21,7 @@ package org.apache.olingo.odata2.jpa.processor.ref.model;
import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
+import javax.persistence.EntityListeners;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@@ -28,6 +29,7 @@ import javax.persistence.Transient;
@Entity
@Table(name = "T_SALESORDERITEM")
+@EntityListeners(org.apache.olingo.odata2.jpa.processor.ref.listeners.SalesOrderItemTombstoneListener.class)
public class SalesOrderItem {
public SalesOrderItem() {}