format 75
"orm" // iplan::orm
  revision 233
  modified_by 5 "jviqueira"
  // class settings
  //class diagram settings
  draw_all_relations default hide_attributes default hide_operations default hide_getset_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_members_context default show_members_multiplicity default show_members_initialization default show_attribute_modifiers default member_max_width 0 show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_relation_modifiers default show_relation_visibility default show_infonote default shadow default show_stereotype_properties default
  //use case diagram settings
  package_name_in_tab default show_context default auto_label_position default draw_all_relations default class_drawing_mode default shadow default show_stereotype_properties default
  //sequence diagram settings
  show_full_operations_definition default write_horizontally default class_drawing_mode default drawing_language default draw_all_relations default shadow default show_stereotype_properties default show_class_context_mode default show_msg_context_mode default
  //collaboration diagram settings
  show_full_operations_definition default show_hierarchical_rank default write_horizontally default drawing_language default package_name_in_tab default show_context default show_msg_context default draw_all_relations default shadow default show_stereotype_properties default
  //object diagram settings
   write_horizontally default package_name_in_tab default show_context default auto_label_position default draw_all_relations default shadow default show_stereotype_properties default
  //component diagram settings
  package_name_in_tab default show_context default auto_label_position default draw_all_relations default shadow default
  draw_component_as_icon default show_component_req_prov default show_component_rea default show_stereotype_properties default
  //deployment diagram settings
  package_name_in_tab default show_context default write_horizontally default auto_label_position default draw_all_relations default shadow default
  draw_component_as_icon default show_component_req_prov default show_component_rea default show_stereotype_properties default
  //state diagram settings
  package_name_in_tab default show_context default auto_label_position default write_trans_label_horizontally default show_trans_definition default draw_all_relations default shadow default
  show_activities default region_horizontally default drawing_language default show_stereotype_properties default
  //activity diagram settings
  package_name_in_tab default show_context default show_opaque_action_definition default auto_label_position default write_flow_label_horizontally default draw_all_relations default shadow default
  show_infonote default drawing_language default show_stereotype_properties default
  
  php_dir "iplan/orm"
  classview 134533 "ORM Class Diagram"
    //class diagram settings
    draw_all_relations default hide_attributes default hide_operations default hide_getset_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_members_context default show_members_multiplicity default show_members_initialization default show_attribute_modifiers default member_max_width 0 show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_relation_modifiers default show_relation_visibility default show_infonote default shadow default show_stereotype_properties default
    //collaboration diagram settings
    show_full_operations_definition default show_hierarchical_rank default write_horizontally default drawing_language default package_name_in_tab default show_context default show_msg_context default draw_all_relations default shadow default show_stereotype_properties default
    //object diagram settings
     write_horizontally default package_name_in_tab default show_context default auto_label_position default draw_all_relations default shadow default show_stereotype_properties default
    //sequence diagram settings
    show_full_operations_definition default write_horizontally default class_drawing_mode default drawing_language default draw_all_relations default shadow default show_stereotype_properties default show_class_context_mode default show_msg_context_mode default
    //state diagram settings
    package_name_in_tab default show_context default auto_label_position default write_trans_label_horizontally default show_trans_definition default draw_all_relations default shadow default
    show_activities default region_horizontally default drawing_language default show_stereotype_properties default
    //class settings
    //activity diagram settings
    package_name_in_tab default show_context default show_opaque_action_definition default auto_label_position default write_flow_label_horizontally default draw_all_relations default shadow default
    show_infonote default drawing_language default show_stereotype_properties default
    associated_deployment_view deploymentview_ref 141189 // ORM Deployment
    comment "La idea tras este esquema es que los objetos que tengan que tener un estado persistente sean especializaciones de DataBaseObject.
Las clases del esquema proveen:
 - abstraccin del motor de base de datos (a travs de las clases de iplan.database)
 - una forma de extender clases preocupandose slo de los atributos propios de la subclase, simplificando la construccin de jerarquias. Esto se logra a travs del mtodo setTable() y addField() del ORM Definition.
 - servicios de mantenimiento de objetos como el guardado o carga selectiva (slo si es necesario), almacenamiento recursivo de las collecciones de objetos y otros relacionados (consulta de objetos en memoria, etc...)
    * El guardado selectivo se realiza en el mtodo SAVE en base al recalculo del hash y la comparacin con el hash original, si son diferentes es que el objeto cambio y debe guardarse. Adems si el ID esta seteado se hace un UPDATE y sino un INSERT.
    * La carga selectiva o la deteccin de aquellos objetos que ya han sido recuperados se realiza en el mtodo LOAD, preguntando primero si al ORM si ya tiene registrado un objeto de esa clase, con el ID indicado. ORM cuenta con mtodos para registrar y desregistrar objetos y mantiene una coleccin de los objetos recuperados en un arreglo llamado \"objects[clase][id]\".
    * Para saber cuales campos son colecciones de objetos, hay un tipo que es COLLECTION. Cuando se hace Save, se verifica si el atributo es de tipo collection, si es as se lo deja para actualizarse al final. Primero se actualiza el registro del objeto actual y luego se hace un loop sobre cada atributo collection guardando (ejecutando el mtodo SAVE) cada elemento.

ATENCION!!! Si se hace que la Definicin soporte una tabla para LOAD y otra para SAVE se pueden hacer migraciones!!! :)

"
    classdiagram 141189 "ORM Classes"
      draw_all_relations no hide_attributes default hide_operations default hide_getset_operations default show_members_full_definition no show_members_visibility default show_members_stereotype default show_members_context default show_members_multiplicity default show_members_initialization default show_attribute_modifiers default member_max_width 0 show_parameter_dir default show_parameter_name yes package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_relation_modifiers default show_relation_visibility default show_infonote default shadow default show_stereotype_properties default
      comment "DUDA:

El objeto hereda de DatabaseObject. DatabaseObject redirecciona todos los atributos de la instancia a las posiciones de memoria de un array, utilizando para ello la informacin del ORMDefinition del objeto en cuestin.
El Array donde se direccionan los atributos es una instancia de ORMAttributes. ORMAttributes es el encargado de saber qu tablas se modificaron y cuales no.

//El modo de uso de esta jerarqua sera el siguiente:
Class Client extends DataBaseObject {
	... 
	define() {
		$definition = super->define();
		$definition->setTable('PERSON')
			  ->addField('person_id', INT, true)
			  ->addField('person_name', STRING, false)
			  ->addField('person_age', INT, false);
		$definition->setTable('CLIENT')
			  ->addField('client_id', INT, true)
			  ->addField('client_person', INT, false)
			  ->addField('client_number', LONG, false);
		return $definition;
	}
}
Se permite ms de una tabla para el caso de que las jerarquas se implementen en tablas distintas. El mtodo \"setTable\" setea una variable predeterminada y los subsiguientes llamados a mtodos de configuracin del ORM toman esa tabla como predeterminada. OJO: es de fundamental importancia respetar el setTable(), los llamados a todo lo que tenga que ver a esa tabla y recin luego llamar de nuevo a setTable(). Es decir, NO SE PUEDE hacer:
setTable('PERSON');
setTable('CLIENT');
addField(...)
Porque todos los llamados a addField() se asociaran con CLIENT y no con PERSON.

Con esto es posible \"determinar\" con cierta atomicidad qu tabla requiere actualizacin. Se debe llevar un HASH por cada tabla y uno global del objeto:
	ormData['table']['orm_hash']=SHA1('...');
	ormData['orm_hash']=SHA1('...');

Tambin (debido a la particularidad del uso de las base de datos) es necesario setear las funciones que hagan la administracin en cada tabla. Esto se hace con los mtodos:
	setInsertProcedure('yoDoyAlta(:name, :age)', RETURN_ID|NOT_RETURN_ID, 'table');

TECNICA: as como el ORM tiene una cach de todo, las clases de los objetos pueden ahorrar bastante costo de memoria si en vez de instanciar N veces las mismas variables y setearlas en su constructor, las \"referencian\" de un 3er objeto. Sugerido por FlyWeight pattern.
"
      size A2
    end

    class 295685 "AbstractDataBase"
      abstract visibility package 
      cpp_decl ""
      java_decl ""
      php_decl "${comment}${final}${abstract}class ${name}${extends}${implements} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl ""
      explicit_switch_type ""
      
      comment "Ac se abstraer la plataforma de base de datos"
      operation 433285 "getData"
	abstract preserve_cpp_body_indent cpp_virtual public explicit_return_type "array"
	nparams 3
	  param in name "table" explicit_type "string"
	  param in name "id" explicit_type "int"
	  param in name "fields" explicit_type "array"
	    defaultvalue "\"\""
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Dada una tabla y el identificador de registros, devuelve los valores de los campos especificados.
@abstract
@param $table string el nombre de la tabla
@param $id long el identificador de la fila en la que estamos interesados
@param $fields array un arreglo de strings con los nombres de las columnas a recuperar
@return array|false un arreglo asociativo (field=>value) con los valores recuperados de la base o false si hubo algn error."
      end

      operation 433413 "getField"
	abstract preserve_cpp_body_indent cpp_virtual public explicit_return_type "mixed"
	nparams 3
	  param in name "table" explicit_type "string"
	  param in name "id" explicit_type "int"
	  param in name "field" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Retorna el valor del campo especificado. El nombre de la columna debe ser el simil al campo definido en la base de datos. La intencin es usarlo para recuperar campos BLOB, CLOB y otros \"pesados\" sobre demanda.

@param string $table el nombre de la tabla
@param int $id el identificador del registro
@param string $field el nombre del campo a recuperar

@return mixed el valor del campo recuperado."
      end

      operation 433541 "filter"
	abstract preserve_cpp_body_indent cpp_virtual public explicit_return_type "array"
	nparams 6
	  param in name "table" explicit_type "string"
	  param in name "fields" explicit_type "array"
	  param in name "conditions" explicit_type "array"
	    defaultvalue "\"\""
	  param in name "order" explicit_type "array"
	    defaultvalue "\"\""
	  param in name "from" explicit_type "int"
	    defaultvalue "null"
	  param in name "count" explicit_type "int"
	    defaultvalue "null"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}, ${p3}${v3}, ${p4}${v4}, ${p5}${v5}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Igual a getData() pero mltiples filas. La idea sera recibir \"cuaternas\" que armen el SQL a ejecutar en base a la iteracin sobre los parmetros (hasta que se acaben) y un gran switch sobre \"operation\".
@param string $table el nombre de la tabla desde la cual recuperar los datos
@param array $fields un arreglo de strings con los nombres de los campos a recuperar
@param array $conditions otro arreglo con los condicionales codificados, cada uno, de la siguiente forma:array(operation, leftValue, rightValue, connector). Usar AbstractDataBase::makeCondition().
@param array $order se pasa aqu un arreglo de strings con formato \"nombreColumna [ASC|DESC]\", lo cual ordenar el conjunto de resultados.
@param int $from indica a partir de qu fila del resultset se desea acceder. Si se indica null trae desde la primer fila.
@param int $count indica cuntas filas a partir del $from se deben recuperar, si se indica null se recuperan todas.
@return array|false el conjunto de resultados o falso si hubo algn error
"
      end

      operation 433669 "insert"
	abstract preserve_cpp_body_indent cpp_virtual public explicit_return_type "int"
	nparams 3
	  param in name "table" explicit_type "string"
	  param in name "fields" explicit_type "array"
	  param in name "useGenerator" explicit_type "bool"
	    defaultvalue "true"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Inserta un registro en la tabla con los campos que se indiquen.

@param string $table el nombre de la tabla en la que se desea insertar
@param array $fields un arreglo con los campos a insertar. Ntese que las claves son los FieldNames y que all se instarn los valores de dichas claves.
@param boolean $useGenerator un booleano que indica si al hacer un insert se debe autodetectar la clave primaria y emplear el generador de dicha clave o si slo se emplean los valores pasados por parmetro.

@return int el identificador con el cual qued el registro en la tabla.
"
      end

      operation 433797 "update"
	abstract preserve_cpp_body_indent cpp_virtual public explicit_return_type ""
	nparams 3
	  param in name "table" explicit_type "string"
	  param in name "fields" explicit_type "array"
	  param in name "conditions" explicit_type "array"
	    defaultvalue "\"\""
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Realiza un UPDATE sobre la tabla y los campos indicados, es parecido a filter.

@param string $table el nombre de la tabla a actualizar
@param array $fields un arreglo cuyas claves son los nombres de los campos a actualizar.
@param array $conditions otro arreglo donde cada elemento es un arreglo con el siguiente formato: array(field, operation, value1, value2, connector) el cual se puede generar con la funcin makeCondition() de cualquier miembro de la jerarqua de AbstractDataBase.

@return int|false el nmero de filas afectadas o false si hubo error"
      end

      operation 440325 "delete"
	abstract preserve_cpp_body_indent cpp_virtual public explicit_return_type ""
	nparams 2
	  param in name "table" explicit_type "string"
	  param in name "what" explicit_type "mixed"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Borra un registro de la tabla segn su id o un conjunto de condiciones.

@param string $table el nombre de la tabla sobre la cual hacer el borrado.
@param int|array $what puede ser un entero (el id) o un arreglo de condiciones.

@return int|false la cantidad de filas afectadas o false si hubo error"
      end

      operation 596997 "addRelation"
	abstract preserve_cpp_body_indent cpp_virtual public explicit_return_type "boolean"
	nparams 2
	  param in name "table" explicit_type "string"
	  param in name "fields" explicit_type "array"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Agrega un registro de relacin de una relacin M:N

@param string $table el nombre de la tabla relacin
@param array $fields un arreglo indexado por el nombre del campo de la base de datos

@return boolean Retorna TRUE si la operacin se realiz con xito, FALSE sino."
      end

      operation 603781 "delRelation"
	abstract preserve_cpp_body_indent cpp_virtual public explicit_return_type "bool"
	nparams 2
	  param in name "table" explicit_type "string"
	  param in name "fields" explicit_type "array"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Quita un registro de relacin de una relacin M:N

@param string $table el nombre de la tabla relacin
@param array $fields un arreglo indexado por el nombre del campo de la base de datos para filtrar

@return boolean Retorna TRUE si la operacin se realiz con xito, FALSE sino."
      end

      operation 446853 "count"
	abstract preserve_cpp_body_indent cpp_virtual public explicit_return_type ""
	nparams 1
	  param inout name "coded_sql" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Similar a execute() pero slo contabiliza la cantidad de registros."
      end

      operation 542213 "makeCondition"
	abstract preserve_cpp_body_indent cpp_virtual public explicit_return_type "array"
	nparams 4
	  param in name "operation" explicit_type "string"
	  param in name "leftValue" explicit_type "mixed"
	  param in name "rightValue" explicit_type "mixed"
	  param in name "connector" explicit_type "string"
	    defaultvalue "\"\""
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}, ${p3}${v3}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Funcin de utilera para crear una condicin

@param string $operation la operacin de comparacin o verificacin: =, &lt;&gt;, LIKE, IN, NOT, BETWEEN. En el caso de IN la funcin espera que el rightValue sea un array y separa sus componentes por \",\" y los encierra entre parntesis.
@param mixed $leftValue el primer operando
@param mixed $rightValue el segundo operando
@connector string $connector el conector con el que se debe unir esta condicin con la siguiente (AND, OR)
@return array el arreglo de la condicin formateado"
      end

      classrelation 450949 // <dependency>
	relation 450053 -_->
	  a default
	    php "${type}"
	    classrelation_ref 450949 // <dependency>
	  b parent class_ref 361221 // DMLOperationFailed
      end

      operation 589829 "php2db"
	abstract preserve_cpp_body_indent cpp_virtual public explicit_return_type "mixed"
	nparams 2
	  param in name "value" explicit_type "mixed"
	  param in name "type" explicit_type "int"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Convierte valores PHP a la representacin necesaria para que la base de datos lo entienda. Debe ser utilizado para pasar los \"values\" en las funciones.
@param mixed $value el valor nativo de PHP que se desea convertir
@param int $type el tipo al que queremos castear, adopta las constates de ORM_TYPES

@return mixed El valor que requiere la base de datos"
      end

      operation 589957 "db2php"
	abstract preserve_cpp_body_indent cpp_virtual public explicit_return_type ""
	nparams 2
	  param in name "value" explicit_type "mixed"
	  param in name "type" explicit_type "int"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Convierte valores devueltos por la base de datos a la representacin PHP solicitada. Debe ser utilizado para pasar los \"values\" en las funciones.
@param mixed $value el valor nativo de PHP que se desea convertir
@param int $type el tipo al que queremos castear, adopta las constates de ORM_TYPES

@return mixed El valor convertido a su representacin PHP ms prxima"
      end

      operation 596741 "getDateTime"
	abstract preserve_cpp_body_indent cpp_virtual public explicit_return_type "datetime"
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Retorna un valor de fecha y hora de la base.

@return datetime El momento en el cual se efecta el llamado segn la base de datos."
      end

      operation 693637 "getConnection"
	abstract preserve_cpp_body_indent cpp_virtual public return_type class_ref 174341 // Connection
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Devuelve la conexin usada por la instancia.

@return Connection La conexin que utiliza la instancia de base de datos"
      end

      operation 2059141 "updateLob"
	abstract preserve_cpp_body_indent cpp_virtual public explicit_return_type "bool"
	nparams 5
	  param in name "table" explicit_type "string"
	  param in name "id" explicit_type "string"
	  param in name "field" explicit_type "string"
	  param inout name "value" explicit_type "mixed"
	  param in name "type" explicit_type "int"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}, ${p3}${v3}, ${p4}${v4}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Graba un campo de LOB (CLOB, BLOB, etc...)

@param $table string el nombre de la tabla
@param $id string el identificador de la fila en la tabla
@param $field string el nombre del campo donde se guardará el valor
@param $value mixed el valor a guardar
@param $type int el tipo de LOB de que se trata.

@return bool devuelve TRUE si todo salió bien y FALSE en caso contrario"
      end
    end

    class 308741 "OracleDatabase"
      visibility package 
      cpp_decl ""
      java_decl ""
      php_decl "${comment}${final}${abstract}class ${name}${extends}${implements} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl ""
      explicit_switch_type ""
      
      classrelation 350469 // <generalisation>
	relation 349701 ---|>
	  a public
	    php "${type}"
	    classrelation_ref 350469 // <generalisation>
	  b parent class_ref 295685 // AbstractDataBase
      end

      attribute 308741 "connection"
	protected type class_ref 201989 // OracleConnection
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	set_oper operation_ref 481669 // setConnection
	comment "@var OracleConnection una conexin a la base de datos Oracle"
      end

      attribute 315269 "statements"
	private explicit_type "array"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "Un array con todos los prepared statements para llamar a los procedures del package"
      end

      attribute 1415045 "version2Enabled"
	private explicit_type "bool"
	init_value "false"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var bool indica si se activa el uso del paquete optimizado o no."
      end

      attribute 1415173 "package"
	private explicit_type "string"
	init_value "'PKG_WEB_ACCESSOR'"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var string el nombre del paquete de Oracle a utilizar"
      end

      operation 481669 "setConnection"
	force_body_gen public explicit_return_type "void"
	nparams 1
	  param in name "value" type class_ref 201989 // OracleConnection
	
	cpp_name_spec "set_${name}"
	
	java_name_spec "set${Name}"
	php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${)}
{
  $this->connection = ${p0};
}
"
	php_name_spec "set${Name}"
	
	python_name_spec "set${Name}"
	
	idl_name_spec "set_${name}"
	set_of_attribute attribute_ref 308741 // connection
      end

      operation 453381 "__construct"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 1
	  param in name "connection" type class_ref 201989 // OracleConnection
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Crea una abstracción de la base de datos.

@param OracleConnection $connection una conexión a la base de datos deseada.

@return OracleDatabase una instancia de OracleDatabase que sirve para trabajar con el ORM."
      end

      operation 453509 "getData"
	preserve_cpp_body_indent cpp_virtual public explicit_return_type "array"
	nparams 3
	  param in name "table" explicit_type "string"
	  param in name "id" explicit_type "int"
	  param in name "fields" explicit_type "array"
	    defaultvalue "\"\""
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Dada una tabla y el identificador de registros, devuelve los valores de los campos especificados.
@param $table string el nombre de la tabla
@param $id long el identificador de la fila en la que estamos interesados
@param $fields array un arreglo de strings con los nombres de las columnas a recuperar
@return array|false un arreglo asociativo (field=>value) con los valores recuperados de la base o false si hubo algn error."
      end

      operation 453637 "filter"
	preserve_cpp_body_indent cpp_virtual public explicit_return_type "array"
	nparams 6
	  param in name "table" explicit_type "string"
	  param in name "fields" explicit_type "array"
	  param in name "conditions" explicit_type "array"
	    defaultvalue "\"\""
	  param in name "order" explicit_type "array"
	    defaultvalue "\"\""
	  param in name "from" explicit_type "int"
	    defaultvalue "null"
	  param in name "count" explicit_type "int"
	    defaultvalue "null"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}, ${p3}${v3}, ${p4}${v4}, ${p5}${v5}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Igual a getData() pero mltiples filas. La idea sera recibir \"cuaternas\" que armen el SQL a ejecutar en base a la iteracin sobre los parmetros (hasta que se acaben) y un gran switch sobre \"operation\".
@param string $table el nombre de la tabla desde la cual recuperar los datos
@param array $fields un arreglo de strings con los nombres de los campos a recuperar
@param array $conditions otro arreglo con los condicionales codificados, cada uno, de la siguiente forma:array(operation, leftValue, rightValue, connector). Usar AbstractDataBase::makeCondition().
@param array $order se pasa aqu un arreglo de strings con formato \"nombreColumna [ASC|DESC]\", lo cual ordenar el conjunto de resultados.
@param int $from indica a partir de qu fila del resultset se desea acceder. Si se indica null trae desde la primer fila.
@param int $count indica cuntas filas a partir del $from se deben recuperar, si se indica null se recuperan todas.
@return array|false el conjunto de resultados o falso si hubo algn error
"
      end

      operation 453765 "getField"
	preserve_cpp_body_indent cpp_virtual public explicit_return_type "mixed"
	nparams 3
	  param in name "table" explicit_type "string"
	  param in name "id" explicit_type "int"
	  param in name "field" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Retorna el valor del campo especificado. El nombre de la columna debe ser el simil al campo definido en la base de datos. La intencin es usarlo para recuperar campos BLOB, CLOB y otros \"pesados\" sobre demanda.

@param string $table el nombre de la tabla
@param int $id el identificador del registro
@param string $field el nombre del campo a recuperar

@return mixed el valor del campo recuperado."
      end

      operation 453893 "insert"
	preserve_cpp_body_indent cpp_virtual public explicit_return_type "int"
	nparams 3
	  param in name "table" explicit_type "string"
	  param in name "fields" explicit_type "array"
	  param in name "useGenerator" explicit_type "bool"
	    defaultvalue "true"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Inserta un registro en la tabla con los campos que se indiquen.

@param string $table el nombre de la tabla en la que se desea insertar
@param array $fields un arreglo con los campos a insertar. Ntese que las claves son los FieldNames y que all se instarn los valores de dichas claves.
@param boolean $useGenerator un booleano que indica si al hacer un insert se debe autodetectar la clave primaria y emplear el generador de dicha clave o si slo se emplean los valores pasados por parmetro.

@return int el identificador con el cual qued el registro en la tabla.
"
      end

      operation 454021 "update"
	preserve_cpp_body_indent cpp_virtual public explicit_return_type ""
	nparams 3
	  param in name "table" explicit_type "string"
	  param in name "fields" explicit_type "array"
	  param in name "conditions" explicit_type "array"
	    defaultvalue "\"\""
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Realiza un UPDATE sobre la tabla y los campos indicados, es parecido a filter.

