/******************************************************************************
* Copyright (c) 2004 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are 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:
* IBM Corporation - initial API and implementation
****************************************************************************/
package org.eclipse.gmf.runtime.common.ui.dialogs;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.eclipse.gmf.runtime.common.core.util.StringStatics;
/**
* Show Related Elements Presets helper.
*
* Includes methods for serializing and deserializing and also a converter
* interface for the serializer and deserializer.
*
* @author wdiu, Wayne Diu
*/
public class ShowRelatedElementsPresetHelper {
/**
* Key separator for serialzing
*/
public static final String KEY_SEPARATOR = StringStatics.COLON;
/**
* Value separator for serialzing
*/
public static final String VALUE_SEPARATOR = StringStatics.COMMA;
/**
* Methods for the serializer and deserializer which should be implemented
* to convert the serialized String into an object and to convert the object
* into a serialzed String.
*/
public interface IConversionMethods {
/**
* Convert the string to an object for the ShowRelatedElementsPreset's
* custom data.
*
* @param string
* to be converted
* @return Object converted from string
*/
public Object convertSerializableStringToCustomData(String string);
/**
* Convert the objet into a serializable string for the serialization
*
* @param object
* to be converted
* @return String converted from object
*/
public String convertCustomDataToSerializableString(Object object);
}
/**
* Do not instantiate this private class
*/
private ShowRelatedElementsPresetHelper() {
//do nothing
}
/**
* Convenience method to find a preset from the list.
*
* @param list
* List of ShowRelatedElementsPreset objects.
* @param name
* name to match
*
* @return the first matching ShowRelatedElementsPreset.
*/
public static ShowRelatedElementsPreset findPresetFromList(List list,
String name) {
Iterator it = list.iterator();
while (it.hasNext()) {
Object obj = it.next();
assert (obj instanceof ShowRelatedElementsPreset);
ShowRelatedElementsPreset preset = (ShowRelatedElementsPreset) obj;
if (preset.getName().equals(name))
return preset;
}
return null;
}
/**
* Return a list of ShowRelatedElementsPreset objects.
*
* @param nameToIgnore
* ignore this name when reading in the presets. Can be null if
* you do not want to ignore anything and read everything in.
* @param settings
* string array of settings
* @param conversionMethod
* see the IConversionMethods class above
*
* @return List of the presets. Items in the List are
* ShowRelatedElementsPreset objects
*/
public static List readPresets(String nameToIgnore, String[] settings,
IConversionMethods conversionMethod) {
java.util.List presets = new ArrayList();
if (settings == null)
return presets;
String name, ids, custom, type, levels;
ShowRelatedElementsPreset preset;
for (int i = 0; i < settings.length; i++) {
preset = null;
String[] split = settings[i].split(KEY_SEPARATOR);
//TODO make sure it has a next token
name = split[0];
if (nameToIgnore != null
&& name.toUpperCase().equals(nameToIgnore.toUpperCase())) {
//skip;
continue;
}
//TODO make sure it has a next token
ids = split[1];
java.util.List readIds = new ArrayList();
String[] splitIds = ids.split(VALUE_SEPARATOR);
for (int j = 0; j < splitIds.length; j++) {
if (!splitIds[j].equals(StringStatics.SPACE))
readIds.add(splitIds[j]);
}
//TODO make sure it has a next token
custom = split[2];
/*
* java.util.List readCustoms = new ArrayList(); String[]
* splitCustoms = custom.split(VALUE_SEPARATOR); for (int j = 0; j <
* splitCustoms.length; j++) { if
* (!splitCustoms[j].equals(StringStatics.SPACE))
* readCustoms.add(splitCustoms[j]); }
*/
//TODO make sure it has a next token
type = split[3];
levels = split[4];
//TODO better error checking when parsing int
preset = new ShowRelatedElementsPreset(name, false, Integer
.parseInt(type), Integer.parseInt(levels));
preset.addIds(readIds);
if (conversionMethod == null) {
preset.setCustom(custom);
} else {
preset.setCustom(conversionMethod
.convertSerializableStringToCustomData(custom));
}
presets.add(preset);
}
return presets;
}
/**
* Convert the presets to a string array used for serializing
*
* @param presets
* List of ShowRelatedElementsPresets objects
* @param conversionMethod
* see the IConversionMethods class above
*
* @return String array that contains the data of the presets
*/
public static String[] convertPresetsToString(java.util.List presets,
IConversionMethods conversionMethod) {
String[] array = new String[presets.size()];
int i = 0;
Iterator it = presets.iterator();
while (it.hasNext()) {
Object obj = it.next();
assert (obj instanceof ShowRelatedElementsPreset);
ShowRelatedElementsPreset preset = (ShowRelatedElementsPreset) obj;
StringBuilder stringBuilder = new StringBuilder(preset.name
+ ShowRelatedElementsPresetHelper.KEY_SEPARATOR);
//String string = ;
Iterator idsIt = preset.getIds().iterator();
while (idsIt.hasNext()) {
obj = idsIt.next();
assert (obj instanceof String);
stringBuilder.append((String) obj);
if (idsIt.hasNext())
stringBuilder.append(ShowRelatedElementsPresetHelper.VALUE_SEPARATOR);
}
stringBuilder.append(ShowRelatedElementsPresetHelper.KEY_SEPARATOR);
stringBuilder.append((conversionMethod != null) ? conversionMethod
.convertCustomDataToSerializableString(preset.getCustom())
: StringStatics.BLANK);
stringBuilder.append(ShowRelatedElementsPresetHelper.KEY_SEPARATOR
+ preset.getExpansionType()
+ ShowRelatedElementsPresetHelper.KEY_SEPARATOR
+ preset.getLevels());
array[i] = stringBuilder.toString();
i++;
}
return array;
}
}