[kepler-dev] DateToken

Christopher Brooks cxh at eecs.berkeley.edu
Sun Jun 22 19:39:57 PDT 2014


Hi Patricia,
I saw that you checked in ptolemy.data.DateToken, which is a copy of 
kepler/util/src/org/kepler/date/DateToken.java so that we can use 
DateToken in Ptolemy (outside of Kepler).  The biggest difference 
between the two is that the Ptolemy version is convertible from LongToken.

There was a FindBugs warning about ptolemy.dateToken.toString() 
returning null, so I fixed that.

I also added support for nil DateTokens, so that we can support missing 
data.  The Kepler version probably does not support nil DateTokens.

I also added tests for some of the above operations.  Unfortunately, 
Ptjacl does not handle longs very well, so writing Tcl unit tests is tricky.

The ptolemy.data.DateToken file was badly formatted, it could be that 
your Eclipse configuration is using tabs.  However, my guess is that the 
formatting issues were from the copy from Kepler.

A few open issues:

- In ptolemy.data.type.BaseType, we have:
> /** The date data type. */
>     public static class DateType extends BaseType {
>         private DateType() {
>             super(DateToken.class, "date");
>         }
>
>         public Token convert(Token t) throws IllegalActionException {
>             if (t instanceof DateToken) {
>                 return t;
>             } else if (t instanceof LongToken) {
>                 return new DateToken(((LongToken) t).longValue());
>             } else if (t instanceof StringToken) {
>                 return new DateToken(((StringToken) t).stringValue());
>             }
>             throw new IllegalActionException(
> Token.notSupportedIncomparableConversionMessage(t, "date"));
>         }
>
>         public int getTypeHash() {
>             return 15;
>     }
Isn't anything that is convertible to a LongToken losslessly acceptable 
here as well?

Isn't it possible to losslessly convert from a DateToken to a 
LongToken?  Will this mess up the lattice?

- In ptolemy.data.DateToken, you have an _isEqualTo() method and other 
methods, these are necessary because ptolemy.data.DateToken extends 
AbstractConvertibleToken.  However, there are a bunch of methods like 
_add(), _divide() etc. that have no method bodies.

- Certain operations, such as add, are clearly doable if the Dates are 
converted to longs and then added and then converted back to 
DateTokens.  I think _add() and _subtract() could be possible

- For _isCloseTo(token, double epsilon):     If we convert the two 
tokens to longs and the epsilon to a long, then this might make sense?   
However, double is not losslessly convertible to long? Probably throw an 
IllegalActionException here.

- I'm not sure it makes sense to divide a date by another date, but 
dividing a date by a long makes a certain amount of sense maybe?  I dunno.

- Ditto with _multiply.

- _modulo of two Dates might make sense but is confusing and should 
probably throw an exception.

Does anyone have thoughts about the above?

_Christopher

-- 
Christopher Brooks, PMP                       University of California
Academic Program Manager & Software Engineer  US Mail: 337 Cory Hall
CHESS/iCyPhy/Ptolemy/TerraSwarm               Berkeley, CA 94720-1774
cxh at eecs.berkeley.edu, 707.332.0670           (Office: 545Q Cory)



More information about the Kepler-dev mailing list