package is.idega.idegaweb.egov.bpm.cases.bundle; import is.idega.idegaweb.egov.cases.business.CasesBusiness; import is.idega.idegaweb.egov.cases.data.CaseCategory; import is.idega.idegaweb.egov.cases.data.CaseType; import java.util.Collection; import java.util.Locale; import javax.faces.context.FacesContext; import org.jbpm.graph.def.ProcessDefinition; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Service; import com.idega.business.IBOLookup; import com.idega.business.IBOLookupException; import com.idega.business.IBORuntimeException; import com.idega.core.localisation.business.ICLocaleBusiness; import com.idega.idegaweb.IWApplicationContext; import com.idega.idegaweb.IWMainApplication; import com.idega.idegaweb.egov.bpm.data.CaseTypesProcDefBind; import com.idega.idegaweb.egov.bpm.data.dao.CasesBPMDAO; import com.idega.jbpm.bundle.ProcessBundleDefaultImpl; import com.idega.user.business.GroupBusiness; import com.idega.user.data.Group; /** * * @author <a href="civilis@idega.com">Vytautas Čivilis</a> * @version $Revision: 1.1 $ * * Last modified: $Date: 2009/01/25 15:45:46 $ by $Author: civilis $ * */ @Scope("prototype") @Service("casesBPMProcessBundle") public class ProcessBundleCasesImpl extends ProcessBundleDefaultImpl { public static final String defaultCaseTypeName = "BPM"; public static final String defaultCaseCategoryName = "BPM"; public static final String defaultCaseHandlersGroupName = "BPM Cases Handlers"; private CasesBPMDAO casesBPMDAO; @Override public void configure(ProcessDefinition pd) { super.configure(pd); assignToDefaultCaseTypes(pd); } protected void assignToDefaultCaseTypes(ProcessDefinition pd) { CaseTypesProcDefBind ctpd = getCasesBPMDAO() .getCaseTypesProcDefBindByPDName(pd.getName()); if (ctpd == null) { try { String caseCategoryName = defaultCaseCategoryName; String caseTypeName = defaultCaseTypeName; String caseHandlersGroupName = defaultCaseHandlersGroupName; CasesBusiness casesBusiness = getCasesBusiness(); Collection<CaseCategory> caseCategories = casesBusiness .getCaseCategoriesByName(caseCategoryName); Collection<CaseType> caseTypes = casesBusiness .getCaseTypesByName(caseTypeName); CaseCategory caseCategory; CaseType caseType; if (caseCategories == null || caseCategories.isEmpty()) { GroupBusiness groupBusiness = getGroupBusiness(); Collection<Group> caseHandlersGroups = groupBusiness .getGroupsByGroupName(caseHandlersGroupName); Group caseHandlersGroup; if (caseHandlersGroups == null || caseHandlersGroups.isEmpty()) { caseHandlersGroup = groupBusiness.createGroup( caseHandlersGroupName, "Default bpm cases handlers group"); } else caseHandlersGroup = caseHandlersGroups.iterator() .next(); int localeId = ICLocaleBusiness .getLocaleId(new Locale("en")); caseCategory = casesBusiness.storeCaseCategory(null, null, caseCategoryName, "Default bpm case category", caseHandlersGroup, localeId, -1); } else { caseCategory = caseCategories.iterator().next(); } if (caseTypes == null || caseTypes.isEmpty()) { caseType = casesBusiness.storeCaseType(null, caseTypeName, "Default bpm case type", -1); } else { caseType = caseTypes.iterator().next(); } CaseTypesProcDefBind bind = new CaseTypesProcDefBind(); bind.setCasesCategoryId(new Long(caseCategory.getPrimaryKey() .toString())); bind.setCasesTypeId(new Long(caseType.getPrimaryKey() .toString())); bind.setProcessDefinitionName(pd.getName()); getCasesBPMDAO().persist(bind); } catch (RuntimeException e) { throw e; } catch (Exception e) { throw new RuntimeException(e); } } } protected CasesBusiness getCasesBusiness() { try { FacesContext fctx = FacesContext.getCurrentInstance(); IWApplicationContext iwac; if (fctx == null) iwac = IWMainApplication.getDefaultIWApplicationContext(); else iwac = IWMainApplication.getIWMainApplication(fctx) .getIWApplicationContext(); return (CasesBusiness) IBOLookup.getServiceInstance(iwac, CasesBusiness.class); } catch (IBOLookupException ile) { throw new IBORuntimeException(ile); } } protected GroupBusiness getGroupBusiness() { try { FacesContext fctx = FacesContext.getCurrentInstance(); IWApplicationContext iwac; if (fctx == null) iwac = IWMainApplication.getDefaultIWApplicationContext(); else iwac = IWMainApplication.getIWMainApplication(fctx) .getIWApplicationContext(); return (GroupBusiness) IBOLookup.getServiceInstance(iwac, GroupBusiness.class); } catch (IBOLookupException ile) { throw new IBORuntimeException(ile); } } public CasesBPMDAO getCasesBPMDAO() { return casesBPMDAO; } @Autowired public void setCasesBPMDAO(CasesBPMDAO casesBPMDAO) { this.casesBPMDAO = casesBPMDAO; } }