ThreeTen/JSR-310 source is now at GitHub :-)

The public API is DateTimeFormatter:
https://github.com/ThreeTen/threeten/blob/master/src/main/java/javax/time/calendar/format/DateTimeFormatter.java
and that uses CharSequence

The private API for parser writers uses String as that is easier to parse with.

This seems like a fair balance, but does it work for you?

Stephen


On 11 July 2011 10:23, Viktor Hedefalk <hedef...@gmail.com> wrote:
> I think I understand your question. I'm not really parsing a general
> stream, but simply want to use JodaTime from a Scala combinator
> parser. This is a complete combinator parser that simply wraps
> JodaTime's DateTimeFormat (with my CharSeq-change) :
>
> trait DateParsers extends RegexParsers {
>          def dateTime(pattern: String): Parser[DateTime] = new 
> Parser[DateTime] {
>            val dateFormat = DateTimeFormat.forPattern(pattern)
>            val dateParser = dateFormat.getParser
>
>            def jodaParse(text: CharSequence, offset: Int) = {
>              val mutableDateTime = new MutableDateTime
>              val newPos = dateFormat.parseInto(mutableDateTime, text, offset);
>              (mutableDateTime.toDateTime, newPos)
>            }
>
>            def apply(in: Input) = {
>              val source = in.source
>              val offset = in.offset
>              val start = handleWhiteSpace(source, offset)
>              val (dateTime, endPos) = jodaParse(source, start)
>              if (endPos >= 0)
>                Success(dateTime, in.drop(endPos - offset))
>              else
>                Failure("Failed to parse date", in.drop(start - offset))
>            }
>          }
>        }
>
>
> I think the relevant code to your question is the Input class defined
> in the Scala standard lib:
>
> in Parsers.scala:
>
>  /** The parser input is an abstract reader of input elements, i.e.
> the type of input the parsers in this component
>   *  expect. */
>  type Input = Reader[Elem]
>
> and Reader:
>
> /** An interface for streams of values that have positions.
>  *
>  * @author Martin Odersky, Adriaan Moors
>  */
> abstract class Reader[+T] {
>
>  /** If this is a reader over character sequences, the underlying
> char sequence
>   *  If not, throws a <code>NoSuchMethodError</code> exception.
>   */
>  def source: java.lang.CharSequence =
>    throw new NoSuchMethodError("not a char sequence reader")
>
>  def offset: Int =
>    throw new NoSuchMethodError("not a char sequence reader")
>
>   /** Returns the first element of the reader
>    */
>  def first: T
>
>  /** Returns an abstract reader consisting of all elements except the first
>   *
>   * @return If <code>atEnd</code> is <code>true</code>, the result will be
>   *         <code>this'; otherwise, it's a <code>Reader</code> containing
>   *         more elements.
>   */
>  def rest: Reader[T]
>
>  /** Returns an abstract reader consisting of all elements except the first
>   *  <code>n</code> elements.
>   */
>  def drop(n: Int): Reader[T] = {
>    var r: Reader[T] = this
>    var cnt = n
>    while (cnt > 0) {
>      r = r.rest; cnt -= 1
>    }
>    r
>  }
>
>  /** The position of the first element in the reader
>   */
>  def pos: Position
>
>  /** true iff there are no more elements in this reader
>   */
>  def atEnd: Boolean
> }
>
> As you see, there is no concrete impl. of the source method that I use
> to pass to JodaTime.
>
>
> There are a few different implementations of Reader. One with a
> noteworthy note would be:
>
> /** A StreamReader reads from a character sequence, typically created
> as a PagedSeq
>  *  from a java.io.Reader
>  *
>  *  NOTE:
>  *  StreamReaders do not really fulfill the new contract for readers, which
>  *  requires a `source' CharSequence representing the full input.
>  *  Instead source is treated line by line.
>  *  As a consequence, regex matching cannot extend beyond a single line
>  *  when a StreamReader are used for input.
>  *
>  *  If you need to match regexes spanning several lines you should consider
>  *  class <code>PagedSeqReader</code> instead.
>  *
>  *  @author Miles Sabin
>  *  @author Martin Odersky
>  */
> sealed class StreamReader(seq: PagedSeq[Char], off: Int, lnum: Int)
> extends PagedSeqReader(seq, off) {
> …
>
> But in my case I'm doing a CLI and I actually just pass a String into
> the framework. This is wrapped in a CharSequenceReader, which just
> wraps a CharSequence. So I'm not really trying to parse general
> streams, but rather just bridge the API-mismatch of the combinator
> parsers and JodaTime. Am I making sense?
>
>
> If theres a public API that's based on CharSequence that would be good
> enough for me I think? If DateTimeParser or equivalent is part of the
> public API? I just looked at the source over at
> http://java.net/projects/jsr-310/sources/svn/content/trunk/jsr-310-ri/src/main/java/javax/time/calendar/format/DateTimeParser.java?rev=1339,
> and it didn't look like it, but is this the right place to look?
>
> Cheers,
> Viktor
>
>
> On Mon, Jul 11, 2011 at 10:42 AM, Stephen Colebourne
> <scolebou...@joda.org> wrote:
>> The JSR-310 public API is based on CharSequence. The private API is
>> based on String.
>>
>> I can't see how CharSequence alone allows you to parse a stream,
>> because CharSequence's methods are all about random access to a data
>> structure. Perhaps you can enlighten me?
>>
>> Stephen
>>
>>
>> On 11 July 2011 09:32, Viktor Hedefalk <hedef...@gmail.com> wrote:
>>> Would it be possible to have this change in 310?
>>>
>>> Cheers,
>>> Viktor
>>>
>>> On Sat, Feb 5, 2011 at 1:52 AM, Stephen Colebourne <scolebou...@joda.org> 
>>> wrote:
>>>> OK.
>>>>
>>>> I've looked at this, and I don't feel I can make the proposed change
>>>> without causing jar-hell. While there are no google references to
>>>> implementations, the reality is that I would be changing the main
>>>> parsing API on DateTimeFormatter, used by everyone. Methods like
>>>> parseDateTime(String).
>>>>
>>>> Changing it from String to CharSequence is source compatible but
>>>> binary incompatible (method is bound at compile time).
>>>>
>>>> Adding an override taking CharSequence if source compatible and binary
>>>> upwards compatible, but not downward compatible (code compiled against
>>>> the new version couldn't run on the old version.
>>>>
>>>> Thus, its my opinion that the damage far outweighs the benefits on this.
>>>> Stephen
>>>>
>>>>
>>>> On 5 February 2011 00:11, James Richardson <ja...@time4tea.net> wrote:
>>>>> I Get where you are coming from. But if you did want to make a breaking
>>>>> change then this would be a really appropriate place to do it. I mean if 
>>>>> not
>>>>> on a major version number then when?
>>>>> Just a thought.
>>>>> James
>>>>>
>>>>> On 5 Feb 2011 00:03, "Stephen Colebourne" <scolebou...@joda.org> wrote:
>>>>>> The problem is that the major release number is mostly about removing
>>>>>> a few deprecated methods. Were I to make this change it would break
>>>>>> user code, which no other change so far would cause. I don't want to
>>>>>> get into the JAR-hell situation.
>>>>>>
>>>>>> Stephen
>>>>>>
>>>>>>
>>>>>> On 4 February 2011 23:57, James Richardson <ja...@time4tea.net> wrote:
>>>>>>> Well there is a major release version coming up... That would be an
>>>>>>> appropriate time to make a breaking change, no?
>>>>>>> James
>>>>>>>
>>>>>>> On 4 Feb 2011 23:43, "Stephen Colebourne" <scolebou...@joda.org> wrote:
>>>>>>>> On 4 February 2011 23:39, Viktor Hedefalk <hedef...@gmail.com> wrote:
>>>>>>>>> I guess the most obvious backwards compatability issue would be if
>>>>>>>>> someone had implemented his own DateTimeParser. Hopefully that
>>>>>>>>> shouldn't be too common though, it's really just an internal
>>>>>>>>> interface, right?
>>>>>>>>
>>>>>>>> Unfortunately, no. I have encouraged users to implement this interface
>>>>>>>> to solve some formatting issues. Thus I can't change it. Nor would I
>>>>>>>> want to create a DateTimeParser2.
>>>>>>>>
>>>>>>>> Stephen
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> ------------------------------------------------------------------------------
>>>>>>>> The modern datacenter depends on network connectivity to access
>>>>>>>> resources
>>>>>>>> and provide services. The best practices for maximizing a physical
>>>>>>>> server's
>>>>>>>> connectivity to a physical network are well understood - see how these
>>>>>>>> rules translate into the virtual world?
>>>>>>>> http://p.sf.net/sfu/oracle-sfdevnlfb
>>>>>>>> _______________________________________________
>>>>>>>> Joda-interest mailing list
>>>>>>>> Joda-interest@lists.sourceforge.net
>>>>>>>> https://lists.sourceforge.net/lists/listinfo/joda-interest
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> ------------------------------------------------------------------------------
>>>>>>> The modern datacenter depends on network connectivity to access 
>>>>>>> resources
>>>>>>> and provide services. The best practices for maximizing a physical
>>>>>>> server's
>>>>>>> connectivity to a physical network are well understood - see how these
>>>>>>> rules translate into the virtual world?
>>>>>>> http://p.sf.net/sfu/oracle-sfdevnlfb
>>>>>>> _______________________________________________
>>>>>>> Joda-interest mailing list
>>>>>>> Joda-interest@lists.sourceforge.net
>>>>>>> https://lists.sourceforge.net/lists/listinfo/joda-interest
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>> ------------------------------------------------------------------------------
>>>>>> The modern datacenter depends on network connectivity to access resources
>>>>>> and provide services. The best practices for maximizing a physical
>>>>>> server's
>>>>>> connectivity to a physical network are well understood - see how these
>>>>>> rules translate into the virtual world?
>>>>>> http://p.sf.net/sfu/oracle-sfdevnlfb
>>>>>> _______________________________________________
>>>>>> Joda-interest mailing list
>>>>>> Joda-interest@lists.sourceforge.net
>>>>>> https://lists.sourceforge.net/lists/listinfo/joda-interest
>>>>>>
>>>>>
>>>>> ------------------------------------------------------------------------------
>>>>> The modern datacenter depends on network connectivity to access resources
>>>>> and provide services. The best practices for maximizing a physical 
>>>>> server's
>>>>> connectivity to a physical network are well understood - see how these
>>>>> rules translate into the virtual world?
>>>>> http://p.sf.net/sfu/oracle-sfdevnlfb
>>>>> _______________________________________________
>>>>> Joda-interest mailing list
>>>>> Joda-interest@lists.sourceforge.net
>>>>> https://lists.sourceforge.net/lists/listinfo/joda-interest
>>>>>
>>>>>
>>>>
>>>> ------------------------------------------------------------------------------
>>>> The modern datacenter depends on network connectivity to access resources
>>>> and provide services. The best practices for maximizing a physical server's
>>>> connectivity to a physical network are well understood - see how these
>>>> rules translate into the virtual world?
>>>> http://p.sf.net/sfu/oracle-sfdevnlfb
>>>> _______________________________________________
>>>> Joda-interest mailing list
>>>> Joda-interest@lists.sourceforge.net
>>>> https://lists.sourceforge.net/lists/listinfo/joda-interest
>>>>
>>>
>>> ------------------------------------------------------------------------------
>>> All of the data generated in your IT infrastructure is seriously valuable.
>>> Why? It contains a definitive record of application performance, security
>>> threats, fraudulent activity, and more. Splunk takes this data and makes
>>> sense of it. IT sense. And common sense.
>>> http://p.sf.net/sfu/splunk-d2d-c2
>>> _______________________________________________
>>> Joda-interest mailing list
>>> Joda-interest@lists.sourceforge.net
>>> https://lists.sourceforge.net/lists/listinfo/joda-interest
>>>
>>
>> ------------------------------------------------------------------------------
>> All of the data generated in your IT infrastructure is seriously valuable.
>> Why? It contains a definitive record of application performance, security
>> threats, fraudulent activity, and more. Splunk takes this data and makes
>> sense of it. IT sense. And common sense.
>> http://p.sf.net/sfu/splunk-d2d-c2
>> _______________________________________________
>> Joda-interest mailing list
>> Joda-interest@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/joda-interest
>>
>
> ------------------------------------------------------------------------------
> All of the data generated in your IT infrastructure is seriously valuable.
> Why? It contains a definitive record of application performance, security
> threats, fraudulent activity, and more. Splunk takes this data and makes
> sense of it. IT sense. And common sense.
> http://p.sf.net/sfu/splunk-d2d-c2
> _______________________________________________
> Joda-interest mailing list
> Joda-interest@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/joda-interest
>

------------------------------------------------------------------------------
All of the data generated in your IT infrastructure is seriously valuable.
Why? It contains a definitive record of application performance, security 
threats, fraudulent activity, and more. Splunk takes this data and makes 
sense of it. IT sense. And common sense.
http://p.sf.net/sfu/splunk-d2d-c2
_______________________________________________
Joda-interest mailing list
Joda-interest@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/joda-interest

Reply via email to