@param string $table el nombre de la tabla a actualizar
@param array $fields un arreglo cuyas claves son los nombres de los campos a actualizar.
@param array $conditions otro arreglo donde cada elemento es un arreglo con el siguiente formato: array(field, operation, value1, value2, connector) el cual se puede generar con la funcin makeCondition() de cualquier miembro de la jerarqua de AbstractDataBase.

@return int|false el nmero de filas afectadas o false si hubo error"
      end

      operation 2045573 "updateBinary"
	preserve_cpp_body_indent cpp_virtual public explicit_return_type ""
	nparams 3
	  param in name "table" explicit_type "string"
	  param in name "id" explicit_type "string"
	  param in name "field" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Realiza un UPDATE sobre la tabla y los campos indicados, es parecido a filter.

@param string $table el nombre de la tabla a actualizar
@param string $id el identificador de la fila a actualizar
@param string $field el campo a actualizar.

@return int|false el número de filas afectadas o false si hubo error"
      end

      operation 454149 "delete"
	preserve_cpp_body_indent cpp_virtual public explicit_return_type ""
	nparams 2
	  param in name "table" explicit_type "string"
	  param in name "what" explicit_type "mixed"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Borra un registro de la tabla segn su id o un conjunto de condiciones.

@param string $table el nombre de la tabla sobre la cual hacer el borrado.
@param int|array $what puede ser un entero (el id) o un arreglo de condiciones.

@return int|false la cantidad de filas afectadas o false si hubo error"
      end

      operation 597125 "addRelation"
	preserve_cpp_body_indent cpp_virtual public explicit_return_type "boolean"
	nparams 2
	  param in name "table" explicit_type "string"
	  param in name "fields" explicit_type "array"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Agrega un registro de relacin de una relacin M:N

@param string $table el nombre de la tabla relacin
@param array $fields un arreglo indexado por el nombre del campo de la base de datos

@return boolean Retorna TRUE si la operacin se realiz con xito, FALSE sino."
      end

      operation 603909 "delRelation"
	preserve_cpp_body_indent cpp_virtual public explicit_return_type "bool"
	nparams 2
	  param in name "table" explicit_type "string"
	  param in name "fields" explicit_type "array"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Quita un registro de relacin de una relacin M:N

@param string $table el nombre de la tabla relacin
@param array $fields un arreglo indexado por el nombre del campo de la base de datos para filtrar

@return boolean Retorna TRUE si la operacin se realiz con xito, FALSE sino."
      end

      operation 454277 "count"
	preserve_cpp_body_indent cpp_virtual public explicit_return_type "int"
	nparams 1
	  param inout name "coded_sql" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Similar a execute() pero slo contabiliza la cantidad de registros."
      end

      operation 549381 "imp"
	preserve_cpp_body_indent public explicit_return_type "string"
	nparams 2
	  param in name "dataType" explicit_type "string"
	  param in name "params" explicit_type "array"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Devuelve un string con el tipo de datos instanciado y los valores de los params unidos separados por coma (,). Si el arreglo es vaco entonces devuelve el string NULL.
@param string $dataType el nombre del tipo de datos (ser puesto en maysculas y antecedido del nombre del package.
@param array $params un arreglo de strings que contiene los valores. Los mismos sern puestos entre comillas simples y concatenados separados por coma (,).
@return string un string que debe concatenarse directamente con la instruccin, consistente del package.dataType('value1', 'value2',...) o NULL"
      end

      operation 603653 "makeCondition"
	preserve_cpp_body_indent cpp_virtual public explicit_return_type "array"
	nparams 4
	  param in name "operation" explicit_type "string"
	  param in name "leftValue" explicit_type "mixed"
	  param in name "rightValue" explicit_type "mixed"
	  param in name "connector" explicit_type "string"
	    defaultvalue "\"AND\""
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}, ${p3}${v3}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Funcin de utilera para crear una condicin

@param string $operation la operacin de comparacin o verificacin: =, &lt;&gt;, LIKE, IN, NOT, BETWEEN. En el caso de IN la funcin espera que el rightValue sea un array y separa sus componentes por \",\" y los encierra entre parntesis.
@param mixed $leftValue el primer operando
@param mixed $rightValue el segundo operando
@connector string $connector el conector con el que se debe unir esta condicin con la siguiente (AND, OR)
@return array el arreglo de la condicin formateado"
      end

      operation 590085 "php2db"
	preserve_cpp_body_indent cpp_virtual public explicit_return_type "mixed"
	nparams 2
	  param in name "value" explicit_type "mixed"
	  param in name "type" explicit_type "int"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Convierte valores PHP a la representacin necesaria para que la base de datos lo entienda. Debe ser utilizado para pasar los \"values\" en las funciones.
@param mixed $value el valor nativo de PHP que se desea convertir
@param int $type el tipo al que queremos castear, adopta las constates de ORM_TYPES

@return mixed El valor que requiere la base de datos"
      end

      operation 590213 "db2php"
	preserve_cpp_body_indent cpp_virtual public explicit_return_type ""
	nparams 2
	  param in name "value" explicit_type "mixed"
	  param in name "type" explicit_type "int"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Convierte valores devueltos por la base de datos a la representacin PHP solicitada. Debe ser utilizado para pasar los \"values\" en las funciones.
@param mixed $value el valor nativo de PHP que se desea convertir
@param int $type el tipo al que queremos castear, adopta las constates de ORM_TYPES

@return mixed El valor convertido a su representacin PHP ms prxima"
      end

      operation 596869 "getDateTime"
	preserve_cpp_body_indent cpp_virtual public explicit_return_type "datetime"
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Retorna un valor de fecha y hora de la base.

@return datetime El momento en el cual se efecta el llamado segn la base de datos."
      end

      operation 631813 "sql_filter"
	preserve_cpp_body_indent public explicit_return_type "string"
	nparams 4
	  param in name "table" explicit_type "string"
	  param in name "fields" explicit_type "array"
	  param in name "alias" explicit_type "string"
	    defaultvalue "\"\""
	  param in name "conditions" explicit_type "array"
	    defaultvalue "\"\""
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}, ${p3}${v3}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Es una implementacin especial que se utiliza para brindar soporte a ORMQuery.
Toma una tabla, el conjunto de campos de retorno y la lista de condiciones de filtrado retornando una representacin de la misma.

@param string $table el nombre de la tabla sobre la que se va a filtrar.
@param array $fields una lista de los nombres de los campos a retornar.
@param array $conditions las condiciones de filtrado. Para generar la lista use makeCondition().

@return Una representacin encapsulada de la consulta.

@see sql_add_condition()
@see sql_execute()"
      end

      operation 638341 "sql_add_condition"
	preserve_cpp_body_indent public explicit_return_type "string"
	nparams 6
	  param inout name "main_sql" explicit_type "string"
	  param in name "table" explicit_type "string"
	  param in name "field" explicit_type "string"
	  param in name "operator" explicit_type "string"
	  param inout name "sql_select" explicit_type "string"
	  param in name "alias" explicit_type "string"
	    defaultvalue "\"\""
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}, ${p3}${v3}, ${p4}${v4}, ${p5}${v5}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Agrega una condicin de IN o NOT IN al sql indicado en base a otro select.

@param string $main_sql el sql codificado producto de un llamado previo a sql_filter() o sql_add_condition()
@param string $table el nombre de la tabla a la que pertenece el field que se va a filtrar
@param string field el campo que se validar
@param string operator el tipo de filtrado ('IN' o 'NOT IN')
@param string sql_select el select codificado que recupera la lista de claves
@param string alias por ahora no se usa y debe pasarse como \"\"

@return string un sql codificado.

@see sql_filter()
@see sql_execute()"
      end

      operation 828805 "sql_add_where"
	preserve_cpp_body_indent public explicit_return_type "string"
	nparams 2
	  param inout name "coded_sql" explicit_type "string"
	  param in name "conditions" explicit_type "array"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Agrega una condicin general (global) a la instruccin SQL codificada.

@param string $coded_sql el SQL Codificado
@param array $conditions las condiciones a agregar
@return string el SQL resultante encriptado"
      end

      operation 822021 "sql_join_table"
	preserve_cpp_body_indent public explicit_return_type "string"
	nparams 6
	  param inout name "coded_sql" explicit_type "string"
	  param in name "table" explicit_type "string"
	  param in name "alias" explicit_type "string"
	  param in name "fields" explicit_type "array"
	  param in name "conditions" explicit_type "array"
	  param in name "joinType" explicit_type "string"
	    defaultvalue "'INNER'"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}, ${p3}${v3}, ${p4}${v4}, ${p5}${v5}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Une mediante un JOIN los valores de la consulta actual con los de otra clase, utilizando para el emparejamiento las condiciones dadas e incorporando al conjunto de resultados los atributos indicados.
@param string	$coded_sql el sql codificado a modificar
@param string $table la tabla contra la que se va a hacer el JOIN
@param string $alias el alias de la tabla
@param array $fields los nuevos fields a incorporar en el conjunto de resultados
@param array $conditions las condiciones de emparejamiento del conjunto de resultados
@param string $joinType el tipo de unin (JOIN) que se har entre las consultas.

@return string La consulta resultante."
      end

      operation 822277 "sql_join"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 5
	  param inout name "coded_sql" explicit_type "string"
	  param inout name "coded_sql2" explicit_type "string"
	  param in name "alias" explicit_type "string"
	  param in name "fields" explicit_type "array"
	  param in name "conditions" explicit_type "array"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}, ${p3}${v3}, ${p4}${v4}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Une mediante un JOIN los valores de la consulta actual con los de otra clase, utilizando para el emparejamiento las condiciones dadas e incorporando al conjunto de resultados los atributos indicados.
@param string	$coded_sql el sql codificado a modificar
@param string $coded_sql2 la otra consulta contra la que se va a hacer el JOIN
@param string $alias el alias de la tabla
@param array $fields los nuevos fields a incorporar en el conjunto de resultados
@param array $conditions las condiciones de emparejamiento del conjunto de resultados"
      end

      operation 638469 "sql_execute"
	preserve_cpp_body_indent public explicit_return_type "array"
	nparams 4
	  param inout name "coded_sql" explicit_type "string"
	  param in name "order" explicit_type "array"
	    defaultvalue "null"
	  param in name "from" explicit_type "int"
	    defaultvalue "null"
	  param in name "count" explicit_type "int"
	    defaultvalue "null"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}, ${p3}${v3}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Ejecuta una consulta codificada con sql_filter() o sql_add_condition().

@param string $coded_sql la consulta codificada a ejecutar
@param array $order un arreglo con los nombres de los campos para el ordenamiento... se puede poner un espacio y ASC o DESC segn se desee.
@param int $from el primer registro del conjunto de resultados
@param int $count la cantidad de registros que se espera leer

@return array un arreglo con los campos solicitados

@see sql_filter()
@see sql_add_condition()"
      end

      operation 693765 "getConnection"
	preserve_cpp_body_indent cpp_virtual public return_type class_ref 174341 // Connection
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Devuelve la conexin usada por la instancia.

@return Connection La conexin que utiliza la instancia de base de datos"
      end

      operation 836101 "sql_execute2"
	preserve_cpp_body_indent public explicit_return_type "array"
	nparams 7
	  param inout name "coded_sql" explicit_type "string"
	  param in name "groups" explicit_type "array"
	    defaultvalue "null"
	  param in name "order" explicit_type "array"
	    defaultvalue "null"
	  param in name "from" explicit_type "int"
	    defaultvalue "null"
	  param in name "count" explicit_type "int"
	    defaultvalue "null"
	  param in name "maxFetch" explicit_type "int"
	    defaultvalue "null"
	  param in name "lobFields" explicit_type "array"
	    defaultvalue "null"
	nexceptions 1
	  exception class_ref 949765 // APIGoogleApps
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}, ${p3}${v3}, ${p4}${v4}, ${p5}${v5}, ${p6}${v6}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Ejecuta una consulta codificada con sql_filter() o sql_add_condition().

@param string $coded_sql la consulta codificada a ejecutar
@param array $groups un arreglo con los campos que se agruparán de la consulta
@param array $order un arreglo con los nombres de los campos para el ordenamiento... se puede poner un espacio y ASC o DESC según se desee.
@param int $from el primer registro del conjunto de resultados
@param int $count la cantidad de registros que se espera leer
@param int $maxFetch de ser especificado, la consulta se resuelve recuperando los datos de a bloques de ese tamaño (el tamaño se refiere a cantidad de filas, no tamaño del resultset)
@param array $lobFields en caso de especificarse, el método se cuidará de recuperar las filas de a una y cargar los valores de los LOBs
@return array un arreglo con los campos solicitados

@see sql_filter()
@see sql_add_condition()"
      end

      operation 836485 "sql_set_columns"
	preserve_cpp_body_indent public explicit_return_type "string"
	nparams 4
	  param inout name "coded_sql" explicit_type "string"
	  param in name "columns" explicit_type "array"
	  param in name "replace" explicit_type "bool"
	    defaultvalue "true"
	  param in name "distinct" explicit_type "bool"
	    defaultvalue "false"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}, ${p3}${v3}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Agrega o reemplaza el from de una sentencia SQL.

@param string $coded_sql el SQL Codificado
@param array $columns las columnas a agregar
@param boolean $replace especifica si el from existente debe preservarse o no.
@param boolean $distinct especifica si se agrega la palabra DISTINCT luego del SELECT. Este cambio es NO REVERSIBLE!!
@return string el SQL resultante encriptado"
      end

      operation 1974661 "enableBoost"
	preserve_cpp_body_indent public return_type class_ref 308741 // OracleDatabase
	nparams 1
	  param in name "enable" explicit_type "bool"
	    defaultvalue "true"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Hace que el ORM mejore su performance drásticamente =)

@param bool $enable un booleano en true para habilitar las nuevas características y false para seguir con las viejas.

@return OracleDatabase la base de datos con el flag activado"
      end

      operation 1974789 "isBoostEnabled"
	preserve_cpp_body_indent public return_type class_ref 308741 // OracleDatabase
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Consulta sobre el rendimiento de la base de datos

@return boolean indica si la conexión está en modo boost"
      end

      operation 2059397 "updateLob"
	preserve_cpp_body_indent cpp_virtual public explicit_return_type "bool"
	nparams 5
	  param in name "table" explicit_type "string"
	  param in name "id" explicit_type "string"
	  param in name "field" explicit_type "string"
	  param inout name "value" explicit_type "mixed"
	  param in name "type" explicit_type "int"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}, ${p3}${v3}, ${p4}${v4}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Graba un campo de LOB (CLOB, BLOB, etc...)

@param $table string el nombre de la tabla
@param $id string el identificador de la fila en la tabla
@param $field string el nombre del campo donde se guardará el valor
@param $value mixed el valor a guardar
@param $type int el tipo de LOB de que se trata.

@return bool devuelve TRUE si todo salió bien y FALSE en caso contrario"
      end
    end

    class 141317 "ORMObject"
      abstract visibility package 
      cpp_decl ""
      java_decl ""
      php_decl "${comment}${final}${visibility}${abstract}class ${name}${extends}${implements} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl ""
      explicit_switch_type ""
      
      ncouples 1
      key "other_requires" value "require_once('ORM.php');
require_once('ORMDefinition.php');"
      comment "Se trata de una interfaz que implementa los mtodos necesarios para brindar servicios de almacenamiento y recuperacin del objeto en la base de datos

En conjunto con ORM y las clases auxiliares, dan una solucin integral para la gestin del mapeo relacional.

//TODO: se podra reducir mucho cdigo haciendo una funcin \"getMyDefinition()\" que busque la definicin del objeto ya sea que tenga o no el ORM."
      attribute 485893 "definition"
	class_attribute package type class_ref 236293 // ORMDefinition
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 141445 "id"
	public explicit_type "int"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	get_oper operation_ref 467717 // getId
	set_oper operation_ref 467845 // setId
	comment "@var int El identificador del objeto"
      end

      attribute 238853 "ORMState"
	private explicit_type "int"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	get_oper operation_ref 467973 // getORMState
	set_oper operation_ref 468101 // setORMState
	comment "Un estado que puede ser:
NEW := NUEVO, es un objeto an no persistido en la base de datos, pero que de seguir la secuencia de eventos culminar insertandose en la base.
REMOVED := Es un objeto que se solicit para remocin de la base de datos. Es posible que alguna referencia quede apuntando a l y accediendo sus valores, pero los mismos deberan ser descartados. Posiblemente algn programa de LOG quiera ver como estaba al momento del DELETE o algo as.
REGISTERED := Significa que el objeto est persistido en la base de datos y que actualmente est bajo la vista del sistema ORM para preservar cualquier cambio.
UNREGISTERED := Significa que el objeto no est bajo seguimiento del Manager de ORM.
"
      end

      attribute 328709 "orm"
	protected type class_ref 167685 // ORM
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var ORM $orm la instancia de ORM que est gerenciando el objeto o null"
      end

      attribute 560261 "ORMModifying"
	private explicit_type "bool"
	init_value "false"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 342149 "ORMModifieds"
	private explicit_type "array"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var array un arreglo en el cual se almacenarn los campos modificados"
      end

      classrelation 376709 // <dependency>
	relation 375941 -_->
	  a private
	    php "${type}"
	    classrelation_ref 376709 // <dependency>
	  b parent class_ref 236293 // ORMDefinition
      end

      operation 163077 "__destroy"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
      end

      operation 177029 "__construct"
	preserve_cpp_body_indent public return_type class_ref 141317 // ORMObject
	nparams 1
	  param inout name "orm" type class_ref 167685 // ORM
	    defaultvalue "null"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Constructor predeterminado de los objetos derivados del ORM. Recibe opcionalmente una instancia del ORM al cual se desea que se registre la instancia. Esto afecta el estado y si la instancia desde su nacimiento va a ser monitoreada por el ORM.
@param ORM $orm una instancia del ORM que va a monitorear el objeto.
@return ORMObject la instancia del objeto"
      end

      operation 760837 "isset__"
	preserve_cpp_body_indent public explicit_return_type "boolean"
	nparams 1
	  param in name "variablename" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "ANULADO POR AHORA. Devuelve TRUE si la variable existe.

@param string $variablename el nombre de la variable.

@return boolean Retorna TRUE si la variable se encuentra definida o FALSE sino."
      end

      operation 288133 "define"
	class_operation preserve_cpp_body_indent public return_type class_ref 236293 // ORMDefinition
	nparams 1
	  param inout name "orm" type class_ref 167685 // ORM
	    defaultvalue "null"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Retorna un objeto de definición predeterminado al cual hay que agregarle los mapeos pertinentes.

@param ORM $orm el manejador de ORM para el cual se registra la clase
@return \\orm\\ORMDefinition la definición default"
      end

      operation 170373 "delete"
	preserve_cpp_body_indent public explicit_return_type "bool"
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Borra fsicamente un objeto de la base. Al borrarse el objeto adems se ponen a null los campos de las entidades relacionadas que lo referenciaban y se eliminan los registros de las tablas relacin M:N

@return boolean un booleando TRUE si la operacin fue concretada con xito o FALSE sino."
      end

      operation 162949 "&load"
	class_operation preserve_cpp_body_indent public explicit_return_type "void"
	nparams 3
	  param in name "id" explicit_type "int"
	  param inout name "orm" type class_ref 167685 // ORM
	  param in name "class" explicit_type "string"
	    defaultvalue "\"\""
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Recupera una instancia de la clase desde la base de datos. Este mtodo adems calcula el hash en base a los atributos. En combinacin con el mtodo save() permite abstraer a las clases subyacentes de la necesidad de determinar si el objeto fue alterado o no y si corresponde guardarlo.
Finalmente este mtodo registra el objeto en el ORM para su mantenimiento automtico.
@param $id int el identificador del objeto a recuperar
@param $orm ORM el gestor que solicita el objeto
@param string $class la clase que se quiere cargar. Si se omite se toma la clase invocada en forma predeterminada
@return ORMObject una instancia con los valores precargados

@todo prestar atencin en el LOAD que si se hace una carga de objetos masiva, es necesario verificar que los mismos no esten PRE registrados en el ORM o si lo estn y los hash no son los mismos enviar alguna excepcin al usuario."
      end

      operation 156293 "save"
	preserve_cpp_body_indent cpp_virtual public explicit_return_type "bool"
	nparams 1
	  param inout name "orm" type class_ref 167685 // ORM
	    defaultvalue "null"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Verifica si el objeto fue modificado y lo guarda.
Este método permite abstraer a las clases descendientes de la necesidad de determinar si el objeto fue alterado o no y oculta la complejidad subyacente a las clases descendientes.
@param ORM $orm opcionalmente se debe indicar la instancia del ORM que mantiene el objeto. Esto sólo es posible si el objeto es nuevo o DETACHED. En el caso que ya estuviera bajo monitoreo de un ORM arrojará una excepción.

@return boolean Un true si todo anduvo bien, false (o una excepción) si algo falló.

Se pensó que se podría hacer el cambio de un ORM a otro, pero el ID debería limpiarse, con lo cual sólo un INSERT se podría hacer sobre el destino y los objetos relacionados estarían aún con otro ORM lo cual es complicado (manejo de objetos distribudos) por lo cual se deja a consideración en futuras versiones, posiblemente en otra vida =)"
      end

      operation 515717 "getAttributes"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "@todo ELIMINAR ESTA FUNCIN

Retorna un arreglo de todos los atributos pblicos y protegidos del objeto (adems de algunos privados). Es para debug, no debe quedar en el objeto.

@return array La lista de los atributos"
      end

      operation 467717 "getId"
	force_body_gen const cpp_inline public explicit_return_type "int"
	nparams 0
	
	cpp_name_spec "get_${name}"
	final 
	java_name_spec "get${Name}"
	php_final php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  return $this->id;
}
"
	php_name_spec "get${Name}"
	
	python_name_spec "get${Name}"
	
	idl_name_spec "get_${name}"
	get_of_attribute attribute_ref 141445 // id
      end

      operation 467845 "setId"
	force_body_gen protected explicit_return_type "void"
	nparams 1
	  param in name "value" explicit_type "int"
	
	cpp_name_spec "set_${name}"
	
	java_name_spec "set${Name}"
	php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${)}
{
  $this->id = ${p0};
}
"
	php_name_spec "set${Name}"
	
	python_name_spec "set${Name}"
	
	idl_name_spec "set_${name}"
	set_of_attribute attribute_ref 141445 // id
      end

      operation 467973 "getORMState"
	force_body_gen const cpp_inline public explicit_return_type "int"
	nparams 0
	
	cpp_name_spec "get_${name}"
	final 
	java_name_spec "get${Name}"
	php_final php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  return $this->ORMState;
}
"
	php_name_spec "get${Name}"
	
	python_name_spec "get${Name}"
	
	idl_name_spec "get_${name}"
	get_of_attribute attribute_ref 238853 // ORMState
      end

      operation 468101 "setORMState"
	force_body_gen protected explicit_return_type "void"
	nparams 1
	  param in name "value" explicit_type "int"
	
	cpp_name_spec "set_${name}"
	
	java_name_spec "set${Name}"
	php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${)}
{
  $this->ORMState = ${p0};
}
"
	php_name_spec "set${Name}"
	
	python_name_spec "set${Name}"
	
	idl_name_spec "set_${name}"
	set_of_attribute attribute_ref 238853 // ORMState
      end

      operation 495109 "isModified"
	preserve_cpp_body_indent public explicit_return_type "bool"
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Indica si el objeto ha sufrido modificacin en sus atributos. Debe destacarse que los atributos directos del objeto son los que participan de esta comprobacin, por lo que las modificaciones en objetos asociados no son tenidas en cuenta.

