The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
<userprofile>
  <items/>
  <bags/>
  <queries>
  </queries>

  <template-queries>
    <template name="employeeByName" description="View all the employees with certain name" >
      <query name="employeeByName" model="testmodel" view="Employee.name Employee.age">
        <constraint path="Employee.name" op="=" value="" identifier="Employee.name" editable="true" code="A" />
      </query>
    </template>

    <template name="employeesFromCompanyAndDepartment" description="View all the employees that work within a certain department of the specified company" >
      <query name="employeesFromCompanyAndDepartment" model="testmodel" view="Employee.name Employee.age" constraintLogic="A and B">
        <constraint path="Employee.department.company.name" op="=" value="CompanyA" identifier="Company.name" editable="true" code="A" />
        <constraint path="Employee.department.name" op="=" value="Department*" identifier="Department.name" editable="true" code="B" />
      </query>
    </template>

    <template name="employeesOfACertainAge" description="View all the employees of a certain age" >
      <query name="employeesOfACertainAge" model="testmodel" view="Employee.name Employee.age" constraintLogic="A and B">
        <constraint path="Employee.age" op="&gt;" value="35" description="First age constraint" identifier="Employee.age.LESS_THAN.1" editable="true" code="A" />
        <constraint path="Employee.age" op="!=" value="55" description="Second age constraint" identifier="Employee.age.NOT_EQUALS.1" editable="true" code="B" />
      </query>
    </template>

    <template name="employeesOverACertainAgeFromDepartmentA" title="View all the employees of a certain age from a certain department" longDescription="" comment="" >
      <query name="employeesOverACertainAgeFromDepartmentA" model="testmodel" view="Employee.name Employee.age Employee.department.name" constraintLogic="A and B">
        <constraint path="Employee.age" op="&gt;=" value="25" description="Age constraint" identifier="Employee.age.NOT_EQUALS.1" editable="true" code="A" />
        <constraint path="Employee.department.name" op="=" value="DepartmentA" description="Department constraint" editable="true" code="B" />
      </query>
    </template>

    <template name="convertEmployeesToAddresses" title="Convert employees to addresses" longDescription="" comment="" >
      <query name="convertEmployeesToAddresses" model="testmodel" view="Employee.id Employee.address.id Employee.name" sortOrder="Employee.name" >
        <constraint path="Employee.id" op="=" value="0" description="id" editable="true" code="A" />
      </query>
    </template>

    <template name="convertEmployeeToManager" title="Convert Employees to Managers" longDescription="" comment="" >
      <query name="convertEmployeeToManager" model="testmodel" view="Employee.name Employee.id Employee.department.manager.id">
        <constraint path="Employee.id" op="=" value="0" description="id" editable="true" code="A" />
      </query>
    </template>

    <template name="convertContractorToEmployees"
              title="convert contractors to employees" longDescription=""
              comment="This isn't a very sensible query to do, but it's useful for testing the TypeConverter class"
              >
      <query name="convertContractorToEmployees" model="testmodel" view="Contractor.id Contractor.companys.departments.employees.id" >
        <constraint  path="Contractor.id" op="=" value="0" description="Contractor.id" identifier="Contractor.id" editable="true" code="A" />
      </query>
    </template>

<template name="ManagerLookup" title="Search for Managers" longDescription="Use a LOOKUP constraint to search for Managers." comment="">
  <query name="ManagerLookup" model="testmodel" view="Manager.name Manager.title">
    <constraint path="Manager" op="LOOKUP" value="Mr." editable="true" code="A" />
  </query>
</template>

<template name="InnerInsideOuter" title="Inner join inside an outer join" longDescription="Inner inside outer" comment="">
  <query name="InnerInsideOuter" model="testmodel" view="Company.name Company.departments.name Company.departments.manager.name" constraintLogic="A and B">
    <join path="Company.departments" style="OUTER" />
    <constraint path="Company.name" op="=" value="flibble" description="something" identifier="flibble" editable="true" code="A" />
    <constraint path="Company.departments.manager.name" op="=" value="flobble" description="simething" identifier="flobble" editable="true" code="B" />
  </query>
</template>

<template name="SwitchableConstraints" title="Template with Switchable constraints" longDescription="Locked On and Off" comment="">
  <query name="SwitchableConstraints" model="testmodel" view="Company.name Company.departments.name Company.departments.employees.name" constraintLogic="A and B and C">
    <constraint path="Company.name" op="=" value="Woolies" description="Select a company" identifier="Company's name" editable="true" switchable="locked" code="A" />
    <constraint path="Company.departments.name" op="=" value="Farm Supplies" description="Select a department" identifier="Departments's name" editable="true" switchable="on" code="B" />
    <constraint path="Company.departments.employees.name" op="=" value="Brian Bayliss" description="Select an employee" identifier="Employee's name" editable="true" switchable="off" code="C" />
  </query>
