package com.idega.block.building.data;
import java.sql.Date;
import java.util.Collection;
import javax.ejb.FinderException;
import com.idega.data.IDOException;
import com.idega.data.IDOQuery;
import com.idega.data.IDORelationshipException;
import com.idega.data.query.Column;
import com.idega.data.query.MatchCriteria;
import com.idega.data.query.Order;
import com.idega.data.query.SelectQuery;
import com.idega.data.query.Table;
import com.idega.data.query.WildCardColumn;
/**
* Title: Description: Copyright: Copyright (c) 2001 Company: idega multimedia
*
* @author <a href="mailto:aron@idega.is">Aron Birkir</a>
* @version 1.0
*
*/
public class ApartmentBMPBean extends
com.idega.block.text.data.TextEntityBMPBean implements
com.idega.block.building.data.Apartment {
private static final String ENTITY_NAME = "bu_apartment";
private static final String COLUMN_STATUS = "status";
private static final String COLUMN_SERIE = "serie";
private static final String COLUMN_UNAVAILABLE_UNTIL = "unavailable_until";
private static final String COLUMN_RENTABLE = "rentable";
private static final String COLUMN_APARTMENT_TYPE = "BU_APRT_TYPE_ID";
private static final String COLUMN_FLOOR = "bu_floor_id";
private static final String COLUMN_INFO = "info";
private static final String COLUMN_IMAGE = "ic_image_id";
private static final String COLUMN_NAME = "name";
private static final String COLUMN_SERIAL_NUMBER = "snr";
private static final String COLUMN_MARKED = "marked";
public final static String STATUS_AVAILABLE = "A";
public final static String STATUS_RENTED = "R";
public final static String STATUS_FROZEN = "F";
public void initializeAttributes() {
addAttribute(getIDColumnName());
addAttribute(COLUMN_NAME, "Name", String.class);
addAttribute(COLUMN_INFO, "Info", String.class, 5000);
addManyToOneRelationship(COLUMN_FLOOR, Floor.class);
addManyToOneRelationship(COLUMN_APARTMENT_TYPE, ApartmentType.class);
addAttribute(COLUMN_RENTABLE, "Leigjanleg", Boolean.class);
addAttribute(COLUMN_IMAGE, "Mynd", Integer.class);
addAttribute(COLUMN_UNAVAILABLE_UNTIL, "Frosin", Date.class);
addAttribute(COLUMN_SERIE, "Serie", String.class, 2);
addAttribute(COLUMN_STATUS, "Status", String.class, 1);
addAttribute(COLUMN_SERIAL_NUMBER, "Serial number", String.class, 255);
addAttribute(COLUMN_MARKED, "marked", Boolean.class);
}
public String getEntityName() {
return ENTITY_NAME;
}
//getters
public String getName() {
return getStringColumnValue(COLUMN_NAME);
}
public String getInfo() {
return getStringColumnValue(COLUMN_INFO);
}
public int getFloorId() {
return getIntColumnValue(COLUMN_FLOOR);
}
public Floor getFloor() {
return (Floor) getColumnValue(COLUMN_FLOOR);
}
public int getApartmentTypeId() {
return getIntColumnValue(COLUMN_APARTMENT_TYPE);
}
public ApartmentType getApartmentType() {
return (ApartmentType) getColumnValue(COLUMN_APARTMENT_TYPE);
}
public int getImageId() {
return getIntColumnValue(COLUMN_IMAGE);
}
public boolean getRentable() {
return getBooleanColumnValue(COLUMN_RENTABLE);
}
public Date getUnavailableUntil() {
return ((Date) getColumnValue(COLUMN_UNAVAILABLE_UNTIL));
}
public String getSerie() {
return getStringColumnValue(COLUMN_SERIE);
}
public String getStatus() {
return (getStringColumnValue(COLUMN_STATUS));
}
public boolean getMarked() {
return getBooleanColumnValue(COLUMN_MARKED, false);
}
public String getSerialNumber() {
return getStringColumnValue(COLUMN_SERIAL_NUMBER);
}
//setters
public void setName(String name) {
setColumn(COLUMN_NAME, name);
}
public void setInfo(String info) {
setColumn(COLUMN_INFO, info);
}
public void setFloorId(int floor_id) {
setColumn(COLUMN_FLOOR, floor_id);
}
public void setFloorId(Integer floor_id) {
setColumn(COLUMN_FLOOR, floor_id);
}
public void setFloor(Floor floor) {
setColumn(COLUMN_FLOOR, floor);
}
public void setApartmentTypeId(int apartment_type_id) {
setColumn(COLUMN_APARTMENT_TYPE, apartment_type_id);
}
public void setApartmentTypeId(Integer apartment_type_id) {
setColumn(COLUMN_APARTMENT_TYPE, apartment_type_id);
}
public void setApartmentType(ApartmentType type) {
setColumn(COLUMN_APARTMENT_TYPE, type);
}
public void setImageId(int room_type_id) {
setColumn(COLUMN_IMAGE, room_type_id);
}
public void setImageId(Integer room_type_id) {
setColumn(COLUMN_IMAGE, room_type_id);
}
public void setRentable(boolean rentable) {
setColumn(COLUMN_RENTABLE, rentable);
}
public void setUnavailableUntil(Date date) {
setColumn(COLUMN_UNAVAILABLE_UNTIL, date);
}
public void setSerie(String serie) {
setColumn(COLUMN_SERIE, serie);
}
public void setStatus(String status) {
if (status.equalsIgnoreCase(STATUS_FROZEN) || status.equalsIgnoreCase(STATUS_RENTED)
|| status.equalsIgnoreCase(STATUS_AVAILABLE)) {
setColumn(COLUMN_STATUS, status);
}
else {
System.err.println("Undefined status :" + status);
}
}
public void setStatusFrozen() {
setStatus(STATUS_FROZEN);
}
public void setStatusAvailable() {
setStatus(STATUS_AVAILABLE);
}
public void setStatusRented() {
setStatus(STATUS_RENTED);
}
public void setSerialNumber(String number) {
setColumn(COLUMN_SERIAL_NUMBER, number);
}
public void setMarked(boolean marked) {
setColumn(COLUMN_MARKED, marked);
}
//ejb
public Collection ejbFindBySQL(String sql) throws FinderException {
return super.idoFindPKsBySQL(sql);
}
public Collection ejbFindByType(Integer typeID) throws FinderException {
Table apartment = new Table(this);
SelectQuery query = new SelectQuery(apartment);
query.addCriteria(new MatchCriteria(apartment, COLUMN_APARTMENT_TYPE,
MatchCriteria.EQUALS, typeID.intValue()));
return idoFindPKsBySQL(query.toString());
}
public Collection ejbFindeByTypeAndComplex(Integer typeID, Integer complexID)
throws FinderException {
try {
SelectQuery query = getTypeAndComplexQuery(typeID, complexID);
query.addOrder(new Order(new Column(COLUMN_FLOOR), true));
return idoFindPKsBySQL(query.toString());
} catch (IDORelationshipException e) {
throw new FinderException(e.getMessage());
}
}
public Collection ejbFindByName(String name) throws FinderException {
Table apartment = new Table(this);
SelectQuery query = new SelectQuery(apartment);
query.addCriteria(new MatchCriteria(apartment, COLUMN_NAME,
MatchCriteria.EQUALS, name));
return idoFindPKsBySQL(query.toString());
}
public int ejbHomeGetRentableCount() throws IDOException {
Table apartment = new Table(this);
SelectQuery query = new SelectQuery(apartment);
query.setAsCountQuery(true);
query.addColumn(new WildCardColumn());
query.addCriteria(new MatchCriteria(apartment, COLUMN_RENTABLE,
MatchCriteria.EQUALS, true));
return idoGetNumberOfRecords(query.toString());
}
public int ejbHomeGetTypeAndComplexCount(Integer typeID, Integer complexID)
throws IDOException {
SelectQuery query = getTypeAndComplexQuery(typeID, complexID);
return idoGetNumberOfRecords(query.toString());
}
private SelectQuery getTypeAndComplexQuery(Integer typeID, Integer complexID)
throws IDORelationshipException {
Table apartment = new Table(this);
Table type = new Table(ApartmentType.class);
Table floor = new Table(Floor.class);
Table building = new Table(Building.class);
SelectQuery query = new SelectQuery(apartment);
query.addColumn(new WildCardColumn(apartment));
query.addJoin(type, apartment);
query.addJoin(floor, apartment);
query.addJoin(building, floor);
query.addCriteria(new MatchCriteria(apartment, COLUMN_APARTMENT_TYPE,
MatchCriteria.EQUALS, typeID.intValue()));
query.addCriteria(new MatchCriteria(new Column(building,
BuildingBMPBean.COLUMN_COMPLEX), MatchCriteria.EQUALS,
complexID.intValue()));
return query;
}
public Collection ejbFindBySearch(Integer complexID, Integer buildingID,
Integer floorID, Integer typeID, Integer subcategoryID, boolean order)
throws FinderException {
Table apartment = new Table(this, "a");
Table floor = new Table(Floor.class, "f");
Table building = new Table(Building.class, "b");
Table complex = new Table(Complex.class, "c");
Table category = new Table(ApartmentCategory.class, "y");
Table subcategory = new Table(ApartmentSubcategory.class, "y");
Table type = new Table(ApartmentType.class, "t");
SelectQuery query = new SelectQuery(apartment);
query.addColumn(new WildCardColumn(apartment));
query.addJoin(building, BuildingBMPBean.COLUMN_COMPLEX, complex,
BuildingBMPBean.COLUMN_COMPLEX);
query.addJoin(floor, FloorBMPBean.COLUMN_BUILDING, building,
FloorBMPBean.COLUMN_BUILDING);
query.addJoin(apartment, COLUMN_FLOOR, floor, COLUMN_FLOOR);
query.addJoin(apartment, COLUMN_APARTMENT_TYPE, type, COLUMN_APARTMENT_TYPE);
query.addJoin(type, ApartmentTypeBMPBean.COLUMN_APARTMENT_SUBCATEGORY, subcategory,
ApartmentTypeBMPBean.COLUMN_APARTMENT_SUBCATEGORY);
if (complexID != null && complexID.intValue() > 0) {
query.addCriteria(new MatchCriteria(building,
BuildingBMPBean.COLUMN_COMPLEX, MatchCriteria.EQUALS,
complexID.intValue()));
if (order) {
query.addOrder(complex, ComplexBMPBean.COLUMN_NAME, true);
}
}
if (buildingID != null && buildingID.intValue() > 0) {
query.addCriteria(new MatchCriteria(floor,
FloorBMPBean.COLUMN_BUILDING, MatchCriteria.EQUALS,
buildingID.intValue()));
if (order) {
query.addOrder(building, BuildingBMPBean.COLUMN_NAME, true);
}
}
if (floorID != null && floorID.intValue() > 0) {
query.addCriteria(new MatchCriteria(apartment,
ApartmentBMPBean.COLUMN_FLOOR, MatchCriteria.EQUALS, floorID
.intValue()));
if (order) {
query.addOrder(floor, FloorBMPBean.COLUMN_NAME, true);
}
}
if (typeID != null && typeID.intValue() > 0) {
query.addCriteria(new MatchCriteria(apartment,
ApartmentBMPBean.COLUMN_APARTMENT_TYPE, MatchCriteria.EQUALS,
typeID.intValue()));
if (order) {
query.addOrder(type, ApartmentTypeBMPBean.COLUMN_NAME, true);
}
}
if (subcategoryID != null && subcategoryID.intValue() > 0) {
query.addCriteria(new MatchCriteria(type,
ApartmentTypeBMPBean.COLUMN_APARTMENT_SUBCATEGORY, MatchCriteria.EQUALS,
subcategoryID.intValue()));
if (order) {
query.addOrder(category, ApartmentCategoryBMPBean.COLUMN_NAME, true);
}
}
return idoFindPKsBySQL(query.toString());
}
public Collection ejbFindByFloor(Integer floorID) throws FinderException {
IDOQuery query = idoQuery();
query.appendSelectAllFrom(this);
query.appendWhereEquals(COLUMN_FLOOR, floorID);
query.appendOrderBy(COLUMN_NAME);
return idoFindPKsByQuery(query);
}
public Object ejbFindByFloorAndTypeAndName(String name, Floor floor, ApartmentType type) throws FinderException {
IDOQuery query = idoQuery();
query.appendSelectAllFrom(this);
query.appendWhereEquals(COLUMN_FLOOR, floor);
query.appendAndEquals(COLUMN_APARTMENT_TYPE, type);
query.appendAndEqualsQuoted(COLUMN_NAME, name);
return idoFindOnePKByQuery(query);
}
public Collection ejbFindAll() throws FinderException {
return super.idoFindAllIDsBySQL();
}
public Collection ejbFindByFloor(Floor floor) throws FinderException {
return ejbFindByFloor((Integer) floor.getPrimaryKey());
}
}