/**
* The contents of this file are subject to the OpenMRS Public License
* Version 1.0 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
* http://license.openmrs.org
*
* Software distributed under the License is distributed on an "AS IS"
* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
* License for the specific language governing rights and limitations
* under the License.
*
* Copyright (C) OpenMRS, LLC. All Rights Reserved.
*/
package org.openmrs.web.controller;
import java.util.Collection;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import javax.servlet.http.HttpServletRequest;
import org.openmrs.Form;
import org.openmrs.Person;
import org.openmrs.module.Extension;
import org.openmrs.module.ModuleFactory;
import org.openmrs.module.Extension.MEDIA_TYPE;
import org.openmrs.module.web.FormEntryContext;
import org.openmrs.module.web.extension.FormEntryHandler;
import org.openmrs.util.OpenmrsUtil;
/**
* Controller for the PersonFormEntry portlet
*
* Provides a map telling which url to hit to enter each form
*/
public class PersonFormEntryPortletController extends PortletController {
/**
* @see org.openmrs.web.controller.PortletController#populateModel(javax.servlet.http.HttpServletRequest, java.util.Map)
*/
@Override
protected void populateModel(HttpServletRequest request, Map<String, Object> model) {
if (model.containsKey("formToEntryUrlMap")) {
return;
}
Person person = (Person) model.get("person");
if (person == null)
throw new IllegalArgumentException("This portlet may only be used in the context of a Person");
FormEntryContext fec = new FormEntryContext(person);
Map<Form, FormEntryHandler> entryUrlMap = new TreeMap<Form, FormEntryHandler>(new Comparator<Form>() {
public int compare(Form left, Form right) {
int temp = left.getName().toLowerCase().compareTo(right.getName().toLowerCase());
if (temp == 0)
temp = OpenmrsUtil.compareWithNullAsLowest(left.getVersion(), right.getVersion());
return temp;
}
});
List<Extension> handlers = ModuleFactory.getExtensions("org.openmrs.module.web.extension.FormEntryHandler", MEDIA_TYPE.html);
if (handlers != null) {
for (Extension ext : handlers) {
FormEntryHandler handler = (FormEntryHandler) ext;
Collection<Form> toEnter = handler.getFormsModuleCanEnter(fec);
if (toEnter != null) {
for (Form form : toEnter) {
entryUrlMap.put(form, handler);
}
}
}
}
model.put("formToEntryUrlMap", entryUrlMap);
model.put("anyUpdatedFormEntryModules", handlers != null && handlers.size() > 0);
}
}