Bug 482857 - Discoverer Benchmark Report : wrong namespaces
diff --git a/org.eclipse.modisco.infra.discovery.benchmark.core/META-INF/MANIFEST.MF b/org.eclipse.modisco.infra.discovery.benchmark.core/META-INF/MANIFEST.MF
index 376df88..3a9443e 100644
--- a/org.eclipse.modisco.infra.discovery.benchmark.core/META-INF/MANIFEST.MF
+++ b/org.eclipse.modisco.infra.discovery.benchmark.core/META-INF/MANIFEST.MF
@@ -23,5 +23,6 @@
  org.eclipse.modisco.utils.chart.metamodel;bundle-version="0.10.0"
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
 Bundle-ActivationPolicy: lazy
-Export-Package: org.eclipse.modisco.infra.discovery.benchmark.core.internal.exported;x-friends:="org.eclipse.modisco.infra.discovery.benchmark.ui"
+Export-Package: org.eclipse.modisco.infra.discovery.benchmark.core.internal.exported;x-friends:="org.eclipse.modisco.infra.discovery.benchmark.ui",
+ org.eclipse.modisco.infra.discovery.benchmark.core.internal.reporting.internal;x-internal:=true
 
diff --git a/org.eclipse.modisco.infra.discovery.benchmark.core/src/org/eclipse/modisco/infra/discovery/benchmark/core/internal/impl/DiscovererBenchmarkDiscoverer.java b/org.eclipse.modisco.infra.discovery.benchmark.core/src/org/eclipse/modisco/infra/discovery/benchmark/core/internal/impl/DiscovererBenchmarkDiscoverer.java
index 407b7ee..b33630d 100644
--- a/org.eclipse.modisco.infra.discovery.benchmark.core/src/org/eclipse/modisco/infra/discovery/benchmark/core/internal/impl/DiscovererBenchmarkDiscoverer.java
+++ b/org.eclipse.modisco.infra.discovery.benchmark.core/src/org/eclipse/modisco/infra/discovery/benchmark/core/internal/impl/DiscovererBenchmarkDiscoverer.java
@@ -1,11 +1,15 @@
 /*******************************************************************************

- * Copyright (c) 2012 INRIA. All rights reserved. This program and the

+ * Copyright (c) 2012, 2015 INRIA, and Mia-Software.

+ * 

+ * All rights reserved. This program and the

  * accompanying materials are made available under the terms of the Eclipse

  * Public License v1.0 which accompanies this distribution, and is available at

  * http://www.eclipse.org/legal/epl-v10.html

  * 

- * Contributors: Guillaume Doux - INRIA - Initial API and implementation

- * 

+ * Contributors:

+ *    Guillaume Doux (INRIA) - Initial API and implementation

+ *    Grégoire Dupé (Mia-Software) - Bug 482672 - Benchmark command line interface

+ *    Grégoire Dupé (Mia-Software) - Bug 482857 - Discoverer Benchmark Report : wrong namespaces

  ******************************************************************************/

 package org.eclipse.modisco.infra.discovery.benchmark.core.internal.impl;

 

@@ -26,6 +30,8 @@
 import org.eclipse.core.resources.IFolder;

 import org.eclipse.core.resources.IProject;

 import org.eclipse.core.resources.IResource;

+import org.eclipse.core.resources.IWorkspace;

+import org.eclipse.core.resources.IWorkspaceRoot;

 import org.eclipse.core.resources.ResourcesPlugin;

 import org.eclipse.core.runtime.CoreException;

 import org.eclipse.core.runtime.IProgressMonitor;

@@ -34,6 +40,8 @@
 import org.eclipse.emf.common.util.TreeIterator;

 import org.eclipse.emf.common.util.URI;

 import org.eclipse.emf.ecore.EObject;

+import org.eclipse.emf.ecore.EPackage;

+import org.eclipse.emf.ecore.EPackage.Registry;

 import org.eclipse.emf.ecore.resource.Resource;

 import org.eclipse.emf.ecore.resource.ResourceSet;

 import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;

@@ -50,6 +58,7 @@
 import org.eclipse.modisco.infra.discovery.benchmark.core.internal.reporting.internal.BenchmarkChartGeneration;

 import org.eclipse.modisco.infra.discovery.benchmark.metamodel.internal.benchmark.Benchmark;

 import org.eclipse.modisco.infra.discovery.benchmark.metamodel.internal.benchmark.BenchmarkFactory;

