/** * Copyright (C) 2014 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.sesame.graph.convert; import java.lang.reflect.Array; import java.util.ArrayList; import java.util.List; import org.apache.commons.lang.StringUtils; import org.joda.convert.StringConverter; import com.opengamma.util.ArgumentChecker; @SuppressWarnings("unchecked") class ArrayConverter implements StringConverter { private final StringConverter _elementConverter; private final Class _elementType; ArrayConverter(Class elementType, StringConverter elementConverter) { _elementType = ArgumentChecker.notNull(elementType, "elementType"); _elementConverter = ArgumentChecker.notNull(elementConverter, "elementConverter"); } @Override public Object convertFromString(Class type, String value) { List<String> stringValues = StringParser.parse(value); Object array = Array.newInstance(_elementType, stringValues.size()); int index = 0; for (String stringValue : stringValues) { Array.set(array, index++, _elementConverter.convertFromString(_elementType, stringValue)); } return array; } @Override public String convertToString(Object value) { // this uses reflection so the same code works with object arrays and primitive arrays int length = Array.getLength(value); List<String> stringValues = new ArrayList<>(length); for (int i = 0; i < length; i++) { stringValues.add(_elementConverter.convertToString(Array.get(value, i))); } return StringUtils.join(stringValues, " "); } }