package fi.otavanopisto.pyramus.binary.settings;
import java.io.UnsupportedEncodingException;
import java.util.List;
import java.util.Locale;
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.I18N.Messages;
import fi.otavanopisto.pyramus.dao.DAOFactory;
import fi.otavanopisto.pyramus.dao.grading.TransferCreditTemplateCourseDAO;
import fi.otavanopisto.pyramus.domainmodel.base.Subject;
import fi.otavanopisto.pyramus.domainmodel.grading.TransferCreditTemplateCourse;
import fi.otavanopisto.pyramus.framework.BinaryRequestController;
import fi.otavanopisto.pyramus.framework.UserRole;
/** A binary request controller responsible for providing autocomplete
* for transfer credit course names.
*
*/
public class TransferCreditCourseNameAutoCompleteBinaryRequestController extends BinaryRequestController {
/** Processes a binary request.
*
* @param binaryRequestContext The context of the binary request.
*/
public void process(BinaryRequestContext binaryRequestContext) {
TransferCreditTemplateCourseDAO transferCreditTemplateCourseDAO = DAOFactory.getInstance().getTransferCreditTemplateCourseDAO();
Locale locale = binaryRequestContext.getRequest().getLocale();
String text = binaryRequestContext.getString("text");
StringBuilder resultBuilder = new StringBuilder();
resultBuilder.append("<ul>");
if (!StringUtils.isBlank(text)) {
text = QueryParser.escape(StringUtils.trim(text)) + '*';
List<TransferCreditTemplateCourse> results = transferCreditTemplateCourseDAO.searchTransferCreditTemplateCoursesBasic(100, 0, text).getResults();
for (TransferCreditTemplateCourse course : results) {
addResultItem(resultBuilder, course, locale);
}
}
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 addResultItem(StringBuilder resultBuilder, TransferCreditTemplateCourse course, Locale locale) {
resultBuilder
.append("<li>")
.append("<span>")
.append(StringEscapeUtils.escapeHtml(course.getCourseName()))
.append("</span>");
addHiddenValue(resultBuilder, "courseId", course.getId());
addHiddenValue(resultBuilder, "subjectId", course.getSubject() != null ? course.getSubject().getId() : null);
addHiddenValue(resultBuilder, "subjectName", getSubjectText(course.getSubject(), locale));
addHiddenValue(resultBuilder, "courseLength", course.getCourseLength() != null ? course.getCourseLength().getUnits() : null);
addHiddenValue(resultBuilder, "courseLengthUnitId", course.getCourseLength() != null ? course.getCourseLength().getUnit().getId() : null);
addHiddenValue(resultBuilder, "courseLengthUnitName", course.getCourseLength() != null ? course.getCourseLength().getUnit().getName() : null);
addHiddenValue(resultBuilder, "courseNumber", course.getCourseNumber());
resultBuilder.append("</li>");
}
private void addHiddenValue(StringBuilder resultBuilder, String name, Object value) {
String stringValue = value == null ? null : String.valueOf(value);
resultBuilder.append("<input type=\"hidden\" name=\"");
resultBuilder.append(name);
resultBuilder.append("\" value=\"");
if (!StringUtils.isBlank(stringValue)) {
resultBuilder.append(StringEscapeUtils.escapeHtml(stringValue));
}
resultBuilder.append("\"/>");
}
private String getSubjectText(Subject subject, Locale locale) {
if (subject == null)
return null;
String subjectName = subject.getName();
String subjectCode = subject.getCode();
String subjectEducationType = subject.getEducationType() != null ? subject.getEducationType().getName() : null;
String localizedSubject = subjectName;
if (subjectCode != null && subjectEducationType != null) {
localizedSubject = Messages.getInstance().getText(locale,
"generic.subjectFormatterWithEducationType", new Object[] {
subjectCode,
subjectName,
subjectEducationType
});
} else if (subjectEducationType != null) {
localizedSubject = Messages.getInstance().getText(locale,
"generic.subjectFormatterNoSubjectCode", new Object[] {
subjectName,
subjectEducationType
});
} else if (subjectCode != null) {
localizedSubject = Messages.getInstance().getText(locale,
"generic.subjectFormatterNoEducationType", new Object[] {
subjectCode,
subjectName
});
}
return localizedSubject;
}
}