/* Synth Patch Conversion
 * Copyright (C) 2003-4,  Kenneth L. Martinez (kmartin@users.sourceforge.net)
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Library General Public License
 * as published by the Free Software Foundation; either version 2.1
 * of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Library General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 * 
 */

package PatchConversion;

/**
 * Describes a module output jack
 *
 * @author Kenneth L. Martinez
 */

import java.util.*;

public class ModuleOutputJack extends ModuleJack {
	public static final String POLARITIES[] = { "bipolar", "positive", 
			"negative" };
	private String polarity;
	private ArrayList conn;

	ModuleOutputJack(String pName, String pType, String pPolarity) { 
		super(pName, pType);
		setPolarity(pPolarity);
		conn = new ArrayList();
		tag = "output_";
	}

	ModuleOutputJack(String pName, String pType) { 
		this(pName, pType, "bipolar");
	}

	ModuleOutputJack(String xml, Module pMod) {
		super(xml, pMod);
		String s = XMLReader.getTagValue(xml, "polarity");
		if (s == null) {
			polarity = "bipolar";
		} else {
			setPolarity(s);
		}
		conn = new ArrayList();
		tag = "output_";
	}

	public String getPolarity() {
		return polarity;
	}

	public void setPolarity(String s) {
		int i;
		for (i = 0; i < POLARITIES.length; i++) {
			if (s.equalsIgnoreCase(POLARITIES[i])) {
				break;
			}
		}
		polarity = POLARITIES[i]; // will get exception on invalid value
	}

	public void addConn(Connection pConn) {
		conn.add(pConn);
	}

	public void removeConn(Connection pConn) {
		conn.remove(pConn);
	}

	public Connection[] getConn() {
		if (conn.size() == 0) {
			return null;
		} else {
			return (Connection[])conn.toArray(new Connection[conn.size()]);
		}
	}

	public Connection getFirstConn() {
		if (conn.size() == 0) {
			return null;
		} else {
			return (Connection)conn.get(0);
		}
	}

	public boolean isConnectedToUsed() {
		ModuleInputJack mj;
		for (int j = 0; j < conn.size(); j++) {
			mj = ((Connection)conn.get(j)).getTargetJack();
			if (mj.isUsed() && mj.getMod().getUsed() > 1) {
				return true;
			}
		}
		return false;
	}

	String writeValue() {
		return "<polarity>" + polarity + "</polarity>";
	}
}