On Fri, Mar 23, 2012 at 9:25 AM, Vincent Massol <[email protected]> wrote:
>
> On Mar 23, 2012, at 8:41 AM, Thomas Mortagne wrote:
>
>> On Fri, Mar 23, 2012 at 7:55 AM, Vincent Massol <[email protected]> wrote:
>>> Hi devs,
>>>
>>> I've already sent a proposal for EqualsBuilder and HashCodeBuilder (see 
>>> http://markmail.org/message/ewbizvcx4zj432il) but only Sergiu answered. So 
>>> resending as a VOTE and adding ToStringBuilder
>>>
>>> For ToStringBuilder the idea is to create a XWikiStyle (see 
>>> https://gist.github.com/2164507 )
>>
>> What about a XWikiToStringBuilder (or just ToStringBuilder since it's
>> in a XWiki package which makes it different already) which extends
>> ToStringBuilder and set XWikiStyle as default style ?
>
> Yep good idea, done here:
> https://github.com/xwiki/xwiki-rendering/commit/bf7e97690685a7864eae592a508ba1f0bbb1a574
>
>>> And then to use it as in:
>>>
>>>    @Override
>>>    public String toString()
>>>    {
>>>        ToStringBuilder builder = new ToStringBuilder(this, new 
>>> XWikiStyle());
>>>        builder = builder.append("Typed", isTyped())
>>>            .append("Type", getType().getScheme());
>>>
>>>        if (getReference() != null) {
>>>            builder = builder.append("Reference", getReference());
>>>        }
>>>
>>>        if (!getBaseReferences().isEmpty()) {
>>>            builder = builder.append("Base References", getBaseReferences());
>>>        }
>>>
>>>        Map<String, String> params = getParameters();
>>>        if (!params.isEmpty()) {
>>>            builder = builder.append("Parameters", params);
>>>        }
>>>
>>>        return builder.toString();
>>>    }
>>>
>>> For the record this generates stuff like the following which is based on 
>>> our current practices:
>>> "Typed = [true] Type = [doc] Reference = [reference] Base References = 
>>> [[baseref1], [baseref2]] Parameters = [[name1] = [value1], [name2] = 
>>> [value2]]"
>>>
>>> The rationale for using ToStringBuilder is:
>>> * It reduces our boilerplate code by at least 50%
>>> * It makes all our toString implementation consistent and easy to write
>>>
>>> Now all that remains is to decide where to put the XWikiStyle class. Of 
>>> course it has to go in XWiki Commons somewhere but where?
>>>
>>> I'm proposing several possibilities:
>>> * xwiki-commons-logging (existing module): the rationale would be that the 
>>> toString() is usually used for logging. The package would be 
>>> org.xwiki.logging.text. I'm wondering if we should make this class internal 
>>> too.
>>> * xwiki-commons-text (new module): I'm not sure what else we would put in 
>>> there
>>> * xwiki-commons-util (new module): I don't like to have a module with no 
>>> specific domain but it could be temporary till there are more stuff that 
>>> make a domain
>>
>> * xwiki-commons-lang (new module): to follow the same logic as Apache
>> commons naming.
>>
>>>
>>> So here's my +1.
>>
>> +1, I'm already using HashCodeBuilder and EqualsBuilder when the
>> equals is starting to be complex (I tough I had answered to the mail
>> actually :))
>>
>>> My only doubt is where to put it. Right now I'd be tempted to put it in  
>>> xwiki-commons-logging so that we don't create a new module.
>>
>> I'm not sure either. I would say +1 for xwiki-commons-lang with as
>> less dependencies as possible (probably only apache commons-lang), if
>> we want all module to use it as standard toString lets make it as
>> light as possible. Right now there is very few modules that need
>> logging-api (it's not required to log) so I would prefer avoid having
>> to put it in dependency only for a toString. It would also avoid
>> circular dependency issues if for example we want to us XWiki
>> ToStringBuilder in any of logging-api dependencies like
>> observation-api or components-api.
>>
>> Other possibility is xwiki-commons-component-api since everything
>> already depends on it but it's not really component domain so I don't
>> like it too much.
>
> Ok for xwiki-commons-lang for now but I'm not sure I like it that much. When 
> it starts to grow and there will be several classes for a given domain I 
> think I'll prefer to move the code to its own module. Like we do with 
> xwiki-commons-xml for example. Which is why I had suggested 
> xwiki-commons-text …
>
> It looks better to me to have xwiki-commons-xml and xwiki-commons-text side 
> by side.
>
> BTW the reason for "text" is because that's the package used by commons-lang 
> for this ;)

I'm ok with xwiki-commons-text too, I'm mostly against putting it in a
module which depends on other commons modules.

>
> WDYT?
>
> Thanks
> -Vincent
>
>
>
>
> _______________________________________________
> devs mailing list
> [email protected]
> http://lists.xwiki.org/mailman/listinfo/devs



-- 
Thomas Mortagne
_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to