+import org.eclipse.modisco.infra.discovery.benchmark.metamodel.internal.benchmark.BenchmarkPackage;

 import org.eclipse.modisco.infra.discovery.benchmark.metamodel.internal.benchmark.Discovery;

 import org.eclipse.modisco.infra.discovery.benchmark.metamodel.internal.benchmark.DiscoveryIteration;

 import org.eclipse.modisco.infra.discovery.benchmark.metamodel.internal.benchmark.EndEvent;

@@ -181,9 +190,9 @@
 				setLaunchParameter(disco, discoverer);

 				String serializationLocation;

 				if (discoverer.getTargetURI() != null) {

-					serializationLocation = discoverer.getTargetURI().trimFileExtension().toPlatformString(false);

+					serializationLocation = discoverer.getTargetURI().trimFileExtension().toString();

 				} else {

-					serializationLocation = this.getTargetURI().trimFileExtension().toPlatformString(false);

+					serializationLocation = this.getTargetURI().trimFileExtension().toString();

 				}

 				for (int i = 1; i <= this.iterations;  i++) {

 					URI resultSerializationLocation =  URI.createURI(serializationLocation);

@@ -194,28 +203,31 @@
 					if (IEventNotifier.class.isInstance(discoverer)) {

 						((IEventNotifier) discoverer).addListener(this.recorder);

 					}

-

 					progressMonitor.subTask("Project discovery: iteration " + String.valueOf(getIterations()));

 					this.recorder.start();

-

 					try {

 						if (discoverer.isApplicableTo(project)) {

 							IProgressMonitor subProgressMonitor = new SubProgressMonitor(progressMonitor, EIGHT);

 							discoverer.discoverElement(project, subProgressMonitor);

 						} else {

-							MoDiscoLogger.logWarning("Discoverer " + discovererId + " is not applicable on project " + project.getName(),

-									org.eclipse.modisco.infra.discovery.benchmark.core.internal.Activator.getDefault());

+							final String message = String.format(

+									"Discoverer '%s' is not applicable on project '%s'", //$NON-NLS-1$

+									discovererId,

+									project.getName()

+									);

+							MoDiscoLogger.logWarning(

+									message, Activator.getDefault());

 						}

-					} catch (DiscoveryException e) {

+					} catch (Exception e) {

 						failure = true;

 						discoveryErrors.append(e.getStackTrace().toString());

+						final String message = String.format(

+								"Benchmark of discoverer '%s' fails on project '%s'", //$NON-NLS-1$

+								discovererId,

+								project.getName()

+								);

 						MoDiscoLogger.logError(e,

-								"Benchmark of discoverer " + discovererId + " fails on project" + project.getName(), org.eclipse.modisco.infra.discovery.benchmark.core.internal.Activator.getDefault()); //$NON-NLS-1$

-					} catch (ClassCastException e) {

-						failure = true;

-						discoveryErrors.append(e.getStackTrace().toString());

-						MoDiscoLogger.logError(e,

-								"Benchmark of discoverer " + discovererId + " fails on project" + project.getName(), org.eclipse.modisco.infra.discovery.benchmark.core.internal.Activator.getDefault()); //$NON-NLS-1$

+								message, Activator.getDefault());

 					}

 					this.recorder.stop();

 					this.events.addAll(this.recorder.getEvents());

@@ -229,9 +241,7 @@
 						discoveryIteration.setDiscoveryErrors(discoveryErrors.toString());

 					}

 					disco.getIterations().add(discoveryIteration);

-

 				}

-

 				postDiscoveryDiscoInit(disco, discoverer);

 				if (this.isTargetSerializationChosen()) {

 					try {

@@ -285,7 +295,7 @@
 				size++;

 			}

 		} else {

-			MoDiscoLogger.logWarning("Unable to compute the number of element of an unexisting model", Activator.getDefault());

+			MoDiscoLogger.logWarning("Unable to compute the number of element of an unexisting model: "+targetModel.getURI().toString(), Activator.getDefault());

 		}

 		return size;

 	}

@@ -306,34 +316,48 @@
 			targetURI = this.getTargetURI();

 		}

 		if (targetURI == null) {

-			MoDiscoLogger.logWarning("The HTML_REPORT_LOCATION or the TARGET_URI parameter should not be null", Activator.getDefault());

+			MoDiscoLogger.logWarning(

+					"The HTML_REPORT_LOCATION or the TARGET_URI parameter should not be null", //$NON-NLS-1$

+					Activator.getDefault());

 			return;

 		}

