code: static public String format(Collection<?> collection, String property, String separator, boolean trim) {
  		StringBuilder sb = new StringBuilder();
  		if (collection != null){
  			for (Object o: collection){
  				Object p = null;
  				if (property == null){
  					p = o;
  				}else{
  					try {
  						p = PropertyUtils.getProperty(o, property);
  					} catch (Exception e) {
  						p = "ACCESS_ERROR:" + property;
  					}
  				}
  				sb.append(p == null? "null" : (trim? p.toString().trim() : p.toString()));
  				sb.append(separator);
  			}
  		}
  		if (sb.length() > 0){
  			sb.setLength(sb.length() - separator.length());
  		}
  		return sb.toString();
  	}
docs: Format a collection's elements' properties to delimiter separated string.<br>
  Usage examples: <br>
  <code>
  CollectionFormatter.format(myCollection, null, ",");
  CollectionFormatter.format(myCollection, "personInCharge.name.firstName", ", ");
  CollectionFormatter.format(myCollection, "relatedPeople(InCharge).name", ", ");
  CollectionFormatter.format(myCollection, "subordinate[3].address(home).city", " | ");
  </code>
  @param collection	The collection that will be formatted
  @param property		The property of the collection's element that will be put into the result string.
  Please see PropertyUtils.getProperty() of commons-beanutils for detail.
  Use null if the element itself needs to be put into the result string.
  @param separator		Used in the result string to separate each element.
  @param trim			true if the property need to be trimmed, false if not.
  @return	A string containing separated properties of the collection's elements