/
area/
classes/net/sourceforge/pain/logic/
classes/net/sourceforge/pain/logic/event/
classes/net/sourceforge/pain/logic/fn/util/
classes/net/sourceforge/pain/network/console/
classes/net/sourceforge/pain/plugin/
classes/net/sourceforge/pain/plugin/reset/
classes/net/sourceforge/pain/plugin/shutdown/
classes/net/sourceforge/pain/plugin/social/
classest/net/sourceforge/pain/db/data/
doc/
doc/paindb/resources/
src/net/sourceforge/pain/logic/
src/net/sourceforge/pain/logic/event/
src/net/sourceforge/pain/logic/fn/util/
src/net/sourceforge/pain/network/console/
src/net/sourceforge/pain/network/console/telnet/
src/net/sourceforge/pain/plugin/
src/net/sourceforge/pain/plugin/command/
src/net/sourceforge/pain/plugin/reset/
src/net/sourceforge/pain/plugin/shutdown/
src/net/sourceforge/pain/plugin/social/
src/net/sourceforge/pain/util/
tests/
tests/net/sourceforge/pain/db/data/
package net.sourceforge.pain.logic.event.console.command.builder;

import net.sourceforge.pain.data.prototype.*;
import net.sourceforge.pain.db.*;
import net.sourceforge.pain.logic.fn.*;
import net.sourceforge.pain.network.console.*;
import net.sourceforge.pain.util.*;

/**
 * PAiN  Date: 05.06.2003  Time: 1:40:02
 */
public final class BC_Show extends BuilderCommand {
	private static final String spacer = "                  ";
	private static String header = null;

	public void processBuilderCommand(BuilderShell p, String args) throws Exception {
		final Prototype role = p.builder.getEditedRole();
		if (role == null) {
			MessageOutFn.outln(p.console, "No active role found!");
		} else {
			final DbClass clazz = role.getDbClass();
			final int nFields = clazz.getNumberOfFields();
			if (header == null) {
				header = "{cName" + spacer.substring(4);
				header += "Type" + spacer.substring(4);
				header += "Value{x";
			}
			Log.debug(header);
			MessageOutFn.outln(p.console, header);
			for (int fid = 2; fid < nFields; fid++) { //fid = 0 is Ref to Root
				String name = clazz.getFieldName(fid);
				name += addSpaces(name);
				final int type = clazz.getFieldType(fid);
				final String value;
				switch (type) {
					case DbType.BOOLEAN:
						value = "" + role.getBoolean(fid);
						break;
					case DbType.BYTE:
						value = "" + role.getByte(fid);
						break;
					case DbType.CHAR:
						value = "" + role.getChar(fid);
						break;
					case DbType.DOUBLE:
						value = "" + role.getDouble(fid);
						break;
					case DbType.FLOAT:
						value = "" + role.getFloat(fid);
						break;
					case DbType.INT:
						value = "" + role.getInt(fid);
						break;
					case DbType.LONG:
						value = "" + role.getLong(fid);
						break;
					case DbType.SHORT:
						value = "" + role.getShort(fid);
						break;
					case DbType.STRING:
						value = ""+role.getString(fid);
						break;
					default:
						value = "unparsed";
				}
				String typeStr = DbType.name(type);
				typeStr += addSpaces(typeStr);
				MessageOutFn.outln(p.console, name + typeStr + value);
			}
		}
	}

	private String addSpaces(String value) {
		if (value.length() > spacer.length()) {
			return "";
		}
		return spacer.substring(value.length());
	}

	public void showHelp(Console console) {
		MessageOutFn.outln(console, "Builder command SHOW shows field names, field types and values for edited prototypes role");
		MessageOutFn.outln(console, "Usage: show");
	}

}