package pl.net.bluesoft.rnd.pt.ext.usersubstitution.step; import org.aperteworkflow.util.liferay.LiferayBridge; import pl.net.bluesoft.rnd.processtool.ProcessToolContext; import pl.net.bluesoft.rnd.processtool.model.BpmStep; import pl.net.bluesoft.rnd.processtool.model.ProcessInstance; import pl.net.bluesoft.rnd.processtool.model.UserData; import pl.net.bluesoft.rnd.processtool.model.UserSubstitution; import pl.net.bluesoft.rnd.processtool.steps.ProcessToolProcessStep; import pl.net.bluesoft.rnd.processtool.ui.widgets.annotations.AliasName; import pl.net.bluesoft.util.lang.Formats; import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; @AliasName(name = "HandleSubstitutionAcceptanceStep") public class HandleSubstitutionAcceptance implements ProcessToolProcessStep { private final static Logger logger = Logger.getLogger(HandleSubstitutionAcceptance.class.getName()); @Override public String invoke(BpmStep step, Map params) throws Exception { ProcessInstance processInstance = step.getProcessInstance(); try { ProcessToolContext ctx = ProcessToolContext.Util.getThreadProcessToolContext(); UserSubstitution userSubstitution = new UserSubstitution(); userSubstitution.setUser(processInstance.getCreator()); userSubstitution.setDateFrom(Formats.parseShortDate(processInstance.getSimpleAttributeValue("dateFrom"))); userSubstitution.setDateTo(Formats.parseShortDate(processInstance.getSimpleAttributeValue("dateTo"))); String substituteUserLogin = processInstance.getSimpleAttributeValue("userSubstitute"); UserData substituteUser = ctx.getUserDataDAO().loadUserByLogin(substituteUserLogin); if (substituteUser == null) { substituteUser = LiferayBridge.getLiferayUser(substituteUserLogin, processInstance.getCreator().getCompanyId()); ctx.getUserDataDAO().saveOrUpdate(substituteUser); if (substituteUser == null) { logger.warning("Unable to determine application user by login: " + substituteUserLogin); return STATUS_ERROR; } } userSubstitution.setUserSubstitute(substituteUser); ctx.getUserSubstitutionDAO().saveOrUpdate(userSubstitution); logger.warning("Added substitution for user " + userSubstitution.getUser().getLogin()); return STATUS_OK; } catch (Exception e) { logger.log(Level.SEVERE, e.getMessage(), e); return STATUS_ERROR; } } }