All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.randomcodeorg.simplepdf.XmlList Maven / Gradle / Ivy

package com.github.randomcodeorg.simplepdf;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;

/**
 * A list that defines methods that can be used for serialization and parsing.
 * @author Marcel Singer
 *
 * @param  The containing element type.
 */
class XmlList implements XmlSerializable, List{

	private String tagName;
	private List data;
	
	/**
	 * Creates a new instance of {@link XmlList}.
	 * @param tagName The XML tag name.
	 * @param data The list of elements to be wrapped.
	 */
	public XmlList(String tagName, List data){
		
		if(tagName == null) throw new NullPointerException("The tag ame may not be null.");
		if(tagName.isEmpty())throw new IllegalArgumentException("The tag name may not be empty.");
		if(data == null) throw new NullPointerException("The data may not be null.");
		this.tagName = tagName;
		this.data = data;
	}
	
	/**
	 * Creates a new instance of {@link XmlList}.
	 * @param tagName The XML tag name.
	 * @param data The elements to be contained by this list.
	 */
	public XmlList(String tagName, Iterable data){
		
		if(tagName == null) throw new NullPointerException("The tag name may not be null.");
		if(tagName.isEmpty())throw new IllegalArgumentException("The tag name may not be empty.");
		if(data == null) throw new NullPointerException("The data may not be null.");
		this.tagName = tagName;
		this.data = toList(data);
	}
	
	/**
	 * Creates a new instance of {@link XmlList}.
	 * @param tagName The XML tag name.
	 * @param data The elements to be contained by this list.
	 */
	public XmlList(String tagName, T[] data){
		
		if(tagName == null) throw new NullPointerException("The tag name may not be null.");
		if(tagName.isEmpty())throw new IllegalArgumentException("The tag name may not be empty.");
		if(data == null) throw new NullPointerException("The data may not be null.");
		this.tagName = tagName;
		this.data = Arrays.asList(data);
	}
	
	/**
	 * Creates an empty instance of {@link XmlList}.
	 * @param tagName The XML tag name.
	 */
	public XmlList(String tagName){
		
		if(tagName == null) throw new NullPointerException("The tag name may not be null.");
		if(tagName.isEmpty())throw new IllegalArgumentException("The tag name may not be empty.");
		this.tagName = tagName;
		data = new ArrayList();
	}
	
	/**
	 * Copies the elements of the given {@link Iterable} into a new list.
	 * @param data The {@link Iterable} to copy from.
	 * @return A list containing all elements of the given {@link Iterable}.
	 */
	private List toList(Iterable data){
		ArrayList result = new ArrayList();
		for(T e:data){
			result.add(e);
		}
		return result;
	}
	
	/**
	 * Returns the XML tag name.
	 * @return The XML tag name.
	 */
	public String getTagName(){
		return tagName;
	}
	
	/**
	 * Sets the XML tag name.
	 * @param tagName The XML tag name to set.
	 */
	public void setTagName(String tagName){
		if(tagName == null) throw new NullPointerException("The tag name may not be null.");
		if(tagName.isEmpty())throw new IllegalArgumentException("The tag name may not be empty.");
		this.tagName = tagName;
	}
	
	@Override
	public String toXML() {
		StringBuilder sb = new StringBuilder();
		sb.append(String.format("<%s>\n", tagName));
		for(T o : data){
			try{
				XmlSerializable s = (XmlSerializable) o;
				sb.append(FormattingTools.indentText(s.toXML()));
				sb.append("\n");
			}catch(Throwable t){
				
			}
		}
		sb.append(String.format("", tagName));
		return sb.toString();
	}

	
	
	@Override
	public int size() {
		return data.size();
	}

	@Override
	public boolean isEmpty() {
		return data.isEmpty();
	}

	@Override
	public boolean contains(Object o) {
		return data.contains(o);
	}

	@Override
	public Iterator iterator() {
		return data.iterator();
	}

	@Override
	public Object[] toArray() {
		return data.toArray();
	}

	

	@Override
	public boolean add(T e) {
		return data.add(e);
	}

	@Override
	public boolean remove(Object o) {
		return data.remove(o);
	}

	@Override
	public boolean containsAll(Collection c) {
		return data.containsAll(c);
	}

	@Override
	public boolean addAll(Collection c) {
		return data.addAll(c);
	}

	@Override
	public boolean addAll(int index, Collection c) {
		return data.addAll(index, c);
	}

	@Override
	public boolean removeAll(Collection c) {
		return data.removeAll(c);
	}

	@Override
	public boolean retainAll(Collection c) {
		return data.retainAll(c);
	}

	@Override
	public void clear() {
		data.clear();
	}

	@Override
	public T get(int index) {
		return data.get(index);
	}

	@Override
	public T set(int index, T element) {
		return data.set(index, element);
	}

	@Override
	public void add(int index, T element) {
		 data.add(index, element);
	}

	@Override
	public T remove(int index) {
		return data.remove(index);
	}

	@Override
	public int indexOf(Object o) {
		return data.indexOf(o);
	}

	@Override
	public int lastIndexOf(Object o) {
		return lastIndexOf(o);
	}

	@Override
	public ListIterator listIterator() {
		return data.listIterator();
	}

	@Override
	public ListIterator listIterator(int index) {
		return data.listIterator(index);
	}

	@Override
	public List subList(int fromIndex, int toIndex) {
		return data.subList(fromIndex, toIndex);
	}

	@SuppressWarnings("hiding")
	@Override
	public  T[] toArray(T[] a) {
		return data.toArray(a);
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy