All Downloads are FREE. Search and download functionalities are using the official Maven repository.

no.mnemonic.commons.utilities.AppendUtils Maven / Gradle / Ivy

package no.mnemonic.commons.utilities;

import java.util.Collection;

import static no.mnemonic.commons.utilities.collections.CollectionUtils.isEmpty;
import static no.mnemonic.commons.utilities.collections.CollectionUtils.size;

/**
 * Utility to make a bean return a nice looking descriptor on toString()
 * 

* To use, let bean implement AppendMembers, and use *

 * public void appendMembers(StringBuilder buf) {
 *
 * }
 * 
*/ public class AppendUtils { /** * Creates a String from an object by calling {@link #appendBean}. * * @param bean bean to write tostring for * @return a tostring representation of the given bean */ public static String toString(Object bean) { return appendBean(null, bean).toString(); } /** * Appends an object to a StringBuilder. *

* Uses {@link AppendMembers#appendMembers} if implemented, * otherwise just calls {@link StringBuilder#append(Object)} * * @param buf string buffer * @param bean bean to append * @return The StringBuilder */ public static StringBuilder appendBean(StringBuilder buf, Object bean) { buf = createBuilder(buf); if (bean == null) return buf; if (bean instanceof AppendMembers) { return appendMembersBean(buf, (AppendMembers) bean); } else { buf.append(bean); return buf; } } /** * Appends an 'id' field to a StringBuilder. *

* The format used is the id value followed by a colon (:). *

* Useful as part of the implementation of {@link AppendMembers#appendMembers}. * * @param buf string buffer * @param bean bean to add as ID * @return The StringBuilder */ public static StringBuilder appendIdField(StringBuilder buf, Object bean) { if (bean == null) return createBuilder(buf); return appendBean(appendUnlessEmpty(buf, ' '), bean).append(':'); } /** * Appends an anonymous field to a StringBuilder, i.e. a field with no name. *

* Useful as part of the implementation of {@link AppendMembers#appendMembers}. * * @param buf string buffer * @param bean bean to add as anonymous field * @return The StringBuilder */ public static StringBuilder appendAnonField(StringBuilder buf, Object bean) { if (bean == null) return createBuilder(buf); return appendBean(appendUnlessEmpty(buf, ' '), bean); } /** * Appends a named field to a StringBuilder. *

* The format used is the name followed by an equals sign (=) followed by the value. *

* Useful as part of the implementation of {@link AppendMembers#appendMembers}. * * @param buf string buffer * @param name name of field * @param bean value of field * @return The StringBuilder */ public static StringBuilder appendField(StringBuilder buf, String name, Object bean) { if (bean == null) return createBuilder(buf); return appendBean(appendNamePart(buf, name), bean); } /** * Appends a collection field to a StringBuilder. *

* Only append when collection is not empty. *

* Useful as part of the implementation of {@link AppendMembers#appendMembers}. * * @param buf string buffer * @param name name of field * @param col collection to be appended * @return The StringBuilder */ public static StringBuilder appendCollection(StringBuilder buf, String name, Collection col) { if (isEmpty(col)) { return createBuilder(buf); } return appendField(buf, name, col); } /** * Appends a collection field to a StringBuilder. *

* If the size of the collection is greater than maxSize only the size will be appended. *

* Only append when collection is not empty. *

* Useful as part of the implementation of {@link AppendMembers#appendMembers}. * * @param buf string buffer * @param name name of field * @param col collection to be appended * @param maxSize maximum elements to be appended * @return The StringBuilder */ public static StringBuilder appendCollection(StringBuilder buf, String name, Collection col, int maxSize) { if (size(col) > maxSize) { return appendField(buf, name, ""); } return appendCollection(buf, name, col); } /** * Appends an object to a StringBuilder, unless the StringBuilder is empty. * * @param buf string buffer * @param bean bean to add unless empty * @return The StringBuilder */ public static StringBuilder appendUnlessEmpty(StringBuilder buf, Object bean) { buf = createBuilder(buf); if (buf.length() > 0) { appendBean(buf, bean); } return buf; } //private methods /** * Returns a new StringBuilder if passed null, otherwise just return the passed in StringBuilder. * * @param buf string buffer * @return a string builder */ private static StringBuilder createBuilder(StringBuilder buf) { if (buf == null) { return new StringBuilder(); } else { return buf; } } private static StringBuilder appendNamePart(StringBuilder buf, String name) { return appendUnlessEmpty(createBuilder(buf), ' ').append(name).append('='); } /** * Appends an instance of {@link AppendMembers} to a StringBuilder by using * {@link Class#getSimpleName} and {@link AppendMembers#appendMembers}. * * @return The StringBuilder */ private static StringBuilder appendMembersBean(StringBuilder buf, AppendMembers bean) { buf = createBuilder(buf); buf.append("["); buf.append(bean.getClass().getSimpleName()); bean.appendMembers(buf); buf.append("]"); return buf; } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy