/* * eGov suite of products aim to improve the internal efficiency,transparency, * accountability and the service delivery of the government organizations. * * Copyright (C) <2015> eGovernments Foundation * * The updated version of eGov suite of products as by eGovernments Foundation * is available at http://www.egovernments.org * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see http://www.gnu.org/licenses/ or * http://www.gnu.org/licenses/gpl.html . * * In addition to the terms of the GPL license to be adhered to in using this * program, the following additional terms are to be complied with: * * 1) All versions of this program, verbatim or modified must carry this * Legal Notice. * * 2) Any misrepresentation of the origin of the material is prohibited. It * is required that all modified versions of this material be marked in * reasonable ways as different from the original version. * * 3) This license does not grant any rights to any user of the program * with regards to rights under trademark law for use of the trade names * or trademarks of eGovernments Foundation. * * In case of any queries, you can reach eGovernments Foundation at contact@egovernments.org. */ package org.egov.infra.workflow.service; import org.egov.infra.workflow.entity.StateAware; import org.egov.infra.workflow.entity.WorkflowAction; import org.egov.infra.workflow.matrix.entity.WorkFlowMatrix; import java.math.BigDecimal; import java.util.Date; import java.util.List; /** * The Interface WorkflowService. * @param <T> the generic type */ public interface WorkflowService<T extends StateAware> { /** * Moves the stateAware from the current state to the next state. The actual logic of moving the stateAware * depends on the state of the stateAware, and the Action * @param workflowAction the action * @param stateAware the state aware stateAware * @param comment the comment * @return stateAware after state transition. */ T transition(WorkflowAction workflowAction, T stateAware, String comment); /** * Moves the stateAware from the current state to the next state. The actual logic of moving the stateAware * depends on the state of the stateAware, the Action and the corresponding business rules * encapsulated in a Script. The script name should be '<stateAware's workflowtype>.workflow.<action * name>'. If this script was not found, the implementation will look for a script named '<stateAware's * workflowtype>.workflow'. If this is not found either, then an EgovRuntimeException is thrown * with the message key as 'workflow.script.notfound' * @param actionName the action name * @param stateAware the state aware stateAware * @param comment the comment * @return stateAware after state transition. */ T transition(String actionName,T stateAware, String comment); /** * Returns a set of valid actions that can be executed on the stateAware. The actions are determined * using the current state of the stateAware * @param stateAware the state aware * @return List of valid Actions */ List<WorkflowAction> getValidActions(T stateAware); /** * Returns WorkFlowMatrix for following combination of arguments * @param type the Object type of object * @param department Name of the department * @param amountRule the amount * @param additionalRule the additional rule defined for the objecttype * @param currentState the current state of the object * @param pendingAction the pendingActions for the objecttype * @return WorkFlowMatrix Object */ WorkFlowMatrix getWfMatrix(String type,String department,BigDecimal amountRule,String additionalRule,String currentState,String pendingAction); /** * Returns WorkFlowMatrix for following combination of arguments * @param type the Object type of object * @param department Name of the department * @param amountRule the amount * @param additionalRule the additional rule defined for the objecttype * @param currentState the current state of the object * @param pendingAction the pendingActions for the objecttype * @return WorkFlowMatrix Object */ WorkFlowMatrix getWfMatrix(String type,String department,BigDecimal amountRule,String additionalRule,String currentState,String pendingAction,Date date); }