gt: 		table.setVerticalAlignment(1, row, Table.VERTICAL_ALIGN_TOP);
context: /*
   * $Id: VacationApprover.java,v 1.14 2005/06/23 06:02:17 anna Exp $ Created on
   * 18.11.2004
   * 
   * Copyright (C) 2004 Idega Software hf. All Rights Reserved.
   * 
   * This software is the proprietary information of Idega hf. Use is subject to
   * license terms.
   */
  package se.agura.applications.vacation.presentation;
  
  import java.rmi.RemoteException;
  import java.util.Collection;
  import javax.ejb.FinderException;
  import se.agura.applications.vacation.data.VacationRequest;
  import se.agura.applications.vacation.data.VacationType;
  import com.idega.business.IBORuntimeException;
  import com.idega.presentation.IWContext;
  import com.idega.presentation.Table;
  import com.idega.presentation.text.Break;
  import com.idega.presentation.text.Text;
  import com.idega.presentation.ui.BackButton;
  import com.idega.presentation.ui.DropdownMenu;
  import com.idega.presentation.ui.Form;
  import com.idega.presentation.ui.HiddenInput;
  import com.idega.presentation.ui.RadioButton;
  import com.idega.presentation.ui.SubmitButton;
  import com.idega.presentation.ui.TextArea;
  import com.idega.presentation.ui.util.SelectorUtility;
  import com.idega.user.data.Group;
  import com.idega.user.data.User;
  
  /**
   * Last modified: 18.11.2004 10:21:40 by: anna
   * 
   * @author <a href="mailto:anna@idega.com">anna </a>
   * @version $Revision: 1.14 $
   */
  public class VacationApprover extends VacationBlock {
  
  	private static final String ROLE_SALARY_ADMINISTRATION = "can_administer_salaries";
  	private static final String PARAMETER_COMMENT = "vac_comment";
  	private static final String PARAMETER_WITH_SALARY_COMPENSATION = "vac_salary_compensation";
  	private static final String PARAMETER_FORWARD_GROUP = "vac_forward_group";
  	private static final String PARAMETER_HANDLER = "vac_handler";
  	
  	private String iWidth = Table.HUNDRED_PERCENT;
  
  	private int iCellpadding = 3;
  
  	String action = null;
  
  	VacationRequest vacation = null;
  
  	VacationType vacationType = null;
  
  	/*
  	 * (non-Javadoc)
  	 * 
  	 * @see se.agura.applications.vacation.presentation.VacationBlock#present(com.idega.presentation.IWContext)
  	 */
  	public void present(IWContext iwc) {
  		try {
  			parse(iwc);
  
  			if (action.equals(ACTION_FORWARD_VIEW)) {
  				add(getSendToHandleForm(iwc));
  			}
  			else if (action.equals(ACTION_FORWARD)) {
  				forward(iwc);
  				showMessage(getResourceBundle().getLocalizedString("meeting_approver.application_forwarded", "Application forwarded."));
  			}
  			else if (action.equals(ACTION_DENIED)) {
  				reject(iwc);
  				showMessage(getResourceBundle().getLocalizedString("meeting_approver.application_rejected", "Application denied."));
  			}
  			else if (action.equals(ACTION_APPROVED)) {
  				approve(iwc);
  				showMessage(getResourceBundle().getLocalizedString("meeting_approver.application_approved", "Application approved."));
  			}
  			else if (action.equals(ACTION_CLOSED)) {
  				close(iwc);
  				showMessage(getResourceBundle().getLocalizedString("meeting_approver.application_closed", "Application closed."));
  			}
  			else {
  				User owner = vacation.getOwner();
  				if (owner.equals(iwc.getCurrentUser())) {
  					add(ownerView(iwc));
  				}
  				else {
  					add(supervisorView(iwc));
  				}
  			}
  		}
  		catch (RemoteException re) {
  			log(re);
  		}
  	}
  
  	private void parse(IWContext iwc) {
  		action = iwc.getParameter(PARAMETER_ACTION);
  		if (action == null) {
  			action = "";
  		}
  
  		vacation = getVacation(iwc);
  		if (vacation != null) {
  			vacationType = vacation.getVacationType();
  		}
  		else {
  			throw new IBORuntimeException("No vacation request found...");
  		}
  	}
  
  	private VacationRequest getVacation(IWContext iwc) {
  		VacationRequest vacation = null;
  		try {
  			if (iwc.isParameterSet(PARAMETER_PRIMARY_KEY_VAC)) {
  				vacation = getBusiness(iwc).getVacationRequest(iwc.getParameter(PARAMETER_PRIMARY_KEY_VAC));
  			}
  			else {
  				vacation = getBusiness(iwc).getVacationRequest("1");
  			}
  		}
  		catch (RemoteException re) {
  			log(re);
  		}
  		catch (FinderException fe) {
  			log(fe);
  		}
  		catch (NullPointerException npe) {
  			log(npe);
  		}
  		return vacation;
  	}
  
  	private void reject(IWContext iwc) {
  		String comment = iwc.getParameter(PARAMETER_COMMENT);
  		try {
  			getBusiness(iwc).rejectApplication(vacation, iwc.getCurrentUser(), comment);
  		}
  		catch (RemoteException re) {
  			throw new IBORuntimeException(re);
  		}
  	}
  	
  	private void close(IWContext iwc) {
  		try {
  			getBusiness(iwc).closeApplication(vacation, iwc.getCurrentUser());
  		}
  		catch (RemoteException re) {
  			throw new IBORuntimeException(re);
  		}
  	}
  
  	private void approve(IWContext iwc) {
  		String comment = iwc.getParameter(PARAMETER_COMMENT);
  		boolean salaryCompensation = iwc.isParameterSet(PARAMETER_WITH_SALARY_COMPENSATION) ? new Boolean(iwc.getParameter(PARAMETER_WITH_SALARY_COMPENSATION)).booleanValue() : false;
  		try {
  			getBusiness(iwc).approveApplication(vacation, iwc.getCurrentUser(), comment, salaryCompensation);
  		}
  		catch (RemoteException re) {
  			throw new IBORuntimeException(re);
  		}
  	}
  
  	private void forward(IWContext iwc) {
  		try {
  			String comment = iwc.getParameter(PARAMETER_COMMENT);
  			boolean salaryCompensation = iwc.isParameterSet(PARAMETER_WITH_SALARY_COMPENSATION) ? new Boolean(iwc.getParameter(PARAMETER_WITH_SALARY_COMPENSATION)).booleanValue() : false;
  			Group group = getUserBusiness(iwc).getGroupBusiness().getGroupByGroupID(Integer.parseInt(iwc.getParameter(PARAMETER_FORWARD_GROUP)));
  			User handler = getUserBusiness(iwc).getUser(new Integer(iwc.getParameter(PARAMETER_HANDLER)));
  			getBusiness(iwc).forwardApplication(vacation, iwc.getCurrentUser(), group, handler, comment, salaryCompensation);
  		}
  		catch (RemoteException re) {
  			throw new IBORuntimeException(re);
  		}
  		catch (FinderException fe) {
  			log(fe);
  			add("FinderException occured...");
  		}
  	}
  
  	private Form getSendToHandleForm(IWContext iwc) throws RemoteException {
  		Form form = new Form();
  		form.maintainParameter(PARAMETER_PRIMARY_KEY_VAC);
  		form.add(forwardView(iwc));
  		form.add(new Break());
  		form.add(getCancelButton());
  		form.add(getForwardButton());
  		return form;
  	}
  	
  	private Table forwardView(IWContext iwc) throws RemoteException {
  		Group parentGroup = (Group) getBusiness(iwc).getParentGroup(iwc.getCurrentUser()).getParentNode();
  		Table table = new Table();
  		table.setWidth(iWidth);
  		table.setCellpadding(iCellpadding);
  		table.setCellspacing(0);
  		int row = 1;
  		
  		if (parentGroup != null) {
  			Collection users = getUserBusiness(iwc).getUsersInGroup(parentGroup);
  					
  			table.add(new HiddenInput(PARAMETER_FORWARD_GROUP, parentGroup.getPrimaryKey().toString()), 1, row);
  			table.add(getHeader(getResourceBundle().getLocalizedString("vacation.request.handle", "Send to be handled by")), 1, row);
  	
  			SelectorUtility util = new SelectorUtility();
  			DropdownMenu menu = (DropdownMenu) getInput(util.getSelectorFromIDOEntities(new DropdownMenu(PARAMETER_HANDLER), users, "getName"));
  			table.add(menu, 2, row);
  		}
  		else {
  			table.add(getHeader(getResourceBundle().getLocalizedString("vacation.request.handle", "Send to be handled by")), 1, row);
  			table.add(new Break(2), 1, row);
  			table.add(new BackButton(getResourceBundle().getLocalizedString("vacation.request.back", "Back")), 1, row);
  		}
  		
  		table.setWidth(1, iHeaderColumnWidth);
  		table.setCellpaddingLeft(1, 0);
  		
  		return table;
  	}
  	
  	private Form ownerView(IWContext iwc) throws RemoteException {
  		Form form = new Form();
  		form.maintainParameter(PARAMETER_PRIMARY_KEY_VAC);
  		
  		Table logs = getVacationActionOverview(iwc, vacation);
  		if (logs != null) {
  			form.add(logs);
  			form.add(new Break());
  		}
  		
  		form.add(showVacationRequest(iwc, vacation));
  		form.add(new Break());
  		form.add(getCloseButton());
  		return form;
  	}
  
  	private Form supervisorView(IWContext iwc) throws RemoteException {
  		Form form = new Form();
  		form.maintainParameter(PARAMETER_PRIMARY_KEY_VAC);
  		
  		Table logs = getVacationActionOverview(iwc, vacation);
  		if (logs != null) {
  			form.add(logs);
  			form.add(new Break());
  		}
  		//shows info about the applier of the vacation request... 
  		VacationRequest application = null;
  		try {
  			application = getBusiness(iwc).getVacationRequest(iwc.getParameter(PARAMETER_PRIMARY_KEY_VAC));
  		}
  		catch (FinderException fe) {
  			log(fe);
  		}
  		
  		User user = application.getOwner();
  		
  		form.add(getPersonInfo(iwc, user)); 
  		form.add(new Break());
  		//...stops here
  		form.add(showVacationRequest(iwc, vacation));
  		form.add(new Break());
  		form.add(handleRequest(iwc));
  		form.add(new Break(2));
  		form.add(getDeniedButton());
  		form.add(getApprovedButton());
  		if (vacationType.getAllowsForwarding()) {
  			form.add(getForwardViewButton());
  		}
  		return form;
  	}
  
  	private SubmitButton getCloseButton() {
  		SubmitButton closeButton = (SubmitButton) getButton(new SubmitButton(getResourceBundle().getLocalizedString("vacation_approver.close_application", "Close"), PARAMETER_ACTION, ACTION_CLOSED));
  		closeButton.setToolTip(getResourceBundle().getLocalizedString("vacation.close.tooltip","Puts the application to a closed status"));
  		closeButton.setSubmitConfirm(getResourceBundle().getLocalizedString("vacation.close.popup","Are you sure you want to finally close the application?"));
  
  		return closeButton;
  	}
  
  	private SubmitButton getDeniedButton() {
  		SubmitButton deniedButton = (SubmitButton) getButton(new SubmitButton(getResourceBundle().getLocalizedString("vacation_approver.reject_application", "Reject"), PARAMETER_ACTION, ACTION_DENIED));
  		deniedButton.setToolTip(getResourceBundle().getLocalizedString("vacation.deny.tooltip","Denies the application"));
  		deniedButton.setSubmitConfirm(getResourceBundle().getLocalizedString("vacation.deny.popup","Are you sure you want to deny this application?"));
  		return deniedButton;
  	}
  
  	private SubmitButton getApprovedButton() {
  		SubmitButton approvedButton = (SubmitButton) getButton(new SubmitButton(getResourceBundle().getLocalizedString("vacation_approver.approve_application", "Approve"), PARAMETER_ACTION, ACTION_APPROVED));
  		approvedButton.setToolTip(getResourceBundle().getLocalizedString("vacation.approve.tooltip","Approves the application"));
  		approvedButton.setSubmitConfirm(getResourceBundle().getLocalizedString("vacation.approve.popup","Are you sure you want to approve this application?"));
  		return approvedButton;
  	}
  
  	private SubmitButton getForwardButton() {
  		SubmitButton forwardButton = (SubmitButton) getButton(new SubmitButton(getResourceBundle().getLocalizedString("vacation_approver.forward_application", "Forward"), PARAMETER_ACTION, ACTION_FORWARD));
  		forwardButton.setToolTip(getResourceBundle().getLocalizedString("vacation.forward.tooltip","Forwards the application"));
  		forwardButton.setSubmitConfirm(getResourceBundle().getLocalizedString("vacation.forward.popup","Are you sure you want to forward this application?"));
  		return forwardButton;
  	}
  
  	private SubmitButton getForwardViewButton() {
  		SubmitButton forwardButton = (SubmitButton) getButton(new SubmitButton(getResourceBundle().getLocalizedString("vacation_approver.forward_application", "Forward"), PARAMETER_ACTION, ACTION_FORWARD_VIEW));
  		forwardButton.setToolTip(getResourceBundle().getLocalizedString("vacation.forward.tooltip","Forwards the application"));
  		return forwardButton;
  	}
  
  	private Table handleRequest(IWContext iwc) {
  		Table table = new Table();
  		table.setWidth(iWidth);
  		table.setCellpadding(iCellpadding);
  		table.setCellspacing(0);
  		int row = 1;
  		
  		boolean hasSalaryRole = iwc.getAccessController().hasRole(ROLE_SALARY_ADMINISTRATION, iwc);
  		if (hasSalaryRole) {
  			RadioButton withCompensation = (RadioButton) getRadioButton(new RadioButton(PARAMETER_WITH_SALARY_COMPENSATION, Boolean.TRUE.toString()));
  			RadioButton withoutCompensation = (RadioButton) getRadioButton(new RadioButton(PARAMETER_WITH_SALARY_COMPENSATION, Boolean.FALSE.toString()));
  			if (vacation.getSalaryCompensation()) {
  				withCompensation.setSelected(true);
  			}
  			else {
  				withoutCompensation.setSelected(false);
  			}
  			
  			table.add(getHeader(getResourceBundle().getLocalizedString("vacation.request.salary_compensation", "Salary compensation")), 1, row);
  			table.add(withCompensation, 2, row);
  			table.add(Text.getNonBrakingSpace(), 2, row);
  			table.add(getText(getResourceBundle().getLocalizedString("vacation.request.with", "With")), 2, row);
  
  			table.add(Text.getNonBrakingSpace(), 2, row);
  			table.add(Text.getNonBrakingSpace(), 2, row);
  
  			table.add(withoutCompensation, 2, row);
  			table.add(Text.getNonBrakingSpace(), 2, row);
  			table.add(getText(getResourceBundle().getLocalizedString("vacation.request.without", "Without")), 2, row++);
  			table.setHeight(row++, 12);
  		}
  
  		TextArea area = (TextArea) getInput(new TextArea(PARAMETER_COMMENT));
  		area.setWidth(Table.HUNDRED_PERCENT);
  		area.setRows(4);
  
  