001    package org.kuali.student.lum.common.client.widgets;
002    
003    import java.util.List;
004    
005    import org.kuali.student.common.ui.client.widgets.DataHelper;
006    import org.kuali.student.core.assembly.data.Data;
007    import org.kuali.student.core.assembly.data.LookupMetadata;
008    import org.kuali.student.core.assembly.data.LookupParamMetadata;
009    import org.kuali.student.core.search.dto.SearchParam;
010    import org.kuali.student.lum.lu.dto.MembershipQueryInfo;
011    
012    public class CluSetRangeDataHelper implements DataHelper {
013    
014        private LookupMetadata lookupMetadata;
015    
016        @Override
017        public String parse(Data data) {
018            MembershipQueryInfo membershipQueryInfo;
019            StringBuilder labelText = new StringBuilder();
020            int paramCounter = 0;
021            membershipQueryInfo = CluSetRangeModelUtil.INSTANCE.toMembershipQueryInfo(data);
022            if (membershipQueryInfo != null) {
023                if (membershipQueryInfo.getQueryParamValueList() != null && 
024                        !membershipQueryInfo.getQueryParamValueList().isEmpty()) {
025                    for (SearchParam searchParam : membershipQueryInfo.getQueryParamValueList()) {
026                        if (paramCounter > 0) {
027                            labelText.append(" ");
028                        }
029                        labelText.append(getParameterDisplayName(searchParam.getKey())).append(": ");
030                        labelText.append("<b>").append(searchParam.getValue()).append("</b>");
031                        paramCounter++;
032                    }
033                } else {
034                    labelText.append("All Courses");
035                }
036            }
037            return labelText.toString();
038        }
039        
040        @Override
041        public String getKey(Data data) {
042            return parse(data);
043        }
044    
045        private String getParameterDisplayName(String parameterKey) {
046            String parameterDisplayName = null;
047            if (lookupMetadata == null) {
048                parameterDisplayName = parameterKey;
049            } else {
050                List<LookupParamMetadata> searchParams = lookupMetadata.getParams();
051                if (searchParams != null) {
052                    for (LookupParamMetadata searchParam : searchParams) {
053                        if (nullSafeEquals(searchParam.getKey(), parameterKey)) {
054                            parameterDisplayName = searchParam.getName();
055                        }
056                    }
057                }
058                if (parameterDisplayName == null) {
059                    parameterDisplayName = parameterKey;
060                }
061            }
062            return parameterDisplayName;
063        }
064    
065        private boolean nullSafeEquals(Object str1, Object str2) {
066            return (str1 == null && str2 == null ||
067                    str1 != null && str2 != null && str1.equals(str2));
068        }
069    
070        public LookupMetadata getLookupMetadata() {
071            return lookupMetadata;
072        }
073    
074        public void setLookupMetadata(LookupMetadata lookupMetadata) {
075            this.lookupMetadata = lookupMetadata;
076        }
077    
078    }