/* * Licensed to csti consulting * You may obtain a copy of the License at * * http://www.csticonsulting.com * Copyright (c) 2006-Aug 24, 2010 Consultation CS-TI inc. * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package com.salesmanager.core.util; import java.net.URLDecoder; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.StringTokenizer; import org.apache.commons.collections.BidiMap; import org.apache.commons.collections.bidimap.TreeBidiMap; import org.apache.commons.lang.StringUtils; public class StringUtil { /** * Build a ; delimited line with the values contained in the list * * @param list * @return */ public static String buildMultipleValueLine(List list) { if (list != null & list.size() > 0) { Iterator i = list.iterator(); StringBuffer linebuffer = new StringBuffer(); int icount = 0; while (i.hasNext()) { String value = (String) i.next(); linebuffer.append(value); if (icount < list.size() - 1) linebuffer.append(";"); icount++; } return linebuffer.toString(); } else { return null; } } public static Map parseTokenLine(String line, String delimiter) { BidiMap returnMap = new TreeBidiMap(); if (StringUtils.isBlank(line) || StringUtils.isBlank(delimiter)) { return returnMap; } StringTokenizer st = new StringTokenizer(line, delimiter); int count = 0; while (st.hasMoreTokens()) { String value = st.nextToken(); returnMap.put(value, count); count++; } return returnMap; } public static Map deformatUrlResponse(String payload) throws Exception { HashMap nvp = new HashMap(); StringTokenizer stTok = new StringTokenizer(payload, "&"); while (stTok.hasMoreTokens()) { StringTokenizer stInternalTokenizer = new StringTokenizer(stTok .nextToken(), "="); if (stInternalTokenizer.countTokens() == 2) { String key = URLDecoder.decode(stInternalTokenizer.nextToken(), "UTF-8"); String value = URLDecoder.decode(stInternalTokenizer .nextToken(), "UTF-8"); nvp.put(key.toUpperCase(), value); } } return nvp; } /** * Can be used to decode URL * @param s * @return */ public static String unescape(String s) { StringBuffer sbuf = new StringBuffer () ; int l = s.length() ; int ch = -1 ; int b, sumb = 0; for (int i = 0, more = -1 ; i < l ; i++) { /* Get next byte b from URL segment s */ switch (ch = s.charAt(i)) { case '%': ch = s.charAt (++i) ; int hb = (Character.isDigit ((char) ch) ? ch - '0' : 10+Character.toLowerCase((char) ch) - 'a') & 0xF ; ch = s.charAt (++i) ; int lb = (Character.isDigit ((char) ch) ? ch - '0' : 10+Character.toLowerCase ((char) ch)-'a') & 0xF ; b = (hb << 4) | lb ; break ; case '+': b = ' ' ; break ; default: b = ch ; } /* Decode byte b as UTF-8, sumb collects incomplete chars */ if ((b & 0xc0) == 0x80) { // 10xxxxxx (continuation byte) sumb = (sumb << 6) | (b & 0x3f) ; // Add 6 bits to sumb if (--more == 0) sbuf.append((char) sumb) ; // Add char to sbuf } else if ((b & 0x80) == 0x00) { // 0xxxxxxx (yields 7 bits) sbuf.append((char) b) ; // Store in sbuf } else if ((b & 0xe0) == 0xc0) { // 110xxxxx (yields 5 bits) sumb = b & 0x1f; more = 1; // Expect 1 more byte } else if ((b & 0xf0) == 0xe0) { // 1110xxxx (yields 4 bits) sumb = b & 0x0f; more = 2; // Expect 2 more bytes } else if ((b & 0xf8) == 0xf0) { // 11110xxx (yields 3 bits) sumb = b & 0x07; more = 3; // Expect 3 more bytes } else if ((b & 0xfc) == 0xf8) { // 111110xx (yields 2 bits) sumb = b & 0x03; more = 4; // Expect 4 more bytes } else /*if ((b & 0xfe) == 0xfc)*/ { // 1111110x (yields 1 bit) sumb = b & 0x01; more = 5; // Expect 5 more bytes } /* We don't test if the UTF-8 encoding is well-formed */ } return sbuf.toString() ; } }