public Simulator(SimplifiedBPMN model, int numberOfTokens, int timeBetweenTokens) { this.model = model; this.numberOfTokens = numberOfTokens; this.timeBetweenTokens = timeBetweenTokens; timeToNextToken = timeBetweenTokens; for (ResourceType resourceType : model.getResourceTypes()) { for (ResourceTypeVariant rtv : resourceType.getVariants()) { tokensWaiting.put(rtv, new ArrayList<Simulator.Token>()); for (ResourceInstance resource : rtv.getInstances()) { resourceDatas.put(resource, new ResourceInstanceData(resource)); } } } for (ParallelGateway pGateways : model.getParallelGateways()) { arrivedTokens.put(pGateways, new HashMap<Token, Integer>()); } }
private void startProcessingTokens() { for (ResourceType resourceType : model.getResourceTypes()) { for (ResourceTypeVariant rtv : resourceType.getVariants()) { List<Token> t = tokensWaiting.get(rtv); if (!t.isEmpty()) { for (ResourceInstance resource : rtv.getInstances()) { ResourceInstanceData resourceData = resourceDatas.get(resource); if (resourceData.tokenProcessing == null && !t.isEmpty()) { Token token = t.remove(0); resourceData.tokenProcessing = token; resourceData.timeRemaining = (int) Math.round(token.task.getExecutionTime() * rtv.getEfficiency()); logger.debug(token.task.getName() + " started processing a token."); } } } } } }