</template>

<template name="UneditableConstraints" title="Template with Uneditable constraints" longDescription="True and False" comment="">
  <query name="UneditableConstraints" model="testmodel" view="Company.name Company.departments.name" constraintLogic="A and B">
    <constraint path="Company.name" op="=" value="Woolies" description="Select a company" identifier="Company's name" editable="true" code="A" />
    <constraint path="Company.departments.name" op="=" value="Farm Supplies" description="Select a department" identifier="Departments's name" editable="false" code="B" />
  </query>
</template>

<template name="MultiValueConstraints" title="Template with a multi value constraint" longDescription="Many Values" comment="">
  <query  name="MultiValueConstraints" model="testmodel" view="Employee.name Employee.age">
    <constraint path="Employee.name" op="ONE OF" description="One of these names" identifier="Employee's name" editable="true" code="A" >
      <value>Dick</value>
      <value>Jane</value>
      <value>Timmy, the Loyal German-Shepherd</value>
    </constraint>
  </query>
</template>

<template name="RangeQueries" title="Template with a range constraint" longDescription="Many Ranges" comment="">
  <query  name="RangeQueries" model="testmodel" view="Employee.name Employee.age">
    <constraint path="Employee.age" op="OVERLAPS" editable="true" code="A" >
      <value>1..10</value>
      <value>30..35</value>
    </constraint>
  </query>
</template>
    

<template name="SubClassContraints" title="Template with subclasses">
    <query name="SubClassContraints" model="testmodel" view="Company.departments.employees.name Company.departments.employees.seniority">
        <constraint path="Company.departments.employees" type="Manager" editable="false"/>
        <constraint path="Company.name" op="=" value="CompanyA" editable="true" code="A"/>
    </query>
</template>

    <template name="SortOrderNotInView" title="Convert employees to addresses" longDescription="" comment="" >
      <query name="SortOrderNotInView" model="testmodel" view="Employee.name Employee.age" sortOrder="Employee.department.name">
        <constraint path="Employee.id" op="=" value="0" description="id" editable="true" code="A"/>
      </query>
    </template>

  </template-queries>

  <tags>
    <tag name="im:aspect:People" objectIdentifier="org.intermine.model.testmodel.Employee" type="class">
    </tag>
    <tag name="im:aspect:People" objectIdentifier="org.intermine.model.testmodel.Manager" type="class">
    </tag>
    <tag name="im:aspect:People" objectIdentifier="org.intermine.model.testmodel.CEO" type="class">
    </tag>
    <tag name="im:aspect:People" objectIdentifier="org.intermine.model.testmodel.Contractor" type="class">
    </tag>
    <tag name="im:aspect:People" objectIdentifier="org.intermine.model.testmodel.Secretary" type="class">
    </tag>
    <tag name="im:aspect:Entities" objectIdentifier="org.intermine.model.testmodel.Bank" type="class">
    </tag>
    <tag name="im:aspect:Entities" objectIdentifier="org.intermine.model.testmodel.Department" type="class">
    </tag>
    <tag name="im:aspect:Entities" objectIdentifier="org.intermine.model.testmodel.Address" type="class">
    </tag>
    <tag name="im:aspect:People" objectIdentifier="employeesFromCompanyAndDepartment" type="template">
    </tag>
    <tag name="im:aspect:People" objectIdentifier="employeesOverACertainAgeFromDepartmentA" type="template"/>
    <tag name="im:public" objectIdentifier="employeesFromCompanyAndDepartment" type="template"/>
    <tag name="im:aspect:People" objectIdentifier="employeeByName" type="template"/>
    <tag name="im:public" objectIdentifier="employeeByName" type="template"/>
    <tag name="im:aspect:People" objectIdentifier="employeesOfACertainAge" type="template"/>
    <tag name="im:public" objectIdentifier="employeesOfACertainAge" type="template"/>
    <tag name="im:aspect:People" objectIdentifier="ManagerLookup" type="template"/>
    <tag name="im:public" objectIdentifier="ManagerLookup" type="template"/>
    <tag name="im:converter" objectIdentifier="convertEmployeesToAddresses" type="template"/>
    <tag name="im:converter" objectIdentifier="convertContractorToEmployees" type="template"/>
    <tag name="im:converter" objectIdentifier="convertEmployeeToManager" type="template"/>
  </tags>
</userprofile>