package is.idega.idegaweb.travel.service.tour.data;
import is.idega.idegaweb.travel.data.Service;
import is.idega.idegaweb.travel.data.ServiceBMPBean;
import java.rmi.RemoteException;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.Collection;
import java.util.Iterator;
import javax.ejb.FinderException;
import com.idega.block.trade.stockroom.data.Product;
import com.idega.block.trade.stockroom.data.ProductBMPBean;
import com.idega.block.trade.stockroom.data.Supplier;
import com.idega.block.trade.stockroom.data.SupplierBMPBean;
import com.idega.block.trade.stockroom.data.TravelAddress;
import com.idega.core.location.data.Address;
import com.idega.core.location.data.PostalCode;
import com.idega.data.EntityControl;
import com.idega.data.GenericEntity;
import com.idega.data.IDOCompositePrimaryKeyException;
import com.idega.data.IDOLookup;
import com.idega.data.IDOLookupException;
import com.idega.data.IDORelationshipException;
import com.idega.util.IWTimestamp;
/**
* Title: idegaWeb TravelBooking
* Description:
* Copyright: Copyright (c) 2001
* Company: idega
* @author <a href="mailto:gimmi@idega.is">Grimur Jonsson</a>
* @version 1.0
*/
public class TourBMPBean extends GenericEntity implements Tour {
public TourBMPBean() {
super();
}
public TourBMPBean(int id) throws SQLException{
super(id);
}
public void initializeAttributes() {
addAttribute(getIDColumnName(),"Service_id",true,true,Integer.class,"one-to-one",Service.class);
addAttribute(getHotelPickupColumnName(), "Hotel pick-up", true, true, Boolean.class);
addAttribute(getHotelPickupTimeColumnName(), "Hotel pick-up time", true, true, Timestamp.class);
addAttribute(getTotalSeatsColumnName(), "Total seats", true, true, Integer.class);
addAttribute(getMinimumSeatsColumnName(), "L�gmark s�ta", true, true, Integer.class);
addAttribute(getNumberOfDaysColumnName(), "Fj�ldi daga", true, true, Integer.class);
addAttribute(getLengthColumnName(), "Lengd", true, true, Float.class);
addAttribute(getEstimatedSeatsUsedColumnName(), "estimated seats used", true, true, Integer.class);
addManyToManyRelationShip(TourTypeBMPBean.class, "TB_TOUR_TOUR_TYPE");
}
public String getEntityName() {
return getTripTableName();
}
public void setDefaultValues() {
this.setLength(0);
this.setTotalSeats(0);
this.setMinumumSeats(0);
this.setNumberOfDays(1);
}
public boolean getIsHotelPickup() throws RemoteException{
return getHotelPickup();
}
public boolean getHotelPickup() throws RemoteException{
try {
Service service = ((is.idega.idegaweb.travel.data.ServiceHome) com.idega.data.IDOLookup.getHome(Service.class)).findByPrimaryKey(this.getPrimaryKey());
Collection coll = service.getHotelPickupPlaces();
// HotelPickupPlace[] rugl = (HotelPickupPlace[]) (()).findRelated((HotelPickupPlace) (is.idega.idegaweb.travel.data.HotelPickupPlaceBMPBean.getStaticInstance(HotelPickupPlace.class)));
if (coll.size() == 0) {
return false;
}else {
return true;
}
}catch (FinderException sql) {
sql.printStackTrace(System.err);
}catch (IDORelationshipException re) {
re.printStackTrace(System.err);
}
return false;
//return getBooleanColumnValue(getHotelPickupColumnName());
}
public void setIsHotelPickup(boolean pickup) {
setHotelPickup(pickup);
}
public void setHotelPickup(boolean pickup) {
setColumn(getHotelPickupColumnName(),pickup);
}
public void setHotelPickupTime(Timestamp pickupTime) {
setColumn(getHotelPickupTimeColumnName(), pickupTime);
}
public Timestamp getHotelPickupTime() {
return (Timestamp) getColumnValue(getHotelPickupTimeColumnName());
}
public int getTotalSeats() {
return getIntColumnValue(getTotalSeatsColumnName());
}
public void setTotalSeats(int totalSeats) {
setColumn(getTotalSeatsColumnName(), totalSeats);
}
public int getMinimumSeats() {
return getIntColumnValue(getMinimumSeatsColumnName());
}
public void setMinumumSeats(int seats) {
setColumn(getMinimumSeatsColumnName(), seats);
}
public void setNumberOfDays(int numberOfSeats) {
setColumn(getNumberOfDaysColumnName(), numberOfSeats);
}
public int getNumberOfDays() {
return getIntColumnValue(getNumberOfDaysColumnName());
}
public void setLength(float length) {
setColumn(getLengthColumnName(), length);
}
public float getLength() {
return getFloatColumnValue(getLengthColumnName());
}
public void setEstimatedSeatsUsed(int seats) {
setColumn(getEstimatedSeatsUsedColumnName(), seats);
}
public int getEstimatedSeatsUsed() {
return getIntColumnValue(getEstimatedSeatsUsedColumnName());
}
public Collection getTourTypes() throws IDORelationshipException {
return this.idoGetRelatedEntities(TourType.class);
}
public void setTourTypes(Object[] tourTypePKs) throws IDORelationshipException {
this.idoRemoveFrom(TourType.class);
if (tourTypePKs != null) {
for (int i = 0; i < tourTypePKs.length; i++) {
this.idoAddTo(TourType.class, tourTypePKs[i]);
}
}
}
public Collection ejbFind(IWTimestamp fromStamp, IWTimestamp toStamp, Object[] tourTypeId, Collection postalCodes, Object[] supplierId, String supplierName) throws FinderException {
boolean postalCode = (postalCodes != null && !postalCodes.isEmpty());
boolean timeframe = (fromStamp != null && toStamp != null);
boolean tourType = (tourTypeId != null && tourTypeId.length > 0);
boolean supplier = (supplierId != null && supplierId.length > 0);
boolean name = (supplierName != null && !supplierName.equals(""));
try {
String addressSupplierMiddleTableName = EntityControl.getManyToManyRelationShipTableName(Address.class, Supplier.class);
String addressProductMiddleTableName = EntityControl.getManyToManyRelationShipTableName(TravelAddress.class, Product.class);
String tourTypeTourMiddleTableName = EntityControl.getManyToManyRelationShipTableName(TourType.class, Tour.class);
String postalCodeTableName = IDOLookup.getEntityDefinitionForClass(PostalCode.class).getSQLTableName();// PostalCodeBMPBean.getEntityName();
String addressTableName = IDOLookup.getEntityDefinitionForClass(Address.class).getSQLTableName();
String travelAddressTableName = IDOLookup.getEntityDefinitionForClass(TravelAddress.class).getSQLTableName();
String serviceTableName = ServiceBMPBean.getServiceTableName();
String productTableName = ProductBMPBean.getProductEntityName();
String supplierTableName = SupplierBMPBean.getSupplierTableName();
String tourTypeTableName = IDOLookup.getEntityDefinitionForClass(TourType.class).getSQLTableName();
String postalCodeTableIDColumnName = postalCodeTableName+"_id";
String addressTableIDColumnName = addressTableName+"_id";
String travelAddressTableIDColumnName = travelAddressTableName+"_id";
String serviceTableIDColumnName = serviceTableName+"_id";
String productTableIDColumnName = productTableName+"_id";
String supplierTableIDColumnName = supplierTableName+"_id";
String tourTypeTableIDColumnName = null;
try {
tourTypeTableIDColumnName = IDOLookup.getEntityDefinitionForClass(TourType.class).getPrimaryKeyDefinition().getField().getSQLFieldName();
} catch (IDOCompositePrimaryKeyException e1) {
tourTypeTableIDColumnName = tourTypeTableName+"_id";
}
StringBuffer sql = new StringBuffer();
sql.append("select distinct h.* from ").append(getEntityName()).append(" h, ")
.append(serviceTableName).append(" s, ")
.append(productTableName).append(" p");
if (postalCode || supplier) {
sql.append(", ").append(supplierTableName).append(" su");
}
if (tourType) {
sql.append(", ").append(tourTypeTourMiddleTableName).append(" rth");
sql.append(", ").append(tourTypeTableName).append(" rt");
}
if (postalCode) {
sql.append(", ").append(addressSupplierMiddleTableName).append(" asm, ")
.append(addressTableName).append(" a, ")
.append(postalCodeTableName).append(" pc, ")
.append(addressProductMiddleTableName).append(" pa, ")
.append(travelAddressTableName).append(" addr, ")
.append(addressTableName).append(" ica ");
}
sql.append(" where ");
if (postalCode) {
sql.append("p.").append(productTableIDColumnName).append(" = pa.").append(productTableIDColumnName)
.append(" AND pa.").append(travelAddressTableIDColumnName).append(" = addr.").append(travelAddressTableIDColumnName)
.append(" AND addr.").append(addressTableIDColumnName).append(" = ica.").append(addressTableIDColumnName)
.append(" AND ");
}
sql.append("h.").append(getIDColumnName()).append(" = s.").append(serviceTableIDColumnName)
.append(" AND s.").append(serviceTableIDColumnName).append(" = p.").append(productTableIDColumnName)
.append(" AND p.").append(ProductBMPBean.getColumnNameIsValid()).append(" = 'Y'");
if (supplier) {
sql.append(" AND su."+supplierTableIDColumnName+"= p."+supplierTableIDColumnName);
sql.append(" AND su.").append(supplierTableIDColumnName).append(" in (");
for (int i = 0; i < supplierId.length; i++) {
if (i != 0) {
sql.append(", ");
}
sql.append(supplierId[i].toString());
}
sql.append(")");
if(name) {
sql.append(" AND su.").append(SupplierBMPBean.COLUMN_NAME_NAME_ALL_CAPS ).append(" like ").append("'%" + supplierName.toUpperCase() + "%'");
}
}
if (postalCode) {
sql.append(" AND asm.").append(supplierTableIDColumnName).append(" = su.").append(supplierTableIDColumnName)
.append(" AND asm.").append(addressTableIDColumnName).append(" = a.").append(addressTableIDColumnName)
.append(" AND p.").append(ProductBMPBean.getColumnNameSupplierId()).append(" = su.").append(supplierTableIDColumnName)
// HARDCODE OF DEATH ... courtesy of AddressBMPBean
.append(" AND a.postal_code_id = pc.").append(postalCodeTableIDColumnName)
.append(" AND ( pc.").append(postalCodeTableIDColumnName).append(" in (");
Iterator iter = postalCodes.iterator();
while (iter.hasNext()) {
sql.append(((PostalCode) iter.next()).getPrimaryKey());
if (iter.hasNext()) {
sql.append(", ");
}
}
// for (int i = 0; i < postalCodeId.length; i++) {
// if (i != 0) {
// sql.append(", ");
// }
// sql.append(postalCodeId[i]);
// }
sql.append(") OR ica.postal_code_id in (");
iter = postalCodes.iterator();
while (iter.hasNext()) {
sql.append(((PostalCode) iter.next()).getPrimaryKey());
if (iter.hasNext()) {
sql.append(", ");
}
}
// for (int i = 0; i < postalCodeId.length; i++) {
// if (i != 0) {
// sql.append(", ");
// }
// sql.append(postalCodeId[i]);
// }
sql.append(")");
sql.append(")");
}
if (tourType) {
sql.append(" AND h.").append(getIDColumnName()).append("= rth.").append(getIDColumnName());
sql.append(" AND rth.").append(tourTypeTableIDColumnName).append("= rt.").append(tourTypeTableIDColumnName);
sql.append(" AND rt.").append(tourTypeTableIDColumnName).append(" in (");
for (int i = 0; i < tourTypeId.length; i++) {
if (i != 0) {
sql.append(", ");
}
sql.append(tourTypeId[i]);
}
sql.append(") ");
}
//sql.append(" order by ").append();
//System.out.println(sql.toString());
return this.idoFindPKsBySQL(sql.toString());
}catch (IDOLookupException e) {
return null;
}
}
public static String getTripTableName() {return "TB_TOUR";}
public static String getHotelPickupColumnName() {return "HOTEL_PICKUP";}
public static String getHotelPickupTimeColumnName() {return "HOTEL_PICKUP_TIME";}
public static String getTotalSeatsColumnName() {return "TOTAL_SEATS";}
public static String getMinimumSeatsColumnName() {return "MINIMUM_SEATS";}
public static String getNumberOfDaysColumnName() {return "NUMBER_OF_DAYS";}
public static String getLengthColumnName() {return "TOUR_LENGTH";}
public static String getEstimatedSeatsUsedColumnName() {return "ESTIMATED_SEATS_USED";}
public void setPrimaryKey(Object object) {
super.setPrimaryKey(object);
}
}