@return boolean true si el objeto ha sido mofificado y falso sino."
      end

      operation 495237 "reload"
	preserve_cpp_body_indent public explicit_return_type "bool"
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "En el caso de los objetos que ya estn en base, vuelve a recargar la instancia con los valores de la base.
@return boolean true si la recarga fue realizada con xito o false sino"
      end

      operation 502277 "reset"
	preserve_cpp_body_indent protected explicit_return_type ""
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Resetea todos los indicadores de cambios del objetos, asumiendo que el estado actual es el de la base de datos si es que est monitoreado."
      end

      operation 502405 "__call"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 2
	  param in name "method" explicit_type "string"
	  param in name "args" explicit_type "array"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Magic Method sobreescrito para monitorear los pedidos a getXXX() y setXXX().
@param string $method el mtodo invocado
@prama array $args la lista de argumentos pasados como parmetro
@return mixed|exception si se ejecuta un getXXX se verifica que los argumentos sean vacios y si se ejecuta cun setXXX se chequea que slo un argumento sea pasado. Todo lo dems arroja una excepcin en runtime."
      end

      classrelation 337029 // <generalisation>
	relation 336261 ---|>
	  a public
	    php "${type}"
	    classrelation_ref 337029 // <generalisation>
	  b parent class_ref 289157 // PrivateAccesor
      end

      classrelation 317061 // <dependency>
	relation 316293 -_->
	  a package
	    comment "Se usa para las relaciones 1:N y N:M"
	    php "${type}"
	    classrelation_ref 317061 // <dependency>
	  b parent class_ref 256133 // ORMCollection
      end

      classrelation 370181 // <dependency>
	relation 369413 -_->
	  a default
	    php "${type}"
	    classrelation_ref 370181 // <dependency>
	  b parent class_ref 315269 // LazyLoader
      end

      classrelation 396421 // <realization>
	relation 395653 -_-|>
	  a public
	    php "${type}"
	    classrelation_ref 396421 // <realization>
	  b parent class_ref 269445 // ORM_STATUS
      end

      classrelation 409605 // <dependency>
	relation 408837 -_->
	  a default
	    php "${type}"
	    classrelation_ref 409605 // <dependency>
	  b parent class_ref 321925 // InternalError
      end

      operation 549637 "pluralize"
	preserve_cpp_body_indent protected explicit_return_type "string"
	nparams 1
	  param in name "attribute" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Retorna el plural de un nombre de atributo.

@param string $attribute el nombre de atributo que queremos poner el plural

@return string el nombre el plural."
      end

      classrelation 450821 // <dependency>
	relation 449925 -_->
	  a default
	    php "${type}"
	    classrelation_ref 450821 // <dependency>
	  b parent class_ref 361221 // DMLOperationFailed
      end

      classrelation 464389 // <dependency>
	relation 463365 -_->
	  a default
	    php "${type}"
	    classrelation_ref 464389 // <dependency>
	  b parent class_ref 367877 // ValueNotDefined
      end

      classrelation 471045 // <dependency>
	relation 470021 -_->
	  a default
	    php "${type}"
	    classrelation_ref 471045 // <dependency>
	  b parent class_ref 328581 // UnknowORM
      end

      operation 897029 "getter"
	class_operation preserve_cpp_body_indent public explicit_return_type "string"
	nparams 1
	  param in name "attribute" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Genera el string correspondiente al getter del atributo. Por ejemplo: getter('miNombre') = 'getMiNombre'.
@param string $attribute el nombre del atributo.
@return string el getter"
      end

      operation 897157 "setter"
	class_operation preserve_cpp_body_indent public explicit_return_type "string"
	nparams 1
	  param in name "attribute" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Retorna el plural de un nombre de atributo.

@param string $attribute el nombre de atributo que queremos poner el plural

@return string el nombre el plural."
      end

      classrelation 651525 // <dependency>
	relation 648325 -_->
	  a default
	    php "${type}"
	    classrelation_ref 651525 // <dependency>
	  b parent class_ref 322053 // InstanceNotSaved
      end

      operation 931589 "debug"
	class_operation preserve_cpp_body_indent public explicit_return_type ""
	nparams 4
	  param in name "msj" explicit_type "string"
	  param in name "ident" explicit_type "int"
	    defaultvalue "0"
	  param in name "inDebug" explicit_type "bool"
	    defaultvalue "false"
	  param in name "autoback" explicit_type "bool"
	    defaultvalue "false"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}, ${p3}${v3}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Chequea si se est en modo debug y en dicho caso imprime el mensaje indicado con la identacin indicada"
      end

      attribute 586373 "identLvl"
	class_attribute private explicit_type "int"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var el nivel de identacin (1 nivel = 4 espacios)"
      end

      operation 1041541 "validate"
	preserve_cpp_body_indent public explicit_return_type "mixed"
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Valida los atributos DIRECTOS del objeto segn las reglas especificadas en la propia definicin.
No llama recursivo porque sera muy \"engorroso\" y factible de caer en la circunstancia de tener una recursin infinita.
Tampoco se consideran en la validacin aquellos atributos asignados con un LazyLoader, dado que si estn en base se asume que estn OK.

@return mixed Retorna TRUE si todo est bien y una matriz 3 dimensional indexada por atributo, validacin y errores. En caso que algo falle retorna una matrz con el siguiente formato:

array (
	0 = > array (
		attribute, array(\"Error 1\", \"Error 2\")
		)
	...
)
"
      end

      classrelation 731397 // <dependency>
	relation 728069 -_->
	  a default
	    php "${type}"
	    classrelation_ref 731397 // <dependency>
	  b parent class_ref 470277 // Validation
      end

      classrelation 745349 // <dependency>
	relation 742021 -_->
	  a default
	    php "${type}"
	    classrelation_ref 745349 // <dependency>
	  b parent class_ref 519429 // ORMValidationException
      end

      operation 1511301 "isAttributeModified"
	preserve_cpp_body_indent public explicit_return_type "bool"
	nparams 1
	  param in name "attribute" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Devuelve si está o no modificado un cierto atributo.

@param string $attribute El nombre del atributo a verificar.

@return boolean un TRUE si el atributo ha sido efectivamente modificado, FALSE sino."
      end

      operation 1605509 "getModifiedAttributes"
	preserve_cpp_body_indent public explicit_return_type "Array"
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Retorna la lista de atributos modificados de la última sincronización con la base de datos.

@return array Una lista de strings donde cada string es el nombre de un atributo modificado desde la última operación de sincronización."
      end

      operation 242694 "serializeToString"
	preserve_cpp_body_indent public explicit_return_type "string"
	nparams 1
	  param in name "format" explicit_type "string"
	    defaultvalue "'default'"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Sirve para guardar un ORMObject en un string

@var string $format El formato a utilizar
@return string"
      end

      operation 242822 "unserializeFromString"
	preserve_cpp_body_indent public return_type class_ref 141317 // ORMObject
	nparams 1
	  param in name "s" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Desserializa desde un string

@return ORMObject"
      end
    end

    class 167685 "ORM"
      visibility package 
      cpp_decl ""
      java_decl ""
      php_decl "${comment}${final}${visibility}${abstract}class ${name}${extends}${implements} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl ""
      explicit_switch_type ""
      
      comment "La clase ORM lleva referencias a todos los objetos recuperados o creados en la sesión y puede utilizarse para saber qué cosas están cargadas y qué no."
      classrelation 337157 // <generalisation>
	relation 336389 ---|>
	  a public
	    php "${type}"
	    classrelation_ref 337157 // <generalisation>
	  b parent class_ref 289157 // PrivateAccesor
      end

      classrelation 493445 // <dependency>
	relation 491653 -_->
	  a private
	    php "${type}"
	    classrelation_ref 493445 // <dependency>
	  b parent class_ref 389637 // ORMQuery
      end

      attribute 238981 "orm"
	class_attribute private type class_ref 167685 // ORM
	init_value "null"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@staticvar ORM La variable de clase que almacena la instancia del SINGLETON."
      end

      attribute 279173 "autosave"
	private explicit_type "bool"
	init_value "true"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	get_oper operation_ref 502021 // getAutosave
	set_oper operation_ref 502149 // setAutosave
	comment "@var boolean flag que indica si las transacciones se guardan automticamente al terminarse la sesin o si los cambios se van a guardar explscitamente."
      end

      attribute 279301 "bindObjectsOnCreate"
	private explicit_type "bool"
	init_value "false"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	get_oper operation_ref 501765 // getBindObjectsOnCreate
	set_oper operation_ref 501893 // setBindObjectsOnCreate
	comment "@var boolean una variable que indica si los objetos al instanciarse se deben registrar o no con el ORM."
      end

      attribute 479365 "debug"
	private explicit_type "bool"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	get_oper operation_ref 700293 // getDebug
	set_oper operation_ref 700421 // setDebug
	comment "@var boolean indica si se est ejecutando en modo debug"
      end

      attribute 547077 "language"
	private explicit_type "string"
	init_value "'EN'"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var string El lenguaje en el cual conjuga los nombres el ORM."
      end

      attribute 1635973 "maxFetchRows"
	private explicit_type "int"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var int la cantidad de filas que se recuperarán como máximo por vez en las querys internas. Esto no limita la cantidad de resultados, sino que sirve de límite de consulta individual, los resultsets que tengan más filas se recuperarán en N consultas sucesivas."
      end

      classrelation 168709 // objects (<directional aggregation>)
	relation 168197 o-->
	  a role_name "objects" multiplicity "*" init_value "array()" private
	    comment "@var array una coleccin de objetos que constituyen la cach del ORM"
	    php "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	    classrelation_ref 168709 // objects (<directional aggregation>)
	  b parent class_ref 141317 // ORMObject
	get_oper operation_ref 576773 // getObjects
      end

      classrelation 383237 // database (<unidirectional association>)
	relation 382469 --->
	  a role_name "database" private
	    comment "@var AbstractDataBase la instancia de la abstraccin de la base de datos que el ORM debe utilizar"
	    php "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	    classrelation_ref 383237 // database (<unidirectional association>)
	  b parent class_ref 295685 // AbstractDataBase
	get_oper operation_ref 474885 // getDatabase
	set_oper operation_ref 475013 // setDatabase
      end

      classrelation 264325 // classDefinitions (<directional aggregation>)
	relation 263557 o-->
	  a role_name "classDefinitions" private
	    comment "@var array la lista de las definiciones de clases"
	    php "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	    classrelation_ref 264325 // classDefinitions (<directional aggregation>)
	  b parent class_ref 236293 // ORMDefinition
      end

      operation 301829 "getInstance"
	class_operation preserve_cpp_body_indent public return_type class_ref 167685 // ORM
	nparams 1
	  param in name "language" explicit_type "string"
	    defaultvalue "'EN'"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Retorna la instancia de la clase. Implementacin del SINGLETON.

@param string $language el lenguaje a configurar en el ORM, por ahora hay dos opciones: EN=Ingls, ES=Espaol
@return ORM La instancia de la base de datos."
      end

      operation 170117 "attach"
	preserve_cpp_body_indent public explicit_return_type "bool"
	nparams 1
	  param inout name "object" type class_ref 141317 // ORMObject
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Registra un objeto en la coleccin mantenida por ORM. Todos los objetos registrados son susceptibles de ser mantenidos automticamente; es decir: guardados, recuperados onFly, listados y estn disponibles para cualquier posible uso."
      end

      operation 170245 "dettach"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 1
	  param inout name "object" type class_ref 141317 // ORMObject
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Le indica al ORM que no se preocupe del estado de este objeto."
      end

      operation 474757 "commit"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Hace un guardado de todos los objetos modificados en la memoria."
      end

      operation 281605 "&getDefinition"
	preserve_cpp_body_indent public return_type class_ref 236293 // ORMDefinition
	nparams 1
	  param in name "object" type class_ref 141317 // ORMObject
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Devuelve la definicin de una clase u objeto.
@param String|Object $object el nombre de la clase o una instancia del objeto cuya definicin queremos obtener.
@return ORMDefinition la definicin del objeto"
      end

      operation 488581 "&retrieve"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 2
	  param in name "class" explicit_type "string"
	  param in name "id" explicit_type "int"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Recupera un objeto de la cach del ORM

@param $class string|Object el nombre de la clase o una instancia del tipo de la clase que se quiere recuperar
@param $id int el identificador de la clase
@return DatabaseObject|false retorna la instancia de la cach o false si no se encuentra"
      end

      operation 316421 "&load"
	preserve_cpp_body_indent public return_type class_ref 141317 // ORMObject
	nparams 2
	  param in name "class" explicit_type "Class"
	  param in name "id" explicit_type "int|array"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Recupera objetos de la base de datos en base a su clase e ids. Puede recuperar uno o varios objetos a la vez.

@param string $class la clase a la que pertenece el objeto a levantar
@param int|array $id el id a recuperar o un array de ids

@return ORMObject|array de acuerdo a si se paso un id o un array de ids"
      end

      operation 303237 "save"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 1
	  param inout name "instance" type class_ref 141317 // ORMObject
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
      end

      operation 563333 "delete"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 1
	  param in name "object" type class_ref 141317 // ORMObject
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Borra fsicamente un objeto de la base. Al borrarse el objeto adems se ponen a null los campos de las entidades relacionadas que lo referenciaban y se eliminan los registros de las tablas relacin M:N

@param ORMObject $object el objeto a eliminar.

@return boolean un booleando TRUE si la operacin fue concretada con xito o FALSE sino."
      end

      operation 474885 "getDatabase"
	force_body_gen const cpp_inline public return_type class_ref 295685 // AbstractDataBase
	nparams 0
	
	cpp_name_spec "get_${name}"
	final 
	java_name_spec "get${Name}"
	php_final php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  return $this->database;
}
"
	php_name_spec "get${Name}"
	
	python_name_spec "get${Name}"
	
	idl_name_spec "get_${name}"
	get_of_relation classrelation_ref 383237 // database (<unidirectional association>)
	comment "@return AbstractDataBase una instancia de la base de datos que tiene configurada el ORM."
      end

      operation 475013 "setDatabase"
	force_body_gen public explicit_return_type "void"
	nparams 1
	  param in name "value" type class_ref 295685 // AbstractDataBase
	
	cpp_name_spec "set_${name}"
	
	java_name_spec "set${Name}"
	php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${)}
{
  $this->database = ${p0};
}
"
	php_name_spec "set${Name}"
	
	python_name_spec "set${Name}"
	
	idl_name_spec "set_${name}"
	set_of_relation classrelation_ref 383237 // database (<unidirectional association>)
	comment "@param $value AbstractDataBase una instacia de la abstraccin de base de datos del ORM.
"
      end

      operation 501765 "getBindObjectsOnCreate"
	force_body_gen const cpp_inline public explicit_return_type "bool"
	nparams 0
	
	cpp_name_spec "get_${name}"
	final 
	java_name_spec "get${Name}"
	php_final php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  return $this->bindObjectsOnCreate;
}
"
	php_name_spec "get${Name}"
	
	python_name_spec "get${Name}"
	
	idl_name_spec "get_${name}"
	get_of_attribute attribute_ref 279301 // bindObjectsOnCreate
      end

      operation 501893 "setBindObjectsOnCreate"
	force_body_gen public explicit_return_type "void"
	nparams 1
	  param in name "value" explicit_type "bool"
	
	cpp_name_spec "set_${name}"
	
	java_name_spec "set${Name}"
	php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${)}
{
  $this->bindObjectsOnCreate = ${p0};
}
"
	php_name_spec "set${Name}"
	
	python_name_spec "set${Name}"
	
	idl_name_spec "set_${name}"
	set_of_attribute attribute_ref 279301 // bindObjectsOnCreate
      end

      operation 502021 "getAutosave"
	force_body_gen const cpp_inline public explicit_return_type "bool"
	nparams 0
	
	cpp_name_spec "get_${name}"
	final 
	java_name_spec "get${Name}"
	php_final php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  return $this->autosave;
}
"
	php_name_spec "get${Name}"
	
	python_name_spec "get${Name}"
	
	idl_name_spec "get_${name}"
	get_of_attribute attribute_ref 279173 // autosave
      end

      operation 502149 "setAutosave"
	force_body_gen public explicit_return_type "void"
	nparams 1
	  param in name "value" explicit_type "bool"
	
	cpp_name_spec "set_${name}"
	
	java_name_spec "set${Name}"
	php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${)}
{
  $this->autosave = ${p0};
}
"
	php_name_spec "set${Name}"
	
	python_name_spec "set${Name}"
	
	idl_name_spec "set_${name}"
	set_of_attribute attribute_ref 279173 // autosave
      end

      operation 576517 "getAttributes"
	preserve_cpp_body_indent public explicit_return_type "array"
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "SOLO PARA DEBUG, retorna la lista interna de atributos"
      end

      operation 576645 "clear"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Limpia la cach del ORM. OJO: esto no disocia los objetos del ORM. Eso se har despus."
      end

      operation 576773 "getObjects"
	force_body_gen const cpp_inline public return_type class_ref 141317 // ORMObject
	nparams 0
	
	cpp_name_spec "get_${name}"
	final 
	java_name_spec "get${Name}"
	php_final php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  return $this->objects;
}
"
	php_name_spec "get${Name}"
	
	python_name_spec "get${Name}"
	
	idl_name_spec "get_${name}"
	get_of_relation classrelation_ref 168709 // objects (<directional aggregation>)
      end

      operation 631557 "query"
	preserve_cpp_body_indent public return_type class_ref 389637 // ORMQuery
	nparams 1
	  param in name "class" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Crea una query sobre la base de la clase pasada por parmetro.

@param string $class la clase a la que pertenecen las instancias a retornar.

@return ORMQuery Una instancia de una query que sirve para formalizar los criterios de bsqueda"
      end

      operation 700293 "getDebug"
	force_body_gen const cpp_inline public explicit_return_type "bool"
	nparams 0
	
	cpp_name_spec "get_${name}"
	final 
	java_name_spec "get${Name}"
	php_final php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  return $this->debug;
}
"
	php_name_spec "get${Name}"
	
	python_name_spec "get${Name}"
	
	idl_name_spec "get_${name}"
	get_of_attribute attribute_ref 479365 // debug
      end

      operation 700421 "setDebug"
	force_body_gen public explicit_return_type "void"
	nparams 1
	  param in name "value" explicit_type "bool"
	
	cpp_name_spec "set_${name}"
	
	java_name_spec "set${Name}"
	php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${)}
{
  $this->debug = ${p0};
}
"
	php_name_spec "set${Name}"
	
	python_name_spec "set${Name}"
	
	idl_name_spec "set_${name}"
	set_of_attribute attribute_ref 479365 // debug
      end

      operation 889861 "setLanguage"
	preserve_cpp_body_indent public return_type class_ref 167685 // ORM
	nparams 1
	  param in name "language" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Configura el lenguaje predeterminado del ORM: ESTO AFECTA A LOS OBJETOS en cuya definición no se haya declarado un lenguaje.

@param string $language una cadena que indica el lenguaje. Por el momento puede ser 'EN' (la predeterminada) o 'ES'.

@return ORM el ORM modificado"
      end

      operation 889989 "getLanguage"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Recupera el lenguaje configurado.

@return string una cadena que puede ser 'EN' o 'ES'"
      end

      operation 2246661 "getMaxFetchRows"
	preserve_cpp_body_indent public explicit_return_type "int"
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Devuelve la cantidad de filas que se recuperarán en forma predeterminada.

@return int la cantidad de filas o null si la misma no ha sido configurada"
      end

      operation 2246789 "setMaxFetchRows"
	preserve_cpp_body_indent public return_type class_ref 167685 // ORM
	nparams 1
	  param in name "rows" explicit_type "int"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Configura la cantidad máxima de filas que se recuperaran por consulta directa a la base de datos. Esto no afecta la cantidad de resultados que arrojen las consultas, sino que en caso de exceder el número de resultados configurado, se realizarán N consultas de la cantidad indicada para traerlos todos.

@param int $rows la cantidad de filas

@return ORM el objeto ORM modificado."
      end

      operation 2529541 "identifyClass"
	preserve_cpp_body_indent public explicit_return_type "string"
	nparams 2
	  param in name "baseClass" explicit_type "string"
	  param in name "id" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Este método determina la clase más específica de una instancia. En base a las definiciones de clase, el ORM va consultando la información de discriminadores y subclases hasta encontrar la forma más específica de la instancia y retorna su clase.

@param string $baseClass el nombre de la clase desde la que se inicia el análisis.
@param string $id el identificador de la instancia a analizar

@return string Retorna la clase más específica a la que responde la instancia. Dicha clase puede ser la misma $baseClass o cualquiera de sus hijas."
      end
    end

    class 256133 "ORMCollection"
      visibility package 
      cpp_decl ""
      java_decl ""
      php_decl "${comment}${final}${abstract}class ${name}${extends}${implements} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl ""
      explicit_switch_type ""
      
      comment "Sirve para almacenar una coleccin de objetos relacionados. Es decir para materializar las relaciones entre objetos.

Se emplea esta construccin en vez de un array porque:
1) es necesario conocer si la coleccin fue modificada o no
2) es necesario, a fines de optimizar el proceso, saber exactamente qu se agreg y qu se quit.
3) la ORMCollection no duplica objetos; es decir, si se agrega el mismo objeto dos veces la segunda no tiene efecto
"
      attribute 259077 "elements"
	public explicit_type "array"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var array lista de los elementos (instancias) de la relacin

@todo PONERLO PRIVADO!! Ahora Pblico a fines de DEBUG!"
      end

      attribute 265605 "added"
	public explicit_type "array"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	get_oper operation_ref 535557 // getAdded
	comment "@var array aqu se mantienen temporalmente una lista de los identificadores de los objetos nuevos"
      end

      attribute 355205 "removed"
	public explicit_type "array"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	get_oper operation_ref 535685 // getRemoved
	comment "@var array en este arreglo se guarda la lista de ids de objetos quitados de la relacin, para que al guardar se puedan saber qu registros de la relacin quitar"
      end

      operation 535429 "isModified"
	preserve_cpp_body_indent public explicit_return_type "bool"
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Devuelve un booleano indicando si la coleccin ha sido o no modificada

@return bool un valor TRUE si la coleccin fue modificada o FALSE sino"
      end

      operation 413189 "&address"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 1
	  param in name "offset" explicit_type "mixed"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Retorna la direccin de una posicin del array de atributos.

