package is.idega.idegaweb.egov.bpm.cases.presentation.beans; import is.idega.idegaweb.egov.bpm.IWBundleStarter; import is.idega.idegaweb.egov.bpm.cases.CasesBPMProcessView; import java.util.logging.Level; import java.util.logging.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Service; import com.idega.idegaweb.IWResourceBundle; import com.idega.idegaweb.egov.bpm.data.ProcessUserBind; import com.idega.idegaweb.egov.bpm.data.ProcessUserBind.Status; import com.idega.idegaweb.egov.bpm.data.dao.CasesBPMDAO; import com.idega.jbpm.exe.ProcessWatch; import com.idega.jbpm.exe.ProcessWatchType; import com.idega.presentation.IWContext; import com.idega.user.data.User; import com.idega.util.CoreUtil; @Scope("singleton") @ProcessWatchType("cases") @Service public class BPMProcessWatcherImpl implements ProcessWatch { private CasesBPMProcessView processView = null; public boolean isWatching(Long processInstanceId) { try { CasesBPMDAO dao = getProcessView().getCasesBPMDAO(); User performer = CoreUtil.getIWContext().getCurrentUser(); ProcessUserBind caseUser = dao.getProcessUserBind(processInstanceId, Integer.valueOf(performer.getPrimaryKey().toString()), true); return Status.PROCESS_WATCHED == caseUser.getStatus(); } catch (Exception e) { Logger.getLogger(getClass().getName()).log(Level.SEVERE, "Exception while checking if process is being watched", e); } return false; } public boolean removeWatch(Long processInstanceId) { User performer = CoreUtil.getIWContext().getCurrentUser(); return removeWatch(processInstanceId, new Integer(performer.getPrimaryKey().toString())); } public boolean removeWatch(Long processInstanceId, Integer userIdToRemoveFrom) { try { CasesBPMDAO dao = getProcessView().getCasesBPMDAO(); ProcessUserBind caseUser = dao.getProcessUserBind(processInstanceId, userIdToRemoveFrom, true); if(caseUser.getStatus() != null && caseUser.getStatus() == Status.PROCESS_WATCHED) caseUser.setStatus(Status.NO_STATUS); dao.merge(caseUser); return true; } catch (Exception e) { Logger.getLogger(getClass().getName()).log(Level.SEVERE, "Exception while trying remove watch for process: " + processInstanceId, e); } return false; } public boolean takeWatch(Long processInstanceId) { User performer = CoreUtil.getIWContext().getCurrentUser(); return assignWatch(processInstanceId, new Integer(performer.getPrimaryKey().toString())); } public boolean assignWatch(Long processInstanceId, Integer assignedUserId) { try { CasesBPMDAO dao = getProcessView().getCasesBPMDAO(); ProcessUserBind caseUser = dao.getProcessUserBind(processInstanceId, assignedUserId, true); caseUser.setStatus(Status.PROCESS_WATCHED); dao.merge(caseUser); return true; } catch (Exception e) { Logger.getLogger(getClass().getName()).log(Level.SEVERE, "Exception while trying take watch for process: " + processInstanceId, e); } return false; } public CasesBPMProcessView getProcessView() { return processView; } @Autowired public void setProcessView(CasesBPMProcessView processView) { this.processView = processView; } public String getWatchCaseStatusMessage(boolean isWatched) { IWResourceBundle iwrb = getResourceBundle(); if (iwrb == null) { return null; } if (isWatched) { return iwrb.getLocalizedString("cases_bpm.process_is_being_watched", "Current case was added to your watch list"); } return iwrb.getLocalizedString("cases_bpm.process_was_removed_from_watch_list", "Current case was removed from your watch list"); } private IWResourceBundle getResourceBundle() { IWContext iwc = CoreUtil.getIWContext(); try { return iwc.getIWMainApplication().getBundle(IWBundleStarter.IW_BUNDLE_IDENTIFIER).getResourceBundle(iwc); } catch(Exception e) { Logger.getLogger(getClass().getName()).log(Level.SEVERE, "Exception getting IWResourceBundle", e); } return null; } public String getWatchCaseStatusLabel(boolean isWatched) { IWResourceBundle iwrb = getResourceBundle(); if (iwrb == null) { return null; } if (isWatched) { return iwrb.getLocalizedString("cases_bpm.remove_case", "Remove case from watchlist"); } return iwrb.getLocalizedString("cases_bpm.watch_case", "Watch case"); } }