package is.idega.idegaweb.campus.block.mailinglist.business;
import is.idega.idegaweb.campus.block.application.business.ReferenceNumberFinder;
import java.text.NumberFormat;
import java.util.Collection;
import java.util.Iterator;
import java.util.StringTokenizer;
import javax.ejb.FinderException;
import com.idega.block.building.business.BuildingCacher;
import com.idega.block.finance.data.Tariff;
import com.idega.block.finance.data.TariffBMPBean;
import com.idega.block.finance.data.TariffHome;
import com.idega.data.IDOLookup;
import com.idega.data.IDOLookupException;
import com.idega.idegaweb.IWApplicationContext;
import com.idega.util.IWTimestamp;
import com.idega.util.text.ContentParsable;
/**
* Title: Description: Copyright: Copyright (c) 2001 Company:
*
* @author <br>
* <a href="mailto:aron@idega.is">Aron Birkir</a> <br>
*
* @created 9. mars 2002
* @version 1.0
*/
public class LetterParser implements ContentParsable {
public static String ANNOUNCEMENT = "ANNOUNCEMENT";
public static String APPROVAL = "APPROVAL";
public static String REJECTION = "REJECTION";
public static String ALLOCATION = "ALLOCATION";
public static String SIGNATURE = "SIGNATURE";
public static String RESIGN = "RESIGN";
public static String TERMINATION = "TERMINATION";
public static String RETURN = "RETURN";
public static String DELIVER = "DELIVER";
public static String SUBMISSION = "SUBMISSION";
public static String APPLICANT_ACCEPTS = "APPLICANT_ACCEPTS";
public static String APPLICANT_DENIES = "APPLICANT_DENIES";
public static String APPLICANT_QUITS = "APPLICANT_QUITS";
public static String WAIT_LIST_REMOVED = "WAIT_LIST_REMOVED";
public final static String tenant_name = "TENANT_NAME";
public final static String tenant_address = "TENANT_ADDRESS";
public final static String tenant_id = "TENANT_ID";
public final static String contract_starts = "START_DATE";
public final static String contract_ends = "END_DATE";
public final static String con_deliver = "KEY_DELIVER_DATE";
public final static String con_return = "KEY_RETURN_DATE";
public final static String reference_number = "REFERENCE_NUMBER";
public final static String today = "TODAY";
public final static String TENANT_RESIGN_ADDRESS = "TENANT_RESIGN_ADDRESS";
public final static String TENANT_RESIGN_PO = "TENANT_RESIGN_PO";
public final static String TENANT_RESIGN_PHONE = "TENANT_RESIGN_PHONE";
public final static String TENANT_RESIGN_EMAIL = "TENANT_RESIGN_EMAIL";
public final static String aprt_name = "APRT_NAME";
public final static String aprt_desc = "APRT_DESCR";
public final static String floor_name = "FLOOR_NAME";
public final static String bldg_name = "BUILDING_NAME";
public final static String bldg_desc = "BUILDING_DESCR";
public final static String camp_name = "CAMPUS_NAME";
public final static String camp_info = "CAMPUS_DESCR";
public final static String type_name = "TYPE_NAME";
public final static String type_name_full = "TYPE_NAME_FULL";
public final static String type_name_short = "TYPE_NAME_SHORT";
public final static String type_desc = "TYPE_DESCR";
public final static String type_area = "TYPE_AREA";
public final static String cat_name = "CATEGORY_NAME";
public final static String cat_desc = "CATEGORY_DESC";
private static final String WL_COMPLEX = "WL_COMPLEXT";
private static final String WL_APARTMENT_TYPE = "WL_APARTMENT_TYPE";
private static final String WL_ORDER = "WL_ORDER";
private static final String WL_TYPE = "WL_TYPE";
private static final String WL_CHOICE_NUMBER = "WL_CHOICE_NUMBER";
private static final String WL_LAST_CONFIRMATION = "WL_LAST_CONFIRM";
private static final String WL_NUMBER_OF_REJECTIONS = "WL_NR_DENIALS";
private static final String WL_REJECT_FLAG = "WL_IN_DENIAL";
private static final String WL_REMOVED_FROM_LIST = "WL_WISHES_OFF";
private static final String WL_PRIORITY_LEVEL = "WL_PRIORITY";
private static final String WL_ACCEPTED_DATE = "WL_ACCEPTED_DATE";
private static final String CURRENT_RENT = "CURRENT_RENT";
public static String[] TAGS = { tenant_name, tenant_address, tenant_id,
contract_starts, contract_ends, reference_number, today, aprt_name,
aprt_desc, floor_name, bldg_name, bldg_desc, camp_name, camp_info,
type_name, type_name_full, type_name_short, type_desc, type_area,
cat_name, cat_desc, WL_ORDER, WL_TYPE, WL_CHOICE_NUMBER,
WL_LAST_CONFIRMATION, WL_NUMBER_OF_REJECTIONS, WL_REJECT_FLAG,
WL_REMOVED_FROM_LIST, WL_PRIORITY_LEVEL, WL_ACCEPTED_DATE,
WL_COMPLEX, WL_APARTMENT_TYPE, CURRENT_RENT, TENANT_RESIGN_ADDRESS, TENANT_RESIGN_PO, TENANT_RESIGN_PHONE, TENANT_RESIGN_EMAIL };
public static String[] types = { ANNOUNCEMENT, APPROVAL, REJECTION,
ALLOCATION, SIGNATURE, RETURN, DELIVER, RESIGN, TERMINATION,
SUBMISSION };
private EntityHolder holder;
/** Constructor for the LetterParser object */
public LetterParser() {
}
/**
* Constructor for the LetterParser object
*
* @param holder
* Description of the Parameter
*/
public LetterParser(EntityHolder holder) {
this.holder = holder;
}
/**
* Sets the entityHolder attribute of the LetterParser object
*
* @param holder
* The new entityHolder value
*/
public void setEntityHolder(EntityHolder holder) {
this.holder = holder;
}
/**
* Gets the parseTags of the LetterParser object
*
* @return The parse tags value
*/
public String[] getParseTags() {
return TAGS;
}
/**
* Gets the parsedString of the LetterParser object
*
* @param tag
* Description of the Parameter
* @return The parsed string value
*/
public String getParsedString(IWApplicationContext iwac, String tag) {
try {
// Applicant part
if (holder.getApplicant() != null) {
if (tag.equals(tenant_name)) {
return holder.getApplicant().getName();
} else if (tag.equals(tenant_address)) {
return holder.getApplicant().getResidence();
} else if (tag.equals(tenant_id)) {
return holder.getApplicant().getSSN();
} else if (tag.equals(TENANT_RESIGN_ADDRESS)) {
return holder.getApplicant().getResignationAddress();
} else if (tag.equals(TENANT_RESIGN_PO)) {
return holder.getApplicant().getResignationPO();
} else if (tag.equals(TENANT_RESIGN_PHONE)) {
return holder.getApplicant().getResignationPhone();
} else if (tag.equals(TENANT_RESIGN_EMAIL)) {
return holder.getApplicant().getResignationEmail();
}
}
// Contract section
if (holder.getContract() != null) {
if (tag.equals(contract_starts)) {
return new IWTimestamp(holder.getContract().getValidFrom())
.getDateString("dd.MM.yyyy");
} else if (tag.equals(contract_ends)) {
return new IWTimestamp(holder.getContract().getValidTo())
.getDateString("dd.MM.yyyy");
} else if (tag.equals(today)) {
return IWTimestamp.RightNow().getDateString("dd.MM.yyyy");
}
}
// Apartment section
if (holder.getApartmentHolder() != null) {
String attribute = BuildingCacher.PREFIXTYPE
+ holder.getApartmentHolder().getApartmentType()
.getPrimaryKey().toString();
Collection tariff = null;
try {
tariff = ((TariffHome) IDOLookup.getHome(Tariff.class))
.findAllByColumn(
TariffBMPBean.getColumnAttribute(),
attribute);
} catch (IDOLookupException e) {
} catch (FinderException e) {
}
double cRent = 0.0d;
double rentA = 0.0d;
double rentB = 0.0d;
double rentC = 0.0d;
double rentD = 0.0d;
double rentNotA = 0.0d;
if (tariff != null) {
Iterator it = tariff.iterator();
while (it.hasNext()) {
Tariff t = (Tariff) it.next();
cRent += t.getPrice();
if (null != t.getIndexType()) {
String type = t.getIndexType();
if ("A".equals(type)) {
rentA += t.getPrice();
} else if ("B".equals(type)) {
rentNotA += t.getPrice();
rentB += t.getPrice();
} else if ("C".equals(type)) {
rentNotA += t.getPrice();
rentC += t.getPrice();
} else if ("D".equals(type)) {
rentNotA += t.getPrice();
rentD += t.getPrice();
} else {
rentNotA += t.getPrice();
}
} else {
rentNotA += t.getPrice();
}
}
}
NumberFormat format = NumberFormat.getInstance();
format.setMaximumFractionDigits(0);
format.setMinimumFractionDigits(0);
format.setGroupingUsed(true);
if (tag.equals(aprt_name)) {
return holder.getApartmentHolder().getApartment().getName();
} else if (tag.equals(aprt_desc)) {
return holder.getApartmentHolder().getApartment().getInfo();
} else if (tag.equals(floor_name)) {
return holder.getApartmentHolder().getFloor().getName();
} else if (tag.equals(bldg_name)) {
return holder.getApartmentHolder().getBuilding().getName();
} else if (tag.equals(bldg_desc)) {
return holder.getApartmentHolder().getBuilding().getInfo();
} else if (tag.equals(camp_name)) {
return holder.getApartmentHolder().getComplex().getName();
} else if (tag.equals(camp_info)) {
return holder.getApartmentHolder().getComplex().getInfo();
} else if (tag.equals(type_name)) {
String type = holder.getApartmentHolder()
.getApartmentType().getName();
if (type != null) {
StringTokenizer tok = new StringTokenizer(type);
return tok.nextToken();
}
return holder.getApartmentHolder().getApartmentType()
.getName();
} else if (tag.equals(type_name_full)) {
return holder.getApartmentHolder().getApartmentType()
.getName();
} else if (tag.equals(type_name_short)) {
return holder.getApartmentHolder().getApartmentType()
.getAbbreviation();
} else if (tag.equals(type_desc)) {
return holder.getApartmentHolder().getApartmentType()
.getInfo();
} else if (tag.equals(type_area)) {
return String.valueOf(holder.getApartmentHolder()
.getApartmentType().getArea());
} else if (tag.equals(cat_name)) {
return holder.getApartmentHolder().getApartmentCategory()
.getName();
} else if (tag.equals(cat_desc)) {
return holder.getApartmentHolder().getApartmentCategory()
.getInfo();
} else if (tag.equals(CURRENT_RENT)) {
return format.format(cRent);
}
}
// Application part
if (holder.getApplication() != null) {
if (tag.equals(reference_number)) {
int id = new Integer(holder.getApplication()
.getPrimaryKey().toString()).intValue();
return ReferenceNumberFinder.getInstance(iwac).lookup(id);
}
}
} catch (NullPointerException ex) {
ex.printStackTrace();
}
return null;
}
/**
* Gets the parseTypes of the LetterParser object
*
* @return The parse types value
*/
public String[] getParseTypes() {
return types;
}
/**
* Gets the parseObject of the LetterParser object
*
* @return The parse object value
*/
public Object getParseObject() {
return holder;
}
public String getDelimiters() {
return "[]";
}
/**
* Static method to provide a formatted tag string with [ ] around the value
*
* @param tag
* Description of the Parameter
* @return The formatted tag value
*/
public static String getFormattedTag(String tag) {
return "[" + tag + "]";
}
public String formatTag(String tag) {
return getFormattedTag(tag);
}
}