On Fri, Feb 23, 2018 at 10:04 AM, Gary Gregory <garydgreg...@gmail.com> wrote:
> > > On Fri, Feb 23, 2018 at 7:03 AM, Matt Benson <mben...@apache.org> wrote: > >> On Feb 23, 2018 4:26 AM, "sebb" <seb...@gmail.com> wrote: >> >> On 23 February 2018 at 00:41, Gary Gregory <garydgreg...@gmail.com> >> wrote: >> > On Thu, Feb 22, 2018 at 4:27 PM, sebb <seb...@gmail.com> wrote: >> > >> >> On 22 February 2018 at 23:15, Gary Gregory <garydgreg...@gmail.com> >> wrote: >> >> > On Thu, Feb 22, 2018 at 4:11 PM, sebb <seb...@gmail.com> wrote: >> >> > >> >> >> On 22 February 2018 at 22:27, Gary Gregory <garydgreg...@gmail.com> >> >> wrote: >> >> >> > Use your imagination ;-) >> >> >> >> >> >> What would the new code look like? >> >> >> >> I mean the user code before and after the enum is introduced. >> >> >> > >> > I don't have code for the _before_ since I wrote the enum to avoid it. >> > >> > I have a different util class that gets called like this: >> > >> > HexDump(byte[] data, LetterCase letterCase, more details...) >> >> The above is only using the enum as a way to provide the requested >> type of transform. >> >> The important bit is the code that uses the enum to do the transform. >> >> >> Obviously the method body would call #toCaseString() passing a String and >> Locale as arguments. This question feels like trolling, as does the >> insinuation that true/false *might not* be less clear in intent than >> UPPER/LOWER, or vice versa as, again, we don't know what the hypothetical >> API author was thinking in the case of boolean. WTH >> > > Thanks Matt for pointing that out. The comment did feel trollish to me as > well but I choose not to engage. Aside from that I really like Sebb's > contributions to our community, his diligence and attention to detail. > I did not think I needed to make some pedantic point about an enum being > much better than a boolean to express letter case or toggles in general. > > >> The comment about Java 8 is fine as far as it goes, but doesn't really >> invalidate this as the method supplied can easily be used as a BiFunction. >> Gary, I'm thinking you might as well "underload" the method to pass the >> default Locale to the two-argument variant so then you also implement >> Function in the simple case. Then I'm sold. For a bonus you might provide >> char method variants as well. >> > > OK, sounds good. Like this then: > [https://pastebin.com/mJw2tDHj] > Without the @author tag of course. G > > import java.util.Locale; > > /** > * Enumerates letter cases and converts strings. > * > * @author <a href="mailto:ggreg...@rocketsoftware.com">Gary Gregory</a> > */ > public enum LetterCase { > > LOWER { > @Override > public char[] toCaseString(final char[] source, final Locale > locale) { > return String.valueOf(source).toLowerCase(locale). > toCharArray(); > } > > @Override > public String toCaseString(final String source, final Locale > locale) { > return source.toLowerCase(locale); > } > > }, > UPPER { > @Override > public char[] toCaseString(final char[] source, final Locale > locale) { > return String.valueOf(source).toUpperCase(locale). > toCharArray(); > } > > @Override > public String toCaseString(final String source, final Locale > locale) { > return source.toUpperCase(locale); > } > }; > > /** > * Converts from the given {@code source} string to the case specified > by this enum using the default {@code locale}. > * > * @param source > * the string to convert > * @param locale > * the locale to use for conversion. > * @return a converted string. > */ > public char[] toCaseString(final char[] source) { > return toCaseString(source, Locale.getDefault()); > } > > /** > * Converts from the given {@code source} char[] to the case specified > by this enum using the given {@code locale}. > * > * @param source > * the char[] to convert > * @param locale > * the locale to use for conversion. > * @return a converted char[]. > */ > public abstract char[] toCaseString(char[] source, Locale locale); > > /** > * Converts from the given {@code source} string to the case specified > by this enum using the default {@code locale}. > * > * @param source > * the string to convert > * @param locale > * the locale to use for conversion. > * @return a converted string. > */ > public String toCaseString(final String source) { > return toCaseString(source, Locale.getDefault()); > } > > /** > * Converts from the given {@code source} string to the case specified > by this enum using the given {@code locale}. > * > * @param source > * the string to convert > * @param locale > * the locale to use for conversion. > * @return a converted string. > */ > public abstract String toCaseString(String source, Locale locale); > > } > > Gary > > >> Matt >> >> >> > This is much clearer than using a boolean for the letter case. >> >> YMMV >> >> > Gary >> > >> > >> >> >> >> >> >> >> > >> >> > I posted the code at the start of this thread... >> >> > >> >> > Gary >> >> > >> >> > >> >> >> >> >> >> How does it compare with code that does not have the enum? >> >> >> >> >> >> > I use it in the following contexts: >> >> >> > - To pass to a hex dump method to configure where the alpha chars >> >> should >> >> >> be >> >> >> > in lower case or upper case. >> >> >> > - To configure a parameterized JUnit test class to configure the >> case >> >> of >> >> >> > HTTP headers and values. >> >> >> > - To normalize input >> >> >> > >> >> >> > Gary >> >> >> > >> >> >> > >> >> >> > On Thu, Feb 22, 2018 at 3:14 PM, Otto Fowler < >> ottobackwa...@gmail.com >> >> > >> >> >> > wrote: >> >> >> > >> >> >> >> What problem does it solve? >> >> >> >> >> >> >> >> On February 22, 2018 at 17:02:34, Gary Gregory ( >> >> garydgreg...@gmail.com) >> >> >> >> wrote: >> >> >> >> >> >> >> >> Does anyone think this is useful and general enough to add to >> Commons >> >> >> >> Text: >> >> >> >> >> >> >> >> /** >> >> >> >> * Enumerates letter cases and converts strings. >> >> >> >> * >> >> >> >> * @author <a href="mailto:ggreg...@rocketsoftware.com">Gary >> >> Gregory</a> >> >> >> >> */ >> >> >> >> public enum LetterCase { >> >> >> >> LOWER { >> >> >> >> @Override >> >> >> >> public String toCaseString(final String source, final Locale >> >> >> >> locale) { >> >> >> >> return source.toLowerCase(locale); >> >> >> >> } >> >> >> >> >> >> >> >> }, >> >> >> >> UPPER { >> >> >> >> @Override >> >> >> >> public String toCaseString(final String source, final Locale >> >> >> >> locale) { >> >> >> >> return source.toUpperCase(locale); >> >> >> >> } >> >> >> >> }; >> >> >> >> >> >> >> >> /** >> >> >> >> * Converts from the given {@code source} string to the case >> specified >> >> >> >> by this enum using the given {@code locale}. >> >> >> >> * >> >> >> >> * @param source >> >> >> >> * the string to convert >> >> >> >> * @param locale >> >> >> >> * the locale to use for conversion. >> >> >> >> * @return a converted string. >> >> >> >> */ >> >> >> >> public abstract String toCaseString(String source, Locale >> locale); >> >> >> >> } >> >> >> >> >> >> >> >> ? >> >> >> >> >> >> >> >> Thank you, >> >> >> >> Gary >> >> >> >> >> >> >> >> >> >> >> >> >> >> ------------------------------------------------------------ >> --------- >> >> >> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org >> >> >> For additional commands, e-mail: dev-h...@commons.apache.org >> >> >> >> >> >> >> >> >> >> --------------------------------------------------------------------- >> >> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org >> >> For additional commands, e-mail: dev-h...@commons.apache.org >> >> >> >> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org >> For additional commands, e-mail: dev-h...@commons.apache.org >> > >