/*
* @(#)MissionProcessAction.java
*
* Copyright 2011 Instituto Superior Tecnico
* Founding Authors: Luis Cruz, Nuno Ochoa, Paulo Abrantes
*
* https://fenix-ashes.ist.utl.pt/
*
* This file is part of the Expenditure Tracking Module.
*
* The Expenditure Tracking Module is free software: you can
* redistribute it and/or modify it under the terms of the GNU Lesser General
* Public License as published by the Free Software Foundation, either version
* 3 of the License, or (at your option) any later version.
*
* The Expenditure Tracking Module is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with the Expenditure Tracking Module. If not, see <http://www.gnu.org/licenses/>.
*
*/
package module.mission.presentationTier.action;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import module.mission.domain.AuthorizeDislocationService;
import module.mission.domain.ForeignMissionProcess;
import module.mission.domain.MissionProcess;
import module.mission.domain.MissionSystem;
import module.mission.domain.NationalMissionProcess;
import module.mission.domain.PersonMissionAuthorization;
import module.mission.domain.VehiclItem;
import module.mission.domain.activity.AddItemActivity;
import module.mission.domain.activity.AllocateFundsActivityInformation;
import module.mission.domain.activity.AllocateProjectFundsActivityInformation;
import module.mission.domain.activity.CommitFundsActivityInformation;
import module.mission.domain.activity.DefineParticipantAuthorizationChainActivity;
import module.mission.domain.activity.DefineParticipantAuthorizationChainActivityInformation;
import module.mission.domain.activity.DistributeItemCostsActivityInformation;
import module.mission.domain.activity.ItemActivityInformation;
import module.mission.domain.util.AuthorizationChain;
import module.mission.domain.util.MissionProcessCreationBean;
import module.mission.presentationTier.action.util.MissionContext;
import module.organization.domain.Person;
import module.workflow.presentationTier.actions.ProcessManagement;
import module.workflow.util.WorkflowProcessViewer;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.fenixedu.bennu.struts.annotations.Mapping;
import org.fenixedu.bennu.struts.portal.EntryPoint;
import org.fenixedu.bennu.struts.portal.StrutsApplication;
import org.fenixedu.bennu.struts.portal.StrutsFunctionality;
import pt.ist.expenditureTrackingSystem.domain.util.DomainException;
import pt.ist.expenditureTrackingSystem.presentationTier.actions.BaseAction;
import pt.ist.fenixWebFramework.renderers.utils.RenderUtils;
import pt.ist.fenixframework.FenixFramework;
@StrutsApplication(bundle = "MissionResources", path = "mission", titleKey = "link.sideBar.missionProcess",
accessGroup = "logged", hint = "Expendutures")
@StrutsFunctionality(app = MissionProcessAction.class, path = "missionProcess", titleKey = "link.missionProcess.front.page")
@Mapping(path = "/missionProcess")
/**
*
* @author Sérgio Silva
* @author Luis Cruz
*
*/
@WorkflowProcessViewer(value = {NationalMissionProcess.class, ForeignMissionProcess.class})
public class MissionProcessAction extends BaseAction {
public ActionForward help(final ActionMapping mapping, final ActionForm form, final HttpServletRequest request,
final HttpServletResponse response) {
return forward("/module/mission/help/manual.jsp");
}
@EntryPoint
public ActionForward frontPage(final ActionMapping mapping, final ActionForm form, final HttpServletRequest request,
final HttpServletResponse response) {
MissionContext missionContext = getRenderedObject("missionContext");
if (missionContext == null) {
missionContext = new MissionContext();
}
request.setAttribute("missionContext", missionContext);
return forward("/mission/frontPage.jsp");
}
// @Override
// public Context createContext(String contextPathString, HttpServletRequest request) {
// final MissionProcess missionProcess = getDomainObject(request, "processId");
// if (missionProcess == null) {
// return super.createContext(contextPathString, request);
// }
// final WorkflowLayoutContext workflowLayoutContext = missionProcess.getLayout();
// workflowLayoutContext.setElements(contextPathString);
// return workflowLayoutContext;
// }
public ActionForward showProcesses(final ActionMapping mapping, final ActionForm form, final HttpServletRequest request,
final HttpServletResponse response) {
final Set<MissionProcess> missionProcesses = MissionSystem.getInstance().getMissionProcessesSet();
request.setAttribute("missionProcesses", missionProcesses);
return forward("/mission/showProcesses.jsp");
}
public ActionForward prepareNewMissionCreation(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
MissionProcessCreationBean missionProcessCreationBean = getRenderedObject();
if (missionProcessCreationBean == null) {
final String grantOwnerEquivalenceString = request.getParameter("grantOwnerEquivalence");
final Boolean grantOwnerEquivalence =
grantOwnerEquivalenceString == null || grantOwnerEquivalenceString.isEmpty() ? Boolean.FALSE : Boolean
.valueOf(grantOwnerEquivalenceString);
missionProcessCreationBean = new MissionProcessCreationBean(grantOwnerEquivalence);
}
request.setAttribute("missionProcessCreationBean", missionProcessCreationBean);
return forward("/mission/createNewMission.jsp");
}
public ActionForward newMissionCreation(final ActionMapping mapping, final ActionForm form, final HttpServletRequest request,
final HttpServletResponse response) {
final MissionProcessCreationBean missionProcessCreationBean = getRenderedObject();
try {
final MissionProcess missionProcess = missionProcessCreationBean.createNewMissionProcess();
request.setAttribute("missionProcess", missionProcess);
return ProcessManagement.forwardToProcess(missionProcess);
} catch (final DomainException ex) {
RenderUtils.invalidateViewState();
addLocalizedMessage(request, ex.getLocalizedMessage());
request.setAttribute("missionProcessCreationBean", missionProcessCreationBean);
return forward("/mission/createNewMission.jsp");
}
}
public ActionForward addMissionItemSelectType(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) throws Exception {
final MissionProcess missionProcess = getDomainObject(request, "processId");
final String missionItemType = request.getParameter("missionItemType");
final Class missionItemClass = Class.forName(missionItemType);
final ItemActivityInformation activityInformation =
new ItemActivityInformation(missionProcess, missionProcess.getActivity(AddItemActivity.class));
activityInformation.setTopLevelMissionItemType(missionItemClass.getSuperclass().getSuperclass());
activityInformation.setConcreteMissionItemType(missionItemClass);
activityInformation.setMissionItem();
return new ProcessManagement().performActivityPostback(activityInformation, request);
}
public ActionForward activityInformationPostback(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) throws Exception {
final ItemActivityInformation activityInformation = getRenderedObject("information");
activityInformation.setMissionItem();
RenderUtils.invalidateViewState();
return new ProcessManagement().performActivityPostback(activityInformation, request);
}
public ActionForward addMissionItem(final ActionMapping mapping, final ActionForm form, final HttpServletRequest request,
final HttpServletResponse response) {
final ItemActivityInformation activityInformation = getRenderedObject("information");
activityInformation.execute();
return ProcessManagement.forwardToProcess(activityInformation.getProcess());
}
public ActionForward distributeMissionItemCosts(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
final DistributeItemCostsActivityInformation activityInformation = getRenderedObject("information");
activityInformation.execute();
return ProcessManagement.forwardToProcess(activityInformation.getProcess());
}
public ActionForward allocateFunds(final ActionMapping mapping, final ActionForm form, final HttpServletRequest request,
final HttpServletResponse response) {
final AllocateFundsActivityInformation activityInformation = getRenderedObject("information");
activityInformation.execute();
return ProcessManagement.forwardToProcess(activityInformation.getProcess());
}
public ActionForward allocateProjectFunds(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
final AllocateProjectFundsActivityInformation activityInformation = getRenderedObject("information");
activityInformation.execute();
return ProcessManagement.forwardToProcess(activityInformation.getProcess());
}
public ActionForward commitFunds(final ActionMapping mapping, final ActionForm form, final HttpServletRequest request,
final HttpServletResponse response) {
final CommitFundsActivityInformation activityInformation = getRenderedObject("information");
activityInformation.execute();
return ProcessManagement.forwardToProcess(activityInformation.getProcess());
}
public ActionForward defineParticipantAuthorizationChain(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
final MissionProcess missionProcess = getDomainObject(request, "processId");
final DefineParticipantAuthorizationChainActivity activity =
(DefineParticipantAuthorizationChainActivity) missionProcess
.getActivity(DefineParticipantAuthorizationChainActivity.class);
final DefineParticipantAuthorizationChainActivityInformation activityInformation =
(DefineParticipantAuthorizationChainActivityInformation) activity.getActivityInformation(missionProcess);
final Person person = getDomainObject(request, "personId");
activityInformation.setPerson(person);
final String authorizationChainExternalId = request.getParameter("authorizationChainExternalId");
final AuthorizationChain authorizationChain = AuthorizationChain.importFromString(authorizationChainExternalId);
activityInformation.setAuthorizationChain(authorizationChain);
activityInformation.execute();
return ProcessManagement.forwardToProcess(activityInformation.getProcess());
}
public ActionForward distributeMissionItemFinancerValues(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
final DistributeItemCostsActivityInformation distributeItemCostsActivityInformation = getRenderedObject("information");
distributeItemCostsActivityInformation.distributeMissionItemFinancerValues();
RenderUtils.invalidateViewState();
return new ProcessManagement().performActivityPostback(distributeItemCostsActivityInformation, request);
}
public ActionForward aproveDislocations(final ActionMapping mapping, final ActionForm form, final HttpServletRequest request,
final HttpServletResponse response) {
final String[] personMissionAuthorizationIds = request.getParameterValues("personMissionAuthorizationIds");
final Set<PersonMissionAuthorization> personMissionAuthorizations = new HashSet<PersonMissionAuthorization>();
for (final String personMissionAuthorizationId : personMissionAuthorizationIds) {
final PersonMissionAuthorization personMissionAuthorization =
FenixFramework.getDomainObject(personMissionAuthorizationId);
personMissionAuthorizations.add(personMissionAuthorization);
}
Collection<PersonMissionAuthorization> noLongerActiveForAuthorization = AuthorizeDislocationService.authorizeDislocation(personMissionAuthorizations);
request.setAttribute("noLongerActiveForAuthorization", noLongerActiveForAuthorization);
return frontPage(mapping, form, request, response);
}
public ActionForward massAuthorizeVehicles(final ActionMapping mapping, final ActionForm form,
final HttpServletRequest request, final HttpServletResponse response) {
final String[] vehicleItemIds = request.getParameterValues("vehicleItemIds");
final Set<VehiclItem> vehicleItems = new HashSet<VehiclItem>();
for (final String id : vehicleItemIds) {
final VehiclItem vehicleItem = FenixFramework.getDomainObject(id);
vehicleItems.add(vehicleItem);
}
Collection<VehiclItem> noLongerActiveVehicleItems = MissionSystem.massAuthorizeVehicles(vehicleItems);
request.setAttribute("noLongerActiveVehicleItems", noLongerActiveVehicleItems);
return frontPage(mapping, form, request, response);
}
}