001    package org.kuali.maven.plugins.graph.tree;
002    
003    import java.util.ArrayList;
004    import java.util.Arrays;
005    import java.util.Collection;
006    import java.util.Collections;
007    import java.util.List;
008    import java.util.Map;
009    
010    import org.apache.commons.beanutils.BeanUtils;
011    import org.apache.commons.beanutils.PropertyUtils;
012    import org.apache.commons.collections15.list.SetUniqueList;
013    import org.apache.commons.collections15.map.ListOrderedMap;
014    import org.kuali.maven.plugins.graph.dot.GraphException;
015    
016    /**
017     * General purpose utility methods
018     */
019    public class Helper {
020        public static final String COMMA = ",";
021        public static final String EMPTY_STRING = "";
022    
023        public static final <T> Object getProperty(T bean, String property) {
024            try {
025                return PropertyUtils.getProperty(bean, property);
026            } catch (Exception e) {
027                throw new GraphException(e);
028            }
029        }
030    
031        public static final <T> String toCSV(List<T> list) {
032            StringBuilder sb = new StringBuilder();
033            for (int i = 0; i < list.size(); i++) {
034                if (i != 0) {
035                    sb.append(COMMA);
036                }
037                sb.append(list.get(i));
038            }
039            return sb.toString();
040        }
041    
042        public static final <T> ListOrderedMap<String, String> describe(T element, String... properties) {
043            return describe(element, Arrays.asList(properties));
044        }
045    
046        public static final <T> ListOrderedMap<String, String> describe(T element, List<String> properties) {
047            try {
048                @SuppressWarnings("unchecked")
049                Map<String, Object> map = BeanUtils.describe(element);
050                ListOrderedMap<String, String> orderedMap = new ListOrderedMap<String, String>();
051                for (String property : properties) {
052                    Object value = map.get(property);
053                    if (value == null) {
054                        continue;
055                    }
056                    orderedMap.put(property, value.toString());
057                }
058                return orderedMap;
059            } catch (Exception e) {
060                throw new GraphException(e);
061            }
062        }
063    
064        public static final <T> SetUniqueList<T> decorate() {
065            return SetUniqueList.decorate(new ArrayList<T>());
066        }
067    
068        public static final String[] toArray(List<String> strings) {
069            return strings.toArray(new String[strings.size()]);
070        }
071    
072        public static final String toEmpty(String s) {
073            if (isBlank(s)) {
074                return EMPTY_STRING;
075            } else {
076                return s;
077            }
078        }
079    
080        /**
081         * Null safe method for adding all the elements in "from" to "to"
082         */
083        public static final <T> void addAll(Collection<T> to, Collection<T> from) {
084            if (!isEmpty(from)) {
085                to.addAll(from);
086            }
087        }
088    
089        /**
090         * True if the collection is null or has no elements, false otherwise
091         */
092        public static final boolean isEmpty(Collection<?> c) {
093            return c == null || c.size() == 0;
094        }
095    
096        /**
097         * True if the string is null or whitespace only, false otherwise
098         */
099        public static final boolean isBlank(String s) {
100            return s == null || s.trim().equals(EMPTY_STRING);
101        }
102    
103        /**
104         * Return a List (never null) created from the csv string. Each csv token is trimmed before being added to the List.
105         * If the csv string is null or contains only whitespace an empty list is returned.
106         */
107        public static final List<String> splitAndTrimCSVToList(String csv) {
108            if (isBlank(csv)) {
109                return Collections.emptyList();
110            }
111            String[] tokens = csv.split(COMMA);
112            List<String> list = new ArrayList<String>();
113            for (String token : tokens) {
114                list.add(token.trim());
115            }
116            return list;
117        }
118    
119    }