DataArrayXmlImpl.java

package eu.javaexperience.datareprez.xmlImpl;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import eu.javaexperience.collection.NullCollection;
import eu.javaexperience.datareprez.abstractImpl.DataArrayAbstractImpl;
import eu.javaexperience.datareprez.abstractImpl.DataProtocol;
import eu.javaexperience.datareprez.convertFrom.DataReprezType;
import eu.javaexperience.document.DocumentTools;

public class DataArrayXmlImpl extends DataArrayAbstractImpl
{
	protected Node node;
	protected String name;
	
	public DataArrayXmlImpl(String name, Node owner)
	{
		this.node = owner;
		this.name = name;
	}
	
	public DataArrayXmlImpl(Node owner)
	{
		this.node = owner;
		this.name = DataCommonXmlImpl.NODE_NAME_MARK_NEED_ADOPT;
	}
	
	
	public DataArrayXmlImpl()
	{
		this.node = DocumentTools.createEmptyDocument().createElement(DataCommonXmlImpl.NODE_NAME_MARK_NEED_ADOPT);
		name = DataCommonXmlImpl.NODE_NAME_MARK_NEED_ADOPT;
		node.getOwnerDocument().appendChild(node);
	}
	
	protected int fillNodes(Collection<Node> dst)
	{
		NodeList nl = node.getChildNodes();
		int max = nl.getLength();
		int found = 0;
		for(int i=0;i<max;++i)
		{
			Node n = nl.item(i);
			if(name.equals(n.getNodeName()))
			{
				++found;
				dst.add(n);
			}
		}
		
		return found;
	}
	

	@Override
	public Object getImpl()
	{
		return node;
	}

	@Override
	public Iterator<Object> iterator()
	{
		Collection ret = new ArrayList<>();
		fillNodes(ret);
		return ret.iterator();
	}

	@Override
	public DataReprezType getDataReprezType()
	{
		return DataReprezType.ARRAY;
	}

	@Override
	public Class getCommonsClass()
	{
		return Node.class;
	}

	@Override
	public byte[] toBlob()
	{
		return DataCommonXmlImpl.xmlToString(node).getBytes();
	}

	@Override
	protected <T> void setSubjectValue(int index, Class<T> cls, T value)
	{
		DataCommonXmlImpl.setSubjectValue(node, name, index, cls, value);
	}

	@Override
	protected <T> T getValueAs(int index, Class<T> retType)
	{
		return DataCommonXmlImpl.getValueAs(node, name, index, retType);
	}

	@Override
	protected DataProtocol getProtocolHandler()
	{
		return DataCommonXmlImpl.PROTOCOL;
	}

	@Override
	public int size()
	{
		return fillNodes(NullCollection.INSTANCE);
	}
	
	@Override
	public String toString()
	{
		return "DataArrayXmlImpl: "+name+", "+DataCommonXmlImpl.xmlToString(node);
	}
}