TEIGroupImpl.java 2.21 KB
package ipipan.clarin.tei.impl.entities;

import ipipan.clarin.tei.api.entities.TEIGroup;
import ipipan.clarin.tei.api.entities.TEIMorph;
import ipipan.clarin.tei.api.entities.TEISyntacticEntity;
import ipipan.clarin.tei.api.entities.TEIWord;

import java.util.LinkedList;
import java.util.List;

import com.google.common.collect.Lists;

/**
 *
 * @author mlenart
 */
public class TEIGroupImpl extends TEIAbstractEntity implements TEIGroup {
	private String orth;
	private String type;
	private TEISyntacticEntity syntacticHead;
	private TEISyntacticEntity semanticHead;
	private List<TEISyntacticEntity> children;

	public TEIGroupImpl(String id, String orth, String type,
			TEISyntacticEntity syntacticHead, TEISyntacticEntity semanticHead,
			List<TEISyntacticEntity> children) {
		super(id);
		this.orth = orth;
		this.type = type;
		this.syntacticHead = syntacticHead;
		this.semanticHead = semanticHead;
		// Preconditions.require(String.format("Group %s is missing semantic head",
		// getId()), semanticHead != null);
		// Preconditions.require(String.format("Group %s is missing syntactic head",
		// getId()), syntacticHead != null);
		this.children = children;
	}

	@Override
	public String getOrth() {
		return orth;
	}

	@Override
	public String getType() {
		return type;
	}

	@Override
	public TEISyntacticEntity getSyntacticHead() {
		return syntacticHead;
	}

	@Override
	public TEISyntacticEntity getSemanticHead() {
		return semanticHead;
	}

	@Override
	public List<TEISyntacticEntity> getChildren() {
		return children;
	}

	@Override
	public boolean isWord() {
		return false;
	}

	@Override
	public boolean isGroup() {
		return true;
	}

	@Override
	public List<TEIMorph> getLeaves() {
		List<TEIMorph> res = new LinkedList<TEIMorph>();

		for (TEISyntacticEntity entity : children)
			res.addAll(entity.getLeaves());

		return res;
	}

	@Override
	public TEIWord asWord() {
		throw new UnsupportedOperationException("Cannot treat word as group");
	}

	@Override
	public TEIGroup asGroup() {
		return this;
	}

	@Override
	public List<TEIWord> getAllDescendingWords() {
		List<TEIWord> res = Lists.newLinkedList();
		for (TEISyntacticEntity entity : getChildren()) {
			res.addAll(entity.getAllDescendingWords());
		}
		return res;
	}
}