package module.workingCapital.presentationTier.action;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import module.workflow.domain.ProcessFileValidationException;
import module.workflow.domain.WorkflowProcess;
import module.workflow.presentationTier.actions.ProcessManagement;
import module.workingCapital.domain.TransactionFile;
import module.workingCapital.domain.WorkingCapitalAcquisitionTransaction;
import module.workingCapital.domain.WorkingCapitalTransaction;
import module.workingCapital.domain.util.WorkingCapitalTransactionFileUploadBean;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.fenixedu.bennu.core.domain.User;
import org.fenixedu.bennu.core.domain.exceptions.DomainException;
import org.fenixedu.bennu.core.security.Authenticate;
import org.fenixedu.bennu.struts.annotations.Mapping;
import pt.ist.fenixWebFramework.renderers.utils.RenderUtils;
import com.google.common.io.ByteStreams;
@Mapping(path = "/workingCapitalTransaction")
public class TransactionManagement extends ProcessManagement {
public static Map<Class<? extends WorkingCapitalTransaction>, ProcessRequestHandler<? extends WorkflowProcess>> handlers =
new HashMap<Class<? extends WorkingCapitalTransaction>, ProcessRequestHandler<? extends WorkflowProcess>>();
@Override
protected User getLoggedPerson() {
return Authenticate.getUser();
}
private ActionForward forwardToUpload(HttpServletRequest request, WorkingCapitalTransactionFileUploadBean bean) {
if (!bean.isDefaultUploadInterfaceUsed()) {
request.setAttribute("interface", "/" + bean.getSelectedInstance().getName().replace('.', '/') + "-upload.jsp");
}
return forward("/workingCapital/transactionFileUpload.jsp");
}
@Override
public ActionForward fileUpload(final ActionMapping mapping, final ActionForm form, final HttpServletRequest request,
final HttpServletResponse response) {
final WorkingCapitalAcquisitionTransaction transaction = getTransaction(request);
final WorkflowProcess process = getProcess(request);
Class<? extends TransactionFile> selectedInstance =
(Class<? extends TransactionFile>) process.getUploadableFileTypes().get(0);
WorkingCapitalTransactionFileUploadBean bean = new WorkingCapitalTransactionFileUploadBean(process, transaction);
bean.setSelectedInstance(selectedInstance);
request.setAttribute("transaction", transaction);
request.setAttribute("bean", bean);
request.setAttribute("process", process);
return forwardToUpload(request, bean);
}
@Override
public ActionForward upload(final ActionMapping mapping, final ActionForm form, final HttpServletRequest request,
final HttpServletResponse response) throws Exception {
WorkingCapitalTransactionFileUploadBean bean = getRenderedObject("uploadFile");
final WorkingCapitalAcquisitionTransaction transaction = getTransaction(request);
final WorkflowProcess process = getProcess(request);
try {
transaction.addFile(bean.getDisplayName(), bean.getFilename(),
ByteStreams.toByteArray(bean.getInputStream()), bean);
} catch (ProcessFileValidationException e) {
request.setAttribute("bean", bean);
request.setAttribute("process", process);
request.setAttribute("transaction", transaction);
addLocalizedMessage(request, e.getLocalizedMessage());
return forwardToUpload(request, bean);
} catch (DomainException e) {
request.setAttribute("bean", bean);
request.setAttribute("process", process);
request.setAttribute("transaction", transaction);
addLocalizedMessage(request, e.getLocalizedMessage());
RenderUtils.invalidateViewState();
return forwardToUpload(request, bean);
}
return viewProcess(process, request);
}
protected <T extends WorkingCapitalTransaction> T getTransaction(HttpServletRequest request) {
return (T) getDomainObject(request, "transactionId");
}
@Override
public ActionForward removeFile(final ActionMapping mapping, final ActionForm form, final HttpServletRequest request,
final HttpServletResponse response) {
final TransactionFile file = getDomainObject(request, "fileId");
final WorkflowProcess process = getProcess(request);
final WorkingCapitalAcquisitionTransaction transaction = getTransaction(request);
transaction.removeFiles(file);
return viewProcess(process, request);
}
}