package org.joget.workflow.shark; import com.lutris.dods.builder.generator.query.QueryBuilder; import java.math.BigDecimal; import org.enhydra.shark.api.client.wfmc.wapi.WMSessionHandle; import org.enhydra.shark.api.internal.instancepersistence.ActivityPersistenceObject; import org.enhydra.shark.api.internal.instancepersistence.PersistenceException; import org.enhydra.shark.instancepersistence.DODSPersistentManager; import org.enhydra.shark.instancepersistence.data.ProcessDO; import org.enhydra.shark.instancepersistence.data.ProcessQuery; import org.enhydra.shark.instancepersistence.data.ProcessStateDO; import org.joget.workflow.model.WorkflowAssignment; import org.joget.workflow.util.WorkflowUtil; public class WorkflowDODSPersistentManager extends DODSPersistentManager { @Override public void persist(WMSessionHandle shandle, ActivityPersistenceObject act, boolean isInitialPersistence) throws PersistenceException { if (isInitialPersistence) { WorkflowAssignment mockAss = new WorkflowAssignment(); mockAss.setActivityId(act.getId()); mockAss.setActivityDefId(act.getActivityDefinitionId()); mockAss.setProcessId(act.getProcessId()); mockAss.setProcessDefId(act.getProcessMgrName()); act.setName(WorkflowUtil.processVariable(act.getName(), null, mockAss)); } super.persist(shandle, act, isInitialPersistence); } @Override protected ProcessDO[] getPersistedProcesses(int type, String sqlWhere, int startAt, int limit) throws PersistenceException { ProcessDO[] DOs = null; ProcessQuery query = null; try { query = new ProcessQuery(/* dbt */); if (type == 1) { query.setQueryState(ProcessStateDO.createExisting((BigDecimal) _prStates.get("open.running")), QueryBuilder.EQUAL); } else if (type == -1) { for (int i = 0; i < _prOpenStatesBigDecimals.size(); i++) { query.setQueryState(ProcessStateDO.createExisting((BigDecimal) _prOpenStatesBigDecimals.get(i)), QueryBuilder.NOT_EQUAL); } } if (null != sqlWhere) { query.getQueryBuilder().addWhere(sqlWhere); if (startAt > 0) { query.setReadSkip(startAt); } if (limit > 0) { query.setDatabaseLimit(limit); // CUSTOMIZED: Added maxRows to limit the number of rows returned by the SQL query query.setMaxRows(startAt + limit); } } DOs = query.getDOArray(); return DOs; } catch (Throwable t) { throw new PersistenceException(t); } } }