Uploaded image for project: 'XWiki Commons'
  1. XWiki Commons
  2. XCOMMONS-138

Add new XWiki Commons Text module for text-related generic APIs

    XMLWordPrintable

Details

    • New Feature
    • Resolution: Fixed
    • Major
    • 4.0-milestone-2
    • 4.0-milestone-1
    • Text
    • None

    Description

      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 )
      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)

      Unknown macro: { builder = builder.append("Reference", getReference()); }

      if (!getBaseReferences().isEmpty())

      Unknown macro: { builder = builder.append("Base References", getBaseReferences()); }

      Map<String, String> params = getParameters();
      if (!params.isEmpty())

      Unknown macro: { 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

      So here's my +1. 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.

      Note: I cannot link to the VOTE thread on markmail since markmail has not been archiving XWiki messages since the 22nd of March 2012 for some unknown reason so far... TODO: Replace this comment by the link when it's fixed...

      Attachments

        Activity

          People

            vmassol Vincent Massol
            vmassol Vincent Massol
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: