/
codebase/
codebase/area/
codebase/doc/
codebase/etc/
codebase/src/net/sourceforge/pain/data/trigger/
codebase/src/net/sourceforge/pain/logic/
codebase/src/net/sourceforge/pain/logic/affect/
codebase/src/net/sourceforge/pain/logic/event/
codebase/src/net/sourceforge/pain/logic/event/deploy/
codebase/src/net/sourceforge/pain/logic/event/guitool/
codebase/src/net/sourceforge/pain/logic/event/guitool/event/
codebase/src/net/sourceforge/pain/logic/fn/util/
codebase/src/net/sourceforge/pain/logic/trigger/
codebase/src/net/sourceforge/pain/logic/trigger/impl/
codebase/src/net/sourceforge/pain/network/console/
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/plugin/command/
codebase/src/net/sourceforge/pain/plugin/reset/
codebase/src/net/sourceforge/pain/plugin/shutdown/
codebase/src/net/sourceforge/pain/plugin/social/
codebase/src/net/sourceforge/pain/util/
db/doc/javadoc/resources/
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/
tests/
tests/src/
tests/src/net/sourceforge/pain/db/data/
package net.sourceforge.pain.db;

import java.io.*;
import java.util.*;

/**
 * Persistent Class for DbObject
 */
public interface DbClass {

	public PainDB getDB();

	public int getNumberOfFields();

	public String getClassName();

	/**
	 * @param n number of field
	 * @return field name
	 */
	public String getFieldName(int n);

	/**
	 * @param n number of field
	 * @return field type {@link DbType class constants}
	 */
	public byte getFieldType(int n);

	/**
     * @param weak ignores class extent modifications (new objects creation, object removal)
     * during iteration if 'weak' is true.
     * 'weak'==true will lead to ConcurredModificationExcepiton if class extend is changing
     * during iteration
     * Weak iterator will see all new objects created during it's traversal
     * WARN: weakIterator could throw IllegalStateException
     * if the 'next' object was removed between 'hasNext' and 'next' method call and there is
     * no more objects to iterate (should call these methods locally in code)
	 * @return Iterator instance to iterate all objects (not deleted)
	 * of this class in database
	 */
	public Iterator extentIterator(boolean weak);

    /** same extentIterator(false) */
    public Iterator extentIterator();

	/**
	 * @return number of objects for this DbClass in Database (without objects in deleted state)
	 */
	public int getNumberOfObjects();

	/**
	 * removes all objects for this class and dbClass itself
	 */
	public void delete();

	/**
	 * @return serializable class id.
	 */
	public Serializable getOid();

    /** this is optimization method
     * specially produced for PAiN Mud Codebase
     * for performance purpose
     * It use knowledge that index id for the class
     * stays the same whole DbClass instance lifetime
     * (But it couldbe reused after class removal)
     */
    public int pain_getIndexId();

}