@param string|int $offset la clave del arreglo de elementos del cual se quiere saber la direccin"
      end

      operation 412933 "reset"
	preserve_cpp_body_indent public return_type class_ref 256133 // ORMCollection
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Restaura los indicadores de cambio de forma que el objeto queda como no alterado.
@return ORMCollection la propia instancia"
      end

      operation 549893 "count"
	preserve_cpp_body_indent public explicit_return_type "int"
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
      end

      operation 535557 "getAdded"
	force_body_gen const cpp_inline public explicit_return_type "array"
	nparams 0
	
	cpp_name_spec "get_${name}"
	final 
	java_name_spec "get${Name}"
	php_final php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  return $this->added;
}
"
	php_name_spec "get${Name}"
	
	python_name_spec "get${Name}"
	
	idl_name_spec "get_${name}"
	get_of_attribute attribute_ref 265605 // added
      end

      operation 535685 "getRemoved"
	force_body_gen const cpp_inline public explicit_return_type "array"
	nparams 0
	
	cpp_name_spec "get_${name}"
	final 
	java_name_spec "get${Name}"
	php_final php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  return $this->removed;
}
"
	php_name_spec "get${Name}"
	
	python_name_spec "get${Name}"
	
	idl_name_spec "get_${name}"
	get_of_attribute attribute_ref 355205 // removed
      end

      operation 385157 "offsetExists"
	preserve_cpp_body_indent cpp_virtual public explicit_return_type "boolean"
	nparams 1
	  param in name "offset" explicit_type "mixed"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
      end

      operation 385285 "offsetGet"
	preserve_cpp_body_indent cpp_virtual public explicit_return_type "mixed"
	nparams 1
	  param in name "offset" explicit_type "mixed"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
      end

      operation 385413 "offsetSet"
	preserve_cpp_body_indent cpp_virtual public explicit_return_type ""
	nparams 2
	  param in name "offset" explicit_type "mixed"
	  param in name "value" explicit_type "mixed"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
      end

      operation 385541 "offsetUnset"
	preserve_cpp_body_indent cpp_virtual public explicit_return_type ""
	nparams 1
	  param in name "offset" explicit_type "mixed"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
      end

      operation 385669 "getIterator"
	preserve_cpp_body_indent cpp_virtual public explicit_return_type ""
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
      end

      classrelation 310405 // <realization>
	relation 309637 -_-|>
	  a public
	    php "${type}"
	    classrelation_ref 310405 // <realization>
	  b parent class_ref 249477 // ArrayAccess
      end

      classrelation 310533 // <realization>
	relation 309765 -_-|>
	  a public
	    php "${type}"
	    classrelation_ref 310533 // <realization>
	  b parent class_ref 249605 // IteratorAggregate
      end

      classrelation 436997 // <realization>
	relation 436101 -_-|>
	  a public
	    php "${type}"
	    classrelation_ref 436997 // <realization>
	  b parent class_ref 348165 // Countable
      end

      operation 550021 "__construct"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Inicializa los arreglos internos

@return ORMCollection la coleccin inicializada"
      end
    end

    class 236293 "ORMDefinition"
      visibility package 
      cpp_decl ""
      java_decl ""
      php_decl "${comment}${final}${visibility}${abstract}class ${name}${extends}${implements} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl ""
      explicit_switch_type ""
      
      comment "Hay un array que almacena la forma de relacionar los atributos de una clase con los de la/s tablas con las que se corresponde:
ORMData['fields'][$attribute]= {'fieldName', 'type',
                                                    'length', 'isNulleable', 'precision', 'primaryKey', 'default', 'table', 'loadStyle'}
               si type = ORMDefinition::ORM_ENTITY  'class', 'isNulleable', 'default', 'table, 'loadStyle'}
ORMData['fieldsByTable'][$table][$attribute]->&ORMData['fields'][$attribute]
ORMData['relations'][$attribute]= {'fieldName', 'type', 'class', 'table', 'loadStyle', 'associatedFieldName'}

 Ms adelante puede implementarse una versin ms objetosa haciendo que haya cosas como DBTable y DBField

Hay 3 diferentes tipos de definiciones:
 - Campos simples: son atributos que representan un valor puntual como int, string, date.
 - Entidades: es la materializacin de la clave fornea en la entidad \"hijo\". Es decir cuando un id de otra tabla aparece en la tabla actual. Ese \"id\" no es un atributo comn, sino que representa a toda una entidad entera asociada por su id. Son relaciones 0..1 o 1..1
 - Relaciones: parecido al caso anterior pero para relaciones 1..N y N..M. El atributo en particular se implementa como un \"array\" de instancias de la clase asociada. Para el caso N..M la tabla se asume que tiene una clave conformada por los 2 IDs que se relacionan.

"
      classrelation 443653 // <dependency>
	relation 442757 -_->
	  a default
	    php "${type}"
	    classrelation_ref 443653 // <dependency>
	  b parent class_ref 354693 // ORMDefinitionError
      end

      classrelation 500101 // <dependency>
	relation 498309 -_->
	  a default
	    php "${type}"
	    classrelation_ref 500101 // <dependency>
	  b parent class_ref 341637 // UnknowAttribute
      end

      classrelation 994949 // <dependency>
	relation 987525 -_->
	  a default
	    php "${type}"
	    classrelation_ref 994949 // <dependency>
	  b parent class_ref 729477 // ORMAutoincrement
      end

      classrelation 330245 // <realization>
	relation 329477 -_-|>
	  a public
	    php "${type}"
	    classrelation_ref 330245 // <realization>
	  b parent class_ref 275973 // ORM_TYPES
      end

      classrelation 330373 // <realization>
	relation 329605 -_-|>
	  a public
	    php "${type}"
	    classrelation_ref 330373 // <realization>
	  b parent class_ref 282501 // ORM_LOAD_STYLE
      end

      classrelation 330501 // <realization>
	relation 329733 -_-|>
	  a public
	    php "${type}"
	    classrelation_ref 330501 // <realization>
	  b parent class_ref 282629 // ORM_RELATION_TYPE
      end

      classrelation 356997 // <generalisation>
	relation 356229 ---|>
	  a public
	    php "${type}"
	    classrelation_ref 356997 // <generalisation>
	  b parent class_ref 289157 // PrivateAccesor
      end

      attribute 225797 "ORMData"
	protected explicit_type "array"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 1865733 "abstract"
	private explicit_type "bool"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var boolean un flag que indica si la clase es o no abstracta."
      end

      attribute 232325 "currentTable"
	private explicit_type "string"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 472837 "orm"
	private type class_ref 167685 // ORM
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var ORM la instancia del ORM al que pertenece la definición"
      end

      attribute 573317 "class"
	private explicit_type "string"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var string el nombre de la clase que se est mapeando"
      end

      attribute 1121669 "language"
	private explicit_type "string"
	init_value "'EN'"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var string el lenguaje predeterminado de las definiciones"
      end

      attribute 1227013 "plurals"
	private explicit_type "array"
	init_value "array()"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var array una caché que se va formando en la medida que a la clase se le consultan los plurales de atributos en singular de los métodos add/del"
      end

      operation 542469 "__construct"
	preserve_cpp_body_indent public return_type class_ref 236293 // ORMDefinition
	nparams 1
	  param in name "orm" type class_ref 167685 // ORM
	    defaultvalue "null"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Constructor de la clase. Prepara las estructuras básicas necesarias para el mapeo.

@param ORM $orm el objeto que maneja las definiciones, de aquí también se saca el lenguaje predeterminado.

@return ORMDefinition una instancia inicializada de ORMDefinition"
      end

      operation 156421 "addField"
	preserve_cpp_body_indent public explicit_return_type "DataBaseObject"
	nparams 10
	  param in name "attribute" explicit_type "string"
	  param in name "fieldName" explicit_type "string"
	  param in name "type" explicit_type "int"
	  param in name "length" explicit_type "int"
	    defaultvalue "-1"
	  param in name "precision" explicit_type "int"
	    defaultvalue "-1"
	  param in name "isNulleable" explicit_type "boolean"
	    defaultvalue "true"
	  param in name "defaultValue" explicit_type "mixed"
	    defaultvalue "null"
	  param in name "loadStyle" explicit_type "int"
	    defaultvalue "ORMDefinition::FORCE_LOAD"
	  param in name "table" explicit_type "string"
	    defaultvalue "\"\""
	  param in name "primaryKey" explicit_type "boolean"
	    defaultvalue "false"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}, ${p3}${v3}, ${p4}${v4}, ${p5}${v5}, ${p6}${v6}, ${p7}${v7}, ${p8}${v8}, ${p9}${v9}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Indica como traducir un atributo del objeto en su campo respectivo de la base de datos.

@param string $attribute el nombre del atributo que queremos definir (el del objeto)
@param string $fieldName el nombre del campo de la base de datos donde se almacena el valor
@param int $type el tipo de valor, las constantes se obtienen de ORM_TYPES. En el caso que el atributo sea un objeto entero, usar @see addInstance().
@param int $length la longitud del campo de la base de datos. Si se quiere omitir esto indicar -1
@param int $precision en el caso de numéricos se debe indicar la precisiónpara futuros redondeos. Para omitir -1
@param boolean $isNulleable indica si el atributo/campo puede adquirir valor NULL
@param mixed $defaultValue el valor predeterminado del campo
@param int $loadStyle se puede indicar si se desea que el atributo sea recuperado instantáneamente al cargar el objeto o si se prefiere diferir la carga hasta que el valor del atributo sea utilizado por primera vez. Recomendable usar esta última opciónsi el campo es una imagen o un algún valor pesado. Las constantes están en @see ORM_LOAD_STYLE.
@param string $table el nombde de la tabla donde se encuentra el atributo, generalmente se especifica el mismo con un llamado previo a @see setTable() y se asume ese valor dejando \"\"
@param boolean $primaryKey poner true si el campo es la clave primaria del objeto

@return ORMDefinition Retorna la propia definicin modificada, para seguirla manipulando en cadena si se desea."
      end

      operation 454533 "addInstance"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 7
	  param in name "attribute" explicit_type "string"
	  param in name "fieldName" explicit_type "string"
	  param in name "class" explicit_type "string"
	  param in name "isNulleable" explicit_type "bool"
	    defaultvalue "true"
	  param in name "defaultValue" explicit_type "int"
	    defaultvalue "null"
	  param in name "loadStyle" explicit_type "int"
	    defaultvalue "ORMDefinition::LAZY_LOAD"
	  param in name "table" explicit_type "string"
	    defaultvalue "\"\""
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}, ${p3}${v3}, ${p4}${v4}, ${p5}${v5}, ${p6}${v6}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Define un atributo como una instancia de otra clase.

@param string $attribute el nombre del atributo que queremos definir (el del objeto)
@param string $fieldName el nombre del campo de la base de datos donde se almacena la clave que identifica la instancia puntal de la otra clase.
@param string $class la clase del objeto que va en el atributo.
@param boolean $isNulleable indica si el atributo puede adquirir valor NULL
@param string $defaultValue el valor predeterminado del campo
@param int $loadStyle se puede indicar si se desea que el atributo sea recuperado instantneamente al cargar el objeto o si se prefiere diferir la carga hasta que el valor del atributo sea utilizado por primera vez. Recomendable usar esta ltima opcin si el campo es una imagen o un algn valor pesado. Las constantes estn en @see ORM_LOAD_STYLE.
@param string $table el nombde de la tabla donde se encuentra el atributo, generalmente se especifica el mismo con un llamado previo a @see setTable() y se asume ese valor dejando \"\"
@param boolean $primaryKey poner true si el campo es la clave primaria del objeto

@return ORMDefinition Retorna la propia definicin modificada, para seguirla manipulando en cadena si se desea."
      end

      operation 1629317 "setDiscriminator"
	preserve_cpp_body_indent public return_type class_ref 236293 // ORMDefinition
	nparams 3
	  param in name "fieldName" explicit_type "string"
	  param in name "type" explicit_type "int"
	  param in name "table" explicit_type "string"
	    defaultvalue "''"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Agrega un discriminador para identificar la clase del objeto. El campo del discriminador debe ser declarado previamente (mediante addField() ).

@param string $fieldName el nombre del campo en la base de datos
@param string $type el tipo de datos del discriminador
@param string $table la tabla en la cual se halla el campo discriminador, por default asume la última tabla asignada.

@return ORMDefinition la definición con el discriminador agregado"
      end

      operation 2509317 "addSubclass"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 2
	  param in name "value" explicit_type "mixed"
	  param in name "class" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Luego de dfinido el discriminador, este método agrega una constante (valor) que permite identificar el tipo de la instancia.

@param mixed $value la constante que identifica la clase
@param string $class el nombre de la clase de la instancia

@return ORMDefinition La definición a la cual se ha agregado información del tipo"
      end

      operation 2529285 "__addSubclass"
	preserve_cpp_body_indent private return_type class_ref 236293 // ORMDefinition
	nparams 1
	  param in name "className" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "No implementado aún, sería para indicar subclases que no usan discriminadores. Por el análisis realizado la factibilidad de \"adivinar\" de qué clase se trata lo que tenemos entre manos es bastante pobre, el único factor diferenciador es que use alguna tabla en exclusiva.

Declara al ORM que existe una subclase de esta clase. Esto hace que en los loads se tenga en cuenta este hecho e intente recuperar la instancia más específica.

@param string $className el nombre de la subclase.

@return ORMDefinition La definición con la subclase registrada."
      end

      operation 556677 "addRelation1x1"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 4
	  param in name "attribute" explicit_type "string"
	  param in name "fieldName" explicit_type "string"
	  param in name "class" explicit_type "string"
	  param in name "loadStyle" explicit_type "int"
	    defaultvalue "ORMDefinition::LAZY_LOAD"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}, ${p3}${v3}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Indica que hay una relacin 1:1 entre esta entidad y la instancia de la otra clase. En forma predeterminada estas relaciones son cargadas como LAZY.

@param string $attribute el nombre del atributo que tendr el array de instancias
@param string $fieldName el nombre del atributo donde se mapea el identificador de la clase actual
@param string $class la clase asociada (la clase de las instancias relacionadas)
@param int $loadStyle determina si la relacin se debe cargar inmediamente al recuperar la clase o si se hace una carga diferida en el momento en que se use (esta ltima es la accin predeterminada). Las constantes estn en ORM_LOAD_STYLE.

@return ORMDefinition la propia definicin"
      end

      operation 556549 "addRelation1xN"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 4
	  param in name "attribute" explicit_type "string"
	  param in name "fieldName" explicit_type "string"
	  param in name "class" explicit_type "string"
	  param in name "loadStyle" explicit_type "int"
	    defaultvalue "ORMDefinition::LAZY_LOAD"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}, ${p3}${v3}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Indica que hay una relacin 1:N entre esta entidad y las instancias de la otra clase. En forma predeterminada estas relaciones son cargadas como LAZY.

@param string $attribute el nombre del atributo que tendr el array de instancias
@param string $fieldName el nombre del atributo donde se mapea el identificador de la clase actual
@param string $class la clase asociada (la clase de las instancias relacionadas)
@param int $loadStyle determina si la relacin se debe cargar inmediamente al recuperar la clase o si se hace una carga diferida en el momento en que se use (esta ltima es la accin predeterminada). Las constantes estn en ORM_LOAD_STYLE.

@return ORMDefinition la propia definicin"
      end

      operation 556805 "addRelationNxM"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 6
	  param in name "attribute" explicit_type "string"
	  param in name "table" explicit_type "string"
	  param in name "fieldName" explicit_type "string"
	  param in name "class" explicit_type "string"
	  param in name "asociatedFieldName" explicit_type "string"
	    defaultvalue "\"\""
	  param in name "loadStyle" explicit_type "int"
	    defaultvalue "ORMDefinition::LAZY_LOAD"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}, ${p3}${v3}, ${p4}${v4}, ${p5}${v5}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Indica que hay una relacin entre esta entidad y las instancias de otra clase. Las relaciones que soportan son 1:N, N:M y 1:1. En el caso de la N:M debe indicarse la tabla intermedia.
En forma predeterminada estas relaciones son cargadas como LAZY.

@param string $attribute el nombre del atributo que tendr el array de instancias
@param string $table slo se usa en relaciones N:M e indica el nombre de la tabla intermedia
@param string $fieldName el nombre del atributo donde se mapea el identificador de la clase actual
@param string $class la clase asociada (la clase de las instancias relacionadas)
@param string $asociatedFieldName el nombre del atributo donde se mapea el identificador de la clase asociada
@param int $loadStyle determina si la relacin se debe cargar inmediamente al recuperar la clase o si se hace una carga diferida en el momento en que se use (esta ltima es la accin predeterminada). Las constantes estn en ORM_LOAD_STYLE.

@return ORMDefinition la propia definicin"
      end

      operation 406277 "getFieldDefinition"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 2
	  param in name "attribute" explicit_type "string"
	    defaultvalue "\"\""
	  param in name "findByField" explicit_type "bool"
	    defaultvalue "false"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Retorna el registro crudo de los campos, tal como se le dieron de alta.
@param string $attribute el nombre del atributo del cual queremos recibir la informacin de mapeo o nada para obtener todas las definiciones
@param boolean $findByField indica si el atributo pasado por parmetro es en realidad el nombre del campo de la base de datos y lo busca por dicho criterio.

@return array|false Retorna las definiciones en un arreglo de la forma o false si el atributo no existe:
[$attribute] = {'fieldName', 'type', 'length', 'isNulleable', 'precision', 'primaryKey', 'default', 'table', 'loadStyle'}
"
      end

      operation 528901 "getRelationDefinition"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 2
	  param in name "attribute" explicit_type "string"
	    defaultvalue "\"\""
	  param in name "findByTable" explicit_type "bool"
	    defaultvalue "false"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Retorna la definicin de una relacin.

@param string $attribute el nombre del atributo cuyo mapeo se quiere obtener o nada para recuperar todas las definiciones de relaciones.
@param boolean $findByTable indica si el atributo pasado por parmetro es en realidad el nombre del campo de la base de datos y lo busca por dicho criterio.

@return array un arreglo con la informacin de la/s definicin/es con el siguiente formato o false si la relacin no existe:
[$attribute] = {'type', 'class', 'table', 'loadStyle'}

En el caso que se busque por tabla retorna la primer relacin definida que acte sobre la tabla indicada. Esta funcin est orientada a detectar el atributo que mapea las relaciones MxN sobre una tabla dada. NO SIRVE para las relaciones 1:1 y 1:N.
"
      end

      operation 1629445 "getDiscriminatorDefinition"
	preserve_cpp_body_indent public explicit_return_type "mixed"
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Recupera el discriminador aplicado a la entidad.

@return false|array un arreglo con la definición del discriminador o false si no hay un discriminador seteado."
      end

      operation 399621 "getFieldsByTable"
	preserve_cpp_body_indent public explicit_return_type "array"
	nparams 1
	  param in name "table" explicit_type "string"
	    defaultvalue "\"\""
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Retorna la información de los campos que pertenecen a una tabla o a todas las tablas de la definición si se pasa \"\""
      end

      operation 2529669 "getFieldsByClass"
	preserve_cpp_body_indent public explicit_return_type "array"
	nparams 1
	  param in name "class" explicit_type "string"
	    defaultvalue "\"\""
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Retorna la información de los campos que pertenecen a una clase o a todas las clases de la definición si se pasa \"\""
      end

      operation 399365 "getTableList"
	preserve_cpp_body_indent public explicit_return_type "array"
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Retorna la lista de tablas que participan de la definicin."
      end

      operation 2522629 "getClass"
	preserve_cpp_body_indent public explicit_return_type "string"
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Recupera el nombre de la clase a la que pertenece la definición.

@return string El nombre de la clase a la que pertenece la definición"
      end

      operation 2522757 "isAbstract"
	preserve_cpp_body_indent public explicit_return_type "bool"
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Devuelve TRUE si la clase es abstracta y FALSE en caso contrario. Este valor sólo se encuentra disponible en el contexto de un ORM.

@return boolean El flag que indica si la clase es abstracta o no."
      end

      operation 2522501 "setAbstract"
	preserve_cpp_body_indent public return_type class_ref 236293 // ORMDefinition
	nparams 1
	  param in name "value" explicit_type "bool"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Indica si la clase es o no abstracta. No es necesario invocar este método en las definiciones, puesto que el ORM pisa el valor.

@param boolean $value un valor TRUE para indicar que la clase es abstracta y FALSE para lo contrario.

@return ORMDefinition la definición modificada."
      end

      operation 916997 "setClass"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 1
	  param in name "class" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Configura la clase a la que se corresponde la definicin

@param string $class el nombre de la clase que se est definiendo

@return ORMDefinition la definicin modificada."
      end

      operation 549509 "setKey"
	preserve_cpp_body_indent public return_type class_ref 236293 // ORMDefinition
	nparams 1
	  param in name "attribute" explicit_type "string|array"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Establece el atributo indicado como clave del objeto. Tambin se le puede pasar un arreglo de atributos.
Es igual que indicar en addField() isNulleable en FALSE y primaryKey en TRUE. Se da esta funcin para facilitar su definicin y mover dichos atributos al final de los parmetros en addField().

@param string|array $attribute el atributo o un array de atributos que sern identificados como clave primaria del objeto.

@return ORMDefinition La propia definicin modificada. IMPORTANTE: llamar a esta funcin LUEGO de haber definido el mapeo del atributo."
      end

      operation 1622789 "setLanguage"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 1
	  param in name "language" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Configura el lenguaje predeterminado de las definiciones subsecuentes.

@param string $language el idioma que se va a emplear en posteriores definiciones.

@return ORMDefinition La definición con el lenguaje establecido."
      end

      operation 275077 "setTable"
	preserve_cpp_body_indent public explicit_return_type "DataBaseObject"
	nparams 1
	  param in name "tableName" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Establece una tabla objetivo para futuros llamados a addField(), addInstance() y addRelation().

@param string $table el nombre de la tabla
@return ORMDefinition la propia definicin modificada

@see ORMDefinition::addField()
@see ORMDefinition::addInstance()
@see ORMDefinition::addRelation()"
      end

      operation 542853 "getORMData"
	preserve_cpp_body_indent public explicit_return_type "array"
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "@todo METODO PARA BORRAR!!! ES PARA DEBUG NOMAS"
      end

      operation 923525 "addValidation"
	preserve_cpp_body_indent public return_type class_ref 236293 // ORMDefinition
	nparams 2
	  param in name "attribute" explicit_type "string"
	  param in name "validations" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Instruye al ORM para que valide el valor del atributo antes de guardarlo.

@param string $attribute el nombre del atributo. Debe haber sido previamente definido.
@param string $validations una lista de strings con las versiones textuales de la validación a efectuar. Las mismas pueden ser: <ul><li><b>required</b>, indica que el campo es requerido</li>
<li><b>alpha</b>, el valor debe contener sólo letras y espacios</li>
<li><b>numeric</b>, se verifica que el valor sea numérico entero (soporta +/-)</li>
<li><b>alphanumeric</b>, combina numeric con alpha</li>
<li><b>mail</b>, verifica que el valor sea una dirección de mail correctamente escrita</li>
<li><b>text</b>, cualquier cosa valida este filtro</li>
<li><b>regexp</b>, verifica que el valor cumpla una expresión regular dada</li>
<li><b>min</b>, chequea que el valor no sea menor al número dado</li>
<li><b>max</b>, ídem pero que no sea mayor</li>
<li><b>float</b>, valida números enteros y/o decimales (soporta +/- y . o , para los decimales)</li>
<li><b>precision</b>, se usa en combinación con \"float\" para indicar que la parte entera no exceda de una cierta cantidad de dígitos</li>
<li><b>scale</b>, se usa en combinación con \"float\" para indicar que la parte decimal no exceda de una cierta cantidad de dígitos</li>
<li><b>mac</b>, chequea que el texto corresponda a una MAC Address (por compatibilidad con 10Fold es posible no usar separación entre los pares)</li>
<li><b>ip</b>, valida que el texto se corresponda con una IP válida</li>
<li><b>url</b>, verifica que el texto sea una url. Soporta: protocolo+usuario+subdominio+dominio+puerto+directorio+query+anchor</li>
<li><b>maxlength</b>, cuenta los caracteres de un texto para que no exceda cierto valor</li>
</ul>

@return ORMDefinition La definición con la validación agregada.

Modo de uso:
<code>
$definition->addValidation('atributo', 'required');//Agrega una sola validación simple
$definition->addValidation('atributo', 'required', 'alphanumeric', 'url');//Agrega varias validaciones simples a un atributo
$defintion->addValidation('atributo', 'min 5', 'max 10');//Agrega validaciones complejas
</code>"
      end

      operation 925061 "getValidation"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 1
	  param in name "attribute" explicit_type "string"
	    defaultvalue "null"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Recupera las validaciones que se realizan sobre el atributo indicado , si no se especifica dicho atributo, recupera todas las validaciones.

@param string $attribute El atributo del cual se desean recuperar las validaciones

