What I can think of improving is:
- Show stack on screen to fail gracefully i.e. improved catch part of try..catch
- Make the try part shorter to improve readability
- Make imports with * to improve readability so you don't have to import the same package twice
Source code:
//source is probably public domain since prv.se is a public authority:
package se.prv.pandora.arendeprocess.actionhandler;
import java.util.List;
import org.apache.log4j.Logger;
import se.prv.framework.forms.IFormData;
import se.prv.framework.forms.IFormPattern;
import se.prv.framework.general.Action;
import se.prv.framework.general.ISessionHandler;
import se.prv.pandora.arendeprocess.daos.AnsokanDAO;
import se.prv.pandora.arendeprocess.entity.Ansokan;
import se.prv.pandora.arendeprocess.exceptions.PandoraDAOException;
import se.prv.pandora.arendeprocess.forms.NamnsokningFormPattern;
import se.prv.pandora.arendeprocess.general.PandoraActionHandler;
import se.prv.pandora.arendeprocess.obj.AnsokanInfo;
import se.prv.pandora.arendeprocess.obj.ArendeProcessSessionData;
import se.prv.pandora.arendeprocess.obj.ArendeSearchAdmin;
import se.prv.pandora.arendeprocess.obj.ArendesokInfo;
import se.prv.pandora.arendeprocess.util.ArendeComparatorManager;
import se.prv.pandora.arendeprocess.util.ArendeProcessListComparator;
import se.prv.pandora.arendeprocess.util.ArendeSokListComparator;
import se.prv.pandora.arendeprocess.util.LookupHelper;
import se.prv.pandora.arendeprocess.util.MenuManager;
import se.prv.pandora.arendeprocess.util.PandoraAnsokanHandler;
import se.prv.pandora.arendeprocess.util.PandoraFieldConstants;
/**
* @author Niklas Rosencrantz (adbnro)
*
*/
public class ArendesokningActionHandler extends PandoraActionHandler {
private ArendeProcessSessionData sessionData;
private AnsokanDAO ansokanDAO;
private int initialSort = ArendeProcessListComparator.INKOM_FIRST;
private final static Logger logger = Logger.getLogger(ArendesokningActionHandler.class);
protected IFormData getFormData() {
return null;
}
protected IFormPattern getPattern() {
return NamnsokningFormPattern.getInstance();
}
public ArendesokningActionHandler(){
ansokanDAO = LookupHelper.lookup(se.prv.pandora.arendeprocess.daos.AnsokanDAO.class);
}
protected void performAction(ISessionHandler sessionHandler, Action action) {
String returnPage = null;
List<AnsokanInfo> ansokanInfoList = null;
List<AnsokanInfo> sortedList = null;
ArendesokInfo arendesokInfo = null;
ArendeComparatorManager compManager = null;
ArendeSearchAdmin admin = new ArendeSearchAdmin();
PandoraAnsokanHandler ansokanHandler = new PandoraAnsokanHandler();
try {
sessionData = (ArendeProcessSessionData) sessionHandler.getSessionData();
MenuManager menuManager = sessionData.getMenuManager();
returnPage = menuManager.getLatestDestination(action.getActionTarget());
arendesokInfo = sessionData.getArendesokInfo();
if(arendesokInfo != null) {
if(arendesokInfo.getArendeComparatorManager() != null) {
compManager = arendesokInfo.getArendeComparatorManager();
} else {
compManager = new ArendeComparatorManager();
}
} else {
arendesokInfo = new ArendesokInfo();
compManager = new ArendeComparatorManager();
}
IFormData formData = sessionData.getFormData();
//ansokanInfo.setEditPersonInfo(null);
if(action.getActionCommand().equalsIgnoreCase("choose")){
// TODO: Ska valideras
//saveGrunduppgifter(formData, ansokanInfo, ansokan);
returnPage = sessionData.getLatestAction().getCurrPage();
//"arendeprocess_grunduppgifter.jsp"
} else if(action.getActionCommand().equalsIgnoreCase("search")){
logger.info("i search");
String search_arende = formData.getValue(PandoraFieldConstants.FIELD_SEARCH_ARENDE);
List<Ansokan> ansokningar = ansokanDAO.search(search_arende);
sessionData.setArendesokningLista(ansokanHandler.getAnsokanInfoFromAnsokan(ansokningar));
returnPage = sessionData.getLatestAction().getCurrPage();
}
compManager.setLastSortNr(initialSort);
ArendeSokListComparator comp = new ArendeSokListComparator(initialSort);
sortedList = sortFormList(sessionData.getArendesokningLista(), comp);
admin.setResultList(sortedList);
admin.setNbOfHits(sortedList.size());
arendesokInfo.setArendeSearchAdmin(admin);
arendesokInfo.setAnsokanInfoList(ansokanInfoList);
arendesokInfo.setArendeComparatorManager(compManager);
sessionData.setArendesokInfo(arendesokInfo);
action.setReturnPage(returnPage);
} catch (Exception e) {
logger.error("ArendesokningActionHandler: performAction() ", e);
throw new PandoraDAOException(e, "performAction()", "Error. Transaction must be rolled back: " + e.getMessage());
}
}
List<AnsokanInfo> sortFormList(List<AnsokanInfo> resultList1, ArendeSokListComparator comp) {
java.util.Collections.sort(resultList1, comp);
return resultList1;
}
}
