/*******************************************************************************
 * Copyright (c) 2014, 2016 Orange.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License 2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *******************************************************************************/
package org.eclipse.om2m.sdt.types;

import java.util.ArrayList;
import java.util.List;

import org.eclipse.om2m.sdt.types.DataType.TypeChoice;

public class Array<T> implements TypeChoice {
	
	private DataType dataType;
	
	public Array(final DataType dataType) {
		this.dataType = dataType;
	}
	
	public String getOneM2MType() {
		String ret = dataType.getTypeChoice().getOneM2MType();
		return ret.startsWith("[") ? ret : "[" + ret + "]";
	}
	
	public DataType getDataType() {
		return dataType;
	}

	@Override
	public String toString(Object val) throws Exception {
		if (val instanceof List) {
			String ret = "[";
			boolean first = true;
			for (Object item : (List<?>)val) {
				if (first) first = false;
				else ret += ",";
				ret += dataType.getTypeChoice().toString(item);
			}
			return ret + "]";
		}
		return val.toString();
	}

	@SuppressWarnings("unchecked")
	@Override
	public Object fromString(String val) throws Exception {
		List<T> ret = new ArrayList<T>();
		String s = val.trim();
		if (s.startsWith("["))
			s = s.substring(1, s.length()-1);
		for (String item : s.split(",")) {
			ret.add((T)dataType.getTypeChoice().fromString(item));
		}
		return ret;
	}

}
