sort

Crea una lista nueva clasificando los miembros de una lista existente de acuerdo con un orden de clasificación especificado.

Una expresión sort especifica:

sortorder especifica uno o más sortitem, cada uno de los cuales especifica el elemento por el que se debe clasificar y si se debe clasificar en orden ascendente o descendente.

Los sortitem se listan poniendo primero el más significativo; cada sortitem sólo se evalúa si dos elementos que se están clasificando son idénticos en relación a los sortitem más significativos.

Dentro de cada sortitem, puede utilizar current para hacer referencia al elemento de lista que se está clasificando. Normalmente cada sortitem hará referencia a algún atributo o cálculo en el elemento de lista current.

Si dos (o más) elementos de la lista son idénticos respecto a todos los sortitem, se devuelven en el mismo orden relativo que la lista de origen.

El comportamiento de la expresión sort es similar al de la cláusula ORDER BY de SQL.

<?xml version="1.0" encoding="UTF-8"?>
<RuleSet name="Example_sort"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:noNamespaceSchemaLocation=
"http://www.curamsoftware.com/CreoleRulesSchema.xsd">
  <Class name="Household">

    <Attribute name="members">
      <type>
        <javaclass name="List">
          <ruleclass name="Person"/>
        </javaclass>
      </type>
      <derivation>
        <specified/>
      </derivation>
    </Attribute>

    <!-- Ordena los miembros en orden de edad (más viejo a más joven);
         para miembros que son la misma edad, los miembros se
         ordenan en orden alfabético por nombre. -->
    <Attribute name="sortedMembers">
      <type>
        <javaclass name="List">
          <ruleclass name="Person"/>
        </javaclass>
      </type>
      <derivation>
        <sort>
          <list>
            <reference attribute="members"/>
          </list>
          <sortorder>
            <sortitem direction="descending">
              <!-- La edad de la persona en la lista -->
              <reference attribute="age">
                <current/>
              </reference>
            </sortitem>
            <!-- El nombre de la persona en la lista -->
            <sortitem direction="ascending">
              <reference attribute="firstName">
                <current/>
              </reference>
            </sortitem>
          </sortorder>
        </sort>
      </derivation>
    </Attribute>

  </Class>

  <Class name="Person">

    <Initialization>
      <Attribute name="firstName">
        <type>
          <javaclass name="String"/>
        </type>
      </Attribute>
      <Attribute name="age">
        <type>
          <javaclass name="Integer"/>
        </type>
      </Attribute>
    </Initialization>

  </Class>

</RuleSet>