-		IContainer location = ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(targetURI.path().replace("/resource", ""))).getParent();

-		String locationString = "";

-		if (targetURI == this.getTargetURI()) {

-			locationString = ResourcesPlugin.getWorkspace().getRoot().getLocation().toString() 

-					+ targetURI.trimSegments(1).toString().replace("platform:/resource", "") + "/HTMLReport";

+		final IWorkspace workspace = ResourcesPlugin.getWorkspace();

+		final IWorkspaceRoot wsRoot = workspace.getRoot();

+		java.io.File file = null;

+		IFile iFile = null;

+		String targetUriStr = targetURI.toString();

+		if (targetURI.isPlatformResource()) {

+			final String pathStr = 

+					targetUriStr.replaceAll("platform:/resource", ""); //$NON-NLS-1$//$NON-NLS-2$

+			iFile = wsRoot.getFile(new Path(pathStr));

+			iFile.getLocation().toFile();

+		} else if (targetURI.isFile()) {

+			file = new java.io.File(java.net.URI.create(targetUriStr));

 		} else {

-			locationString = ResourcesPlugin.getWorkspace().getRoot().getLocation().toString() 

-					+ targetURI.toString().replace("platform:/resource", "");

+			final String message = String.format(

+					"The following target URI '%s' is not managed. 'platform:/resource' or 'file:/' are expected.", //$NON-NLS-1$

+					targetURI.toString());

+			throw new IllegalArgumentException(message);

 		}

-		java.net.URI uri = java.net.URI.create(locationString);

-		java.io.File file = new java.io.File(uri.toString());

-

-		ArrayList<Object> arguments = new ArrayList<Object>();

+		final ArrayList<Object> arguments = new ArrayList<Object>();

 		//Generation of the HTML report

 		try {

 			HtmlReport report = new HtmlReport(benchmark, file, arguments);

 			report.doGenerate(null);

 		} catch (Exception e) {

-			MoDiscoLogger.logWarning(e, "Acceleo exception", org.eclipse.modisco.infra.discovery.benchmark.core.internal.Activator.getDefault());

+			MoDiscoLogger.logWarning(e,

+					"Acceleo exception", //$NON-NLS-1$

+					Activator.getDefault());

 		}

 		//Generation of the charts

-		BenchmarkChartGeneration chartGenerator = new BenchmarkChartGeneration(file, this.measureMemoryUse);

+		final BenchmarkChartGeneration chartGenerator = 

+				new BenchmarkChartGeneration(file, this.measureMemoryUse);

 		chartGenerator.generateAll(benchmark);

 

-		location.refreshLocal(IResource.DEPTH_INFINITE, progressMonitor);

+		if (iFile != null) {

+			final IContainer location = iFile.getParent();

+			location.refreshLocal(IResource.DEPTH_INFINITE, progressMonitor);

+		}

 	}

 

 	/**

diff --git a/org.eclipse.modisco.infra.discovery.benchmark.core/src/org/eclipse/modisco/infra/discovery/benchmark/core/internal/reporting/HtmlReport.java b/org.eclipse.modisco.infra.discovery.benchmark.core/src/org/eclipse/modisco/infra/discovery/benchmark/core/internal/reporting/HtmlReport.java
index 79c9b89..6b4507e 100644
--- a/org.eclipse.modisco.infra.discovery.benchmark.core/src/org/eclipse/modisco/infra/discovery/benchmark/core/internal/reporting/HtmlReport.java
+++ b/org.eclipse.modisco.infra.discovery.benchmark.core/src/org/eclipse/modisco/infra/discovery/benchmark/core/internal/reporting/HtmlReport.java
@@ -8,6 +8,7 @@
  * Contributors:
  *     Obeo - initial API and implementation
  *     Guillaume Doux - INRIA
+ *     Grégoire Dupé (Mia-Software) - Bug 482857 - Discoverer Benchmark Report : wrong namespaces
  *******************************************************************************/
 package org.eclipse.modisco.infra.discovery.benchmark.core.internal.reporting;
 
@@ -36,7 +37,7 @@
      *
      * @generated
      */
