/** * This Source Code Form is subject to the terms of the Mozilla Public License, * v. 2.0. If a copy of the MPL was not distributed with this file, You can * obtain one at http://mozilla.org/MPL/2.0/. OpenMRS is also distributed under * the terms of the Healthcare Disclaimer located at http://openmrs.org/license. * * Copyright (C) OpenMRS Inc. OpenMRS is a registered trademark and the OpenMRS * graphic logo is a trademark of OpenMRS Inc. */ package org.openmrs.layout.name; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.lang.StringUtils; import org.openmrs.PersonName; import org.openmrs.api.APIException; import org.openmrs.layout.LayoutSupport; import org.openmrs.layout.LayoutTemplate; /** * @since 1.12 */ public class NameTemplate extends LayoutTemplate { @Override public String getLayoutToken() { return "IS_NAME_TOKEN"; } @Override public String getNonLayoutToken() { return "IS_NOT_NAME_TOKEN"; } public String format(PersonName personName) { List<String> personNameLines = new ArrayList<String>(); List<List<Map<String, String>>> lines = getLines(); String layoutToken = getLayoutToken(); try { for (List<Map<String, String>> line : lines) { StringBuilder nameLine = new StringBuilder(); Boolean hasToken = false; for (Map<String, String> lineToken : line) { if (lineToken.get("isToken").equals(layoutToken)) { String tokenValue = BeanUtils.getProperty(personName, lineToken.get("codeName")); if (StringUtils.isNotBlank(tokenValue)) { hasToken = true; nameLine.append(tokenValue); } } else { nameLine.append(lineToken.get("displayText")); } } // only display a line if there's at least one token within it we've been able to resolve String nameLineString = nameLine.toString(); if (StringUtils.isNotBlank(nameLineString) && hasToken) { personNameLines.add(nameLineString); } } // bit of hack, but we ignore the "line-by-line" format and just delimit a "line" with blank space return StringUtils.join(personNameLines, " "); } catch (Exception e) { throw new APIException("Unable to format personName " + personName.getId() + " using name template", e); } } @Override public LayoutSupport<?> getLayoutSupportInstance() { return NameSupport.getInstance(); } }