FormResultsParser.java
package sk.iway.iwcm.form;
import static sk.iway.iwcm.Tools.isEmpty;
import static sk.iway.iwcm.Tools.isInteger;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import sk.iway.iwcm.Logger;
/**
* FormResultsParser.java
*
* Parses !INCLUDE configuration supplied by form_results.jsp's config attribute.
* Individual columns are separated by | character, whereas its attribute are separated by ~.
*
*@Title webjet7
*@Company Interway s.r.o. (www.interway.sk)
*@Copyright Interway s.r.o. (c) 2001-2010
*@author $Author: marosurbanec $
*@version $Revision: 1.3 $
*@created Date: 16.6.2010 15:32:28
*@modified $Date: 2004/08/16 06:26:11 $
*/
public class FormResultsParser
{
String originalConfig;
List<String> columnNames;
Map<String, String> columnToLabels;
Map<String, String> columnToWidth;
public FormResultsParser(String originalConfig) throws ParseException
{
this.originalConfig = originalConfig;
columnNames = new ArrayList<String>();
columnToLabels = new HashMap<String, String>();
columnToWidth = new HashMap<String, String>();
parse();
}
private void parse() throws ParseException
{
Logger.debug(FormResultsParser.class, "Parsing: "+originalConfig);
for (String columnConfig : originalConfig.split("[|]"))
{
if (isEmpty(columnConfig)) continue;
String[] properties = columnConfig.split("~");
if (properties.length != 3)
throw new ParseException("Column configuration malformed: 3 subparts expected: "+columnConfig, originalConfig.indexOf(columnConfig));
String columnName = properties[0].trim();
columnNames.add(columnName);
columnToLabels.put(columnName, properties[1].trim());
columnToWidth.put(columnName, toCssWidth(properties[2].trim()));
}
Logger.debug(FormResultsParser.class, "Results of parsing: columnNames: "+columnNames+" columnLabels: "+columnToLabels.values());
}
private String toCssWidth(String wildCard) throws ParseException
{
if ("*".equals(wildCard)) return "auto";
if (isInteger(wildCard)) return wildCard+"px";
if (wildCard.endsWith("%")) return wildCard;
throw new ParseException("Unknown column width: "+wildCard, 0);
}
public List<String> getColumnNames()
{
return new ArrayList<String>(columnNames);
}
public String getLabelFor(String column)
{
return columnToLabels.get(column);
}
public String getCssWidthFor(String column)
{
return columnToWidth.get(column);
}
}