Re: jdom 2.0 with generics

jdom <[email protected]>
Newsgroups gmane.comp.java.jdom.general
Message-ID <[email protected]>
Hi Brad

In the short term it is unlikely that the JDOM repo will be converted to a
maven-style build. I simply do not use maven at all, and I do not know the
maven 'paradigm'.

I know that the possibility is there to produe the maven co-ordinates for
the JDOM releases, but it woul dmake sense to first get something usable
out of JDOM2 before we go publishing it as a maven resource.

Bottom line is that, if it happens, it will be one of the last things to
go through. Probably only after the alpha/beta/final stages of JDOM2 are
settled.

Still, JDOM is all about 'Java manipulation of XML made easy', so, it
should be considered, and I've updated the wiki page
https://github.com/hunterhacker/jdom/wiki/JDOM-2.0 to reflect that Maven
artifacts should be a possible goal of JDOM2.

Pleased to see the mounting excitement for JDOM2.

Rolf

On Mon, 8 Aug 2011 07:10:34 -0400, Brad Cox <[email protected]>
wrote:
> Any interest in some simple additions (trivial pom.xml files) to build
jdom
> with maven?
> 
> If so, I'll need a recipe for how to push changes via git. I use
mercurial
> for everything else.
> 
> After years of tolerating W3C DOM, JDOM was like coming home again!
Thanks
> for resurrecting this!
> 
> On Sun, Aug 7, 2011 at 9:32 PM, Jason Hunter <[email protected]>
wrote:
> 
>> I thought I'd send a status update on JDOM 2.0...
>>
>> In the last couple weeks I've setup a GitHub repository for the work at
>> https://github.com/hunterhacker/jdom.  Rolf was able to import the CVS
>> history fully into GitHub.  If you're curious how, he wrote a wiki page
>> in
>> the project.
>>
>> The project has branches for 1.0, 1.1, and 1.1.1.  The master branch is
>> for
>> 2.0 work, now underway.
>>
>> Here's a list of improvements we might make (feedback welcome):
>> https://github.com/hunterhacker/jdom/wiki/JDOM-2.0
>>
>> A list of outstanding bugs and RFEs:
>> https://github.com/hunterhacker/jdom/issues
>>
>> If you're new to GitHub one of the perks is you can "watch" the project
>> to
>> see what's happening.  You can also fork the project, make changes, and
>> send
>> us a pull request to incorporate your change into the official tree. 
>> That's
>> ideal for simple bug fixes or even major Java 5 feature adjustments
where
>> you might want to work in isolation for a while.
>>
>> You can follow the project on Twitter at:
>> http://twitter.com/#!/jdomproject
>>
>> And see all commits at:
>> http://twitter.com/#!/jdomcommits
>>
>> We're looking for others who want to be heavily involved in the Java 5
>> work.  Speak up if that's you.
>>
>> -jh-
>>
>> On Jul 22, 2011, at 1:33 PM, Jason Hunter wrote:
>>
>> > Rolf's been sending in good code for as long as I can remember.  :)
>> >
>> > The reason I've resisted jumping on generics was the backward
>> compatibility problem.  It's just something you can do without breaking
>> old
>> code, as Rolf's email explains in some good detail.
>> >
>> > I do think it's causing JDOM to be seen in a negative light, so we
>> > should
>> do something about it.
>> >
>> > The alternative package approach is probably the best road forward. 
>> > It's
>> a bit uglier, but it makes explicit the breakage, and means you can use
>> JDOM
>> 1.1 and JDOM 2.0 classes in the same project without conflict (an issue
>> that
>> arises if a project uses both Library X and Library Y which both depend
>> on
>> JDOM and maybe not the same versions).
>> >
>> > I suppose org.jdom2 is the best package.  Suitable for a 2.0 release.
>> >
>> > I don't have a lot of time to do coding but I'll be happy to
>> > coordinate.
>>  Rolf, why don't you send me the code and I'll put it in revision
>>  control.
>>  Some others have sent in versions as well.  We can decide which one's
>>  best
>> and work on a 2.0 release.
>> >
>> > Maybe we should move the code to github while we're at it?
>> >
>> > Send in thoughts...
>> >
>> > -jh-
>> >
>> > On Jul 21, 2011, at 4:56 PM, Rolf Lear wrote:
>> >
>> >> As an overview of what I did:
>> >>
>> >> README.Java5
>> >> ============
>> >>
>> >> Here are the more significant changes made for the Java5 proposed
>> solution.
>> >>
>> >> 1. Modified org.jdom.filter.Filter to be generic.
>> >> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>> >> This allows Filter Implementations to return specific Content types.
>> >> In addition, instead of returning boolean, it instead must fulfill
the
>> contract to return the input content cast in to
>> >> the same type as the Filter <T>. Returning a null value indicates
the
>> filter does not match.
>> >>
>> >> public interface Filter <T extends Content> extends
>> >> java.io.Serializable
>> {
>> >>    public T filter(Content content);
>> >> }
>> >>
>> >> Here is the JDom1.1 interface:
>> >> public interface Filter extends java.io.Serializable {
>> >>    public boolean matches(Object obj);
>> >> }
>> >>
>> >> Significant implications of this change include the change of the
>> >> method
>> name from 'matches' to 'filter'.
>> >> This is somewhat mitigated by the 'AbstractFilter' method 'matches'
>> which is simply:
>> >>    return filter(content) != null;
>> >>
>> >> Another 'regression' is that the filter and matches method now
require
>> at least 'Content' instead of 'Object' data.
>> >> A direct implication of this is that you can not have a Filter on
>> Document Objects. I could not find any examples of
>> >> this in the project, or my work environment. It seems to be somewhat
>> 'safe'. This is especially true because Filters
>> >> are primarily used as input to the Parent.getContent(Filter) method,
>> which, since the content can never be Document,
>> >> implies this change is probably benign. It does make some code
>> >> redundant
>> in class ContentFilter.
>> >>
>> >> All classes that implement Filter have been modified to be sensible.
>> >>
>> >> This is the change that makes the code:
>> >>    List<Element> kids = someelement.getChildren();
>> >> possible.
>> >>
>> >>
>> >> 2. Modified Parent to be generic.
>> >> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>> >>
>> >> This allows for the method:
>> >>    Parent<T> addContent(Content content)
>> >> to be added to the Parent interface, and still return the right
>> >> type...
>> >>
>> >>
>> >> 2. Rewrote much of ContentList (again)
>> >> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>> >> Three motivators for this change:
>> >>  a) Generics - so much had to change to accomodate Generics, seems
>> >>  this
>> was the core impact.
>> >>  b) Compliance - set() method on Collections are not supposed to
>> >>  impact
>> Concurrent Modification,
>> >>     but JDom did. Changed this so that set() does not impact
>> >>     concurrent
>> status.
>> >>  c) Performance - modified FilterList and FilterListIterator to work
>> >>  on
>> an as-needed basis. Will
>> >>     cache known content, but will only filter data on an as-needed
>> basis, or 'lazy' basis. Need to
>> >>     devise tests to measure performance impact, but things like
>> element.getChildren.iterator() will be
>> >>     much faster.
>> >>
>> >> Another motivator was conformance with existing concepts,
specifically
>> List.subList(int,int). The paradigm for
>> >> SubList is that modifications to the base list would cause
concurrent
>> exception in subList. This seems to be
>> >> appropriate for FilterLists too, but, too much code depends on
>> essentially dynamic/concurrent modification
>> >> to make the change. The old behaviour remains.... leading to
>> >> potentially
>> odd things in FilterList iterators.
>> >>
>> >>
>> >> 3. Removed complexities in JDOMException
>> >> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>> >> In Java5 we have the initCause method embedded in to Throwable. We
>> >> don't
>> need to jump through hoops any more.
>> >>
>> >>
>> >> 4. Removed TextBuffer class
>> >> ^^^^^^^^^^^^^^^^^^^^^^^^^^^
>> >> This was an attempt to be a better performing StringBuffer. With
>> >> Java5's
>> StringBuilder, we don't need to worry.
>> >>
>> >>
>> >> 5. Created AttributeType Enum
>> >> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>> >> This makes new attributes easy to manage, and also eliminates a
bunch
>> >> of
>> org.jdom.test.* stuff.
>> >> This also has probably the largest impact on existing code because
of
>> the requriement to change things like
>> >>    Attribute att = new Attribute ("name", "somevalue",
>> Attribute.ID_TYPE);
>> >> to
>> >>    Attribute att = new Attribute ("name", "somevalue",
>> AttributeType.ID_TYPE);
>> >>
>> >> On the other hand, it is all now TypeSafe ;-)
>> >>
>> >>
>> >> 6. Created Annotation CVS_ID
>> >> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>> >> This is used instead of the static field CVS_ID. This is set up to
be
>> >> an
>> annotation to a class. Previously we had:
>> >>      public class Attribute implements Serializable, Cloneable {
>> >>              private static final String CVS_ID = "@(#) $RCSfile:
>> Attribute.java,v $ $Revision: 1.56 $ $Date: 2007/11/10 05:28:58 $
$Name:
>>  $";
>> >>              ....
>> >>
>> >> we now instead have:
>> >>      @CVS_ID("@(#) $RCSfile: Attribute.java,v $ $Revision: 1.56 $
>> >>      $Date:
>> 2007/11/10 05:28:58 $ $Name:  $")
>> >>      public class Attribute implements Serializable, Cloneable {
>> >>
>> >> The motivation for this is because Eclipse complains when there are
>> unused private members... but, this is perfect
>> >> fodder for annotations.
>> >>
>> >> As a result, all org.jdom.* classes in the main repo have been
>> >> modified
>> to use the annotation rather than the static String.
>> >>
>> >> As an excercies later, we will be able to programatically be able to
>> determing all the CVS details at runtime using
>> >> the annotations, and I have tested that
>> >>
>> >>
>> >> 7. General Tidy-up.
>> >> ^^^^^^^^^^^^^^^^^^^
>> >>
>> >> Fixed all JavaDoc comments where applicable. Ensured @Override was
>> specified where appropriate, etc.
>> >> basically, I set strict rules in Eclipse, and then fixed all issues.
>> >>
>> >>
>> >> 8. JavaDoc
>> >> ^^^^^^^^^^
>> >> All public and protected classes, methods, and fields have had their
>> JavaDoc entries inspected and completed.
>> >>
>> >>
>> >> 9. build.xml
>> >> ^^^^^^^^^^^^
>> >>
>> >> set Java compliance levels, JDom version number.
>> >>
>> >> TESTS
>> >> =====
>> >> org.jdom.test.* has been modified to use and test the new code
>> >> properly.
>> >> Alltests was modified to include some suites that were not included.
>> >> Alltests has been run, and all run tests have passed.
>> >>
>> >>
>> >> CONTRIB
>> >> =======
>> >> All code has been modified to do what appears to be sane usage of
the
>> new JDom, but testing has not been done.
>> >>
>> >> STILL TO DO
>> >> ===========
>> >>
>> >> FilterIterator seems clunky still. Especially the XXX warning.
>> >>
>> >>
>> >>
>> >>
>> >>
>> >>
>> >>
>> >> On 21/07/2011 7:19 PM, Rolf Lear wrote:
>> >>>
>> >>> I did a JDOM conversion a while back. Made the code available to
>> >>> those
>> who were interested.
>> >>>
>> >>> There are a few 'gotchas', and most of the Generics implementation
>> relies on 'hiding' explicit casting inside of the ContentList class.
>> >>>
>> >>> It makes code that compiles against the JDOM cleaner, but does not
>> actually improve any reliability...
>> >>>
>> >>> Additionally, the XPath support is pretty much impossible to
>> accomplish.
>> >>>
>> >>> Let me dig up the code.... Or, rather, anyone interested should
mail
>> >>> me
>> directly.
>> >>>
>> >>> Rolf
>> >>>
>> >>
>> >> _______________________________________________
>> >> To control your jdom-interest membership:
>> >>
http://www.jdom.org/mailman/options/jdom-interest/[email protected]
>> >
>> >
>> > _______________________________________________
>> > To control your jdom-interest membership:
>> >
http://www.jdom.org/mailman/options/jdom-interest/[email protected]
>>
>>
>> _______________________________________________
>> To control your jdom-interest membership:
>> http://www.jdom.org/mailman/options/jdom-interest/[email protected]
>>
_______________________________________________
To control your jdom-interest membership:
http://www.jdom.org/mailman/options/jdom-interest/[email protected]
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.