Newer
Older
NiHao / NiHao / src / nihao / context / StructureItemArray.java
@xwolf xwolf on 27 Jan 2015 1 KB Initial upload
package nihao.context;

import java.lang.reflect.Array;

import nihao.util.reflection.Reflector;

public class StructureItemArray extends StructureItem {
	private String typeName;
	private Class<?> type;
	private StructureItem[] items;

	public StructureItemArray(Context owner, String id, String typeName, StructureItem[] items) {
		super(owner, id);
		this.typeName = typeName;
		this.type = null;
		this.items = items;
	}

	@Override
	public Object get() {
		Object result = Array.newInstance(type, items.length);
		for (int i = 0; i < items.length; i++)
			Array.set(result, i, items[i].get());
		return result;
	}

	@Override
	public Class<?> getStructureClass() {
		return Array.newInstance(type, 0).getClass();
	}

	@Override
	public boolean canPreinstantiate() {
		for (StructureItem i : items)
			if (!i.canPreinstantiate())
				return false;
		return true;
	}

	@Override
	public void commit() {
		type = Reflector.getClass(typeName);
	}

	@Override
	public String toString() {
		StringBuilder sb = new StringBuilder();
		if (!singleton)
			sb.append("multi ");
		sb.append("array ");
		if (id != null) {
			sb.append(id);
			sb.append(' ');
		}
		sb.append("{\n");
		for (StructureItem i : items) {
			sb.append(' ');
			sb.append(i);
			sb.append('\n');
		}
		sb.append("}");
		return sb.toString();
	}
}