previous = updateMap.get(current.getVariableName()); if(current.getTime().equals(previous.getTime())) if(current.getRevision() == previous.getRevision()) isMoreRecent = Long.valueOf(current.getId()).longValue() > Long.valueOf(previous.getId()).longValue(); isMoreRecent = current.getRevision() > previous.getRevision(); isMoreRecent = current.getTime().after(previous.getTime()); updateMap.put(current.getVariableName(), current); for(Entry<String, HistoricVariableUpdate> entry : updateMap.entrySet()) variables.put(entry.getKey(), entry.getValue().getValue());
protected void printVariables(PrintWriter out, List<HistoricDetail> varList) { Map<String, HistoricVariableUpdate> varMap = new TreeMap<String, HistoricVariableUpdate>(); // filter revisions for (HistoricDetail detail : varList) { HistoricVariableUpdate varDetail = (HistoricVariableUpdate) detail; String varName = varDetail.getVariableName(); // expects the varList is sorted in a descending order of time. if (!varMap.containsKey(varName)) { varMap.put(varName, varDetail); } else { LOG.info("#### " + varName + " has multiple updates!!! " + Commands.UTIL.formatDate(varDetail.getTime()) + " Revision= " + varDetail.getRevision()); } } printVariables(out, varMap); }
public RestVariable getVariableFromRequest(boolean includeBinary, String detailId, HttpServletRequest request) { Object value = null; HistoricVariableUpdate variableUpdate = null; HistoricDetail detailObject = historyService.createHistoricDetailQuery().id(detailId).singleResult(); if (detailObject instanceof HistoricVariableUpdate) { variableUpdate = (HistoricVariableUpdate) detailObject; value = variableUpdate.getValue(); } if (value == null) { throw new ActivitiObjectNotFoundException("Historic detail '" + detailId + "' doesn't have a variable value.", VariableInstanceEntity.class); } else { return restResponseFactory.createRestVariable(variableUpdate.getVariableName(), value, null, detailId, RestResponseFactory.VARIABLE_HISTORY_DETAIL, includeBinary); } } }
public HistoricDetailResponse createHistoricDetailResponse(HistoricDetail detail, RestUrlBuilder urlBuilder) { HistoricDetailResponse result = new HistoricDetailResponse(); result.setId(detail.getId()); result.setProcessInstanceId(detail.getProcessInstanceId()); if (StringUtils.isNotEmpty(detail.getProcessInstanceId())) { result.setProcessInstanceUrl(urlBuilder.buildUrl(RestUrls.URL_HISTORIC_PROCESS_INSTANCE, detail.getProcessInstanceId())); } result.setExecutionId(detail.getExecutionId()); result.setActivityInstanceId(detail.getActivityInstanceId()); result.setTaskId(detail.getTaskId()); if (StringUtils.isNotEmpty(detail.getTaskId())) { result.setTaskUrl(urlBuilder.buildUrl(RestUrls.URL_HISTORIC_TASK_INSTANCE, detail.getTaskId())); } result.setTime(detail.getTime()); if (detail instanceof HistoricFormProperty) { HistoricFormProperty formProperty = (HistoricFormProperty) detail; result.setDetailType(HistoricDetailResponse.FORM_PROPERTY); result.setPropertyId(formProperty.getPropertyId()); result.setPropertyValue(formProperty.getPropertyValue()); } else if (detail instanceof HistoricVariableUpdate) { HistoricVariableUpdate variableUpdate = (HistoricVariableUpdate) detail; result.setDetailType(HistoricDetailResponse.VARIABLE_UPDATE); result.setRevision(variableUpdate.getRevision()); result.setVariable(createRestVariable(variableUpdate.getVariableName(), variableUpdate.getValue(), null, detail.getId(), VARIABLE_HISTORY_DETAIL, false, urlBuilder)); } return result; }
variableUpdate.getValue();
private boolean isHistoricVariableUpdateForTargetVariable(final String processVariableName, final HistoricVariableUpdate historicVariableUpdate) { return processVariableName.equals(historicVariableUpdate.getVariableName()); }
/** * get var updates in the node * @param historicActivityInstance * @return */ private Map<String, Object> getVarUpdates(HistoricActivityInstance historicActivityInstance) { Map<String, Object> updates = new HashMap<String,Object>(); List<HistoricDetail> historicUpdates = historyService.createHistoricDetailQuery() .processInstanceId( historicActivityInstance.getProcessInstanceId()) .activityInstanceId( historicActivityInstance.getId()) .variableUpdates() .list(); for (HistoricDetail historicDetail : historicUpdates) updates.put( ((HistoricVariableUpdate) historicDetail).getVariableName(), ((HistoricVariableUpdate) historicDetail).getValue()); return updates; }
protected void printVariables(PrintWriter out, List<HistoricDetail> varList) { Map<String, HistoricVariableUpdate> varMap = new TreeMap<String, HistoricVariableUpdate>(); // filter revisions for (HistoricDetail detail : varList) { HistoricVariableUpdate varDetail = (HistoricVariableUpdate) detail; String varName = varDetail.getVariableName(); // expects the varList is sorted in a descending order of time. if (!varMap.containsKey(varName)) { varMap.put(varName, varDetail); } else { LOG.info("#### " + varName + " has multiple updates!!! " + Commands.UTIL.formatDate(varDetail.getTime()) + " Revision= " + varDetail.getRevision()); } } printVariables(out, varMap); }
@Override public void historicProcessVariableLatestValueEquals(final String processInstanceId, final String processVariableName, final Object expectedValue) { // Assert the history level is set to full callback.trace(LogMessage.CONFIGURATION_1, HistoryLevel.FULL.name()); checkHistoryLevelIsFull(); // Assert there is a historic process instance by the provided id callback.trace(LogMessage.PROCESS_13, processInstanceId); final HistoricProcessInstance historicProcessInstance = getHistoryService().createHistoricProcessInstanceQuery().processInstanceId(processInstanceId) .singleResult(); Assert.assertThat(historicProcessInstance, is(notNullValue())); // Assert there is a variable by the provided name callback.trace(LogMessage.VARIABLE_1, processVariableName, processInstanceId); final List<HistoricVariableUpdate> variableUpdates = getDescendingVariableUpdates(processInstanceId, processVariableName); Assert.assertThat(variableUpdates, CoreMatchers.not(IsEmptyCollection.empty())); // Assert the latest value of the variable is equal to the expected value callback.trace(LogMessage.VARIABLE_2, processVariableName, expectedValue); final HistoricVariableUpdate latestValue = variableUpdates.get(0); Assert.assertThat(latestValue.getValue(), is(expectedValue)); }
previous = updateMap.get(current.getVariableName()); if(current.getTime().equals(previous.getTime())) if(current.getRevision() == previous.getRevision()) isMoreRecent = Long.valueOf(current.getId()).longValue() > Long.valueOf(previous.getId()).longValue(); isMoreRecent = current.getRevision() > previous.getRevision(); isMoreRecent = current.getTime().after(previous.getTime()); updateMap.put(current.getVariableName(), current); for(Entry<String, HistoricVariableUpdate> entry : updateMap.entrySet()) variables.put(entry.getKey(), entry.getValue().getValue());
@Override public void handle(SimulationEvent event) { // start process now String processInstanceId = (String) event.getProperty(PROCESS_INSTANCE_ID); // get process variables for startEvent HistoricActivityInstance activityInstance = historyService.createHistoricActivityInstanceQuery() .processInstanceId(processInstanceId) .activityType("startEvent") .singleResult(); List<HistoricDetail> details = historyService.createHistoricDetailQuery() .processInstanceId( processInstanceId ) .activityInstanceId( activityInstance.getId()) .variableUpdates() .list(); // fulfill variables Map<String, Object> variables = new HashMap<String,Object>(); for ( HistoricDetail detail : details) { variables.put( ((HistoricVariableUpdate) detail).getVariableName(), ((HistoricVariableUpdate) detail).getValue()); } variables.put( PROCESS_INSTANCE_ID, processInstanceId); log.debug("[{}] Starting new processKey[{}] properties[{}]", ClockUtil.getCurrentTime(), processToStartKey, variables); SimulationRunContext.getRuntimeService().startProcessInstanceByKey( processToStartKey, variables); }
variableUpdate.getValue();
protected void printVariable(PrintWriter out, HistoricVariableUpdate var) { LinkedHashMap<String, String> nvMap = new LinkedHashMap<String, String>(); // nvMap.put("Variable Type", var.getVariableTypeName()); if (this.isVerbose()) { nvMap.put("Variable ID", var.getId()); nvMap.put("Revision", "" + var.getRevision()); nvMap.put("Updated Time", Commands.UTIL.formatDate(var.getTime())); } nvMap.put("Variable Name", var.getVariableName()); Object value = var.getValue(); String simpleValue = Commands.UTIL.valueOf(value); if (simpleValue != null) { nvMap.put("Value", simpleValue); } else { nvMap.put("Value", ""); } Commands.UTIL.printNameValues(out, nvMap); if (simpleValue == null) { // print the value in a json serialization format. printVariable(out, var.getVariableName(), value); } out.println(); }
@Override public void execute(ActivityExecution execution) throws Exception { String processInstanceId = (String) execution.getVariable(PlaybackStartProcessEventHandler.PROCESS_INSTANCE_ID); HistoryService historyService = (HistoryService) Context.getProcessEngineConfiguration().getBeans().get(PLAYBACK_HISTORY_SERVICE); // get process variables for the current activityId HistoricActivityInstance activityInstance = historyService.createHistoricActivityInstanceQuery() .processInstanceId(processInstanceId) .activityId( execution.getCurrentActivityId() ) .singleResult(); List<HistoricDetail> details = historyService.createHistoricDetailQuery() .processInstanceId( processInstanceId ) .activityInstanceId( activityInstance.getId()) .variableUpdates() .list(); // fulfill variables Map<String, Object> variables = new HashMap<String,Object>(); for ( HistoricDetail detail : details) { variables.put( ((HistoricVariableUpdate) detail).getVariableName(), ((HistoricVariableUpdate) detail).getValue()); } execution.setVariables(variables); PvmTransition transition = execution.getActivity().getOutgoingTransitions().get(0); execution.take(transition); }
variableUpdate.getValue();
protected void printVariable(PrintWriter out, HistoricVariableUpdate var) { LinkedHashMap<String, String> nvMap = new LinkedHashMap<String, String>(); // nvMap.put("Variable Type", var.getVariableTypeName()); if (this.isVerbose()) { nvMap.put("Variable ID", var.getId()); nvMap.put("Revision", "" + var.getRevision()); nvMap.put("Updated Time", Commands.UTIL.formatDate(var.getTime())); } nvMap.put("Variable Name", var.getVariableName()); Object value = var.getValue(); String simpleValue = Commands.UTIL.valueOf(value); if (simpleValue != null) { nvMap.put("Value", simpleValue); } else { nvMap.put("Value", ""); } Commands.UTIL.printNameValues(out, nvMap); if (simpleValue == null) { // print the value in a json serialization format. printVariable(out, var.getVariableName(), value); } out.println(); }
@Override public long simulateTaskExecution(TaskEntity execTask, Map<String, Object> variables) { String playbackProcessInstanceId = (String) runtimeService.getVariable(execTask.getExecutionId(), PlaybackStartProcessEventHandler.PROCESS_INSTANCE_ID); // activity instance has to by only one HistoricActivityInstance activityInstance = playbackHistoryService.createHistoricActivityInstanceQuery() .processInstanceId(playbackProcessInstanceId) .activityId(execTask.getTaskDefinitionKey()) .singleResult(); if ( activityInstance == null ) //use backupExecutor return backUpExecutor.simulateTaskExecution(execTask, variables); List<HistoricDetail> playbackDetails = playbackHistoryService.createHistoricDetailQuery() .activityInstanceId(activityInstance.getId()) .processInstanceId(playbackProcessInstanceId) .variableUpdates() .list(); // fulfill variables for ( HistoricDetail detail : playbackDetails) { variables.put( ((HistoricVariableUpdate) detail).getVariableName(), ((HistoricVariableUpdate) detail).getValue()); } //@TODO change in version 5.12 return activityInstance.getDurationInMillis(); }
if(detail instanceof HistoricVariableUpdate) { HistoricVariableUpdate variable = (HistoricVariableUpdate) detail; if (variableNames.contains(variable.getVariableName()) == false) { variableNames.add(variable.getVariableName()); Item variableItem = variablesTable.addItem(variable.getVariableName()); variableItem.getItemProperty("name").setValue(variable.getVariableName()); String theValue = variableRendererManager.getStringRepresentation(variable.getValue()); variableItem.getItemProperty("value").setValue(theValue); variableItem.getItemProperty("type").setValue("variable");
for (HistoricDetail hd : hdq.list()) { HistoricVariableUpdate hvu = (HistoricVariableUpdate) hd; String varname = hvu.getVariableName(); Object value = hvu.getValue(); LOGGER.trace(" - found historic variable update: {} <- {}", varname, value); if (!variables.containsKey(varname)) {
if (update.getVariableName().equals("test_myVar")) Assert.assertEquals("test123", update.getValue()); found = true;