package is.idega.idegaweb.egov.bpm.xform.bean; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Service; import com.idega.core.contact.data.Email; import com.idega.jbpm.exe.BPMFactory; import com.idega.jbpm.exe.ProcessInstanceW; import com.idega.jbpm.variables.BinaryVariable; import com.idega.presentation.IWContext; import com.idega.user.data.User; import com.idega.util.CoreConstants; import com.idega.util.IWTimestamp; import com.idega.util.text.Item; /** * @author <a href="mailto:arunas@idega.com">Arūnas Vasmanas</a> * @version $Revision: 1.9 $ Last modified: $Date: 2009/06/04 12:29:55 $ by $Author: valdas $ */ @Scope("singleton") @Service("xformBPM") public class XformBPMDSBean implements XformBPM { @Autowired private BPMFactory bpmFactory; protected BPMFactory getBpmFactory() { return bpmFactory; } protected void setBpmFactory(BPMFactory bpmFactory) { this.bpmFactory = bpmFactory; } public List<Item> getUsersConnectedToProcess(String pid) { List<User> users = getUsersConnectedList(new Long(pid)); List<Item> usersItem = new ArrayList<Item>(); for (User user : users) usersItem.add(new Item(user.getId(), user.getName())); return usersItem; } public List<Item> getUsersNamesConnectedToProcess(String pid) { List<User> users = getUsersConnectedList(new Long(pid)); List<Item> usersItem = new ArrayList<Item>(); for (User user : users) usersItem.add(new Item(user.getName(), user.getName())); return usersItem; } @SuppressWarnings("unchecked") public List<Item> getUsersConnectedToProcessEmails(String pid) { List<User> users = getUsersConnectedList(new Long(pid)); List<Item> usersItem = new ArrayList<Item>(); for (User user : users) usersItem.add(new Item(getUserEmails(user.getEmails()), user .getName())); return usersItem; } private List<User> getUsersConnectedList(Long pid) { ProcessInstanceW piw = getProcessInstanceW(pid); Collection<User> peopleConnectedToProcess = piw .getUsersConnectedToProcess(); List<User> uniqueUsers = new ArrayList<User>(); if (peopleConnectedToProcess != null) { for (User user : peopleConnectedToProcess) { if (!uniqueUsers.contains(user)) { uniqueUsers.add(user); } } } return uniqueUsers; } private String getUserEmails(Collection<Email> emails) { StringBuilder userEmails = new StringBuilder(); for (Email email : emails) userEmails.append(email.getEmailAddress()); return userEmails.toString(); } public List<Item> getProcessAttachments(String pid) { long processInstanceId = Long.valueOf(pid); ProcessInstanceW piw = getProcessInstanceW(processInstanceId); List<Item> attachments = new ArrayList<Item>(); for (BinaryVariable binaryVariable : piw.getAttachments()) if (binaryVariable.getHidden() == null || binaryVariable.getHidden().equals(false)) { attachments.add(new Item(binaryVariable.getTaskInstanceId() + ";" + binaryVariable.getHash(), binaryVariable .getFileName() + " - " + new IWTimestamp(getBpmFactory().getTaskInstanceW( binaryVariable.getTaskInstanceId()) .getTaskInstance().getEnd()) .getLocaleDateAndTime(IWContext .getCurrentInstance() .getCurrentLocale(), IWTimestamp.SHORT, IWTimestamp.SHORT))); } return attachments; } public boolean hasProcessAttachments(String pid) { if (pid.equals(CoreConstants.EMPTY)) return Boolean.FALSE; long processInstanceId = Long.valueOf(pid); ProcessInstanceW piw = getProcessInstanceW(processInstanceId); return piw.getAttachments().size() != 0 ? Boolean.TRUE : Boolean.FALSE; } private ProcessInstanceW getProcessInstanceW(Long pid) { ProcessInstanceW piw = getBpmFactory() .getProcessManagerByProcessInstanceId(pid).getProcessInstance( pid); return piw; } }