/*
 * Delivered to the U.S. Government in Accordance with Contract FA8650-10-C-7080.
 *
 * EXPORT CONTROLLED
 * ECCN#   EAR99
 * Warning: This document contains technical data which is controlled under the
 * Bureau of Industry & Security's Export Administration Regulations and may not be
 * exported or re-exported without authorization by the Bureau of Industry & Security.
 * Diversion contrary to US law is prohibited.
 *
 * (c) 2011 United Technologies Corp.
 * Developed with the sponsorship of the Defense Advanced Research Projects Agency (DARPA).
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy of this data,
 * including any software or models in source or binary form, as well as any drawings, 
 * specifications, and documentation (collectively "the Data"), to deal in the Data without 
 * restriction, including without limitation the rights to use, copy, modify, merge, publish,
 * distribute, sublicense, and/or sell copies of the Data, and to permit persons to whom the Data
 * is furnished to do so, subject to the following conditions:
 * 
 * The above copyright notice and this permission notice shall be included in all copies or
 * substantial portions of the Data.
 *
 * THE DATA IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS, SPONSORS, DEVELOPERS, CONTRIBUTORS, OR
 * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE DATA OR THE
 * USE OR OTHER DEALINGS IN THE DATA.
*/

package aee.engine;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.jdom.Element;

import aee.engine.levelFactory.DeviceFactory;
import aee.exception.AeeException;

/**
 * Object representation of a "device table". This is incarnated as a CSV file
 */
public class DeviceTable extends TypedObject {
	private List<Device> devices;
	private static String ElementName = "devicetable";
	
	/**
	 * Constructor builds a device table from XML 
	 * @param level    The level
	 * @param root     The root "devicetable" element
	 * @throws AeeException if any unexpected XML errors detected
	 */
	@SuppressWarnings("unchecked")
	public DeviceTable(int level, Element root) throws AeeException {
		super(root, ElementName);
		
		// Each child must be a device element
		List<Element> children = root.getChildren();
		devices                = new ArrayList<Device>(children.size());
		for (Element child : children) {
			devices.add(DeviceFactory.create(level, child));
		}
	}
	
	/**
	 * Report all devices in the table
	 * @return A list of the devices
	 */
	public List<Device> getDevices() {
		return new ArrayList<Device>(devices);
	}
	
	/**
	 * Report a map of all device names indexed by their device id
	 * @return A map of device names
	 */
	public Map<Integer, String> getNameTable() {
		Map<Integer, String> names = new HashMap<Integer, String>();
		for (Device device : devices) {
			names.put(device.getId(), device.getName());
		}
		return names;
	}
}