@return array El arreglo con las validaciones. Dicho arreglo tiene la forma de
[validacion] => array {
                   0 => expresion 1
                   1 => expresion 2
                   }
 (si se omite indicar el atributo)
[atributo][validacion] => array {
                   0 => expresion 1
                   1 => expresion 2
                   }
"
      end

      operation 1757957 "pluralize"
	preserve_cpp_body_indent public explicit_return_type "string"
	nparams 1
	  param in name "attribute" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Toma un atributo y elabora su plural en base a un idioma de referencia.

@param string $attribute el nombre del que deseamos obtener el plural

@return string el nombre de atributo pluralizado."
      end

      operation 1772677 "pluralize2"
	class_operation preserve_cpp_body_indent protected explicit_return_type "string"
	nparams 2
	  param in name "attribute" explicit_type "string"
	  param in name "language" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
      end

      operation 2529413 "getSubclasses"
	preserve_cpp_body_indent public return_type class_ref 236293 // ORMDefinition
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Recupera las subclases declaradas en la definición actual.

@return false|array Devuelve false si no hay ninguna subclass declarada o un arreglo con la lista de subclases (arreglo de strings)."
      end

      operation 2536197 "setDefault"
	preserve_cpp_body_indent public return_type class_ref 236293 // ORMDefinition
	nparams 2
	  param in name "attribute" explicit_type "string"
	  param in name "value" explicit_type "mixed"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Configura el valor predeterminado de un atributo.

@param string $attribute el atributo que se desea configurar
@param mixed $value el valor a asignar

@return ORMDefinition la definición actualizada."
      end
    end

    class 389637 "ORMQuery"
      visibility package 
      cpp_decl ""
      java_decl ""
      php_decl "${comment}${final}${abstract}class ${name}${extends}${implements} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl ""
      explicit_switch_type ""
      
      comment "Este objeto se crea indicando cuál es la clase \"pivote\", con cuyo nombre recupera la definición desde el ORM.

Las condiciones de filtrado se especifican a través de llamados a filterBy() y el conjunto de resultados se ordena según el orden de llamados a orderBy().

Es posible segmentar el conjunto de resultados usando los pares de funciones: from()/to() ó from()/top(), según se quieran indicar fila de inicio y fin o fila de inicio y cantidad de registros respectivamente.

El resultado de la consulta se obtiene llamando a find()."
      attribute 411013 "orm"
	private type class_ref 167685 // ORM
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var ORM el manejador de objetos desde el cual se toman las definiciones"
      end

      attribute 411141 "pivotClass"
	protected explicit_type "string"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var string el nombre de la clase pivote de la consulta"
      end

      classrelation 493573 // definition (<unidirectional association>)
	relation 491781 --->
	  a role_name "definition" private
	    comment "@var ORMDefinition la definición  de la clase pivote"
	    php "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	    classrelation_ref 493573 // definition (<unidirectional association>)
	  b parent class_ref 236293 // ORMDefinition
      end

      attribute 417669 "from"
	protected explicit_type "int"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var int el número de fila del primer registro del resultado."
      end

      attribute 417797 "count"
	protected explicit_type "int"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var int la cantidad de filas a recuperar."
      end

      attribute 410629 "conditions"
	protected explicit_type "array"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var array un arreglo con las condiciones indicadas por los llamados a filterBy()
El formato del arreglo es:
$conditions['filters'][$field][$operator][0..n]=array($value, $other, $connector);
$conditions['subqueries'][$field][0..n]=ORMQuery();
"
      end

      attribute 566789 "distinct"
	protected explicit_type "bool"
	init_value "FALSE"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var boolean Indica si la consulta debe retornar tuplas únicas"
      end

      attribute 525701 "uses_custom_columns"
	protected explicit_type ""
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var boolean determina si el usuario ha o no especificado columnas personalizadas para el resultado"
      end

      attribute 525829 "uses_groups"
	protected explicit_type "bool"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var boolean indica si se han especificado atributos de agrupación"
      end

      attribute 858757 "leftJoins"
	protected explicit_type "array"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var array una lista de los atributos sobre los cuales se especificó que se haga LEFT JOIN mediante dontWorryAbout()"
      end

      attribute 816773 "maxFetchRows"
	protected explicit_type "int"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	get_oper operation_ref 1244933 // getMaxFetchRows
	set_oper operation_ref 1245061 // setMaxFetchRows
	comment "@var int esta variable, si está configurada, determina la cantidad de filas a recuperar simultáneamente."
      end

      attribute 871941 "associations"
	protected explicit_type "array"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var array la lista de grupos de filtros asociados."
      end

      attribute 872069 "countAssociations"
	protected explicit_type "int"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var int es el contador de asociaciones."
      end

      attribute 974725 "sortsCount"
	protected explicit_type "int"
	init_value "0"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var int cuenta el número de columna de ordenamiento por la que va. Es de uso interno. La idea es que si se llama varias veces a $query->orderBy(), el contador se sostenga entre los llamados."
      end

      operation 617477 "__construct"
	preserve_cpp_body_indent public return_type class_ref 389637 // ORMQuery
	nparams 2
	  param in name "class" explicit_type "string"
	  param inout name "orm" type class_ref 167685 // ORM
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Crea un objeto de consulta que retorna elementos del tipo de la clase indicada.

@param string $class la clase de objetos que retornará la consulta.
@param ORM $orm el objeto ORM al que se ata la consulta.
@return ORMQuery un objeto con los criterios de una consulta."
      end

      operation 1154053 "getClass"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Recupera la clase que se indicara como pivot de la consulta.

@return string el nombre de la clase pasado por parámetro en el llamdo al contructor de la instancia."
      end

      operation 1154181 "getORM"
	preserve_cpp_body_indent public return_type class_ref 167685 // ORM
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Devuelve el ORM al que pertenece la Query.

@return ORM el ORM que construyó la instancia de ORMQuery."
      end

      operation 624389 "from"
	preserve_cpp_body_indent public return_type class_ref 389637 // ORMQuery
	nparams 1
	  param in name "row" explicit_type "int"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Establece la cantidad de filas a saltear del conjunto de resultados antes de considerarla válida como respuesta.

@param int $row la fila a partir de la cual deseamos que se nos retornen resultados.

@return ORMQuery La consulta modificada. from() siempre debe llamarse antes que to() para calcular el diferencial."
      end

      operation 624517 "to"
	preserve_cpp_body_indent public return_type class_ref 389637 // ORMQuery
	nparams 1
	  param in name "row" explicit_type "int"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Establece el máximo número de fila que quiere recuperarse. Debe ser mayor al valor prefijado en from().

@param int $row el número de fila máxima del conjunto de resultado.

@return ORMQuery La consulta con el nuevo límite aplicado. Debe considerarse que si no se llamó a from() previamente no se va a calcular el diferencial."
      end

      operation 624645 "top"
	preserve_cpp_body_indent public return_type class_ref 389637 // ORMQuery
	nparams 1
	  param in name "limit" explicit_type "int"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Establece cuantas filas se deben recuperar del conjunto de resultados.

@param int $limit la cantidad de filas a recuperar

@return ORMQuery El objeto Query modificado."
      end

      operation 821893 "joinWith"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 4
	  param in name "attribute" explicit_type "string"
	  param in name "alias" explicit_type "string"
	  param in name "attributes" explicit_type "array"
	  param in name "conditions" explicit_type "array"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}, ${p3}${v3}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Une mediante un JOIN los valores de la consulta actual con los de otra clase, utilizando para el emparejamiento las condiciones dadas e incorporando al conjunto de resultados los atributos indicados.
@param string $attribute el atributo que determina la relación con la cual se ha de realizar el emparejamiento
@param string $alias el alias de la clase
@param array $attributes los atributos nuevos a incorporar en el conjunto de resultados
@param array $conditions las condiciones de emparejamiento del conjunto de resultados"
      end

      operation 821765 "joinBy"
	preserve_cpp_body_indent public return_type class_ref 389637 // ORMQuery
	nparams 4
	  param in name "query" type class_ref 389637 // ORMQuery
	  param in name "alias" explicit_type "string"
	  param in name "fields" explicit_type "array"
	  param in name "conditions" explicit_type "array"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}, ${p3}${v3}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Une mediante un JOIN los valores de la consulta actual con los de otra consulta. Debido a que no se pueden inferir los resultados de la consulta tan fácilmente como con el joinWith, a esta función se le deben pasar los nombres de columnas devueltas por el query para hacer el emparejamiento y para definir nuevos campos para el conjunto de resultados.

@param ORMQuery $query la query con la cual se ha de realizar el emparejamiento
@param string $alias el alias de la clase
@param array $fields los campos nuevos (con denominación completa) a incorporar en el conjunto de resultados
@param array $conditions las condiciones de emparejamiento del conjunto de resultados también con denominación completa"
      end

      operation 644997 "findOne"
	preserve_cpp_body_indent public return_type class_ref 141317 // ORMObject
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Busca el primer elemento de la consulta.

@return ORMObject el objeto en cuestión"
      end

      operation 651525 "echoTab"
	preserve_cpp_body_indent public explicit_return_type "string"
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "@return string Imprime un cierto número de espacios acorde al $level"
      end

      attribute 430853 "level"
	class_attribute package explicit_type "int"
	init_value "0"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var int $level utilizado para fines de debug"
      end

      attribute 430981 "debug"
	class_attribute package explicit_type "bool"
	init_value "false"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var boolean $debug indica si se debe hacer una salida de depuración de los pasos de la consulta"
      end

      operation 781061 "decrypt"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 1
	  param inout name "coded_sql" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Función temporal sólo para fines de debug. Decifra la cadena retornada por \"build()\"."
      end

      classrelation 595717 // <dependency>
	relation 593413 -_->
	  a default
	    php "${type}"
	    classrelation_ref 595717 // <dependency>
	  b parent class_ref 174341 // Connection
      end

      operation 828933 "filterBy"
	preserve_cpp_body_indent public return_type class_ref 389637 // ORMQuery
	nparams 7
	  param in name "attribute" explicit_type "string"
	  param in name "operator" explicit_type "int"
	  param in name "value" explicit_type "mixed"
	    defaultvalue "\"\""
	  param in name "other" explicit_type "mixed"
	    defaultvalue "\"\""
	  param in name "connector" explicit_type "string"
	    defaultvalue "'AND'"
	  param in name "group" explicit_type "string"
	    defaultvalue "''"
	  param in name "groupConnector" explicit_type "string"
	    defaultvalue "'AND'"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}, ${p3}${v3}, ${p4}${v4}, ${p5}${v5}, ${p6}${v6}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Establece una condición de búsqueda para la consulta.

@param string $attribute el campo sobre el cual se especifica la condición
@param int $operator la operación de comparación, el mismo puede ser 
@param mixed $value el valor utilizado para la comparación
@param mixed $other otro valor en caso de ser necesario
@param string $connector la palabra 'AND' o 'OR' según se quiera utilizar para concatenar la condición
@param string $group un alias de grupo, en caso de no existir un grupo con dicho alias se generará uno nuevo, de tal forma que es posible agrupar filtros sin hacer llamados explícitos a startGroup() y endGroup()
@param string $groupConnector  la palabra 'AND' o 'OR' según se quiera utilizar para concatenar el grupo de condiciones asociadas.
@return ORMQuery la consulta con la condición incorporada."
      end

      operation 1337221 "startGroup"
	preserve_cpp_body_indent public return_type class_ref 389637 // ORMQuery
	nparams 1
	  param in name "joinMode" explicit_type "string"
	    defaultvalue "'AND'"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Inicia un agrupamiento de condiciones. Todas los llamados a filterBy() que vengan luego del startGroup() serán considerados como un conjunto.
@param string $joinMode indica como se va a unir el conjunto con las siguiente condiciones.

@return ORMQuery La consulta con el grupo creado."
      end

      operation 1337349 "endGroup"
	preserve_cpp_body_indent public return_type class_ref 389637 // ORMQuery
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Finaliza un grupo de condiciones previamente iniciado con startGroup().

@return ORMQuery La consulta con el grupo cerrado."
      end

      operation 829061 "orderBy"
	preserve_cpp_body_indent public return_type class_ref 389637 // ORMQuery
	nparams 1
	  param in name "attribute" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Ordena el conjunto de resultados por la columna indicada.

@param string $attribute el atributo por el cual se desea ordenar el resultado. No se puede ordenar por atributos relación, ni por los atributos de los elementos de las relaciones o de los atributos entidad. Se puede indicar anteponiendo un espacio si es 'ASC' o 'DESC'

@return ORMQuery La consulta modificada como se indicó."
      end

      operation 829189 "build"
	preserve_cpp_body_indent public explicit_return_type "string"
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Retorna el código a ejecutar para resolver la query en formato codificado.

@param array $conditions las condiciones a analizar o, si es null, toma las globales
@param int $alias_counter un numero que se añade al alias de cada tabla
@return array una terna compuesta con el siguiente formato: array(query, sorts, groups) donde query es el SQL codificado de la instrucción, sorts son las condiciones de orden y groups las de agrupamiento externo"
      end

      operation 829573 "build_subquery"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 10
	  param inout name "query" explicit_type "string"
	  param in name "pivotDefinition" type class_ref 236293 // ORMDefinition
	  param in name "attribute" explicit_type "string"
	  param inout name "conditions" explicit_type "array"
	  param in name "parent_alias" explicit_type "string"
	  param in name "scrumb" explicit_type "string"
	  param inout name "alias_counter" explicit_type "int"
	  param inout name "overrideColumns" explicit_type "bool"
	  param inout name "associatedGroups" explicit_type "array"
	  param inout name "sorts" explicit_type "array"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}, ${p3}${v3}, ${p4}${v4}, ${p5}${v5}, ${p6}${v6}, ${p7}${v7}, ${p8}${v8}, ${p9}${v9}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
      end

      operation 829317 "find"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 2
	  param in name "from" explicit_type "int"
	    defaultvalue "null"
	  param in name "count" explicit_type "int"
	    defaultvalue "null"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Recupera el conjunto de resultados según los parámetros configurados en el el objeto.

@param int $from indica desde qué elemento se deben recuperar los resultados.
@param int $count indica cuántos elementos de resultado se deben recuperar.
@return array Un arreglo con todos los elementos que respondieron positivamente a las condiciones indicadas."
      end

      operation 829445 "attributes"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 1
	  param in name "attribute" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Define qué atributos recuperar del conjunto de resultados.

@param string $attribute un atributo a ser devueltos por la consulta. Se pueden pasar varios uno tras otro y son \"navegables\" a trav??s de puntos.
@return ORMQuery retorna la query modificó"
      end

      operation 1273349 "dontWorryAbout"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 1
	  param in name "attribute" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Indica que los datos se traigan aún en los casos donde el atributo sea null o la relación no exista.
@param string $attribute el nombre del atributo, puede anidarse con \".\" y se pueden pasar varios o un array de strings también.
@return ORMQuery La consulta con el atributo modificado."
      end

      operation 1322373 "worryAbout"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 1
	  param in name "attribute" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Anula una orden dada previamente con dontWorryAbout().
@param string $attribute el nombre del atributo, puede anidarse con \".\" y se pueden pasar varios o un array de strings también.
@return ORMQuery La consulta con el atributo modificado."
      end

      operation 836229 "groupBy"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 1
	  param in name "attribute" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Define qué atributos deben ser agrupados una vez obtenido el conjunto de resultados masivo.

@param string $attribute un atributo por el cual se debe agrupar el resultado de la consulta. Se pueden pasar varios uno tras otro y son \"navegables\" a través de puntos.
@return ORMQuery retorna la query modificada"
      end

      operation 843013 "count"
	preserve_cpp_body_indent public explicit_return_type "int"
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Retorna la cantidad de resultados del query.

@return int La cantidad de filas obtenidas por la consulta."
      end

      operation 910469 "distinct"
	preserve_cpp_body_indent public return_type class_ref 389637 // ORMQuery
	nparams 1
	  param in name "enable" explicit_type "bool"
	    defaultvalue "true"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Indica si se desea filtrar resultados distintos.

@param booolean $enable un valor TRUE para indicar que haga la selección filtrando valores repetidos y FALSE para que traiga todo.

@return ORMQuery la consulta con el cambio aplicado"
      end

      operation 1244933 "getMaxFetchRows"
	force_body_gen const cpp_inline public explicit_return_type "int"
	nparams 0
	
	cpp_name_spec "get_${name}"
	final 
	java_name_spec "get${Name}"
	php_final php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  return $this->maxFetchRows;
}
"
	php_name_spec "get${Name}"
	
	python_name_spec "get${Name}"
	
	idl_name_spec "get_${name}"
	get_of_attribute attribute_ref 816773 // maxFetchRows
	comment "Recupera el número máximo de filas simultáneas que se recuperan por llamado a la base de datos.

@return int La cantidad de filas que se recuperan de una vez."
      end

      operation 1245061 "setMaxFetchRows"
	force_body_gen public explicit_return_type "void"
	nparams 1
	  param in name "value" explicit_type "int"
	
	cpp_name_spec "set_${name}"
	
	java_name_spec "set${Name}"
	php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${)}
{
  $this->maxFetchRows = ${p0};
  return $this;
}
"
	php_name_spec "set${Name}"
	
	python_name_spec "set${Name}"
	
	idl_name_spec "set_${name}"
	set_of_attribute attribute_ref 816773 // maxFetchRows
	comment "Configura la cantidad de filas que se pueden traer en  simultáneo en un sólo llamado a fetch de la base de datos.

@param int $value el número de filas máximo a recuperar.

@return ORMQuery la consulta modificada."
      end

      classrelation 958597 // <dependency>
	relation 951685 -_->
	  a default
	    php "${type}"
	    classrelation_ref 958597 // <dependency>
	  b parent class_ref 702469 // ORMAttribute
      end

      operation 1567621 "involve"
	preserve_cpp_body_indent public return_type class_ref 389637 // ORMQuery
	nparams 2
	  param in name "class" explicit_type "string"
	  param in name "alias" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Involucra una nueva clase en la consulta. Es obligatorio especificarle el alias.

@param string $class el nombre de la clase contra la cual se quieren relacionar las entidades
@param string $alias un nombre genérico para referenciar tal conjunto de entidades.

@return ORMQuery la consulta con el nuevo conjunto de entidades vinculado."
      end

      operation 1704325 "isNull"
	preserve_cpp_body_indent public return_type class_ref 389637 // ORMQuery
	nparams 2
	  param in name "attribute" explicit_type "string"
	  param in name "value" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Configura un valor predeterminado en el caso que el atributo devuelto sea null. Ésta función sólo puede ser utilizada en conjunto con ->attributes(), de lo contrario devolverá un error (es decir, no pisa valores de objetos, sólo establece valores predeterminados en consultas planas, sino se rompería la consistencia del ORM).

@param string $attribute el atributo del cual se quiere verificar el valor
@param string $value el valor predeterminado. Por ahora es un string que se pondrá fijo.

@return ORMQuery La consulta con la nueva cláusula agregada."
      end

      operation 1779205 "debugQuery"
	preserve_cpp_body_indent public return_type class_ref 389637 // ORMQuery
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Imprime la consulta SQL de la query.

@return ORMQuery la misma query"
      end
    end

    class 315269 "LazyLoader"
      visibility package 
      cpp_decl ""
      java_decl ""
      php_decl "${comment}${final}${abstract}class ${name}${extends}${implements} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl ""
      explicit_switch_type ""
      
      attribute 335493 "object"
	private type class_ref 141317 // ORMObject
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var ORMObject el objeto sobre el que se desea modificar el atributo"
      end

      attribute 335365 "attribute"
	private explicit_type "string"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var el atributo a recuperar"
      end

      attribute 335621 "orm"
	private type class_ref 167685 // ORM
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var ORM el manejador de objetos que mediar la consulta del campo"
      end

      operation 461061 "__construct"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 3
	  param in name "object" type class_ref 141317 // ORMObject
	  param in name "attribute" explicit_type "string"
	  param inout name "orm" type class_ref 167685 // ORM
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Crea un cargador perezoso para el atributo.

@param ORMObject $object un objeto de la jerarqua de ORMObject
@param string $attribute el nombre del atributo
@param ORM $orm el objeto que mediar para recuperar el atributo

@return LazyLoader el cargador perezoso para el atributo"
      end

      operation 461189 "load"
	preserve_cpp_body_indent public explicit_return_type "mixed"
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Recupera el valor del campo pre-configurado.

@return mixed el objeto o valor recuperado"
      end

      classrelation 363653 // <generalisation>
	relation 362885 ---|>
	  a public
	    php "${type}"
	    classrelation_ref 363653 // <generalisation>
	  b parent class_ref 289157 // PrivateAccesor
      end

      classrelation 430469 // <dependency>
	relation 429573 -_->
	  a default
	    php "${type}"
	    classrelation_ref 430469 // <dependency>
	  b parent class_ref 341637 // UnknowAttribute
      end
    end

    class 289157 "PrivateAccesor"
      abstract visibility package 
      cpp_decl ""
      java_decl ""
      php_decl "${comment}${final}${abstract}class ${name}${extends}${implements} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl ""
      explicit_switch_type ""
      
      operation 426501 "&getAttribute"
	preserve_cpp_body_indent protected explicit_return_type "mixed"
	nparams 2
	  param in name "object" explicit_type "Object"
	  param in name "name" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Retorna una referencia al atributo indicado.

@param Object $object un objeto cualquiera de los descendientes de PrivateAccesor
@param string $name el nombre del atributo
@return mixed el valor del atributo solicitado"
      end

      operation 903685 "&stGetAttribute"
	class_operation preserve_cpp_body_indent protected explicit_return_type "mixed"
	nparams 2
	  param in name "object" explicit_type "Object"
	  param in name "name" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Retorna una referencia al atributo indicado.

@param Object $object un objeto cualquiera de los descendientes de PrivateAccesor
@param string $name el nombre del atributo
@return mixed el valor del atributo solicitado"
      end

      operation 426629 "invokeMethod"
	preserve_cpp_body_indent protected explicit_return_type "mixed"
	nparams 3
	  param inout name "object" explicit_type "Object"
	  param in name "method" explicit_type "string"
	  param in name "params" explicit_type "array"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Invoca un mtodo pblico o protegido del objeto que se pasa por parmetro.

@param Object $object un objeto de la jerarqua de PrivateAccesor
@param string $method el nombre del mtodo a invocar
@param array $params un arreglo con los parmetros necesarios para invocar la funcin en el orden y nmero correcto
@return mixed retorna lo que devuelva la funcin invocada"
      end

      operation 515845 "stInvokeMethod"
	class_operation preserve_cpp_body_indent protected explicit_return_type "mixed"
	nparams 3
	  param inout name "object" explicit_type "Object"
	  param in name "method" explicit_type "string"
	  param in name "params" explicit_type "array"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "@static
Versin esttica de invokeMethod(); invoca un mtodo pblico o protegido del objeto que se pasa por parmetro.
@see PrivateAccessor::invokeMethod()
@param Object $object un objeto de la jerarqua de PrivateAccesor
@param string $method el nombre del mtodo a invocar
@param array $params un arreglo con los parmetros necesarios para invocar la funcin en el orden y nmero correcto
@return mixed retorna lo que devuelva la funcin invocada"
      end

      operation 468229 "setAttribute"
	preserve_cpp_body_indent protected explicit_return_type ""
	nparams 3
	  param in name "object" explicit_type "Object"
	  param in name "name" explicit_type "string"
	  param in name "value" explicit_type "mixed"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Actualiza un atributo protegido o pblico de un objeto.

