/******************************************************************************* * Copyright (c) 2007 Red Hat, Inc. * Distributed under license by Red Hat, Inc. All rights reserved. * This program is made available under the terms of the * Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.seam.core.project.facet; import java.util.HashMap; import java.util.Map; import java.util.StringTokenizer; /** * Converter is responsible for transformation String to * Map<String, SeamRuntime> and vice versa * * @author eskimo */ public class SeamRuntimeListConverter { /* * Constants definitions */ private static final String REGEXP_ESCAPE = "\\"; private static final String COMMA = ","; private static final String EMPTY_STRING = ""; private static final String FIELD_SEPARATOR = "|"; private static final String DEFAULT = "default"; private static final String VERSION = "version"; private static final String HOME_DIR = "homeDir"; private static final String NAME = "name"; /** * Load String to SeamRuntime map from String * @param input * String representation of map * @return * Map<String, SeamRuntime> loaded from string * TODO - switch to XML? * TODO - write converter from old serialization format to XML? * TODO - handle errors in string format */ public Map<String, SeamRuntime> getMap(String input) { Map<String, SeamRuntime> result = new HashMap<String, SeamRuntime>(); if (input == null || EMPTY_STRING.equals(input.trim())) { return result; } StringTokenizer runtimes = new StringTokenizer(input, COMMA); while (runtimes.hasMoreTokens()) { String runtime = runtimes.nextToken(); String[] map = runtime.split(REGEXP_ESCAPE + FIELD_SEPARATOR); SeamRuntime rt = new SeamRuntime(); final int step = 2; for (int i = 0; i < map.length; i += step) { String name = map[i]; String value = i + 1 < map.length ? map[i + 1] : EMPTY_STRING; if (NAME.equals(name)) { rt.setName(value); } else if (HOME_DIR.equals(name)) { rt.setHomeDir(value); } else if (VERSION.equals(name)) { rt.setVersion(SeamVersion.parseFromString(value)); } else if (DEFAULT.equals(name)) { rt.setDefault(Boolean.parseBoolean(value)); } } result.put(rt.getName(), rt); } return result; } /** * Convert map String to SeamRUntime to string representation * @param runtimeMap * Map<String, SeamRuntime> - map of String to Seam Runtime to convert * in String * @return * String representation of String to Seam Runtime map */ public String getString(Map<String, SeamRuntime> runtimeMap) { StringBuffer buffer = new StringBuffer(); SeamRuntime[] runtimes = runtimeMap.values().toArray( new SeamRuntime[runtimeMap.size()]); for (int i = 0; i < runtimes.length; i++) { buffer.append(NAME).append(FIELD_SEPARATOR); buffer.append(runtimes[i].getName()); buffer.append(FIELD_SEPARATOR).append(VERSION).append( FIELD_SEPARATOR); buffer.append(runtimes[i].getVersion().toString()); buffer.append(FIELD_SEPARATOR).append(HOME_DIR).append( FIELD_SEPARATOR); buffer.append(runtimes[i].getHomeDir()); buffer.append(FIELD_SEPARATOR).append(DEFAULT).append( FIELD_SEPARATOR); buffer.append(runtimes[i].isDefault()); if (i != runtimes.length - 1) { buffer.append(COMMA); } } return buffer.toString(); } }