/*******************************************************************************
 * Copyright (c) 2009 Oracle. All rights reserved.
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v1.0, which accompanies this distribution
 * and is available at http://www.eclipse.org/legal/epl-v10.html.
 * 
 * Contributors:
 *     Oracle - initial API and implementation
 *******************************************************************************/
package org.eclipse.jpt.core.internal.utility.translators;

import org.eclipse.emf.ecore.EClass;
import org.eclipse.jpt.utility.internal.ArrayTools;
import org.eclipse.wst.common.internal.emf.resource.RootTranslator;
import org.eclipse.wst.common.internal.emf.resource.Translator;

/**
 * Root translator that contains a list of child translators and no special
 * behavior.
 */
public class SimpleRootTranslator
	extends RootTranslator
{
	protected Translator[] children;

	public SimpleRootTranslator(String domPathAndNames, EClass eClass) {
		super(domPathAndNames, eClass);
	}

	public SimpleRootTranslator(String domPathAndNames, EClass eClass, Translator[] children) {
		super(domPathAndNames, eClass);
		this.children = children;
	}

	/**
	 * Widen method access to 'public'.
	 */
	@Override
	public Translator[] getChildren() {
		return this.children;
	}

	protected Translator[] getChildren_() {
		return (this.children == null) ? EMPTY_TRANSLATOR_ARRAY : this.children;
	}
	protected static final Translator[] EMPTY_TRANSLATOR_ARRAY = new Translator[0];

	/**
	 * Set the translator's children.
	 * Return the translator.
	 */
	public void setChildren(Translator[] children) {
		this.children = children;
	}

	/**
	 * Add the specified translator to the translator's list of children.
	 * Return the translator for method chaining.
	 */
	public SimpleRootTranslator addChild(Translator translator) {
		this.children = ArrayTools.add(this.getChildren_(), translator);
		return this;
	}

	/**
	 * Add the specified translators to the translator's list of children.
	 * Return the translator for method chaining.
	 */
	public SimpleRootTranslator addChildren(Translator[] translators) {
		this.children = ArrayTools.addAll(this.getChildren_(), translators);
		return this;
	}

	/**
	 * Remove the specified translator from the translator's list of children.
	 * Return the translator for method chaining.
	 */
	public SimpleRootTranslator removeChild(Translator translator) {
		this.children = ArrayTools.remove(this.children, translator);
		return this;
	}

	/**
	 * Remove the specified translators from the translator's list of children.
	 * Return the translator for method chaining.
	 */
	public SimpleRootTranslator removeChildren(Translator[] translators) {
		this.children = ArrayTools.removeAll(this.children, (Object[]) translators);
		return this;
	}

}
