code: @Search()
  	public List<Patient> findPatientsByName(@RequiredParam(name = Patient.SP_FAMILY) StringDt theFamilyName) {
  		LinkedList<Patient> retVal = new LinkedList<Patient>();
  
  		/*
  		 * Look for all patients matching the name
  		 */
  		for (Deque<Patient> nextPatientList : myIdToPatientVersions.values()) {
  			Patient nextPatient = nextPatientList.getLast();
  			NAMELOOP: for (HumanNameDt nextName : nextPatient.getName()) {
  				for (StringDt nextFamily : nextName.getFamily()) {
  					if (theFamilyName.equals(nextFamily)) {
  						retVal.add(nextPatient);
  						break NAMELOOP;
  					}
  				}
  			}
  		}
  
  		return retVal;
  	}
docs: The "@Search" annotation indicates that this method supports the search operation. You may have many different method annotated with this annotation, to support many different search criteria.
  This example searches by family name.
  
  @param theFamilyName
  This operation takes one parameter which is the search criteria. It is annotated with the "@Required" annotation. This annotation takes one argument, a string containing the name of
  the search criteria. The datatype here is StringDt, but there are other possible parameter types depending on the specific search criteria.
  @return This method returns a list of Patients. This list may contain multiple matching resources, or it may also be empty.