/
codebase/src/net/sourceforge/pain/admin/console/command/
codebase/src/net/sourceforge/pain/data/role/
codebase/src/net/sourceforge/pain/network/console/telnet/
codebase/src/net/sourceforge/pain/network/guitool/
codebase/src/net/sourceforge/pain/plugin/
codebase/src/net/sourceforge/pain/util/
db/src/net/sourceforge/pain/util/
gui/
gui/lib/
gui/src/net/sourceforge/pain/tools/guitool/dbbrowse/
gui/src/net/sourceforge/pain/tools/guitool/dialog/
gui/src/net/sourceforge/pain/tools/guitool/menu/
gui/src/net/sourceforge/pain/tools/guitool/resources/
gui/src/net/sourceforge/pain/tools/guitool/resources/images/
gui/src/net/sourceforge/pain/tools/guitool/resources/images/explorer/
mudlibs/tinylib/
mudlibs/tinylib/area/
mudlibs/tinylib/etc/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/data/affect/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/data/prototype/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/data/trigger/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/logic/affect/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/logic/event/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/logic/event/deploy/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/logic/event/guitool/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/logic/event/guitool/event/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/logic/fn/util/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/logic/trigger/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/logic/trigger/impl/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/plugin/command/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/plugin/reset/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/plugin/shutdown/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/plugin/social/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/util/
tests/
tests/src/
tests/src/net/sourceforge/pain/db/data/
package net.sourceforge.pain.db;

/**
 * Class schema for the persistent object fields.
 * Any class that extends {@link DbObject} should provide its class schema.<br>
 * DbClassSchema is two arrays: types of fields and names of fields.
 * All supported field types specified in {@link DbType} class
 */
public final class DbClassSchema {

	final byte[] fieldTypes;
	final String[] fieldNames;


	public DbClassSchema(final byte[] types, final String[] names) {
		fieldTypes = types;
		fieldNames = names;
		check();
	}

	private void check() {
		final int len = fieldNames.length;
		for (int i = 0; i < len; i++) {
			if (!DbType.isValidDbType(fieldTypes[i])) {
				throw new RuntimeException("illegal field type:" + fieldTypes[i] + " name:"+fieldNames[i]+" fieldNum:"+i);
			}
			if (fieldNames[i] == null || fieldNames[i].length() == 0) {
				throw new RuntimeException("wrong field name!:'" + fieldNames[i] + "' fieldNum:" + i);
			}
			for (int j = 0; j < i; j++) {
				if (fieldNames[j].equalsIgnoreCase(fieldNames[i])) {
					throw new RuntimeException("dublicate name:" + fieldNames[i]);
				}
			}
		}
	}
}