package com.jboss.dvd.seam;

import java.util.ArrayList;
import java.util.List;

import javax.faces.model.SelectItem;

import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.annotations.Synchronized;
import org.jboss.seam.bpm.Jbpm;
import org.jbpm.JbpmContext;

/**
 * Switches JBPM process definitions dynamically
 */
@Name("processDefinitionSwitcher")
@Scope(ScopeType.APPLICATION)
@Synchronized
public class ProcessDefinitionSwitcher
{
    static final String[] ORDER_DEFS = { 
          "ordermanagement1.jpdl.xml", 
          "ordermanagement2.jpdl.xml", 
          "ordermanagement3.jpdl.xml" 
       };

    @In(value="org.jboss.seam.bpm.jbpm")
    private Jbpm jbpm;
    
    @In
    private JbpmContext jbpmContext;
    
    public List<SelectItem> getProcessDefinitions()
    {
       List<SelectItem> result = new ArrayList<SelectItem>();
       for (String def: ORDER_DEFS)
       {
          result.add( new SelectItem(def, def.substring(0, def.length()-9)) );
       }
       return result;
    }
    
    private String currentProcessDefinition;
    
    public String getCurrentProcessDefinition()
    {
       return currentProcessDefinition;
    }
    
    public void setCurrentProcessDefinition(String def)
    {
       currentProcessDefinition = def;
    }

    public String switchProcess() 
    {
       jbpmContext.deployProcessDefinition( jbpm.getProcessDefinitionFromResource(currentProcessDefinition) );
       return null;
    }
    
}

