package rocks.inspectit.ui.rcp.preferences.valueproviders;
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;
import rocks.inspectit.ui.rcp.preferences.PreferenceException;
import rocks.inspectit.ui.rcp.preferences.PreferencesConstants;
import rocks.inspectit.ui.rcp.preferences.valueproviders.PreferenceValueProviderFactory.PreferenceValueProvider;
/**
* Custom {@link PreferenceValueProvider} for the map of column orders in the tables.
*
* @author Ivan Senic
*
*/
public class ColumnOrderPreferenceValueProvider extends PreferenceValueProvider<Map<Integer, int[]>> {
/**
* {@inheritDoc}
*/
@Override
public boolean isObjectValid(Object object) {
return object instanceof Map;
}
/**
* {@inheritDoc}
*/
@Override
public String getValueForObject(Map<Integer, int[]> map) throws PreferenceException {
StringBuilder stringBuilder = new StringBuilder();
for (Map.Entry<Integer, int[]> entry : map.entrySet()) {
stringBuilder.append(String.valueOf(entry.getKey()));
stringBuilder.append(PreferencesConstants.PREF_SPLIT_REGEX);
for (int i : entry.getValue()) {
stringBuilder.append(String.valueOf(i));
stringBuilder.append(PreferencesConstants.PREF_SPLIT_REGEX);
}
stringBuilder.append(PreferencesConstants.PREF_OBJECT_SEPARATION_TOKEN);
}
return stringBuilder.toString();
}
/**
* {@inheritDoc}
*/
@Override
public Map<Integer, int[]> getObjectFromValue(String value) throws PreferenceException {
Map<Integer, int[]> map = new HashMap<>();
StringTokenizer tokenizer = new StringTokenizer(value, PreferencesConstants.PREF_OBJECT_SEPARATION_TOKEN);
while (tokenizer.hasMoreElements()) {
String nextEntry = tokenizer.nextToken();
String[] splitted = nextEntry.split(PreferencesConstants.PREF_SPLIT_REGEX);
Integer key = null;
try {
key = Integer.valueOf(splitted[0]);
} catch (Exception e) {
throw new PreferenceException("Key value of the saved column order preference could not be loaded.", e);
}
int[] valueArray = new int[splitted.length - 1];
for (int i = 1; i < splitted.length; i++) {
try {
valueArray[i - 1] = Integer.parseInt(splitted[i]);
} catch (Exception e) {
throw new PreferenceException("Value array of the saved column order preference could not be loaded.", e);
}
}
map.put(key, valueArray);
}
return map;
}
}