/*
* The Kuali Financial System, a comprehensive financial management system for higher education.
*
* Copyright 2005-2014 The Kuali Foundation
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.kuali.kfs.vnd.businessobject;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.log4j.Logger;
import org.kuali.kfs.sys.context.SpringContext;
import org.kuali.kfs.vnd.document.service.VendorService;
import org.kuali.rice.core.api.mo.common.active.MutableInactivatable;
import org.kuali.rice.krad.bo.PersistableBusinessObjectBase;
import org.kuali.rice.krad.service.KualiModuleService;
import org.kuali.rice.krad.service.ModuleService;
import org.kuali.rice.krad.util.ObjectUtils;
import org.kuali.rice.location.api.LocationConstants;
import org.kuali.rice.location.framework.country.CountryEbo;
import org.kuali.rice.location.framework.state.StateEbo;
/**
* Address to be associated with a particular Vendor.
*/
public class VendorAddress extends PersistableBusinessObjectBase implements VendorRoutingComparable, MutableInactivatable {
private static final Logger LOG = Logger.getLogger(VendorAddress.class);
protected Integer vendorAddressGeneratedIdentifier;
protected Integer vendorHeaderGeneratedIdentifier;
protected Integer vendorDetailAssignedIdentifier;
protected String vendorAddressTypeCode;
protected String vendorLine1Address;
protected String vendorLine2Address;
protected String vendorCityName;
protected String vendorStateCode;
protected String vendorZipCode;
protected String vendorCountryCode;
protected String vendorAttentionName;
protected String vendorAddressInternationalProvinceName;
protected String vendorAddressEmailAddress;
protected String vendorBusinessToBusinessUrlAddress;
protected String vendorFaxNumber;
protected boolean vendorDefaultAddressIndicator;
protected boolean active;
protected List<VendorDefaultAddress> vendorDefaultAddresses;
protected VendorDetail vendorDetail;
protected AddressType vendorAddressType;
protected StateEbo vendorState;
protected CountryEbo vendorCountry;
/**
* Default constructor.
*/
public VendorAddress() {
vendorDefaultAddresses = new ArrayList<VendorDefaultAddress>();
}
public Integer getVendorAddressGeneratedIdentifier() {
return vendorAddressGeneratedIdentifier;
}
public void setVendorAddressGeneratedIdentifier(Integer vendorAddressGeneratedIdentifier) {
this.vendorAddressGeneratedIdentifier = vendorAddressGeneratedIdentifier;
}
public Integer getVendorHeaderGeneratedIdentifier() {
return vendorHeaderGeneratedIdentifier;
}
public void setVendorHeaderGeneratedIdentifier(Integer vendorHeaderGeneratedIdentifier) {
this.vendorHeaderGeneratedIdentifier = vendorHeaderGeneratedIdentifier;
}
public Integer getVendorDetailAssignedIdentifier() {
return vendorDetailAssignedIdentifier;
}
public void setVendorDetailAssignedIdentifier(Integer vendorDetailAssignedIdentifier) {
this.vendorDetailAssignedIdentifier = vendorDetailAssignedIdentifier;
}
public String getVendorAddressInternationalProvinceName() {
return vendorAddressInternationalProvinceName;
}
public void setVendorAddressInternationalProvinceName(String vendorAddressInternationalProvinceName) {
this.vendorAddressInternationalProvinceName = vendorAddressInternationalProvinceName;
}
public String getVendorAddressEmailAddress() {
return vendorAddressEmailAddress;
}
public void setVendorAddressEmailAddress(String vendorAddressEmailAddress) {
this.vendorAddressEmailAddress = vendorAddressEmailAddress;
}
public String getVendorAddressTypeCode() {
return vendorAddressTypeCode;
}
public void setVendorAddressTypeCode(String vendorAddressTypeCode) {
this.vendorAddressTypeCode = vendorAddressTypeCode;
}
public String getVendorLine1Address() {
return vendorLine1Address;
}
public void setVendorLine1Address(String vendorLine1Address) {
this.vendorLine1Address = vendorLine1Address;
}
public String getVendorLine2Address() {
return vendorLine2Address;
}
public void setVendorLine2Address(String vendorLine2Address) {
this.vendorLine2Address = vendorLine2Address;
}
public String getVendorCityName() {
return vendorCityName;
}
public void setVendorCityName(String vendorCityName) {
this.vendorCityName = vendorCityName;
}
public String getVendorStateCode() {
return vendorStateCode;
}
public void setVendorStateCode(String vendorStateCode) {
this.vendorStateCode = vendorStateCode;
}
public String getVendorZipCode() {
return vendorZipCode;
}
public void setVendorZipCode(String vendorZipCode) {
this.vendorZipCode = vendorZipCode;
}
public String getVendorCountryCode() {
return vendorCountryCode;
}
public void setVendorCountryCode(String vendorCountryCode) {
this.vendorCountryCode = vendorCountryCode;
}
public String getVendorAttentionName() {
return vendorAttentionName;
}
public void setVendorAttentionName(String vendorAttentionName) {
this.vendorAttentionName = vendorAttentionName;
}
public String getVendorBusinessToBusinessUrlAddress() {
return vendorBusinessToBusinessUrlAddress;
}
public void setVendorBusinessToBusinessUrlAddress(String vendorBusinessToBusinessUrlAddress) {
this.vendorBusinessToBusinessUrlAddress = vendorBusinessToBusinessUrlAddress;
}
public VendorDetail getVendorDetail() {
return vendorDetail;
}
/**
* Sets the vendorDetail attribute.
*
* @param vendorDetail The vendorDetail to set.
* @deprecated
*/
public void setVendorDetail(VendorDetail vendorDetail) {
this.vendorDetail = vendorDetail;
}
public AddressType getVendorAddressType() {
return vendorAddressType;
}
/**
* Sets the vendorAddressType attribute.
*
* @param vendorAddressType The vendorAddressType to set.
* @deprecated
*/
public void setVendorAddressType(AddressType vendorAddressType) {
this.vendorAddressType = vendorAddressType;
}
public StateEbo getVendorState() {
if ( StringUtils.isBlank(vendorStateCode) || StringUtils.isBlank(vendorCountryCode ) ) {
vendorState = null;
} else {
if ( ObjectUtils.isNull(vendorState) || !StringUtils.equals( vendorState.getCode(),vendorStateCode) || !StringUtils.equals(vendorState.getCountryCode(), vendorCountryCode ) ) {
ModuleService moduleService = SpringContext.getBean(KualiModuleService.class).getResponsibleModuleService(StateEbo.class);
if ( moduleService != null ) {
Map<String,Object> keys = new HashMap<String, Object>(2);
keys.put(LocationConstants.PrimaryKeyConstants.COUNTRY_CODE, vendorCountryCode);
keys.put(LocationConstants.PrimaryKeyConstants.CODE, vendorStateCode);
vendorState = moduleService.getExternalizableBusinessObject(StateEbo.class, keys);
} else {
throw new RuntimeException( "CONFIGURATION ERROR: No responsible module found for EBO class. Unable to proceed." );
}
}
}
return vendorState;
}
/**
* Sets the vendorState attribute.
*
* @param vendorState The vendorState to set.
* @deprecated
*/
public void setVendorState(StateEbo vendorState) {
this.vendorState = vendorState;
}
public CountryEbo getVendorCountry() {
if ( StringUtils.isBlank(vendorCountryCode) ) {
vendorCountry = null;
} else {
if ( vendorCountry == null || !StringUtils.equals( vendorCountry.getCode(),vendorCountryCode) ) {
ModuleService moduleService = SpringContext.getBean(KualiModuleService.class).getResponsibleModuleService(CountryEbo.class);
if ( moduleService != null ) {
Map<String,Object> keys = new HashMap<String, Object>(1);
keys.put(LocationConstants.PrimaryKeyConstants.CODE, vendorCountryCode);
vendorCountry = moduleService.getExternalizableBusinessObject(CountryEbo.class, keys);
} else {
throw new RuntimeException( "CONFIGURATION ERROR: No responsible module found for EBO class. Unable to proceed." );
}
}
}
return vendorCountry;
}
/**
* Sets the vendorCountry attribute.
*
* @param vendorCountry The vendorCountry to set.
* @deprecated
*/
public void setVendorCountry(CountryEbo vendorCountry) {
this.vendorCountry = vendorCountry;
}
/**
* Gets the vendorFaxNumber attribute.
*
* @return Returns the vendorFaxNumber.
*/
public String getVendorFaxNumber() {
return vendorFaxNumber;
}
/**
* Sets the vendorFaxNumber attribute value.
*
* @param vendorFaxNumber The vendorFaxNumber to set.
*/
public void setVendorFaxNumber(String vendorFaxNumber) {
this.vendorFaxNumber = vendorFaxNumber;
}
/**
* Gets the vendorDefaultAddressIndicator attribute.
*
* @return Returns the vendorDefaultAddressIndicator.
*/
public boolean isVendorDefaultAddressIndicator() {
return vendorDefaultAddressIndicator;
}
/**
* Sets the vendorDefaultAddressIndicator attribute value.
*
* @param vendorDefaultAddressIndicator The vendorDefaultAddressIndicator to set.
*/
public void setVendorDefaultAddressIndicator(boolean vendorDefaultAddressIndicator) {
this.vendorDefaultAddressIndicator = vendorDefaultAddressIndicator;
}
@Override
public boolean isActive() {
return active;
}
@Override
public void setActive(boolean active) {
this.active = active;
}
public List<VendorDefaultAddress> getVendorDefaultAddresses() {
return vendorDefaultAddresses;
}
public void setVendorDefaultAddresses(List<VendorDefaultAddress> vendorDefaultAddresses) {
this.vendorDefaultAddresses = vendorDefaultAddresses;
}
/**
* @see org.kuali.kfs.vnd.document.routing.VendorRoutingComparable#isEqualForRouting(java.lang.Object)
*/
@Override
public boolean isEqualForRouting(Object toCompare) {
LOG.debug("Entering isEqualForRouting.");
if ((ObjectUtils.isNull(toCompare)) || !(toCompare instanceof VendorAddress)) {
LOG.debug("Exiting isEqualForRouting");
return false;
}
else {
VendorAddress va = (VendorAddress) toCompare;
boolean eq = new EqualsBuilder().append(this.getVendorAddressGeneratedIdentifier(), va.getVendorAddressGeneratedIdentifier()).append(this.getVendorHeaderGeneratedIdentifier(), va.getVendorHeaderGeneratedIdentifier()).append(this.getVendorDetailAssignedIdentifier(), va.getVendorDetailAssignedIdentifier()).append(this.getVendorAddressTypeCode(), va.getVendorAddressTypeCode()).append(this.getVendorLine1Address(), va.getVendorLine1Address()).append(this.getVendorLine2Address(), va.getVendorLine2Address()).append(this.getVendorCityName(), va.getVendorCityName()).append(this.getVendorStateCode(), va.getVendorStateCode()).append(this.getVendorZipCode(), va.getVendorZipCode()).append(this.getVendorCountryCode(), va.getVendorCountryCode()).append(this.getVendorAttentionName(), va.getVendorAttentionName()).append(this.getVendorAddressInternationalProvinceName(), va.getVendorAddressInternationalProvinceName()).append(this.getVendorAddressEmailAddress(),
va.getVendorAddressEmailAddress()).append(this.getVendorBusinessToBusinessUrlAddress(), va.getVendorBusinessToBusinessUrlAddress()).append(this.getVendorFaxNumber(), va.getVendorFaxNumber()).append(this.isVendorDefaultAddressIndicator(), va.isVendorDefaultAddressIndicator()).isEquals();
eq &= SpringContext.getBean(VendorService.class).equalMemberLists(this.getVendorDefaultAddresses(), va.getVendorDefaultAddresses());
LOG.debug("Exiting isEqualForRouting.");
return eq;
}
}
}