andreachild commented on code in PR #3090:
URL: https://github.com/apache/tinkerpop/pull/3090#discussion_r2037838905
##########
gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/DateDiffStep.java:
##########
@@ -36,34 +39,61 @@
*/
public final class DateDiffStep<S> extends ScalarMapStep<S, Long> implements
TraversalParent {
- private Date value;
- private Traversal.Admin<S, Date> dateTraversal;
+ private OffsetDateTime value;
+ private Traversal.Admin<S, OffsetDateTime> dateTraversal;
public DateDiffStep(final Traversal.Admin traversal, final Date value) {
+ super(traversal);
+ this.value = value == null ? null :
value.toInstant().atOffset(ZoneOffset.UTC);
+ }
+
+ public DateDiffStep(final Traversal.Admin traversal, final OffsetDateTime
value) {
super(traversal);
this.value = value;
}
- public DateDiffStep(final Traversal.Admin traversal, final Traversal<?,
Date> dateTraversal) {
+ public DateDiffStep(final Traversal.Admin traversal, final Traversal<?, ?>
dateTraversal) {
super(traversal);
this.dateTraversal = this.integrateChild(dateTraversal.asAdmin());
}
@Override
protected Long map(final Traverser.Admin<S> traverser) {
final Object object = traverser.get();
-
- if (!(object instanceof Date))
- throw new IllegalArgumentException(
- String.format("DateDiff can only take Date as argument,
encountered %s", object.getClass()));
-
- final Date otherDate = value != null ? value :
- dateTraversal != null ? TraversalUtil.apply(traverser,
dateTraversal) : null;
+ OffsetDateTime date;
+ OffsetDateTime otherDate;
+
+ if (!(object instanceof OffsetDateTime)) {
+ // allow incoming traverser to resolve into Date object for
compatibility
+ if (object instanceof Date) {
+ date = ((Date) object).toInstant().atOffset(ZoneOffset.UTC);
+ } else {
+ throw new IllegalArgumentException(
+ String.format("DateDiff can only take OffsetDateTime
or Date (deprecated) as argument, encountered %s", object.getClass()));
+ }
+ } else {
+ date = (OffsetDateTime) object;
+ }
+
+
+ if (null == value && null != dateTraversal) {
+ Object traversalDate = TraversalUtil.apply(traverser,
dateTraversal);
+ if (traversalDate == null) {
+ otherDate = null;
+ } else if (traversalDate instanceof Date) {
+ // for cases when traversal resolves to a java.util.Date
object (e.g. inject(new Date()))
+ otherDate = ((Date)
traversalDate).toInstant().atOffset(ZoneOffset.UTC);
+ } else if (traversalDate instanceof OffsetDateTime) {
+ otherDate = (OffsetDateTime) traversalDate;
+ } else {
+ throw new IllegalArgumentException(String.format("DateDiff can
only take OffsetDateTime or Date (deprecated) as argument, encountered %s",
object.getClass()));
+ }
+ } else {
+ otherDate = value;
+ }
// let's not throw exception and assume null date == 0
Review Comment:
Nit: this comment should be moved above to else statement:
```
else {
// let's not throw exception and assume null date should result in zero
difference
otherDate = value
}
```
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]