001 /*
002 * Copyright 2005-2008 The Kuali Foundation
003 *
004 *
005 * Licensed under the Educational Community License, Version 2.0 (the "License");
006 * you may not use this file except in compliance with the License.
007 * You may obtain a copy of the License at
008 *
009 * http://www.opensource.org/licenses/ecl2.php
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017 package org.kuali.rice.kew.messaging;
018
019 import java.util.ArrayList;
020 import java.util.List;
021
022 import org.kuali.rice.kew.util.Utilities;
023
024
025 /**
026 * A simple utility class which can handle translated a comma-seperated String
027 * into an array of String paramters and vice-versa.
028 *
029 * @author Kuali Rice Team (rice.collab@kuali.org)
030 */
031 public class ParameterTranslator {
032
033 private static final String SLASH_REGEXP = "\\\\";
034 private static final String SLASH_ESCAPE = "\\\\";
035 private static final String COMMA_REGEXP = ",";
036 private static final String COMMA_ESCAPE = "\\,";
037
038 private String untranslatedString = "";
039
040 public ParameterTranslator() {}
041
042 public ParameterTranslator(String untranslatedString) {
043 this.untranslatedString = untranslatedString;
044 }
045
046 public void addParameter(String value) {
047 if (!Utilities.isEmpty(untranslatedString)) {
048 untranslatedString += ",";
049 }
050 untranslatedString += escape(value);
051 }
052
053 private String escape(String value) {
054 if (Utilities.isEmpty(value)) {
055 return "";
056 }
057 // escape '\' and ',' with "\\" and "\,"
058 value = value.replaceAll(SLASH_REGEXP, SLASH_ESCAPE);
059 value = value.replaceAll(COMMA_REGEXP, COMMA_ESCAPE);
060 return value;
061 }
062
063 public String getUntranslatedString() {
064 return untranslatedString;
065 }
066
067 public String[] getParameters() {
068 List strings = new ArrayList();
069 boolean isEscaped = false;
070 StringBuffer buffer = null;
071 for (int index = 0; index < untranslatedString.length(); index++) {
072 char character = untranslatedString.charAt(index);
073 if (isEscaped) {
074 isEscaped = false;
075 if (buffer == null) {
076 buffer = new StringBuffer();
077 }
078 buffer.append(character);
079 } else {
080 if (character == '\\') {
081 isEscaped = true;
082 } else if (character == ',') {
083 strings.add(buffer.toString());
084 buffer = null;
085 } else {
086 if (buffer == null) {
087 buffer = new StringBuffer();
088 }
089 buffer.append(character);
090 }
091 }
092 }
093 // put whatever is left in the buffer (after the last ',') into the list of strings
094 if (buffer != null) {
095 strings.add(buffer.toString());
096 }
097 return (String[])strings.toArray(new String[0]);
098 }
099
100 }