001    /**
002     * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
014    
015    package com.liferay.util;
016    
017    import com.liferay.portal.kernel.bean.BeanPropertiesUtil;
018    import com.liferay.portal.kernel.json.JSONArray;
019    import com.liferay.portal.kernel.json.JSONFactoryUtil;
020    import com.liferay.portal.kernel.util.HtmlUtil;
021    import com.liferay.portal.kernel.util.StringBundler;
022    import com.liferay.portal.kernel.util.StringPool;
023    
024    import java.util.HashMap;
025    import java.util.List;
026    import java.util.Map;
027    
028    /**
029     * @author Brian Wing Shun Chan
030     */
031    public class Autocomplete {
032    
033            public static JSONArray arrayToJson(String[] array, int max) {
034                    return arrayToJson(_singleToPairArray(array), max);
035            }
036    
037            public static JSONArray arrayToJson(String[][] array, int max) {
038                    if (max <= 0) {
039                            max = array.length;
040                    }
041    
042                    JSONArray jsonArray = JSONFactoryUtil.createJSONArray();
043    
044                    for (int i = 0; (i < array.length) && (i < max); i++) {
045                            String text = array[i][0];
046                            String value = array[i][1];
047    
048                            Map<String, String> map = new HashMap<>();
049    
050                            map.put("text", text);
051                            map.put("value", value);
052    
053                            jsonArray.put(map);
054                    }
055    
056                    return jsonArray;
057            }
058    
059            public static String arrayToXml(String[] array, int max) {
060                    return arrayToXml(_singleToPairArray(array), max);
061            }
062    
063            public static String arrayToXml(String[][] array, int max) {
064                    if (max <= 0) {
065                            max = array.length;
066                    }
067    
068                    StringBundler sb = new StringBundler(array.length * 8 + 3);
069    
070                    sb.append("<?xml version=\"1.0\"?>");
071    
072                    sb.append("<ajaxresponse>");
073    
074                    for (int i = 0; (i < array.length) && (i < max); i++) {
075                            String text = array[i][0];
076                            String value = array[i][1];
077    
078                            sb.append("<item>");
079                            sb.append("<text><![CDATA[");
080                            sb.append(text);
081                            sb.append("]]></text>");
082                            sb.append("<value><![CDATA[");
083                            sb.append(value);
084                            sb.append("]]></value>");
085                            sb.append("</item>");
086                    }
087    
088                    sb.append("</ajaxresponse>");
089    
090                    return sb.toString();
091            }
092    
093            public static String[][] listToArray(
094                    List<?> list, String textParam, String valueParam) {
095    
096                    String[][] array = new String[list.size()][2];
097    
098                    for (int i = 0; i < list.size(); i++) {
099                            Object bean = list.get(i);
100    
101                            Object text = BeanPropertiesUtil.getObject(bean, textParam);
102    
103                            if (text == null) {
104                                    text = StringPool.BLANK;
105                            }
106    
107                            Object value = BeanPropertiesUtil.getObject(bean, valueParam);
108    
109                            if (value == null) {
110                                    value = StringPool.BLANK;
111                            }
112    
113                            array[i][0] = text.toString();
114                            array[i][1] = value.toString();
115                    }
116    
117                    return array;
118            }
119    
120            public static JSONArray listToJson(
121                    List<?> list, String textParam, String valueParam) {
122    
123                    return arrayToJson(listToArray(list, textParam, valueParam), -1);
124            }
125    
126            public static String listToXml(
127                    List<?> list, String textParam, String valueParam) {
128    
129                    return arrayToXml(listToArray(list, textParam, valueParam), -1);
130            }
131    
132            private static String[][] _singleToPairArray(String[] array) {
133                    String[][] pairArray = new String[array.length][2];
134    
135                    for (int i = 0; i < array.length; i++) {
136                            pairArray[i][0] = HtmlUtil.escape(array[i]);
137                            pairArray[i][1] = array[i];
138                    }
139    
140                    return pairArray;
141            }
142    
143    }