@param Object $object un objeto cualquiera de los descendientes de PrivateAccesor
@param string $name el nombre del atributo
@param mixed $value el nuevo valor de la propiedad
@return void"
      end

      operation 903813 "stSetAttribute"
	class_operation preserve_cpp_body_indent protected explicit_return_type ""
	nparams 3
	  param in name "object" explicit_type "Object"
	  param in name "name" explicit_type "string"
	  param in name "value" explicit_type "mixed"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Actualiza un atributo protegido o pblico de un objeto.

@param Object $object un objeto cualquiera de los descendientes de PrivateAccesor
@param string $name el nombre del atributo
@param mixed $value el nuevo valor de la propiedad
@return void"
      end

      operation 509061 "invokeStaticMethod"
	preserve_cpp_body_indent protected explicit_return_type ""
	nparams 3
	  param in name "class" explicit_type "string"
	  param in name "method" explicit_type "string"
	  param inout name "params" explicit_type "array"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Invoca un mtodo pblico o protegido de la clase que se pasa por parmetro.

@param string $class la clase de la jerarqua de PrivateAccesor
@param string $method el nombre del mtodo a invocar
@param array $params un arreglo con los parmetros necesarios para invocar la funcin en el orden y nmero correcto
@return mixed retorna lo que devuelva la funcin invocada"
      end

      operation 903941 "stInvokeStaticMethod"
	class_operation preserve_cpp_body_indent protected explicit_return_type ""
	nparams 3
	  param in name "class" explicit_type "string"
	  param in name "method" explicit_type "string"
	  param inout name "params" explicit_type "array"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Invoca un mtodo pblico o protegido de la clase que se pasa por parmetro.

@param string $class la clase de la jerarqua de PrivateAccesor
@param string $method el nombre del mtodo a invocar
@param array $params un arreglo con los parmetros necesarios para invocar la funcin en el orden y nmero correcto
@return mixed retorna lo que devuelva la funcin invocada"
      end
    end

    class 249477 "ArrayAccess"
      abstract visibility public stereotype "interface"
      cpp_decl ""
      java_decl "${comment}${@}${visibility}interface ${name}${extends} {
${members}}
"
      php_decl "${comment}${visibility}interface ${name} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl "${comment}${abstract}${local}interface ${name}${inherit} {
${members}};
"
      explicit_switch_type ""
      
      operation 302597 "offsetExists"
	abstract preserve_cpp_body_indent cpp_virtual public explicit_return_type "boolean"
	nparams 1
	  param in name "offset" explicit_type "mixed"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)};"
	preserve_python_body_indent 
	
      end

      operation 302725 "offsetGet"
	abstract preserve_cpp_body_indent cpp_virtual public explicit_return_type "mixed"
	nparams 1
	  param in name "offset" explicit_type "mixed"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)};"
	preserve_python_body_indent 
	
      end

      operation 302853 "offsetSet"
	abstract preserve_cpp_body_indent cpp_virtual public explicit_return_type ""
	nparams 2
	  param in name "offset" explicit_type "mixed"
	  param in name "value" explicit_type "mixed"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)};"
	preserve_python_body_indent 
	
      end

      operation 302981 "offsetUnset"
	abstract preserve_cpp_body_indent cpp_virtual public explicit_return_type ""
	nparams 1
	  param in name "offset" explicit_type "mixed"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)};"
	preserve_python_body_indent 
	
      end
    end

    class 262789 "Iterator"
      abstract visibility package stereotype "interface"
      cpp_decl ""
      java_decl "${comment}${@}${visibility}interface ${name}${extends} {
${members}}
"
      php_decl "${comment}${visibility}interface ${name} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl "${comment}${abstract}${local}interface ${name}${inherit} {
${members}};
"
      explicit_switch_type ""
      
      operation 392197 "current"
	abstract preserve_cpp_body_indent cpp_virtual public explicit_return_type "mixed"
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
      end

      operation 392325 "key"
	abstract preserve_cpp_body_indent cpp_virtual public explicit_return_type "scalar"
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
      end

      operation 392453 "next"
	abstract preserve_cpp_body_indent cpp_virtual public explicit_return_type ""
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
      end

      operation 392581 "rewind"
	abstract preserve_cpp_body_indent cpp_virtual public explicit_return_type ""
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
      end

      operation 392709 "valid"
	abstract preserve_cpp_body_indent cpp_virtual public explicit_return_type "boolean"
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
      end
    end

    class 249605 "IteratorAggregate"
      abstract visibility public stereotype "interface"
      cpp_decl ""
      java_decl "${comment}${@}${visibility}interface ${name}${extends} {
${members}}
"
      php_decl "${comment}${visibility}interface ${name} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl "${comment}${abstract}${local}interface ${name}${inherit} {
${members}};
"
      explicit_switch_type ""
      
      operation 303109 "getIterator"
	abstract preserve_cpp_body_indent cpp_virtual public explicit_return_type ""
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)};"
	preserve_python_body_indent 
	
      end
    end

    class 269445 "ORM_STATUS"
      visibility package stereotype "interface"
      cpp_decl ""
      java_decl "${comment}${@}${visibility}interface ${name}${extends} {
${members}}
"
      php_decl "${comment}${visibility}interface ${name} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl "${comment}${abstract}${local}interface ${name}${inherit} {
${members}};
"
      explicit_switch_type ""
      
      comment "Almacena constantes de estado para que no entorpezcan la visualizacin de los objetos.

Estados relativos al ORM:
 * NEW = Cuando un objeto recin se crea. Este estado existe (aunque de movida hay una iteraccin con DatabaseObject y por consiguiente con el ORM) para que los objetos creados se guarden slo a travs de un llamado explicito a SAVE(). Sin embargo existe un flag en el ORM que usa DatabaseObject para bindear automticamente en el create.
 * ATTACHED = El objeto est siendo mantenido por ORM.
 * DETACHED = El objeto no est siendo mantenido por el ORM. Puede o no ser consistente con los datos de la base.
Estados del objeto:
 * DELETED = 

Pensamiento:
Doctrine maneja los estados tiene 4 que copi un poquitos ms claros: MANAGED, DETACHED, REMOVED y NEW. Pero al fin de cuentas un objeto est asociado o no con el ORM y lo dems es superfluo. No debera de interesar en particular si un objeto es nuevo o modificado, porque de esas inferencias se encarga el ORM.
El NEW en Doctrine significa que el objeto esta DETACHED y que no tiene contraparte en la base de datos. Cuando se hace un SAVE() pasa a MANAGED. Yo pienso que NEW no tiene sentido: en todo caso es DETACHED y cuando se guarda si tiene id es porque existia una contraparte y si no lo tiene es que es nuevo. Antes que digan nada, el id es un atributo privado de la clase DatabaseObject, con lo cual las clases hijas no lo pueden acceder, por lo cual es de total dominio del ORM.
El REMOVED es razonable, indica que el objeto no es recomendable para su uso, aunque sus valores an estn ahi en la memoria."
      attribute 272389 "ATTACHED"
	const_attribute package explicit_type "int"
	init_value "1"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@staticvar int ATTACHED indica que el objeto est siendo monitoreado por el ORM, lo cual quiere decir que los cambios sobre el mismo sern salvados sobre el COMMIT y que las acciones que se hagan al mismo tomarn estado de permanente.
@final"
      end

      attribute 272645 "DETACHED"
	const_attribute package explicit_type "int"
	init_value "2"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@staticvar int DETACHED indica que el objeto no est siendo mantenido por el ORM, los cambios y operaciones sobre el mismo no tendrn efecto.
@final"
      end

      attribute 272517 "REMOVED"
	const_attribute package explicit_type "int"
	init_value "3"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@staticvar int REMOVED significa que el objeto est marcado para hacer un DELETE; es decir que est ATTACHED pero hasta el prximo COMMIT y que no tiene sentido modificar un objeto de ese tipo dado que pronto ser historia.
@final"
      end

      attribute 328581 "FRESH"
	const_attribute package explicit_type ""
	init_value "4"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@staticvar int FRESH Valor que indica que el objeto es nuevo, es redundante con DETACHED + id==null, pero sirve para no tener que andar haciendo esas comparaciones
@final"
      end

      attribute 328837 "LOADING"
	const_attribute package explicit_type "int"
	init_value "5"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@staticvar LOADING es un estado interno, solo empleado por el ORM que pone al objeto en un modo \"suspendido\" mientras puebla los atributos internos. Al salir de este estado el objeto \"resetea\" los flags de modificaciones.
@final"
      end

      attribute 368261 "SAVING"
	const_attribute package explicit_type "int"
	init_value "6"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end
    end

    class 275973 "ORM_TYPES"
      visibility package stereotype "interface"
      cpp_decl ""
      java_decl "${comment}${@}${visibility}interface ${name}${extends} {
${members}}
"
      php_decl "${comment}${visibility}interface ${name} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl "${comment}${abstract}${local}interface ${name}${inherit} {
${members}};
"
      explicit_switch_type ""
      
      comment "En DOCTRINE:
    * string: Type that maps an SQL VARCHAR to a PHP string.
    * integer: Type that maps an SQL INT to a PHP integer.
    * smallint: Type that maps a database SMALLINT to a PHP integer.
    * bigint: Type that maps a database BIGINT to a PHP string.
    * boolean: Type that maps an SQL boolean to a PHP boolean.
    * decimal: Type that maps an SQL DECIMAL to a PHP double.
    * date: Type that maps an SQL DATETIME to a PHP DateTime object.
    * time: Type that maps an SQL TIME to a PHP DateTime object.
    * datetime: Type that maps an SQL DATETIME/TIMESTAMP to a PHP DateTime object.
    * text: Type that maps an SQL CLOB to a PHP string.
    * object: Type that maps a SQL CLOB to a PHP object using serialize() and unserialize()
    * array: Type that maps a SQL CLOB to a PHP object using serialize() and unserialize()

Los mios son IMAGE, FILE para BLOBs y EXTERNAL que inicialmente lo podra usar para EXTERNAL_FILE pero a travs de alguna cosa como CURL se podra usar para webservices y otras cosas raras.

ENTITY es especial y significa que ese atributo es una FK (un ID de un objeto de otro lado)
"
      attribute 285829 "STRING"
	const_attribute package explicit_type "int"
	init_value "1"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 286085 "SMALLINT"
	const_attribute package explicit_type "int"
	init_value "2"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 285957 "INTEGER"
	const_attribute package explicit_type "int"
	init_value "3"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 286213 "BIGINT"
	const_attribute package explicit_type "int"
	init_value "4"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 286469 "DECIMAL"
	const_attribute package explicit_type "int"
	init_value "5"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 286341 "BOOLEAN"
	const_attribute package explicit_type "int"
	init_value "6"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 286597 "DATE"
	const_attribute package explicit_type "int"
	init_value "7"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 286725 "TIME"
	const_attribute package explicit_type "int"
	init_value "8"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 286853 "DATETIME"
	const_attribute package explicit_type "int"
	init_value "9"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 286981 "TEXT"
	const_attribute package explicit_type "int"
	init_value "10"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 287109 "OBJECT"
	const_attribute package explicit_type "int"
	init_value "11"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 287237 "COLLECTION"
	const_attribute package explicit_type "int"
	init_value "12"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 287365 "IMAGE"
	const_attribute package explicit_type "int"
	init_value "13"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 287493 "FILE"
	const_attribute package explicit_type "int"
	init_value "14"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 294021 "EXTERNAL"
	const_attribute package explicit_type "int"
	init_value "15"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 294789 "ORM_ENTITY"
	const_attribute package explicit_type "int"
	init_value "50"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end
    end

    class 282501 "ORM_LOAD_STYLE"
      visibility package stereotype "interface"
      cpp_decl ""
      java_decl "${comment}${@}${visibility}interface ${name}${extends} {
${members}}
"
      php_decl "${comment}${visibility}interface ${name} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl "${comment}${abstract}${local}interface ${name}${inherit} {
${members}};
"
      explicit_switch_type ""
      
      attribute 294149 "FORCE_LOAD"
	const_attribute package explicit_type "int"
	init_value "1"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 294277 "LAZY_LOAD"
	const_attribute package explicit_type "int"
	init_value "2"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end
    end

    class 282629 "ORM_RELATION_TYPE"
      visibility package stereotype "interface"
      cpp_decl ""
      java_decl "${comment}${@}${visibility}interface ${name}${extends} {
${members}}
"
      php_decl "${comment}${visibility}interface ${name} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl "${comment}${abstract}${local}interface ${name}${inherit} {
${members}};
"
      explicit_switch_type ""
      
      attribute 294405 "OneToMany"
	const_attribute package explicit_type "int"
	init_value "1"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 294533 "ManyToMany"
	const_attribute package explicit_type "int"
	init_value "2"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 294661 "OneToOne"
	const_attribute package explicit_type "int"
	init_value "3"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end
    end

    class 302213 "OPERATION"
      visibility package stereotype "interface"
      cpp_decl ""
      java_decl "${comment}${@}${visibility}interface ${name}${extends} {
${members}}
"
      php_decl "${comment}${visibility}interface ${name} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl "${comment}${abstract}${local}interface ${name}${inherit} {
${members}};
"
      explicit_switch_type ""
      
      attribute 301317 "EQ"
	const_attribute package explicit_type "int"
	init_value "1"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 301445 "LT"
	const_attribute package explicit_type "int"
	init_value "2"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 301573 "GT"
	const_attribute package explicit_type "int"
	init_value "3"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 301701 "LE"
	const_attribute package explicit_type "int"
	init_value "4"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 301829 "GE"
	const_attribute package explicit_type "int"
	init_value "5"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 301957 "NE"
	const_attribute package explicit_type "int"
	init_value "6"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 302085 "LIKE"
	const_attribute package explicit_type "int"
	init_value "7"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 302213 "BETWEEN"
	const_attribute package explicit_type "int"
	init_value "8"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end
    end

    class 348165 "Countable"
      visibility package stereotype "interface"
      cpp_decl ""
      java_decl "${comment}${@}${visibility}interface ${name}${extends} {
${members}}
"
      php_decl "${comment}${visibility}interface ${name} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl "${comment}${abstract}${local}interface ${name}${inherit} {
${members}};
"
      explicit_switch_type ""
      
      operation 549765 "count"
	preserve_cpp_body_indent public explicit_return_type "int"
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)};"
	preserve_python_body_indent 
	
      end
    end

    class 702469 "ORMAttribute"
      visibility package 
      cpp_decl ""
      java_decl ""
      php_decl "${comment}${final}${abstract}class ${name}${extends}${implements} {
${members}}

function A($attribute) {
   return new Attribute($attribute);
}"
      python_2_2 python_decl ""
      idl_decl ""
      explicit_switch_type ""
      
      comment "Una clase auxiliar, inicialmente iba a ser creada en ORMQuery como embebida pero boUML no lo permite.
Se instancia con la funcin _() que se define como global."
      attribute 913925 "attribute"
	private explicit_type "string"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	get_oper operation_ref 1406341 // getAttribute
	comment "@var string el atributo que representa la clase"
      end

      operation 1406213 "__construct"
	preserve_cpp_body_indent public return_type class_ref 702469 // ORMAttribute
	nparams 1
	  param in name "attribute" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Crea una instancia de un atributo. Se emplea por ORMQuery para diferenciar un atributo de un texto que coincida con su definicin."
      end

      operation 1406341 "getAttribute"
	force_body_gen const cpp_inline public explicit_return_type "string"
	nparams 0
	
	cpp_name_spec "get_${name}"
	final 
	java_name_spec "get${Name}"
	php_final php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  return $this->attribute;
}
"
	php_name_spec "get${Name}"
	
	python_name_spec "get${Name}"
	
	idl_name_spec "get_${name}"
	get_of_attribute attribute_ref 913925 // attribute
      end
    end

    class 729349 "ORMKeyGenerator"
      visibility package 
      cpp_decl ""
      java_decl ""
      php_decl "${comment}${final}${abstract}class ${name}${extends}${implements} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl ""
      explicit_switch_type ""
      
      operation 1442821 "validate"
	preserve_cpp_body_indent public explicit_return_type "bool"
	nparams 2
	  param in name "attribute" explicit_type "mixed|array"
	  param in name "class" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Chequea si el valor para de la clave es vlido para clave de la entidad.

@param mixed|array $attribute un valor o un arreglo de valores. En este ltimo caso es un arreglo asociativo donde la clave del array es el nombre del atributo al que pertenece el valor.
@param string $class el nombre de la clase a la que pertenece el atributo.
@param ORM $orm el ORM sobre el cual se desea hacer la validacin.

@return boolean un true si todo est bien o un false si la clave no es vlida."
      end

      operation 1442949 "assign"
	preserve_cpp_body_indent public explicit_return_type "bool"
	nparams 3
	  param inout name "attribute" explicit_type "mixed|array"
	  param in name "class" explicit_type "string"
	  param in name "orm" type class_ref 167685 // ORM
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Asigna el siguiente valor de clave para una nueva instancia de la clase dada.

@param mixed|array $attribute un valor o un arreglo de valores. En este ltimo caso es un arreglo asociativo donde la clave del array es el nombre del atributo al que pertenece el valor.
@param string $class el nombre de la clase a la que pertenece el atributo.
@param ORM $orm el ORM sobre el cual se desea hacer la validacin.

@return boolean un true si todo fue debidamente asignado y se puede proseguir o un false si algo fall."
      end
    end

    class 729477 "ORMAutoincrement"
      visibility package 
      cpp_decl ""
      java_decl ""
      php_decl "${comment}${final}${abstract}class ${name}${extends}${implements} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl ""
      explicit_switch_type ""
      
      classrelation 994821 // <generalisation>
	relation 987397 ---|>
	  a public
	    php "${type}"
	    classrelation_ref 994821 // <generalisation>
	  b parent class_ref 729349 // ORMKeyGenerator
      end

      operation 1443077 "validate"
	preserve_cpp_body_indent public explicit_return_type "bool"
	nparams 2
	  param in name "attribute" explicit_type "mixed|array"
	  param in name "class" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Chequea si el valor para de la clave es vlido para clave de la entidad.

@param mixed|array $attribute un valor o un arreglo de valores. En este ltimo caso es un arreglo asociativo donde la clave del array es el nombre del atributo al que pertenece el valor.
@param string $class el nombre de la clase a la que pertenece el atributo.
@param ORM $orm el ORM sobre el cual se desea hacer la validacin.

@return boolean un true si todo est bien o un false si la clave no es vlida."
      end

      operation 1443205 "assign"
	preserve_cpp_body_indent public explicit_return_type "bool"
	nparams 3
	  param inout name "attribute" explicit_type "mixed|array"
	  param in name "class" explicit_type "string"
	  param in name "orm" type class_ref 167685 // ORM
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Asigna el siguiente valor de clave para una nueva instancia de la clase dada.

@param mixed|array $attribute un valor o un arreglo de valores. En este ltimo caso es un arreglo asociativo donde la clave del array es el nombre del atributo al que pertenece el valor.
@param string $class el nombre de la clase a la que pertenece el atributo.
@param ORM $orm el ORM sobre el cual se desea hacer la validacin.

@return boolean un true si todo fue debidamente asignado y se puede proseguir o un false si algo fall."
      end
    end

    class 1022725 "ORMQueryMTWrapper"
      visibility protected 
      cpp_decl ""
      java_decl ""
      php_decl "${comment}${final}${abstract}class ${name}${extends}${implements} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl ""
      explicit_switch_type ""
      
      attribute 1367429 "config"
	private explicit_type "arrray"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var array el arreglo de la configuración que se debe completar"
      end

      attribute 1367557 "groupPointers"
	private explicit_type "array"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var array un arreglo con los anidamientos de grupos"
      end

      attribute 1367685 "groupCount"
	private explicit_type "int"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var int el contador de grupos"
      end

      classrelation 1378693 // <generalisation>
	relation 1352965 ---|>
	  a public
	    php "${type}"
	    classrelation_ref 1378693 // <generalisation>
	  b parent class_ref 389637 // ORMQuery
      end

      operation 1938053 "__construct"
	preserve_cpp_body_indent public return_type class_ref 389637 // ORMQuery
	nparams 3
	  param in name "class" explicit_type "string"
	  param inout name "orm" type class_ref 167685 // ORM
	  param inout name "configuration" explicit_type "array"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Crea un objeto de consulta especialmente creado para la herrmienta de migración que retorna elementos del tipo de la clase indicada.

@param string $class la clase de objetos que retornará la consulta.
@param ORM $orm el objeto ORM al que se ata la consulta.
@return ORMQuery un objeto con los criterios de una consulta."
      end

      operation 1937925 "from"
	preserve_cpp_body_indent public return_type class_ref 389637 // ORMQuery
	nparams 1
	  param in name "row" explicit_type "int"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Establece la cantidad de filas a saltear del conjunto de resultados antes de considerarla vlida como respuesta.

@param int $row la fila a partir de la cual deseamos que se nos retornen resultados.

@return ORMQuery La consulta modificada. from() siempre debe llamarse antes que to() para calcular el diferencial."
      end

      operation 1938309 "to"
	preserve_cpp_body_indent public return_type class_ref 389637 // ORMQuery
	nparams 1
	  param in name "row" explicit_type "int"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Establece el mximo nmero de fila que quiere recuperarse. Debe ser mayor al valor prefijado en from().

@param int $row el nmero de fila mxima del conjunto de resultado.

@return ORMQuery La consulta con el nuevo lmite aplicado. Debe considerarse que si no se llam a from() previamente no se va a calcular el diferencial."
      end

      operation 1938437 "top"
	preserve_cpp_body_indent public return_type class_ref 389637 // ORMQuery
	nparams 1
	  param in name "limit" explicit_type "int"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Establece cuantas filas se deben recuperar del conjunto de resultados.

@param int $limit la cantidad de filas a recuperar

@return ORMQuery El objeto Query modificado."
      end

      operation 1938565 "filterBy"
	preserve_cpp_body_indent public return_type class_ref 389637 // ORMQuery
	nparams 5
	  param in name "attribute" explicit_type "string"
	  param in name "operator" explicit_type "int"
	  param in name "value" explicit_type "mixed"
	    defaultvalue "\"\""
	  param in name "other" explicit_type "mixed"
	    defaultvalue "\"\""
	  param in name "connector" explicit_type "string"
	    defaultvalue "'AND'"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}, ${p3}${v3}, ${p4}${v4}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Establece una condicin de bsqueda para la consulta.

@param string $attribute el campo sobre el cual se especifica la condicin
@param int $operator la operacin de comparacin
@param mixed $value el valor utilizado para la comparacin
@param mixed $other otro valor en caso de ser necesario
@param string $connector la palabra 'AND' o 'OR' segn se quiera utilizar para concatenar la condicin

@return ORMQuery la consulta con la condicin incorporada."
      end

      operation 1938693 "startGroup"
	preserve_cpp_body_indent public return_type class_ref 389637 // ORMQuery
	nparams 1
	  param in name "joinMode" explicit_type "string"
	    defaultvalue "'AND'"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Inicia un agrupamiento de condiciones. Todas los llamados a filterBy() que vengan luego del startGroup() sern considerados como un conjunto.
@param string $joinMode indica como se va a unir el conjunto con las siguiente condiciones.
@return ORMQuery La consulta con el grupo creado."
      end

      operation 1938821 "endGroup"
	preserve_cpp_body_indent public return_type class_ref 389637 // ORMQuery
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Finaliza un grupo de condiciones previamente iniciado con startGroup().

@return ORMQuery La consulta con el grupo cerrado."
      end

      operation 1938949 "orderBy"
	preserve_cpp_body_indent public return_type class_ref 389637 // ORMQuery
	nparams 1
	  param in name "attribute" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Ordena el conjunto de resultados por la columna indicada.

@param string $attribute el atributo por el cual se desea ordenar el resultado. No se puede ordenar por atributos relacin, ni por los atributos de los elementos de las relaciones o de los atributos entidad. Se puede indicar anteponiendo un espacio si es 'ASC' o 'DESC'

