package org.mongodb.morphia.converters;


import org.mongodb.morphia.mapping.MappedField;

import java.lang.reflect.Array;


Author:Uwe Schaefer, (us@thomas-daily.de), scotthernandez
/** * @author Uwe Schaefer, (us@thomas-daily.de) * @author scotthernandez */
public class CharArrayConverter extends TypeConverter implements SimpleValueConverter {
Creates the Converter.
/** * Creates the Converter. */
public CharArrayConverter() { super(char[].class, Character[].class); } @Override public Object decode(final Class targetClass, final Object val, final MappedField optionalExtraInfo) { if (val == null) { return null; } final char[] chars = val.toString().toCharArray(); if (targetClass.isArray() && targetClass.equals(Character[].class)) { return convertToWrapperArray(chars); } return chars; } @Override public Object encode(final Object value, final MappedField optionalExtraInfo) { if (value == null) { return null; } else { if (value instanceof char[]) { return new String((char[]) value); } else { final StringBuilder builder = new StringBuilder(); final Character[] array = (Character[]) value; for (final Character character : array) { builder.append(character); } return builder.toString(); } } } Object convertToWrapperArray(final char[] values) { final int length = values.length; final Object array = Array.newInstance(Character.class, length); for (int i = 0; i < length; i++) { Array.set(array, i, values[i]); } return array; } }