-    public static final String MODULE_FILE_NAME = "/org/eclipse/modisco/infra/discovery/benchmark/reporting/HtmlReport";
+    public static final String MODULE_FILE_NAME = "/org/eclipse/modisco/infra/discovery/benchmark/core/internal/reporting/HtmlReport";
     
     /**
      * The name of the templates that are to be generated.
@@ -130,6 +131,13 @@
                 List<String> arguments = new ArrayList<String>();
                 
                 /*
+                 * If you want to change the content of this method, do NOT forget to change the "@generated"
+                 * tag in the Javadoc of this method to "@generated NOT". Without this new tag, any compilation
+                 * of the Acceleo module with the main template that has caused the creation of this class will
+                 * revert your modifications.
+                 */
+
+                /*
                  * Add in this list all the arguments used by the starting point of the generation
                  * If your main template is called on an element of your model and a String, you can
                  * add in "arguments" this "String" attribute.
@@ -139,14 +147,12 @@
                 
                 /*
                  * Add the properties from the launch arguments.
-                 * If you want to programmatically add new arguments, add them in "propertiesFiles"
+                 * If you want to programmatically add new properties, add them in "propertiesFiles"
                  * You can add the absolute path of a properties files, or even a project relative path.
                  * If you want to add another "protocol" for your properties files, please override 
                  * "getPropertiesLoaderService(AcceleoService)" in order to return a new property loader.
-                 * The basic properties loader will look for properties in the current project if the path
-                 * of the properties file is like this "packagea.packageb.packagec.default" for a properties
-                 * file named default.properties, or if the path is an absolute path. With a new property
-                 * loader you could for example, look for properties files in a bundle.
+                 * The behavior of the properties loader service is explained in the Acceleo documentation
+                 * (Help -> Help Contents).
                  */
                  
                 for (int i = 2; i < args.length; i++) {
@@ -183,6 +189,11 @@
 
         //org.eclipse.emf.ecore.util.EcoreUtil.resolveAll(model);
 
+        /*
+         * If you want to check for potential errors in your models before the launch of the generation, you
+         * use the code below.
+         */
+
         //if (model != null && model.eResource() != null) {
         //    List<org.eclipse.emf.ecore.resource.Resource.Diagnostic> errors = model.eResource().getErrors();
         //    for (org.eclipse.emf.ecore.resource.Resource.Diagnostic diagnostic : errors) {
@@ -261,13 +272,38 @@
     @Override
     public List<String> getProperties() {
         /*
+         * If you want to change the content of this method, do NOT forget to change the "@generated"
+         * tag in the Javadoc of this method to "@generated NOT". Without this new tag, any compilation
+         * of the Acceleo module with the main template that has caused the creation of this class will
+         * revert your modifications.
+         */
+
+        /*
          * TODO if your generation module requires access to properties files, add their qualified path to the list here.
-         * Properties files are expected to be in source folders, and the path here to be the qualified path as if referring
-         * to a Java class. For example, if you have a file named "messages.properties" in package "org.eclipse.acceleo.sample",
-         * the path that needs be added to this list is "org.eclipse.acceleo.sample.messages". If you want to change the content
-         * of this method, do NOT forget to change the "@generated" tag in the Javadoc of this method to "@generated NOT".
-         * Without this new tag, any compilation of the Acceleo module with the main template that has caused the creation of 
-         * this class will revert your modifications.
+         * 
+         * Properties files can be located in an Eclipse plug-in or in the file system (all Acceleo projects are Eclipse
+         * plug-in). In order to use properties files located in an Eclipse plugin, you need to add the path of the properties
+         * files to the "propertiesFiles" list:
+         * 
+         * final String prefix = "platform:/plugin/";
+         * final String pluginName = "org.eclipse.acceleo.module.sample";
+         * final String packagePath = "/org/eclipse/acceleo/module/sample/properties/";
+         * final String fileName = "default.properties";
+         * propertiesFiles.add(prefix + pluginName + packagePath + fileName);
+         * 
+         * With this mechanism, you can load properties files from your plugin or from another plugin.
+         * 
+         * You may want to load properties files from the file system, for that you need to add the absolute path of the file:
+         * 
+         * propertiesFiles.add("C:\Users\MyName\MyFile.properties");
+         * 
+         * If you want to let your users add properties files located in the same folder as the model:
+         *
+         * if (EMFPlugin.IS_ECLIPSE_RUNNING && model != null && model.eResource() != null) { 
+         *     propertiesFiles.addAll(AcceleoEngineUtils.getPropertiesFilesNearModel(model.eResource()));
+         * }
+         * 
+         * To learn more about Properties Files, have a look at the Acceleo documentation (Help -> Help Contents).
          */
         return propertiesFiles;
     }
@@ -305,35 +341,43 @@
     @Override
     public void registerPackages(ResourceSet resourceSet) {
         super.registerPackages(resourceSet);
-        //gdupe> The method isInWorkspace() does not exists in Helios. This avoid
-        // to be install MoDisco on an Helios. The code generator is not used in a
-        // workspace context : we do not need explicit load of the meta-models
-        // That why I've commented the following lines.
-        /*
         if (!isInWorkspace(org.eclipse.modisco.infra.discovery.catalog.CatalogPackage.class)) {
             resourceSet.getPackageRegistry().put(org.eclipse.modisco.infra.discovery.catalog.CatalogPackage.eINSTANCE.getNsURI(), org.eclipse.modisco.infra.discovery.catalog.CatalogPackage.eINSTANCE);
         }
         if (!isInWorkspace(org.eclipse.modisco.infra.discovery.launch.LaunchPackage.class)) {
             resourceSet.getPackageRegistry().put(org.eclipse.modisco.infra.discovery.launch.LaunchPackage.eINSTANCE.getNsURI(), org.eclipse.modisco.infra.discovery.launch.LaunchPackage.eINSTANCE);
         }
-        */
+        
         /*
-         * TODO If you need additional package registrations, you can register them here. The following line
-         * (in comment) is an example of the package registration for UML. If you want to change the content
-         * of this method, do NOT forget to change the "@generated" tag in the Javadoc of this method to
-         * "@generated NOT". Without this new tag, any compilation of the Acceleo module with the main template
-         * that has caused the creation of this class will revert your modifications. You can use the method
-         * "isInWorkspace(Class c)" to check if the package that you are about to register is in the workspace.
-         * To register a package properly, please follow the following conventions:
+         * If you want to change the content of this method, do NOT forget to change the "@generated"
+         * tag in the Javadoc of this method to "@generated NOT". Without this new tag, any compilation
+         * of the Acceleo module with the main template that has caused the creation of this class will
+         * revert your modifications.
+         */
+        
+        /*
+         * If you need additional package registrations, you can register them here. The following line
+         * (in comment) is an example of the package registration for UML.
          * 
+         * You can use the method  "isInWorkspace(Class c)" to check if the package that you are about to
+         * register is in the workspace.
+         * 
+         * To register a package properly, please follow the following conventions:
+         *
+         * If the package is located in another plug-in, already installed in Eclipse. The following content should
+         * have been generated at the beginning of this method. Do not register the package using this mechanism if
+         * the metamodel is located in the workspace.
+         *  
          * if (!isInWorkspace(UMLPackage.class)) {
          *     // The normal package registration if your metamodel is in a plugin.
          *     resourceSet.getPackageRegistry().put(UMLPackage.eNS_URI, UMLPackage.eINSTANCE);
-         * } else {
-         *     // The package registration that will be used if the metamodel is not deployed in a plugin.
-         *     // This should be used if your metamodel is in your workspace and if you are using binary resource serialization.
-         *     resourceSet.getPackageRegistry().put("/myproject/myfolder/mysubfolder/MyUMLMetamodel.ecore", UMLPackage.eINSTANCE);
          * }
+         * 
+         * If the package is located in another project in your workspace, the plugin containing the package has not
+         * been register by EMF and Acceleo should register it automatically. If you want to use the generator in
+         * stand alone, the regular registration (seen a couple lines before) is needed.
+         * 
+         * To learn more about Package Registration, have a look at the Acceleo documentation (Help -> Help Contents).
          */
     }
 
@@ -348,11 +392,19 @@
     public void registerResourceFactories(ResourceSet resourceSet) {
         super.registerResourceFactories(resourceSet);
         /*
+         * If you want to change the content of this method, do NOT forget to change the "@generated"
+         * tag in the Javadoc of this method to "@generated NOT". Without this new tag, any compilation
+         * of the Acceleo module with the main template that has caused the creation of this class will
+         * revert your modifications.
+         */
+        
+        /*
          * TODO If you need additional resource factories registrations, you can register them here. the following line
-         * (in comment) is an example of the resource factory registration for UML. If you want to change the content
-         * of this method, do NOT forget to change the "@generated" tag in the Javadoc of this method to "@generated NOT".
-         * Without this new tag, any compilation of the Acceleo module with the main template that has caused the creation
-         * of this class will revert your modifications. 
+         * (in comment) is an example of the resource factory registration for UML.
+         *
+         * If you want to use the generator in stand alone, the resource factory registration will be required.
+         *  
+         * To learn more about the registration of Resource Factories, have a look at the Acceleo documentation (Help -> Help Contents). 
          */ 
         
         // resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put(UMLResource.FILE_EXTENSION, UMLResource.Factory.INSTANCE);
diff --git a/org.eclipse.modisco.infra.discovery.benchmark.core/src/org/eclipse/modisco/infra/discovery/benchmark/core/internal/reporting/HtmlReport.mtl b/org.eclipse.modisco.infra.discovery.benchmark.core/src/org/eclipse/modisco/infra/discovery/benchmark/core/internal/reporting/HtmlReport.mtl
index 1dd5b60..a694c4c 100644
--- a/org.eclipse.modisco.infra.discovery.benchmark.core/src/org/eclipse/modisco/infra/discovery/benchmark/core/internal/reporting/HtmlReport.mtl
+++ b/org.eclipse.modisco.infra.discovery.benchmark.core/src/org/eclipse/modisco/infra/discovery/benchmark/core/internal/reporting/HtmlReport.mtl
@@ -5,15 +5,17 @@
  * Public License v1.0 which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
  * 
- * Contributors: Guillaume Doux - INRIA - Initial API and implementation
- * 
+ * Contributors:
+ *    Guillaume Doux (INRIA) - Initial API and implementation
+ *    Grégoire Dupé (Mia-Software) - Bug 482672 - Benchmark command line interface
+ *    Grégoire Dupé (Mia-Software) - Bug 482857 - Discoverer Benchmark Report : wrong namespaces
  ******************************************************************************/ /]
-[module HtmlReport('http://www.eclipse.org/modisco/infra/discovery/0.1.incubation/benchmark','http://www.eclipse.org/MoDisco/Discovery/0.1.incubation/discovery/catalog','http://www.eclipse.org/MoDisco/Discovery/0.1.incubation/discovery/launch')/]
+[module HtmlReport('http://www.eclipse.org/modisco/infra/discovery/benchmark/0.11.incubation/internal/benchmark','http://www.eclipse.org/MoDisco/Discovery/0.1.incubation/discovery/catalog','http://www.eclipse.org/MoDisco/Discovery/0.1.incubation/discovery/launch')/]
 
-[query public maxExecutionTime (iterations : Set(DiscoveryIteration)) : Real = invoke('org.eclipse.modisco.infra.discovery.benchmark.reporting.internal.ReportingUtilities', 'maxExecutionTime(java.util.Collection)', Sequence{iterations})/]
-[query public maxSaveTime (iterations : Set(DiscoveryIteration)) : Real = invoke('org.eclipse.modisco.infra.discovery.benchmark.reporting.internal.ReportingUtilities', 'maxSaveTime(java.util.Collection)', Sequence{iterations})/]
-[query public sizeWithUnit (value : Real) : String = invoke('org.eclipse.modisco.infra.discovery.benchmark.reporting.internal.ReportingUtilities', 'sizeWithUnit(java.lang.Double)', Sequence{value})/]
-[query public timeWithUnit (value : Real) : String = invoke('org.eclipse.modisco.infra.discovery.benchmark.reporting.internal.ReportingUtilities', 'timeWithUnit(java.lang.Double)', Sequence{value})/]
+[query public maxExecutionTime (iterations : Set(DiscoveryIteration)) : Real = invoke('org.eclipse.modisco.infra.discovery.benchmark.core.internal.reporting.internal.ReportingUtilities', 'maxExecutionTime(java.util.Collection)', Sequence{iterations})/]
+[query public maxSaveTime (iterations : Set(DiscoveryIteration)) : Real = invoke('org.eclipse.modisco.infra.discovery.benchmark.core.internal.reporting.internal.ReportingUtilities', 'maxSaveTime(java.util.Collection)', Sequence{iterations})/]
+[query public sizeWithUnit (value : Real) : String = invoke('org.eclipse.modisco.infra.discovery.benchmark.core.internal.reporting.internal.ReportingUtilities', 'sizeWithUnit(java.lang.Double)', Sequence{value})/]
+[query public timeWithUnit (value : Real) : String = invoke('org.eclipse.modisco.infra.discovery.benchmark.core.internal.reporting.internal.ReportingUtilities', 'timeWithUnit(java.lang.Double)', Sequence{value})/]
 
 [template public HtmlReport(b : Benchmark)]