@return ORMQuery La consulta modificada como se indic."
      end

      operation 1939077 "attributes"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 1
	  param in name "attribute" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Define qu atributos recuperar del conjunto de resultados.

@param string $attribute un atributo a ser devueltos por la consulta. Se pueden pasar varios uno tras otro y son \"navegables\" a travs de puntos.
@return ORMQuery retorna la query modificada"
      end

      operation 1939205 "dontWorryAbout"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 1
	  param in name "attribute" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Indica que los datos se traigan an en los casos donde el atributo sea null o la relacin no exista.
@param string $attribute el nombre del atributo, puede anidarse con \".\" y se pueden pasar varios o un array de strings tambin.
@return ORMQuery La consulta con el atributo modificado."
      end

      operation 1939333 "worryAbout"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 1
	  param in name "attribute" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Anula una orden dada previamente con dontWorryAbout().
@param string $attribute el nombre del atributo, puede anidarse con \".\" y se pueden pasar varios o un array de strings tambin.
@return ORMQuery La consulta con el atributo modificado."
      end

      operation 1939461 "groupBy"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 1
	  param in name "attribute" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Define qu atributos deben ser agrupados una vez obtenido el conjunto de resultados masivo.

@param string $attribute un atributo por el cual se debe agrupar el resultado de la consulta. Se pueden pasar varios uno tras otro y son \"navegables\" a travs de puntos.
@return ORMQuery retorna la query modificada"
      end
    end

    class 1002885 "MigrationToolkit"
      visibility package 
      cpp_decl ""
      java_decl ""
      php_decl "${comment}${final}${abstract}class ${name}${extends}${implements} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl ""
      explicit_switch_type ""
      
      attribute 1353861 "PENDING"
	const_attribute package explicit_type "string"
	init_value "'PENDING'"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@const string una constante que simboliza que la clase está pendiente de migración"
      end

      attribute 1353989 "WORKING"
	const_attribute package explicit_type "string"
	init_value "'WORKING'"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@const string una constante que simboliza que la clase está en proceso de migración"
      end

      attribute 1354117 "MIGRATED"
	const_attribute package explicit_type "string"
	init_value "'MIGRATED'"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@const string una constante que simboliza que la clase  ya ha sido migrada"
      end

      attribute 1374341 "ST_MIGRATED"
	const_attribute package explicit_type "string"
	init_value "'MIGRATED'"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@const string constante que identifica que una operación se realizó con éxito"
      end

      attribute 1374469 "ST_EXCLUDED"
	const_attribute package explicit_type "string"
	init_value "'EXCLUDED'"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@const string constante que identifica que un atributo esta expliscitamente excluído"
      end

      attribute 1374597 "ST_IGNORED"
	const_attribute package explicit_type "string"
	init_value "'IGNORED'"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@const string constante que identifica que un atributo ha sido ignorado dado que no se contaba con la definición"
      end

      attribute 1374725 "ST_NOTFOUND"
	const_attribute package explicit_type "string"
	init_value "'NOTFOUND'"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@const string constante que identifica que no se pudo encontrar un objeto equivalente"
      end

      attribute 1374853 "ST_FAILED"
	const_attribute package explicit_type "string"
	init_value "'FAILED'"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@const string constante que identifica un estado erroneo por causas desconocidas"
      end

      attribute 1374981 "ST_MANY"
	const_attribute package explicit_type "string"
	init_value "'MANY'"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@const string constante que identifica que un objeto tiene muchas instancias equivalentes en el destino. Seguramente la clave candidata esté mal expresada"
      end

      attribute 1375109 "ST_EXCHANGED"
	const_attribute package explicit_type "string"
	init_value "'EXCHANGED'"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@const string constante que identifica que un objeto fue expliscitamente intercambiado por las definiciones del usuario"
      end

      attribute 1375237 "ST_FOUND"
	const_attribute package explicit_type "string"
	init_value "'FOUND'"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@const string constante que identifica que se encontró un objeto equivalente"
      end

      attribute 1353605 "from"
	private type class_ref 167685 // ORM
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var ORM el ORM origen sobre el cual se realizará la búsqueda de entidades a migrar"
      end

      attribute 1353733 "to"
	private type class_ref 167685 // ORM
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var ORM el ORM destino hacia el cual se pasarán o actualizarán las entidades encontradas en el origen"
      end

      attribute 1353477 "config"
	private explicit_type "array"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var array una matriz multidimensional donde se guardan las configuraciones"
      end

      attribute 1360901 "log"
	private explicit_type "DOMDocument"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var DOMDocument la instancia de log"
      end

      attribute 1375365 "debug"
	private explicit_type "bool"
	init_value "false"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var boolean un flag que indica si se quiere imprimir mensajes de debug o no"
      end

      attribute 1388677 "PREVIEW_MODE"
	const_attribute package explicit_type "string"
	init_value "'PREVIEW_MODE'"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@const string constante que indica el modo de previsualización de cambios"
      end

      attribute 1388805 "NORMAL_MODE"
	const_attribute package explicit_type "string"
	init_value "'NORMAL_MODE'"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@const string constante que indica el modo de migración normal"
      end

      attribute 1382149 "mode"
	private explicit_type "string"
	init_value "self::PREVIEW_MODE"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var string el modo en el cual se ejecuta la migración, actualmente hay dos modos: PREVIEW_MODE que genera un XML sin realizar los cambios en la base destino y EXPORT_MODE"
      end

      operation 1916549 "__construct"
	public explicit_return_type ""
	nparams 0
	
	
	php_def "  ${comment}${final}${visibility}${abstract}function ${name}${(}${)}
{
  ${body}}
"
	
	
      end

      operation 2072453 "str2array"
	preserve_cpp_body_indent private explicit_return_type "array"
	nparams 1
	  param in name "csv" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Convierte una cadena de CSV en un array

@param $csv string la cadena de texto con valores separados por comas

@return array Devuelve un arreglo donde se ha separado cada valor en un elemento del arreglo, si la cadena no tiene ms que espacios o es vacia retorna un arreglo vaco."
      end

      operation 1916677 "addElement"
	preserve_cpp_body_indent public explicit_return_type "DOMElement"
	nparams 3
	  param in name "name" explicit_type "string"
	  param in name "value" explicit_type "string"
	    defaultvalue "null"
	  param in name "parent" explicit_type "DOMElement"
	    defaultvalue "null"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Crea un nuevo elemento y lo agrega al documento o al parent indicado.

@param string $name el nombre del elemento
@param string $value el valor del elemento
@param DOMElement $parent en caso de indicarse, se agrega el elemento a este parent

@return DOMElement Retorna el elemento recién creado"
      end

      operation 1916805 "addAttribute"
	preserve_cpp_body_indent private explicit_return_type "DOMAttr"
	nparams 3
	  param in name "element" explicit_type "DOMElement"
	  param in name "name" explicit_type "string"
	  param in name "value" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Crea un atributo y lo agrega al elemento indicado.

@var DOMElement $element el elemento al cual desearmos agregarle una tributo
@var string $name el nombre del atributo
@var string $value el valor del atributo

@return DOMAttr Devuelve el atributo que se acaba de crear."
      end

      operation 1909381 "setOrigin"
	preserve_cpp_body_indent public return_type class_ref 1002885 // MigrationToolkit
	nparams 1
	  param inout name "from" type class_ref 167685 // ORM
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Configura el ORM fuente de datos.

@param ORM $from el ORM origen desde el cual se realizará la migración

@return MigrationToolkit la herramienta con el origen configurado"
      end

      operation 1909509 "setDestination"
	preserve_cpp_body_indent public return_type class_ref 1002885 // MigrationToolkit
	nparams 1
	  param inout name "to" type class_ref 167685 // ORM
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Configura el ORM destino de datos.

@param ORM $to el ORM hacia el cual se realizará la migración

@return MigrationToolkit la herramienta con el destino configurado"
      end

      operation 1909253 "addClass"
	preserve_cpp_body_indent public return_type class_ref 1002885 // MigrationToolkit
	nparams 4
	  param in name "class" explicit_type "string"
	  param in name "identifiers" explicit_type "array"
	  param in name "filters" explicit_type "array"
	    defaultvalue "null"
	  param in name "exclude" explicit_type "array"
	    defaultvalue "array()"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}, ${p3}${v3}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Define los parámetros de migración de las entidades pertenecientes a una clase.

@param string $class el nombre de la clase a migrar
@param array $identifiers los atributos candidatos que pueden considerarse irrepetibles entre las bases
@param array $filters un array de tuplas que representan un filtro tal cual como si fueran parámetros de ORMQuery
@param array $exclude una lista de atributos que de los cuales la herramienta no debe preocuparse

@return MigrationToolkit la herramienta de migración con la configuración agregada."
      end

      operation 1923333 "defineClass"
	preserve_cpp_body_indent public return_type class_ref 1002885 // MigrationToolkit
	nparams 2
	  param in name "class" explicit_type "string"
	  param in name "identifiers" explicit_type "array"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Indica a la herramienta cómo reconocer una cierta clase en las bases, pero no realiza migración sobre ella.

@param string $class el nombre de la clase a migrar
@param array $identifiers los atributos candidatos que pueden considerarse irrepetibles entre las bases

@return MigrationToolkit la herramienta de migración con la configuración agregada."
      end

      operation 1923461 "exchange"
	preserve_cpp_body_indent public return_type class_ref 1002885 // MigrationToolkit
	nparams 3
	  param in name "class" explicit_type "string"
	  param in name "idFrom" explicit_type "int"
	  param in name "idTo" explicit_type "int"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Declara que una entidad en particular de la base de origen debe considerarse como \"igual\" a otra cierta entidad en el destino. Esto permite redireccionar asociaciones y valores.

@param string $class el nombre de la clase a migrar
@param int $idFrom el identificador de la entidad en el origen
@param int $idTo el identificador de la entidad en el destino

@return MigrationToolkit la herramienta de migración con la configuración agregada."
      end

      operation 1946757 "migrate"
	preserve_cpp_body_indent private explicit_return_type "bool"
	nparams 2
	  param in name "class" explicit_type "string"
	  param in name "root" explicit_type "DOMElement"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Función auxiliar de migración"
      end

      operation 1946629 "findObject"
	preserve_cpp_body_indent private return_type class_ref 141317 // ORMObject
	nparams 2
	  param inout name "object" type class_ref 141317 // ORMObject
	  param inout name "keys" explicit_type "DOMElement"
	    defaultvalue "null"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Busca el objeto equivalente al dado en el destino.

@param ORMObject $object el objeto cuyo equivalente se desea encontrar
@param DOMElement $keys un objeto DOM al cual se le desea agregar la lista de claves empleadas para encontrar el objeto.

@return ORMObject|null Devuelve el objeto equivalente en la base destino o null si no se encuentra."
      end

      operation 1946501 "completeQuery"
	preserve_cpp_body_indent private explicit_return_type ""
	nparams 5
	  param inout name "query" type class_ref 389637 // ORMQuery
	  param inout name "object" type class_ref 141317 // ORMObject
	  param in name "path" explicit_type "string"
	  param in name "prefix" explicit_type "string"
	    defaultvalue "null"
	  param inout name "keys" explicit_type "DOMElement"
	    defaultvalue "null"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}, ${p3}${v3}, ${p4}${v4}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Agrega filtros a una consulta, en base a las configuraciones, el path indicado y el prefix, tomando como base al objeto $object.

@param ORMQuery $query la consulta a completar
@param ORMObject $object el objeto del cual se toman los valores a comparar
@param string $path la clave o claves (anidadas por \".\") que se desean filtrar
@param string $prefix al completar la query, a veces se pasa un objeto que es fruto de acceder ciertos atributos a traves de n \"getters\", si el path se pone en la query sólo el atributo filtrado no podría ser ubicado. Con el $prefix se complementa el camino recorrido para obtener $object.
@param DOMElement $keys un objeto DOMElement al cual adjuntar las claves por las cuales se realiza la búsqueda.

@return "
      end

      operation 1947141 "setDebug"
	preserve_cpp_body_indent public return_type class_ref 1002885 // MigrationToolkit
	nparams 1
	  param in name "enable" explicit_type "bool"
	    defaultvalue "true"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Habilita o deshabilita el modo debug.

@param boolean $enable si se pasa un true se habilita el modo debug (acción por default) y si se pasa false, se deshabilita.

@return MigrationToolkit la herramienta con el modo debug configurado"
      end

      operation 1954309 "logFiltersAndGroups"
	preserve_cpp_body_indent private explicit_return_type ""
	nparams 2
	  param inout name "node" explicit_type "array"
	  param inout name "root" explicit_type "DOMElement"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Función auxiliar"
      end

      operation 1909637 "execute"
	preserve_cpp_body_indent public explicit_return_type "bool"
	nparams 1
	  param in name "logfile" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Realiza la migración de entidades en base a las configuraciones cargadas.

@param string $logfile la ruta y nombre de archivo donde quedará el log de la operación

@return boolean Devuelve true si todo funciona bien o arroja una excepción con el error en caso que algo no funcione bien."
      end

      operation 1909765 "rollback"
	preserve_cpp_body_indent public explicit_return_type "bool"
	nparams 1
	  param in name "filepath" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Restaura los cambios realizados por una migración anterior.

@return boolean Retorna true si todo sale bien o una excepción en caso que haya algún problema."
      end

      operation 1931397 "addClass2"
	preserve_cpp_body_indent public return_type class_ref 1002885 // MigrationToolkit
	nparams 4
	  param in name "class" explicit_type "string"
	  param in name "identifiers" explicit_type "array"
	  param in name "filterFunction" explicit_type "Closure"
	    defaultvalue "null"
	  param in name "exclude" explicit_type "array"
	    defaultvalue "array()"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}, ${p3}${v3}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Define los parámetros de migración de las entidades pertenecientes a una clase.

@param string $class el nombre de la clase a migrar
@param array $identifiers los atributos candidatos que pueden considerarse irrepetibles entre las bases
@param Closure $filterFunction una función que toma un ORMQuery y aplica los filtros necesarios
@param array $exclude una lista de atributos que de los cuales la herramienta no debe preocuparse

@return MigrationToolkit la herramienta de migración con la configuración agregada."
      end

      operation 1954437 "addDataSet"
	preserve_cpp_body_indent public return_type class_ref 1002885 // MigrationToolkit
	nparams 2
	  param in name "class" explicit_type "string"
	  param in name "filters" explicit_type "array"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Amplia el conjunto de objetos a migrar para una clase.

@param string $class el nombre de la clase a migrar
@param array $filters un array de tuplas que representan un filtro tal cual como si fueran parámetros de ORMQuery

@return MigrationToolkit la herramienta con el set de objetos ampliado"
      end

      operation 1954565 "addDataSet2"
	preserve_cpp_body_indent public return_type class_ref 1002885 // MigrationToolkit
	nparams 2
	  param in name "class" explicit_type "string"
	  param in name "function" explicit_type "Closure"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Agrega un nuevo conjunto de objetos a migrar para una clase previamente declarada.

@param string $class el nombre de la clase a migrar
@param Closure $filterFunction una función que toma un ORMQuery y aplica los filtros necesarios

@return MigrationToolkit la herramienta con el nuevo selector de objetos agregado."
      end

      classrelation 1392517 // <dependency>
	relation 1366789 -_->
	  a package
	    php "${type}"
	    classrelation_ref 1392517 // <dependency>
	  b parent class_ref 1022725 // ORMQueryMTWrapper
      end
    end

    class 1035909 "OracleDatabase2"
      visibility package 
      cpp_decl ""
      java_decl ""
      php_decl "${comment}${final}${abstract}class ${name}${extends}${implements} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl ""
      explicit_switch_type ""
      
      comment "Reemplazo de la actual forma de acceso por packages a una forma directamente SQL."
      operation 2001413 "__construct"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 1
	  param in name "connection" type class_ref 201989 // OracleConnection
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Crea una abstracción de la base de datos.

@param OracleConnection $connection una conexión a la base de datos deseada.

@return OracleDatabase una instancia de OracleDatabase que sirve para trabajar con el ORM."
      end

      operation 2001669 "filter"
	preserve_cpp_body_indent cpp_virtual public explicit_return_type "array"
	nparams 6
	  param in name "table" explicit_type "string"
	  param in name "fields" explicit_type "array"
	  param in name "conditions" explicit_type "array"
	    defaultvalue "\"\""
	  param in name "order" explicit_type "array"
	    defaultvalue "\"\""
	  param in name "from" explicit_type "int"
	    defaultvalue "null"
	  param in name "count" explicit_type "int"
	    defaultvalue "null"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}, ${p3}${v3}, ${p4}${v4}, ${p5}${v5}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Igual a getData() pero mltiples filas. La idea sera recibir \"cuaternas\" que armen el SQL a ejecutar en base a la iteracin sobre los parmetros (hasta que se acaben) y un gran switch sobre \"operation\".
@param string $table el nombre de la tabla desde la cual recuperar los datos
@param array $fields un arreglo de strings con los nombres de los campos a recuperar
@param array $conditions otro arreglo con los condicionales codificados, cada uno, de la siguiente forma:array(operation, leftValue, rightValue, connector). Usar AbstractDataBase::makeCondition().
@param array $order se pasa aqu un arreglo de strings con formato \"nombreColumna [ASC|DESC]\", lo cual ordenar el conjunto de resultados.
@param int $from indica a partir de qu fila del resultset se desea acceder. Si se indica null trae desde la primer fila.
@param int $count indica cuntas filas a partir del $from se deben recuperar, si se indica null se recuperan todas.
@return array|false el conjunto de resultados o falso si hubo algn error
"
      end

      operation 2002565 "count"
	preserve_cpp_body_indent cpp_virtual public explicit_return_type "int"
	nparams 1
	  param inout name "coded_sql" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Similar a execute() pero slo contabiliza la cantidad de registros."
      end

      operation 2003333 "sql_filter"
	preserve_cpp_body_indent public explicit_return_type "string"
	nparams 4
	  param in name "table" explicit_type "string"
	  param in name "fields" explicit_type "array"
	  param in name "alias" explicit_type "string"
	    defaultvalue "\"\""
	  param in name "conditions" explicit_type "array"
	    defaultvalue "\"\""
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}, ${p3}${v3}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Es una implementacin especial que se utiliza para brindar soporte a ORMQuery.
Toma una tabla, el conjunto de campos de retorno y la lista de condiciones de filtrado retornando una representacin de la misma.

@param string $table el nombre de la tabla sobre la que se va a filtrar.
@param array $fields una lista de los nombres de los campos a retornar.
@param array $conditions las condiciones de filtrado. Para generar la lista use makeCondition().

@return Una representacin encapsulada de la consulta.

@see sql_add_condition()
@see sql_execute()"
      end

      operation 2003461 "sql_add_condition"
	preserve_cpp_body_indent public explicit_return_type "string"
	nparams 6
	  param inout name "main_sql" explicit_type "string"
	  param in name "table" explicit_type "string"
	  param in name "field" explicit_type "string"
	  param in name "operator" explicit_type "string"
	  param inout name "sql_select" explicit_type "string"
	  param in name "alias" explicit_type "string"
	    defaultvalue "\"\""
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}, ${p3}${v3}, ${p4}${v4}, ${p5}${v5}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Agrega una condicin de IN o NOT IN al sql indicado en base a otro select.

@param string $main_sql el sql codificado producto de un llamado previo a sql_filter() o sql_add_condition()
@param string $table el nombre de la tabla a la que pertenece el field que se va a filtrar
@param string field el campo que se validar
@param string operator el tipo de filtrado ('IN' o 'NOT IN')
@param string sql_select el select codificado que recupera la lista de claves
@param string alias por ahora no se usa y debe pasarse como \"\"

@return string un sql codificado.

@see sql_filter()
@see sql_execute()"
      end

      operation 2003589 "sql_add_where"
	preserve_cpp_body_indent public explicit_return_type "string"
	nparams 2
	  param inout name "coded_sql" explicit_type "string"
	  param in name "conditions" explicit_type "array"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Agrega una condicin general (global) a la instruccin SQL codificada.

@param string $coded_sql el SQL Codificado
@param array $conditions las condiciones a agregar
@return string el SQL resultante encriptado"
      end

      operation 2003717 "sql_join_table"
	preserve_cpp_body_indent public explicit_return_type "string"
	nparams 6
	  param inout name "coded_sql" explicit_type "string"
	  param in name "table" explicit_type "string"
	  param in name "alias" explicit_type "string"
	  param in name "fields" explicit_type "array"
	  param in name "conditions" explicit_type "array"
	  param in name "joinType" explicit_type "string"
	    defaultvalue "'INNER'"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}, ${p3}${v3}, ${p4}${v4}, ${p5}${v5}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Une mediante un JOIN los valores de la consulta actual con los de otra clase, utilizando para el emparejamiento las condiciones dadas e incorporando al conjunto de resultados los atributos indicados.
@param string	$coded_sql el sql codificado a modificar
@param string $table la tabla contra la que se va a hacer el JOIN
@param string $alias el alias de la tabla
@param array $fields los nuevos fields a incorporar en el conjunto de resultados
@param array $conditions las condiciones de emparejamiento del conjunto de resultados
@param string $joinType el tipo de unin (JOIN) que se har entre las consultas.

@return string La consulta resultante."
      end

      operation 2003845 "sql_join"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 5
	  param inout name "coded_sql" explicit_type "string"
	  param inout name "coded_sql2" explicit_type "string"
	  param in name "alias" explicit_type "string"
	  param in name "fields" explicit_type "array"
	  param in name "conditions" explicit_type "array"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}, ${p3}${v3}, ${p4}${v4}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Une mediante un JOIN los valores de la consulta actual con los de otra clase, utilizando para el emparejamiento las condiciones dadas e incorporando al conjunto de resultados los atributos indicados.
@param string	$coded_sql el sql codificado a modificar
@param string $coded_sql2 la otra consulta contra la que se va a hacer el JOIN
@param string $alias el alias de la tabla
@param array $fields los nuevos fields a incorporar en el conjunto de resultados
@param array $conditions las condiciones de emparejamiento del conjunto de resultados"
      end

      operation 2004229 "sql_execute2"
	preserve_cpp_body_indent public explicit_return_type "array"
	nparams 7
	  param inout name "coded_sql" explicit_type "string"
	  param in name "groups" explicit_type "array"
	    defaultvalue "null"
	  param in name "order" explicit_type "array"
	    defaultvalue "null"
	  param in name "from" explicit_type "int"
	    defaultvalue "null"
	  param in name "count" explicit_type "int"
	    defaultvalue "null"
	  param in name "maxFetch" explicit_type "int"
	    defaultvalue "null"
	  param in name "lobFields" explicit_type "array"
	    defaultvalue "null"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}, ${p3}${v3}, ${p4}${v4}, ${p5}${v5}, ${p6}${v6}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Ejecuta una consulta codificada con sql_filter() o sql_add_condition().

@param string $coded_sql la consulta codificada a ejecutar
@param array $groups un arreglo con los campos que se agruparán de la consulta
@param array $order un arreglo con los nombres de los campos para el ordenamiento... se puede poner un espacio y ASC o DESC según se desee.
@param int $from el primer registro del conjunto de resultados
@param int $count la cantidad de registros que se espera leer
@param int $maxFetch de ser especificado, la consulta se resuelve recuperando los datos de a bloques de ese tamaño (el tamaño se refiere a cantidad de filas, no tamaño del resultset)
@param array $lobFields en caso de especificarse, el método se cuidará de recuperar las filas de a una y cargar los valores de los LOBs
@return array un arreglo con los campos solicitados

@see sql_filter()
@see sql_add_condition()"
      end

      operation 2004357 "sql_set_columns"
	preserve_cpp_body_indent public explicit_return_type "string"
	nparams 4
	  param inout name "coded_sql" explicit_type "string"
	  param in name "columns" explicit_type "array"
	  param in name "replace" explicit_type "bool"
	    defaultvalue "true"
	  param in name "distinct" explicit_type "bool"
	    defaultvalue "false"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}, ${p3}${v3}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Agrega o reemplaza el from de una sentencia SQL.

@param string $coded_sql el SQL Codificado
@param array $columns las columnas a agregar
@param boolean $replace especifica si el from existente debe preservarse o no.
@param boolean $distinct especifica si se agrega la palabra DISTINCT luego del SELECT. Este cambio es NO REVERSIBLE!!
@return string el SQL resultante encriptado"
      end

      classrelation 1405701 // <generalisation>
	relation 1373445 ---|>
	  a public
	    php "${type}"
	    classrelation_ref 1405701 // <generalisation>
	  b parent class_ref 308741 // OracleDatabase
      end

      operation 2011397 "makeWhere"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 1
	  param in name "conditions" explicit_type "array"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
      end
    end

    class 1294085 "ORMSingleton"
      visibility package stereotype "trait"
      cpp_decl ""
      java_decl ""
      php_decl "${comment}${final}${abstract}trait ${name}${extends}${implements} {
@{traits}
${members}}
"
      python_2_2 python_decl ""
      idl_decl ""
      explicit_switch_type ""
      
      ncouples 1
      key "traits" value ""
      attribute 1824645 "instance"
	class_attribute private explicit_type "object"
	multiplicity "1"
	init_value "null"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var object "
      end

      operation 2449413 "getInstance"
	class_operation preserve_cpp_body_indent public explicit_return_type "object"
	nparams 1
	  param inout name "orm" type class_ref 167685 // ORM
	    defaultvalue "null"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Devuelve la instancia del objeto o la crea de ser necesario.

@param ORM $orm el ORM al cual se vincula el singleton

@return ORMObject La instancia singleton de la clase."
      end
    end

    class 174854 "MySQLDatabase"
      visibility package 
      cpp_decl ""
      java_decl ""
      php_decl "${comment}${final}${abstract}class ${name}${extends}${implements} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl ""
      explicit_switch_type ""
      
      classrelation 226822 // <generalisation>
	relation 225414 ---|>
	  a public
	    php "${type}"
	    classrelation_ref 226822 // <generalisation>
	  b parent class_ref 295685 // AbstractDataBase
      end

      attribute 208390 "pks_cache"
	private explicit_type "array"
	init_value "array()"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var ${type} un arreglo con las pks ya consultadas"
      end

      attribute 208518 "connection"
	private type class_ref 228997 // MySQLConnection
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var ${type} La conexión almacenada"
      end

      attribute 1919749 "debug"
	private explicit_type "bool"
	init_value "false"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var ${type} indica si se deben mostrar mensajes de debug al ejecutar un proceso"
      end

      operation 2611717 "__construct"
	preserve_cpp_body_indent public return_type class_ref 174854 // MySQLDatabase
	nparams 1
	  param in name "connection" type class_ref 228997 // MySQLConnection
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Crea una nueva abstracción de base de datos para MySQL sobre la conexión pasada por parámetro.

@param ${t0} ${p0} la instancia de la conexión

@return ${type} la instancia que abstrae la base de datos para el ORM"
      end

      operation 308998 "getPk"
	preserve_cpp_body_indent private explicit_return_type "string"
	nparams 1
	  param in name "table" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Busca la PK de la tabla, primero se fija en la cache.

@param ${p0} ${t0} El nombre de la tabla
@return ${type} El nombre del campo PK de la tabla ${p0}"
      end

      operation 300678 "getData"
	preserve_cpp_body_indent cpp_virtual public explicit_return_type "array"
	nparams 3
	  param in name "table" explicit_type "string"
	  param in name "id" explicit_type "int"
	  param in name "fields" explicit_type "array"
	    defaultvalue "\"\""
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Dada una tabla y el identificador de registros, devuelve los valores de los campos especificados.
@abstract
@param $table string el nombre de la tabla
@param $id long el identificador de la fila en la que estamos interesados
@param $fields array un arreglo de strings con los nombres de las columnas a recuperar
@return array|false un arreglo asociativo (field=>value) con los valores recuperados de la base o false si hubo algn error."
      end

      operation 300806 "getField"
	preserve_cpp_body_indent cpp_virtual public explicit_return_type "mixed"
	nparams 3
	  param in name "table" explicit_type "string"
	  param in name "id" explicit_type "int"
	  param in name "field" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Retorna el valor del campo especificado. El nombre de la columna debe ser el simil al campo definido en la base de datos. La intencin es usarlo para recuperar campos BLOB, CLOB y otros \"pesados\" sobre demanda.

@param string $table el nombre de la tabla
@param int $id el identificador del registro
@param string $field el nombre del campo a recuperar

@return mixed el valor del campo recuperado."
      end

      operation 300934 "filter"
	preserve_cpp_body_indent cpp_virtual public explicit_return_type "array"
	nparams 6
	  param in name "table" explicit_type "string"
	  param in name "fields" explicit_type "array"
	  param in name "conditions" explicit_type "array"
	    defaultvalue "\"\""
	  param in name "order" explicit_type "array"
	    defaultvalue "\"\""
	  param in name "from" explicit_type "int"
	    defaultvalue "null"
	  param in name "count" explicit_type "int"
	    defaultvalue "null"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}, ${p3}${v3}, ${p4}${v4}, ${p5}${v5}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Igual a getData() pero mltiples filas. La idea sera recibir \"cuaternas\" que armen el SQL a ejecutar en base a la iteracin sobre los parmetros (hasta que se acaben) y un gran switch sobre \"operation\".
@param string $table el nombre de la tabla desde la cual recuperar los datos
@param array $fields un arreglo de strings con los nombres de los campos a recuperar
@param array $conditions otro arreglo con los condicionales codificados, cada uno, de la siguiente forma:array(operation, leftValue, rightValue, connector). Usar AbstractDataBase::makeCondition().
@param array $order se pasa aqu un arreglo de strings con formato \"nombreColumna [ASC|DESC]\", lo cual ordenar el conjunto de resultados.
@param int $from indica a partir de qu fila del resultset se desea acceder. Si se indica null trae desde la primer fila.
@param int $count indica cuntas filas a partir del $from se deben recuperar, si se indica null se recuperan todas.
@return array|false el conjunto de resultados o falso si hubo algn error
"
      end

      operation 301062 "insert"
	preserve_cpp_body_indent cpp_virtual public explicit_return_type "int"
	nparams 3
	  param in name "table" explicit_type "string"
	  param in name "fields" explicit_type "array"
	  param in name "useGenerator" explicit_type "bool"
	    defaultvalue "true"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Inserta un registro en la tabla con los campos que se indiquen.

@param string $table el nombre de la tabla en la que se desea insertar
@param array $fields un arreglo con los campos a insertar. Ntese que las claves son los FieldNames y que all se instarn los valores de dichas claves.
@param boolean $useGenerator un booleano que indica si al hacer un insert se debe autodetectar la clave primaria y emplear el generador de dicha clave o si slo se emplean los valores pasados por parmetro.

@return int el identificador con el cual qued el registro en la tabla.
"
      end

      operation 301190 "update"
	preserve_cpp_body_indent cpp_virtual public explicit_return_type ""
	nparams 3
	  param in name "table" explicit_type "string"
	  param in name "fields" explicit_type "array"
	  param in name "conditions" explicit_type "array"
	    defaultvalue "\"\""
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Realiza un UPDATE sobre la tabla y los campos indicados, es parecido a filter.

@param string $table el nombre de la tabla a actualizar
@param array $fields un arreglo cuyas claves son los nombres de los campos a actualizar.
@param array $conditions otro arreglo donde cada elemento es un arreglo con el siguiente formato: array(field, operation, value1, value2, connector) el cual se puede generar con la funcin makeCondition() de cualquier miembro de la jerarqua de AbstractDataBase.

@return int|false el nmero de filas afectadas o false si hubo error"
      end

      operation 301318 "delete"
	preserve_cpp_body_indent cpp_virtual public explicit_return_type ""
	nparams 2
	  param in name "table" explicit_type "string"
	  param in name "what" explicit_type "mixed"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Borra un registro de la tabla segn su id o un conjunto de condiciones.

@param string $table el nombre de la tabla sobre la cual hacer el borrado.
@param int|array $what puede ser un entero (el id) o un arreglo de condiciones.

@return int|false la cantidad de filas afectadas o false si hubo error"
      end

      operation 301446 "addRelation"
	preserve_cpp_body_indent cpp_virtual public explicit_return_type "boolean"
	nparams 2
	  param in name "table" explicit_type "string"
	  param in name "fields" explicit_type "array"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Agrega un registro de relacin de una relacin M:N

@param string $table el nombre de la tabla relacin
@param array $fields un arreglo indexado por el nombre del campo de la base de datos

@return boolean Retorna TRUE si la operacin se realiz con xito, FALSE sino."
      end

      operation 301574 "delRelation"
	preserve_cpp_body_indent cpp_virtual public explicit_return_type "bool"
	nparams 2
	  param in name "table" explicit_type "string"
	  param in name "fields" explicit_type "array"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Quita un registro de relacin de una relacin M:N

@param string $table el nombre de la tabla relacin
@param array $fields un arreglo indexado por el nombre del campo de la base de datos para filtrar

@return boolean Retorna TRUE si la operacin se realiz con xito, FALSE sino."
      end

      operation 301702 "count"
	preserve_cpp_body_indent cpp_virtual public explicit_return_type ""
	nparams 1
	  param inout name "coded_sql" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Similar a execute() pero slo contabiliza la cantidad de registros."
      end

      operation 301830 "makeCondition"
	preserve_cpp_body_indent cpp_virtual public explicit_return_type "array"
	nparams 4
	  param in name "operation" explicit_type "string"
	  param in name "leftValue" explicit_type "mixed"
	  param in name "rightValue" explicit_type "mixed"
	  param in name "connector" explicit_type "string"
	    defaultvalue "\"\""
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}, ${p3}${v3}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Funcin de utilera para crear una condicin

@param string $operation la operacin de comparacin o verificacin: =, &lt;&gt;, LIKE, IN, NOT, BETWEEN. En el caso de IN la funcin espera que el rightValue sea un array y separa sus componentes por \",\" y los encierra entre parntesis.
@param mixed $leftValue el primer operando
@param mixed $rightValue el segundo operando
@connector string $connector el conector con el que se debe unir esta condicin con la siguiente (AND, OR)
@return array el arreglo de la condicin formateado"
      end

      operation 301958 "php2db"
	preserve_cpp_body_indent cpp_virtual public explicit_return_type "mixed"
	nparams 2
	  param in name "value" explicit_type "mixed"
	  param in name "type" explicit_type "int"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Convierte valores PHP a la representacin necesaria para que la base de datos lo entienda. Debe ser utilizado para pasar los \"values\" en las funciones.
@param mixed $value el valor nativo de PHP que se desea convertir
@param int $type el tipo al que queremos castear, adopta las constates de ORM_TYPES

@return mixed El valor que requiere la base de datos"
      end

      operation 302086 "db2php"
	preserve_cpp_body_indent cpp_virtual public explicit_return_type ""
	nparams 2
	  param in name "value" explicit_type "mixed"
	  param in name "type" explicit_type "int"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Convierte valores devueltos por la base de datos a la representacin PHP solicitada. Debe ser utilizado para pasar los \"values\" en las funciones.
@param mixed $value el valor nativo de PHP que se desea convertir
@param int $type el tipo al que queremos castear, adopta las constates de ORM_TYPES

@return mixed El valor convertido a su representacin PHP ms prxima"
      end

      operation 302214 "getDateTime"
	preserve_cpp_body_indent cpp_virtual public explicit_return_type "datetime"
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Retorna un valor de fecha y hora de la base.

@return datetime El momento en el cual se efecta el llamado segn la base de datos."
      end

      operation 302342 "getConnection"
	preserve_cpp_body_indent cpp_virtual public return_type class_ref 228997 // MySQLConnection
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Devuelve la conexión usada por la instancia.

@return ${type} La conexión que utiliza la instancia de base de datos"
      end

      operation 302470 "updateLob"
	preserve_cpp_body_indent cpp_virtual public explicit_return_type "bool"
	nparams 5
	  param in name "table" explicit_type "string"
	  param in name "id" explicit_type "string"
	  param in name "field" explicit_type "string"
	  param inout name "value" explicit_type "mixed"
	  param in name "type" explicit_type "int"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}, ${p3}${v3}, ${p4}${v4}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Graba un campo de LOB (CLOB, BLOB, etc...)

@param $table string el nombre de la tabla
@param $id string el identificador de la fila en la tabla
@param $field string el nombre del campo donde se guardará el valor
@param $value mixed el valor a guardar
@param $type int el tipo de LOB de que se trata.

@return bool devuelve TRUE si todo salió bien y FALSE en caso contrario"
      end

      operation 322182 "makeWhere"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 1
	  param in name "conditions" explicit_type "array"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
      end

      operation 2611845 "setDebug"
	preserve_cpp_body_indent public return_type class_ref 174854 // MySQLDatabase
	nparams 1
	  param in name "enable" explicit_type "bool"
	    defaultvalue "true"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Habilita o deshabilita el debug.

@param ${p0} {$t0} un flag que indica si se desea habilitar o no la salida de información de depuración

@return ${type} la abstracción de base de datos con la nueva opción de debug"
      end

      operation 2618373 "condition2sql"
	preserve_cpp_body_indent public explicit_return_type "string"
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
      end

      operation 2624901 "sql_filter"
	preserve_cpp_body_indent public explicit_return_type "string"
	nparams 4
	  param in name "table" explicit_type "string"
	  param in name "fields" explicit_type "array"
	  param in name "alias" explicit_type "string"
	    defaultvalue "\"\""
	  param in name "conditions" explicit_type "array"
	    defaultvalue "\"\""
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}, ${p3}${v3}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Es una implementacin especial que se utiliza para brindar soporte a ORMQuery.
Toma una tabla, el conjunto de campos de retorno y la lista de condiciones de filtrado retornando una representacin de la misma.

@param string $table el nombre de la tabla sobre la que se va a filtrar.
@param array $fields una lista de los nombres de los campos a retornar.
@param array $conditions las condiciones de filtrado. Para generar la lista use makeCondition().

@return Una representacin encapsulada de la consulta.

@see sql_add_condition()
@see sql_execute()"
      end

      operation 2625029 "sql_execute2"
	preserve_cpp_body_indent public explicit_return_type "array"
	nparams 7
	  param inout name "coded_sql" explicit_type "string"
	  param in name "groups" explicit_type "array"
	    defaultvalue "null"
	  param in name "order" explicit_type "array"
	    defaultvalue "null"
	  param in name "from" explicit_type "int"
	    defaultvalue "null"
	  param in name "count" explicit_type "int"
	    defaultvalue "null"
	  param in name "maxFetch" explicit_type "int"
	    defaultvalue "null"
	  param in name "lobFields" explicit_type "array"
	    defaultvalue "null"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}, ${p3}${v3}, ${p4}${v4}, ${p5}${v5}, ${p6}${v6}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Ejecuta una consulta codificada con sql_filter() o sql_add_condition().

@param string $coded_sql la consulta codificada a ejecutar
@param array $groups un arreglo con los campos que se agruparán de la consulta
@param array $order un arreglo con los nombres de los campos para el ordenamiento... se puede poner un espacio y ASC o DESC según se desee.
@param int $from el primer registro del conjunto de resultados
@param int $count la cantidad de registros que se espera leer
@param int $maxFetch de ser especificado, la consulta se resuelve recuperando los datos de a bloques de ese tamaño (el tamaño se refiere a cantidad de filas, no tamaño del resultset)
@param array $lobFields en caso de especificarse, el método se cuidará de recuperar las filas de a una y cargar los valores de los LOBs
@return array un arreglo con los campos solicitados

@see sql_filter()
@see sql_add_condition()"
      end

      operation 2625285 "sql_add_where"
	preserve_cpp_body_indent public explicit_return_type "string"
	nparams 2
	  param inout name "coded_sql" explicit_type "string"
	  param in name "conditions" explicit_type "array"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Agrega una condicin general (global) a la instruccin SQL codificada.

@param string $coded_sql el SQL Codificado
@param array $conditions las condiciones a agregar
@return string el SQL resultante encriptado"
      end

      operation 2625413 "sql_join_table"
	preserve_cpp_body_indent public explicit_return_type "string"
	nparams 6
	  param inout name "coded_sql" explicit_type "string"
	  param in name "table" explicit_type "string"
	  param in name "alias" explicit_type "string"
	  param in name "fields" explicit_type "array"
	  param in name "conditions" explicit_type "array"
	  param in name "joinType" explicit_type "string"
	    defaultvalue "'INNER'"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}, ${p3}${v3}, ${p4}${v4}, ${p5}${v5}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Une mediante un JOIN los valores de la consulta actual con los de otra clase, utilizando para el emparejamiento las condiciones dadas e incorporando al conjunto de resultados los atributos indicados.
@param string	$coded_sql el sql codificado a modificar
@param string $table la tabla contra la que se va a hacer el JOIN
@param string $alias el alias de la tabla
@param array $fields los nuevos fields a incorporar en el conjunto de resultados
@param array $conditions las condiciones de emparejamiento del conjunto de resultados
@param string $joinType el tipo de unin (JOIN) que se har entre las consultas.

@return string La consulta resultante."
      end
    end
  end

  deploymentview 141189 "ORM Deployment"
    //deployment diagram settings
    package_name_in_tab default show_context default write_horizontally default auto_label_position default draw_all_relations default shadow default
    draw_component_as_icon default show_component_req_prov default show_component_rea default show_stereotype_properties default
    ncouples 1
    key "uses" value ""
    artifact 171653 "ORM"
      stereotype "source"
      php_src "<?php
${require_once}
@{uses}

/**
* Author: Jorge Alexis Viqueira
* ${description}
*/
${definition}
?>"
      associated_classes
	class_ref 167685 // ORM
      end
    end

    artifact 171781 "ORMDefinition"
      stereotype "source"
      php_src "<?php
${require_once}
@{uses}

/**
* Author: Jorge Alexis Viqueira
* ${description}
*/
${definition}
?>"
      associated_classes
	class_ref 236293 // ORMDefinition
      end
    end

    artifact 185221 "ORMObject"
      stereotype "source"
      php_src "<?php
${require_once}
@{uses}

/**
* Author: Jorge Alexis Viqueira
* ${description}
*/
${definition}
?>"
      associated_classes
	class_ref 141317 // ORMObject
      end
      ncouples 1
      key "" value ""
    end

    artifact 205317 "ORMCollection"
      stereotype "source"
      php_src "<?php
${require_once}
@{uses}

/**
* Author: Jorge Alexis Viqueira
* ${description}
*/
${definition}
?>"
      associated_classes
	class_ref 256133 // ORMCollection
      end
    end

    artifact 211845 "ORM_STATUS"
      stereotype "source"
      php_src "<?php
${require_once}
@{uses}

/**
* Author: Jorge Alexis Viqueira
* ${description}
*/
${definition}
?>"
      associated_classes
	class_ref 269445 // ORM_STATUS
      end
    end

    artifact 211973 "ORM_TYPES"
      stereotype "source"
      php_src "<?php
${require_once}
@{uses}

/**
* Author: Jorge Alexis Viqueira
* ${description}
*/
${definition}
?>"
      associated_classes
	class_ref 275973 // ORM_TYPES
      end
    end

    artifact 212101 "ORM_LOAD_STYLE"
      stereotype "source"
      php_src "<?php
${require_once}
@{uses}

/**
* Author: Jorge Alexis Viqueira
* ${description}
*/
${definition}
?>"
      associated_classes
	class_ref 282501 // ORM_LOAD_STYLE
      end
    end

    artifact 212229 "ORM_RELATION_TYPE"
      stereotype "source"
      php_src "<?php
${require_once}
@{uses}

/**
* Author: Jorge Alexis Viqueira
* ${description}
*/
${definition}
?>"
      associated_classes
	class_ref 282629 // ORM_RELATION_TYPE
      end
    end

    artifact 218757 "AbstractDataBase"
      stereotype "source"
      php_src "<?php
${require_once}
@{uses}

/**
* Author: Jorge Alexis Viqueira
* ${description}
*/
${definition}
?>"
      associated_classes
	class_ref 295685 // AbstractDataBase
      end
    end

    artifact 219013 "PrivateAccesor"
      stereotype "source"
      php_src "<?php
${require_once}
@{uses}

/**
* Author: Jorge Alexis Viqueira
* ${description}
*/
${definition}
?>"
      associated_classes
	class_ref 289157 // PrivateAccesor
      end
    end

    artifact 225541 "OracleDatabase"
      stereotype "source"
      php_src "<?php
${require_once}
@{uses}

/**
* Author: Jorge Alexis Viqueira
* ${description}
*/
${definition}
?>"
      associated_classes
	class_ref 308741 // OracleDatabase
      end
      ncouples 1
      key "uses" value "
"
    end

    artifact 232069 "LazyLoader"
      stereotype "source"
      php_src "<?php
${require_once}
@{uses}

/**
* Author: Jorge Alexis Viqueira
* ${description}
*/
${definition}
?>"
      associated_classes
	class_ref 315269 // LazyLoader
      end
    end

    artifact 291077 "ORMQuery"
      stereotype "source"
      php_src "<?php
${require_once}
@{uses}

/**
* Author: Jorge Alexis Viqueira
* ${description}
*/
${definition}
?>"
      associated_classes
	class_ref 389637 // ORMQuery
      end
    end

    artifact 350725 "ORMQueryOld"
      stereotype "source"
      php_src "<?php
${require_once}
@{uses}

/**
* Author: Jorge Alexis Viqueira
* ${description}
*/
${definition}
?>"
      associated_classes
      end
    end

    artifact 573701 "ORMAttribute"
      stereotype "source"
      php_src "<?php
${require_once}
@{uses}

/**
* Author: @{author}
* ${description}
*/
${definition}
?>"
      associated_classes
	class_ref 702469 // ORMAttribute
      end
    end

    artifact 875397 "MigrationToolkit"
      stereotype "source"
      php_src "<?php
${require_once}
@{uses}

/**
* Author: @{author}
* ${description}
*/
${definition}
?>"
      associated_classes
	class_ref 1002885 // MigrationToolkit
      end
    end

    artifact 881925 "ORMQueryMTWrapper"
      stereotype "source"
      php_src "<?php
${require_once}
@{uses}

/**
* Author: @{author}
* ${description}
*/
${definition}
?>"
      associated_classes
	class_ref 1022725 // ORMQueryMTWrapper
      end
    end

    artifact 895109 "OracleDatabase2"
      stereotype "source"
      php_src "<?php
${require_once}
@{uses}

/**
* Author: @{author}
* ${description}
*/
${definition}
?>"
      associated_classes
	class_ref 1035909 // OracleDatabase2
      end
    end

    artifact 1081733 "ORMSingleton"
      stereotype "source"
      php_src "<?php
${require_once}
@{uses}

/**
* Author: @{author}
* ${description}
*/
${definition}
?>"
      associated_classes
	class_ref 1294085 // ORMSingleton
      end
    end

    artifact 188294 "MySQLDatabase"
      stereotype "source"
      php_src "<?php
${require_once}
@{uses}

/**
* Author: @{author}
* ${description}
*/
${definition}
?>"
      associated_classes
	class_ref 174854 // MySQLDatabase
      end
    end
  end

  package_ref 167429 // exceptions

  package_ref 200197 // validations
end
