/**
 * This file is part of CloudML [ http://cloudml.org ]
 *
 * Copyright (C) 2012 - SINTEF ICT
 * Contact: Franck Chauvel <franck.chauvel@sintef.no>
 *
 * Module: root
 *
 * CloudML is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation, either version 3 of
 * the License, or (at your option) any later version.
 *
 * CloudML 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 Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General
 * Public License along with CloudML. If not, see
 * <http://www.gnu.org/licenses/>.
 */
package org.cloudml.ui.graph;

import java.lang.reflect.Field;

import javax.swing.table.AbstractTableModel;

import org.cloudml.codecs.Vertex;
import org.cloudml.core.InternalComponentInstance;
import org.cloudml.core.VMInstance;

public class CPIMTable extends AbstractTableModel{
	private Vertex v;
	private final String[] heads = {"Property", "Value"};
	private final Field[]  properties;

	public CPIMTable(Vertex v){
		super();
		this.v=v;
		Class c;
		if(v.getType().equals("node"))
			c=((VMInstance)v.getInstance()).getType().getClass();
		else c=((InternalComponentInstance)v.getInstance()).getType().getClass();
		this.properties=c.getDeclaredFields();
	}

	public int getRowCount() {
		return properties.length;
	}

	public int getColumnCount() {
		return heads.length;
	}

	@Override
	public String getColumnName(int pCol) {
		return heads[pCol];
	}

	public Object getValueAt(int rowIndex, int columnIndex) {
		Object o=null;
		switch(columnIndex){
		case 0:
			return properties[rowIndex].getName();
		default:
			try {
				properties[rowIndex].setAccessible(true);
				if(v.getType().equals("node"))
					o=properties[rowIndex].get(((VMInstance)v.getInstance()).getType());
				else o=properties[rowIndex].get(((InternalComponentInstance)v.getInstance()).getType());
			} catch (IllegalArgumentException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IllegalAccessException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			return o+"";
		}
	}

}
