@Override
  public void initialize(List<Parameter> parameterList) throws WorkflowImplException {

    if (!validateParams(parameterList)) {
      throw new WorkflowRuntimeException(
          "Workflow initialization failed, required parameter is missing");
    }

    Parameter wfNameParameter =
        WorkflowManagementUtil.getParameter(
            parameterList,
            WFConstant.ParameterName.WORKFLOW_NAME,
            WFConstant.ParameterHolder.WORKFLOW_IMPL);

    if (wfNameParameter != null) {
      processName = StringUtils.deleteWhitespace(wfNameParameter.getParamValue());
      role =
          WorkflowManagementUtil.createWorkflowRoleName(
              StringUtils.deleteWhitespace(wfNameParameter.getParamValue()));
    }

    int tenantId = CarbonContext.getThreadLocalCarbonContext().getTenantId();
    String tenantDomain = CarbonContext.getThreadLocalCarbonContext().getTenantDomain();
    if (!MultitenantConstants.SUPER_TENANT_DOMAIN_NAME.equals(tenantDomain)) {
      tenantContext = "t/" + tenantDomain + "/";
    }

    Parameter bpsProfileParameter =
        WorkflowManagementUtil.getParameter(
            parameterList,
            WFImplConstant.ParameterName.BPS_PROFILE,
            WFConstant.ParameterHolder.WORKFLOW_IMPL);
    if (bpsProfileParameter != null) {
      String bpsProfileName = bpsProfileParameter.getParamValue();
      bpsProfile =
          WorkflowImplServiceDataHolder.getInstance()
              .getWorkflowImplService()
              .getBPSProfile(bpsProfileName, tenantId);
    }
    htName = processName + BPELDeployer.Constants.HT_SUFFIX;

    generateAndDeployArtifacts();
  }
 @Override
 public void removeWorkflow(String workflowId) throws WorkflowException {
   Workflow workflow = workflowDAO.getWorkflow(workflowId);
   // Deleting the role that is created for per workflow
   if (workflow != null) {
     WorkflowManagementUtil.deleteWorkflowRole(
         StringUtils.deleteWhitespace(workflow.getWorkflowName()));
     workflowDAO.removeWorkflowParams(workflowId);
     workflowDAO.removeWorkflow(workflowId);
   }
 }
  @Override
  public void addWorkflow(Workflow workflow, List<Parameter> parameterList, int tenantId)
      throws WorkflowException {

    // TODO:Workspace Name may contain spaces , so we need to remove spaces and prepare process for
    // that
    Parameter workflowNameParameter =
        new Parameter(
            workflow.getWorkflowId(),
            WFConstant.ParameterName.WORKFLOW_NAME,
            workflow.getWorkflowName(),
            WFConstant.ParameterName.WORKFLOW_NAME,
            WFConstant.ParameterHolder.WORKFLOW_IMPL);

    if (!parameterList.contains(workflowNameParameter)) {
      parameterList.add(workflowNameParameter);
    } else {
      workflowNameParameter = parameterList.get(parameterList.indexOf(workflowNameParameter));
    }
    if (!workflowNameParameter.getParamValue().equals(workflow.getWorkflowName())) {
      workflowNameParameter.setParamValue(workflow.getWorkflowName());
      // TODO:Since the user has changed the workflow name, we have to undeploy bpel package that is
      // already
      // deployed using previous workflow name.
    }

    AbstractWorkflow abstractWorkflow =
        WorkflowServiceDataHolder.getInstance()
            .getWorkflowImpls()
            .get(workflow.getTemplateId())
            .get(workflow.getWorkflowImplId());
    // deploying the template
    abstractWorkflow.deploy(parameterList);

    // add workflow to the database
    if (workflowDAO.getWorkflow(workflow.getWorkflowId()) == null) {
      workflowDAO.addWorkflow(workflow, tenantId);
      WorkflowManagementUtil.createAppRole(
          StringUtils.deleteWhitespace(workflow.getWorkflowName()));
    } else {
      workflowDAO.removeWorkflowParams(workflow.getWorkflowId());
      workflowDAO.updateWorkflow(workflow);
    }
    workflowDAO.addWorkflowParams(parameterList, workflow.getWorkflowId());
  }