package fi.otavanopisto.pyramus.binary.settings; import java.io.UnsupportedEncodingException; import java.util.List; import org.apache.commons.lang.StringEscapeUtils; import org.apache.commons.lang.StringUtils; import org.apache.lucene.queryparser.classic.QueryParser; import fi.internetix.smvc.SmvcRuntimeException; import fi.internetix.smvc.controllers.BinaryRequestContext; import fi.otavanopisto.pyramus.dao.DAOFactory; import fi.otavanopisto.pyramus.dao.base.SchoolDAO; import fi.otavanopisto.pyramus.domainmodel.base.School; import fi.otavanopisto.pyramus.framework.BinaryRequestController; import fi.otavanopisto.pyramus.framework.UserRole; /** A binary request controller responsible for providing server-side autocomplete * for school search. * */ public class SchoolsAutoCompleteBinaryRequestController extends BinaryRequestController { /** Processes a binary request. * The request should contain the following parameters: * <dl> * <dt><code>text</code></dt> * <dd>Already typed characters.</dd> * </dl> * * @param binaryRequestContext The context of the binary request. */ public void process(BinaryRequestContext binaryRequestContext) { SchoolDAO schoolDAO = DAOFactory.getInstance().getSchoolDAO(); String text = binaryRequestContext.getString("text"); StringBuilder resultBuilder = new StringBuilder(); resultBuilder.append("<ul>"); if (!StringUtils.isBlank(text)) { text = QueryParser.escape(StringUtils.trim(text)) + '*'; List<School> schools = schoolDAO.searchSchoolsBasic(100, 0, text).getResults(); for (School school : schools) { addSchool(resultBuilder, school); } } resultBuilder.append("</ul>"); try { binaryRequestContext.setResponseContent(resultBuilder.toString().getBytes("UTF-8"), "text/html;charset=UTF-8"); } catch (UnsupportedEncodingException e) { throw new SmvcRuntimeException(e); } } /** Returns the user roles allowed to access this controller. * * @return The user roles allowed to access this controller. */ public UserRole[] getAllowedRoles() { return new UserRole[] { UserRole.USER, UserRole.MANAGER, UserRole.STUDY_PROGRAMME_LEADER, UserRole.ADMINISTRATOR }; } private void addSchool(StringBuilder resultBuilder, School school) { resultBuilder .append("<li>") .append("<span>") .append(StringEscapeUtils.escapeHtml(school.getName())) .append("</span>") .append("<input type=\"hidden\" name=\"schoolId\" value=\"") .append(school.getId()) .append("\"/>") .append("</li>"); } }