/*******************************************************************************
 * Copyright (c) 2009, 2010 IBM Corporation and others.
 *
 * This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License 2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.swt.accessibility;

import org.eclipse.swt.internal.cocoa.*;

class Relation {
	Accessible accessible;
	Accessible[] targets;
	int type;

	Relation(Accessible accessible, int type) {
		this.accessible = accessible;
		this.type = type;
		this.targets = new Accessible[0];
	}

	void addTarget(Accessible target) {
		if (containsTarget(target)) return;
		Accessible[] newTargets = new Accessible[targets.length + 1];
		System.arraycopy(targets, 0, newTargets, 0, targets.length);
		newTargets[targets.length] = target;
		targets = newTargets;
	}

	boolean containsTarget(Accessible target) {
		for (int i = 0; i < targets.length; i++) {
			if (targets[i] == target) return true;
		}
		return false;
	}

	void removeTarget(Accessible target) {
		if (!containsTarget(target)) return;
		Accessible[] newTargets = new Accessible[targets.length - 1];
		int j = 0;
		for (int i = 0; i < targets.length; i++) {
			if (targets[i] != target) {
				newTargets[j++] = targets[i];
			}
		}
		targets = newTargets;
	}

	id getTitleUIElement() {
		id result = null;
		for (int i = 0; i < targets.length; i++) {
			Accessible target = targets[i];
			result = target.accessibleHandle(target);
		}
		return result;
	}

	id getServesAsTitleForUIElements() {
		NSMutableArray result = NSMutableArray.arrayWithCapacity(targets.length);
		for (int i = 0; i < targets.length; i++) {
			Accessible target = targets[i];
			id accessibleElement = target.accessibleHandle(target);
			result.addObject(accessibleElement);
		}
		return result;
	}

	id getLinkedUIElements() {
		NSMutableArray result = NSMutableArray.arrayWithCapacity(targets.length);
		for (int i = 0; i < targets.length; i++) {
			Accessible target = targets[i];
			id accessibleElement = target.accessibleHandle(target);
			result.addObject(accessibleElement);
		}
		return result;
	}
}
