@PluginVariant( requiredParameterLabels = {0, 1, 2, 3}, variantLabel = "PerformanceDetailsSettingsWithMarking") // @Plugin(name = "PerformanceDetailsSettingsWithMarking", returnLabels = { "Performance Total" }, // returnTypes = { TotalPerformanceResult.class }, parameterLabels = {}, userAccessible = true) // @UITopiaVariant(affiliation = "Department of Computer Science University of Pisa", author = // "R.Guanciale,G.Spagnolo et al.", email = "*****@*****.**", pack = // "PetriNetReplayAnalysis") public TotalPerformanceResult getPerformanceDetails( PluginContext context, XLog log, Petrinet net, ReplayFitnessSetting setting, Marking marking, XEventClassifier classif) { TotalPerformanceResult performance = new TotalPerformanceResult(); XEventClasses classes = getEventClasses(log, classif); if (map == null) { // Map<Transition, XEventClass> map = getMapping(classes, net); } context .getConnectionManager() .addConnection(new LogPetrinetConnectionImpl(log, classes, net, map)); PetrinetSemantics semantics = PetrinetSemanticsFactory.regularPetrinetSemantics(Petrinet.class); Replayer<ReplayFitnessCost> replayer = new Replayer<ReplayFitnessCost>( context, net, semantics, map, ReplayFitnessCost.addOperator); int replayedTraces = 0; context.getProgress().setMinimum(0); context.getProgress().setMaximum(log.size()); for (XTrace trace : log) { List<XEventClass> list = getList(trace, classes); try { System.out.println("Replay :" + replayedTraces); List<Transition> sequence; sequence = replayer.replayTrace(marking, list, setting); if (sequence != null) { sequence = sortHiddenTransection(net, sequence, map); String tracename = getTraceName(trace); updatePerformance(net, marking, sequence, semantics, trace, performance, map, tracename); replayedTraces++; context.getProgress().inc(); System.out.println("Replayed"); } } catch (Exception ex) { System.out.println("Failed"); context.log("Replay of trace " + trace + " failed: " + ex.getMessage()); } } context.log( "(based on a successful replay of " + replayedTraces + " out of " + log.size() + " traces)"); ReplayAnalysisConnection connection = new ReplayAnalysisConnection(performance, log, net); context.getConnectionManager().addConnection(connection); return performance; }