package org.fuzzydb.samples.mvc; import java.io.OutputStream; import java.util.ArrayList; import java.util.Iterator; import org.fuzzydb.core.query.Result; import org.fuzzydb.samples.Person; import org.fuzzydb.samples.repositories.PersonRepository; import org.fuzzydb.spring.repository.AttributeMatchQuery; import org.fuzzydb.spring.repository.SubjectMatchQuery; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.transaction.annotation.Transactional; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import com.thoughtworks.xstream.XStream; /** * Example controller for creating fuzzy items and querying them */ @Controller @RequestMapping({"/people", "/mobile/people"}) public class PeopleController extends AbstractDataController<Person> { @Autowired private PersonRepository personRepo; @Override protected void createItem() { personRepo.save(dataGenerator.createRandomPerson()); } @Override protected String getDefaultSearchStyle() { return "similarPeople"; } @Override protected PersonRepository getRepo() { return personRepo; } @Override protected Person getSearchForm() { return new Person("Entered search"); } @Override protected String getViewPathPrefix() { return "people"; } @ModelAttribute("newspapers") public ArrayList<String> getNewspaperOptions() { return getOptionsForField("newspapers"); } @ModelAttribute("smokeOptions") public ArrayList<String> getSmokeOptions() { return getOptionsForField("smoke"); } @Transactional(readOnly=true) @RequestMapping(value="/dumpMatches", method=RequestMethod.GET) public void dumpMatches( Model model, @RequestParam(defaultValue="Matt") String name, @RequestParam(defaultValue="similarPeople") String style, OutputStream response) { Person subject = dataGenerator.createPerson(name); int maxResults = 10; AttributeMatchQuery<Person> query = new SubjectMatchQuery<Person>(subject, style, maxResults + 1); // + 1 so we can check if there are more results Iterator<Result<Person>> resultIterator = personRepo.findMatchesFor(query); XStream xs = new XStream(); for (Iterator<Result<Person>> iterator = resultIterator; iterator.hasNext();) { Result<Person> item = iterator.next(); xs.toXML(item.getItem(), response); } } }