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

org.duelengine.duel.ast.PARTCommandNode Maven / Gradle / Ivy

package org.duelengine.duel.ast;

import org.duelengine.duel.parsing.InvalidNodeException;

public class PARTCommandNode extends CommandNode {

	public static final String EXT_NAME = "part";
	private static final String NAME = "$part";
	private static final CommandName CMD = CommandName.PART;
	private static final String DEFAULT_NAME = "";
	private String name;

	public PARTCommandNode(int index, int line, int column) {
		super(CMD, NAME, false, index, line, column);

		setAttribute("name", null);
	}

	public PARTCommandNode(AttributePair[] attr, DuelNode... children) {
		super(CMD, NAME, false, attr, children);

		if (name == null) {
			setAttribute("name", null);
		}
	}

	public String getName() {
		return name;
	}

	@Override
	public boolean isSelf(String tag) {
		return EXT_NAME.equalsIgnoreCase(tag) || NAME.equalsIgnoreCase(tag);
	}

	@Override
	public void addAttribute(AttributePair attr)
		throws NullPointerException {

		if (attr == null) {
			throw new NullPointerException("attr");
		}

		setAttribute(attr.getName(), attr.getValue());
	}

	@Override
	public void setAttribute(String attrName, DuelNode attrValue) {
		if (attrName == null || attrName.isEmpty()) {
			throw new NullPointerException("name");
		}
		if (!attrName.equalsIgnoreCase("name")) {
			throw new InvalidNodeException("Attribute invalid on PART declaration: "+attrName, attrValue);
		}
		if (attrValue != null && !(attrValue instanceof LiteralNode)) {
			throw new InvalidNodeException("PART name must be a string literal: "+attrValue.getClass(), attrValue);
		}

		if (attrValue == null) {
			attrValue = new LiteralNode(DEFAULT_NAME, getIndex(), getLine(), getColumn());
		}

		String partName = ((LiteralNode)attrValue).getValue();
		if (partName == null) {
			((LiteralNode)attrValue).setValue(DEFAULT_NAME);
			partName = DEFAULT_NAME;
		}

		name = partName;
		super.setAttribute("name", attrValue);
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy