LeadTimeSearch.java

package com.tradecloud.dto.rate;

import com.tradecloud.domain.dto.base.SearchBase;
import com.tradecloud.domain.model.shipment.ShippingMode;
import com.tradecloud.domain.place.City;
import com.tradecloud.domain.place.Country;
import com.tradecloud.domain.place.PlaceOfDischarge;
import com.tradecloud.domain.place.PlaceOfLoading;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import java.text.SimpleDateFormat;
import java.util.Date;

@Component
@Scope("view")
public class LeadTimeSearch  extends SearchBase {

    private ShippingMode shippingMode;
    private PlaceOfLoading placeOfLoading;
    private PlaceOfDischarge placeOfDischarge;
    private City city;
    private Country country;

    public LeadTimeSearch() {
    }

    public LeadTimeSearch(ShippingMode shippingMode, PlaceOfLoading placeOfLoading, PlaceOfDischarge placeOfDischarge) {
        this.shippingMode = shippingMode;
        this.placeOfDischarge = placeOfDischarge;
        this.placeOfLoading = placeOfLoading;
    }

    public ShippingMode getShippingMode() {
        return shippingMode;
    }

    public void setShippingMode(ShippingMode shippingMode) {
        this.shippingMode = shippingMode;
    }

    public PlaceOfLoading getPlaceOfLoading() {
        return placeOfLoading;
    }

    public void setPlaceOfLoading(PlaceOfLoading placeOfLoading) {
        this.placeOfLoading = placeOfLoading;
    }

    public PlaceOfDischarge getPlaceOfDischarge() {
        return placeOfDischarge;
    }

    public void setPlaceOfDischarge(PlaceOfDischarge placeOfDischarge) {
        this.placeOfDischarge = placeOfDischarge;
    }

    public void reset() {
        shippingMode = null;
        placeOfLoading = null;
        placeOfDischarge = null;
        city=null;
    }

    public int generate(Object... objects) {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat();
        HashCodeBuilder hashCodeBuilder = new HashCodeBuilder();
        for (Object object : objects) {
            if (object != null) {
                if (object.getClass().isEnum()) {
                    hashCodeBuilder.append(object.toString());  // enum.hashCode can differ
                } else if (object instanceof Date) {
                    String format = simpleDateFormat.format((Date) object);
                    hashCodeBuilder.append(format);
                } else {
                    hashCodeBuilder.append(object.hashCode());
                }
            }
        }
        return hashCodeBuilder.toHashCode();
    }

    @Override
    public int hashCode() {
        return generate(getPlaceOfDischarge(), getPlaceOfLoading(), getShippingMode(),getCity());
    }

    @Override
    public String getTableName() {
        return "LeadTime";
    }

    public City getCity() {
        return city;
    }

    public void setCity(City city) {
        this.city = city;
    }

    public Country getCountry() {
        return country;
    }

    public void setCountry(Country country) {
        this.country = country;
    }
}