/* * Copyright (c) 2005-2011 Grameen Foundation USA * All rights reserved. * * Licensed under the Apache License, Version 2.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://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or * implied. See the License for the specific language governing * permissions and limitations under the License. * * See also http://www.apache.org/licenses/LICENSE-2.0.html for an * explanation of the license and how it is applied. */ package org.mifos.framework.components.taggenerator; import org.mifos.customers.api.CustomerLevel; import org.mifos.customers.business.CustomerBO; import org.mifos.customers.persistence.CustomerPersistence; import org.mifos.framework.business.AbstractBusinessObject; import org.mifos.framework.exceptions.PersistenceException; import org.mifos.framework.struts.tags.MifosTagUtils; public class CustomerTagGenerator extends TagGenerator { public CustomerTagGenerator() { setAssociatedGenerator(new OfficeTagGenerator()); } @Override protected StringBuilder build(AbstractBusinessObject obj, Object randomNum) { return build(obj, true, randomNum); } @Override protected StringBuilder build(AbstractBusinessObject obj, boolean selfLinkRequired, Object randomNum) { CustomerBO customer = (CustomerBO) obj; try { CustomerBO customerReloaded = new CustomerPersistence().getCustomer(customer.getCustomerId()); StringBuilder strBuilder = getAssociatedGenerator().build(customerReloaded.getOffice(), randomNum); if (strBuilder == null) { strBuilder = new StringBuilder(); } buildLink(strBuilder, customerReloaded, customerReloaded, selfLinkRequired, randomNum); return strBuilder; } catch (PersistenceException e) { throw new RuntimeException(e); } } private void buildLink(StringBuilder strBuilder, CustomerBO customer, CustomerBO originalCustomer, boolean selfLinkRequired, Object randomNum) { if (customer == null) { return; } try { CustomerBO customerReloaded = new CustomerPersistence().getCustomer(customer.getCustomerId()); buildLink(strBuilder, customerReloaded.getParentCustomer(), originalCustomer, selfLinkRequired, randomNum); strBuilder.append(" / "); createCustomerLink(strBuilder, customer, originalCustomer, selfLinkRequired, randomNum); } catch (PersistenceException e) { throw new RuntimeException(e); } } private void createCustomerLink(StringBuilder strBuilder, CustomerBO customer, CustomerBO originalCustomer, boolean selfLinkRequired, Object randomNum) { if (!customer.equals(originalCustomer)) { strBuilder.append("<a href=\""); strBuilder.append(getAction(customer)); strBuilder.append(customer.getGlobalCustNum()); strBuilder.append("&randomNum="); strBuilder.append(randomNum); strBuilder.append("\">"); strBuilder.append(MifosTagUtils.xmlEscape(customer.getDisplayName())); strBuilder.append("</a>"); } else if (selfLinkRequired) { strBuilder.append("<a href=\""); strBuilder.append(getAction(customer)); strBuilder.append(customer.getGlobalCustNum()); strBuilder.append("&randomNum="); strBuilder.append(randomNum); strBuilder.append("\">"); strBuilder.append(MifosTagUtils.xmlEscape(customer.getDisplayName())); strBuilder.append("</a>"); } else if (!selfLinkRequired) { strBuilder.append("<b>" + MifosTagUtils.xmlEscape(customer.getDisplayName()) + "</b>"); } } private String getAction(CustomerBO customer) { if (customer.getCustomerLevel().getId().shortValue() == CustomerLevel.CENTER.getValue()) { return "viewCenterDetails.ftl?globalCustNum="; } else if (customer.getCustomerLevel().getId().shortValue() == CustomerLevel.GROUP.getValue()) { return "viewGroupDetails.ftl?globalCustNum="; } else if (customer.getCustomerLevel().getId().shortValue() == CustomerLevel.CLIENT.getValue()) { return "viewClientDetails.ftl?globalCustNum="; } return ""; } }