Index: tmp/org.txm.core/src/java/org/txm/core/results/TXMResult.java
===================================================================
--- tmp/org.txm.core/src/java/org/txm/core/results/TXMResult.java	(revision 2409)
+++ tmp/org.txm.core/src/java/org/txm/core/results/TXMResult.java	(revision 2410)
@@ -52,6 +52,7 @@
  * - isDirty(): return true if the result needs to be recomputed (if a parameter changed)
  * 
  * Groovy call sample :
+ * 
  * <pre>
  * {@code
  * MyTXMResult result = new MyTXMResult(parent);
@@ -64,152 +65,160 @@
  * </pre>
  * 
  * @author mdecorde
+ * 
  * @author sjacquot
  */
 public abstract class TXMResult implements Cloneable, IProgressMonitor, Comparable<TXMResult> {
-
+	
 	public static final DateFormat ID_TIME_FORMAT = new SimpleDateFormat("yyyyMMdd_HHmmssSSS");
+	
 	public static final DateFormat PRETTY_TIME_FORMAT = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
+	
 	public static final DateFormat PRETTY_LOCALIZED_TIME_FORMAT = new SimpleDateFormat("dd MMMM yyyy, HH'h'mm", Locale.getDefault());
+	
 	public static final String UUID_PREFIX = "txm_res_"; //$NON-NLS-1$
+	
 	public static final Pattern FILE_NAME_PATTERN = Pattern.compile("[^a-zA-Z0-9\\.-_]+"); //$NON-NLS-1$
+	
 	public static final String UNDERSCORE = "_"; //$NON-NLS-1$
-
+	
 	/**
 	 * Results counter to create unique ids.
 	 */
 	private static int next = 0;
-
+	
 	/**
 	 * Editor can use this to test if the result has been computed once.
 	 */
 	protected boolean hasBeenComputedOnce = false;
-
+	
 	/**
 	 * The weight, essentially used for sorting purpose.
 	 */
 	protected int weight;
-
+	
 	/**
 	 * the command this command to true when the result needs to be recomputed.
 	 * like after updating parameters
 	 */
 	protected boolean dirty = true;
-
+	
 	/**
 	 * if a method changed the internal data without **recomputing** the result, the result must be marked "altered"
 	 */
 	protected boolean altered = false;
-
+	
 	/**
 	 * The result parent. Should not be null except for roots TXMResult.
 	 */
 	protected TXMResult parent;
-
+	
 	/**
 	 * Children results.
 	 */
 	protected List<TXMResult> children;
-
+	
 	/**
 	 * Command preferences node path.
 	 */
 	protected String commandPreferencesNodePath;
-	//protected IEclipsePreferences preferencesNode; // TODO: directly use a preferences node rather than a node path?
-
+	// protected IEclipsePreferences preferencesNode; // TODO: directly use a preferences node rather than a node path?
+	
 	/**
 	 * Parameters node path. Concatenation of the Project scope path + the result uuid
 	 */
 	protected String parametersNodePath;
-
+	
 	/**
 	 * If set, allows the command to notify its progress.
 	 */
 	protected IProgressMonitor monitor;
-
+	
 	/**
 	 * To manage the computing cancel with TreadDeath.
 	 */
 	private Semaphore progressSemaphore = new Semaphore(1);
-
+	
 	/**
 	 * To keep track of the parameters used for the last computing and to determine if the result is dirty.
-	 * Also permits to optimize computing by testing if a specific parameter value has changed since last computing and skip or not some computing steps. 
+	 * Also permits to optimize computing by testing if a specific parameter value has changed since last computing and skip or not some computing steps.
 	 */
-	protected ArrayList<HashMap<String, Object>> parametersHistory = new ArrayList<HashMap<String, Object>>();
-
+	protected ArrayList<HashMap<String, Object>> parametersHistory = new ArrayList<>();
+	
 	/**
 	 * Internal persistable state.
 	 */
 	protected boolean internalPersistable;
-
+	
 	/**
 	 * User persistable state.
 	 */
 	protected boolean userPersistable;
-
+	
 	/**
 	 * The visibility state.
 	 */
-	@Parameter(key=TXMPreferences.VISIBLE, type=Parameter.INTERNAL)
+	@Parameter(key = TXMPreferences.VISIBLE, type = Parameter.INTERNAL)
 	private Boolean visible;
-
+	
 	/**
 	 * The user name (to rename a result).
 	 */
-	@Parameter(key=TXMPreferences.USER_NAME, type=Parameter.INTERNAL)
+	@Parameter(key = TXMPreferences.USER_NAME, type = Parameter.INTERNAL)
 	protected String userName;
-
+	
 	/**
 	 * To store the simple name for unserialization and lazy loading.
 	 * This string can be used, for example, to display some information in UI even if the result has not yet been recomputed.
 	 */
 	// TODO: we should do the same with getDetails() method
-	@Parameter(key=TXMPreferences.LAZY_NAME, type=Parameter.INTERNAL)
+	@Parameter(key = TXMPreferences.LAZY_NAME, type = Parameter.INTERNAL)
 	private String lazyName;
-
+	
 	/**
 	 * Last computing date.
 	 */
-	@Parameter(key=TXMPreferences.LAST_COMPUTING_DATE, type=Parameter.INTERNAL)
+	@Parameter(key = TXMPreferences.LAST_COMPUTING_DATE, type = Parameter.INTERNAL)
 	private Date lastComputingDate;
-
+	
 	/**
 	 * Creation date.
 	 */
-	@Parameter(key=TXMPreferences.CREATION_DATE, type=Parameter.INTERNAL)
+	@Parameter(key = TXMPreferences.CREATION_DATE, type = Parameter.INTERNAL)
 	private Date creationDate;
-
+	
 	/**
 	 * If locked, the result is not updated when computed.
 	 */
-	@Parameter(key=TXMPreferences.LOCK, type=Parameter.INTERNAL)
+	@Parameter(key = TXMPreferences.LOCK, type = Parameter.INTERNAL)
 	protected Boolean locked = false;
-
+	
 	/**
 	 * Current computing state.
 	 * True if the result is in the process of computing (is in compute(,) method)
 	 * 
 	 */
 	protected boolean computing = false;
-
+	
 	/**
 	 * Creates a new TXMResult, child of the specified parent.
+	 * 
 	 * @param parent
 	 */
 	public TXMResult(TXMResult parent) {
 		this(null, parent);
 	}
-
+	
 	/**
 	 * Creates a new TXMResult with no parent.
-	 * If a local node exist with the parent_uuid, the parent will be retrieved and this result will be added to it. 
+	 * If a local node exist with the parent_uuid, the parent will be retrieved and this result will be added to it.
+	 * 
 	 * @param uuid
 	 */
 	public TXMResult(String parametersNodePath) {
 		this(parametersNodePath, null);
 	}
-
+	
 	/**
 	 * Creates a new TXMResult, child of the specified parent.
 	 * If the parameters node path is null, a new path is generated from the project root path ending by a new generated UUID.
@@ -224,51 +233,51 @@
 		if (parent != null) {
 			parent.addChild(this);
 		}
-
+		
 		// no parametersNodePath -> new result
-
-		if (parametersNodePath == null)	{ // new object
+		
+		if (parametersNodePath == null) { // new object
 			if (this.getProject() != null) {
 				parametersNodePath = this.getProject().getParametersNodeRootPath();
 			}
 			else {
-				parametersNodePath = ""; //$NON-NLS-1$;
+				parametersNodePath = ""; //$NON-NLS-1$ ;
 			}
-
-			this.parametersNodePath = parametersNodePath + createUUID() + "_" + this.getClass().getSimpleName(); //$NON-NLS-1$;
+			
+			this.parametersNodePath = parametersNodePath + createUUID() + "_" + this.getClass().getSimpleName(); //$NON-NLS-1$ ;
 		}
-		else	{
+		else {
 			this.parametersNodePath = parametersNodePath;
 		}
-
+		
 		Log.finest("TXMResult.TXMResult(): parameters node path: " + this.parametersNodePath + "."); //$NON-NLS-1$ //$NON-NLS-2$
-
+		
 		this.weight = 0;
-
-		this.children = new ArrayList<TXMResult>(1);
-		//this.children = Collections.synchronizedList(new ArrayList<TXMResult>()); // FIXME: SJ: can fix the conccurent excpetion if needed
-
-		this.commandPreferencesNodePath = FrameworkUtil.getBundle(getClass()).getSymbolicName(); //$NON-NLS-1$
+		
+		this.children = new ArrayList<>(1);
+		// this.children = Collections.synchronizedList(new ArrayList<TXMResult>()); // FIXME: SJ: can fix the conccurent excpetion if needed
+		
+		this.commandPreferencesNodePath = FrameworkUtil.getBundle(getClass()).getSymbolicName();
 		Log.finest("TXMResult.TXMResult(): command preferences node path: " + this.commandPreferencesNodePath + "."); //$NON-NLS-1$ //$NON-NLS-2$
-
+		
 		this.visible = true;
 		this.dirty = true;
 		this.internalPersistable = false;
 		this.userPersistable = TBXPreferences.getInstance().getBoolean(TBXPreferences.AUTO_PERSISTENCE_ENABLED);
-
+		
 		// retrieving parent from UUID
 		String parentNodePath = this.getStringParameterValue(TXMPreferences.PARENT_PARAMETERS_NODE_PATH);
-
-		//System.out.println("TXMResult.TXMResult(): parent UUID = " + parentUUID);
-
+		
+		// System.out.println("TXMResult.TXMResult(): parent UUID = " + parentUUID);
+		
 		if (!("ROOT".equals(this.parametersNodePath)) && // search for parent only if UUID != "ROOT"
-				parent == null && 
-				this.parametersNodePath != null && 
+				parent == null &&
+				this.parametersNodePath != null &&
 				!parentNodePath.isEmpty()) {
-
+			
 			Log.finest("Searching parent with UUID " + parentNodePath + "..."); //$NON-NLS-1$ //$NON-NLS-2$
-
-			//TODO this is quite CPU expensive because 'retrievedParent' is researched in all projects
+			
+			// TODO this is quite CPU expensive because 'retrievedParent' is researched in all projects
 			TXMResult retrievedParent = TXMResult.getResult(parentNodePath);
 			if (retrievedParent != null) {
 				Log.finest("Parent retrieved from UUID: " + retrievedParent + "."); //$NON-NLS-1$ //$NON-NLS-2$
@@ -279,80 +288,83 @@
 				try {
 					TBXPreferences.delete(this);
 				}
-				catch(Exception e) {
-
+				catch (Exception e) {
+					
 				}
 				return;
 			}
 		}
-
+		
 		// loads parameters from local result node, current command preferences or default command preferences
 		try {
 			this.autoLoadParametersFromAnnotations(); // auto fill from Parameter annotations
 			this.loadParameters(); // subclasses manual settings
-
+			
 			try {
 				if (creationDate == null) {
 					creationDate = Calendar.getInstance().getTime();
 					this.saveParameter(TBXPreferences.CREATION_DATE, ID_TIME_FORMAT.format(creationDate));
 				}
-			} catch (Exception e) {
+			}
+			catch (Exception e) {
 				// TODO Auto-generated catch block
 				e.printStackTrace();
 			}
-		} catch (Exception e) {
+		}
+		catch (Exception e) {
 			Log.severe("Fail to load " + parametersNodePath + "result: " + e); //$NON-NLS-1$ //$NON-NLS-2$
 			Log.printStackTrace(e);
 		}
-
+		
 		// Log
-		if (this.parent == null)	{
+		if (this.parent == null) {
 			Log.finest("Warning: the TXMResult of " + this.getClass() + " is attached to no parent. (uuid = " + this.parametersNodePath + ")"); //$NON-NLS-1$ //$NON-NLS-2$
 		}
 	}
-
+	
 	/**
 	 * Sets the user name.
+	 * 
 	 * @param name
 	 */
 	public void setUserName(String name) {
 		this.userName = name;
 	}
-
+	
 	/**
 	 * @return true is the internal data has been modified
 	 */
 	public boolean isAltered() {
 		return altered;
 	}
-
+	
 	/**
 	 * Mark the result as altered -> modifications are lost after a re-compute
 	 */
 	public void setAltered() {
 		this.altered = true;
 	}
-
+	
 	/**
 	 * Do something when project is closed
 	 */
 	public void onProjectClose() {
-
+		
 	}
-
+	
 	/**
 	 * Do something when project is opened
 	 */
 	public void onProjectOpen() {
-
+		
 	}
-
+	
 	/**
 	 * Locks/unlocks the result.
 	 */
 	public void setLocked(boolean state) {
 		this.locked = state;
-
+		
 		if (this.locked && this.parent != null) {
 			this.parent.setLocked(true);
 		}
@@ -362,24 +374,25 @@
 			}
 		}
 	}
-
+	
 	/**
 	 * @return true if the result is locked
 	 */
 	public boolean isLocked() {
 		return this.locked;
 	}
-
+	
 	/**
 	 * Creates an UUID dedicated to persistence of this result.
+	 * 
 	 * @return
 	 */
 	public static String createUUID() {
 		// FIXME: see if it's useful to put the class name or not, should be better to save it in the .prefs
-		//this.uniqueID = this.getClass().getName() + '@' + ID_TIME_FORMAT.format(new Date(System.currentTimeMillis())) + "_" + UUID.randomUUID();
+		// this.uniqueID = this.getClass().getName() + '@' + ID_TIME_FORMAT.format(new Date(System.currentTimeMillis())) + "_" + UUID.randomUUID();
 		return UUID_PREFIX + ID_TIME_FORMAT.format(new Date(System.currentTimeMillis())) + "_" + nextInt();
 	}
-
+	
 	/**
 	 * 
 	 * @return the next integer in the current session of TXM
@@ -387,16 +400,17 @@
 	private static synchronized String nextInt() {
 		return String.format("%04d", next++); //$NON-NLS-1$
 	}
-
+	
 	/**
 	 * Checks if the result at least one child.
+	 * 
 	 * @return
 	 */
 	public boolean hasChildren() {
 		return this.children.size() > 0;
 	}
-
-
+	
+	
 	/**
 	 * Gets the preferences node path of the result command.
 	 * 
@@ -405,18 +419,19 @@
 	public String getCommandPreferencesNodePath() {
 		return this.commandPreferencesNodePath;
 	}
-
-
+	
+	
 	public String[] getCommandPreferencesKeys() throws BackingStoreException {
 		return TXMPreferences.getCommandScopeKeys(this.commandPreferencesNodePath);
 	}
-
+	
 	public String[] getDefaultPreferencesKeys() throws BackingStoreException {
 		return TXMPreferences.getDefaultScopeKeys(this.commandPreferencesNodePath);
 	}
-
+	
 	/**
 	 * Gets a current parameter specified by its annotation "key".
+	 * 
 	 * @param key
 	 * @param parameterType
 	 * @return
@@ -424,9 +439,10 @@
 	public Object getParameter(String key) {
 		return getParameter(key, false);
 	}
-
+	
 	/**
 	 * Gets a current parameter specified by its annotation "key".
+	 * 
 	 * @param key
 	 * @param propagateToParent if true ask the parents
 	 * @param parameterType
@@ -434,31 +450,34 @@
 	 */
 	public Object getParameter(String key, boolean propagateToParent) {
 		try {
-			Field field = this.getField(key); 
-			if (field != null)	{
+			Field field = this.getField(key);
+			if (field != null) {
 				field.setAccessible(true);
-				return field.get(this);	
-			} else if (propagateToParent && this.parent != null) {
+				return field.get(this);
+			}
+			else if (propagateToParent && this.parent != null) {
 				return this.parent.getParameter(key, propagateToParent);
 			}
-		} catch (Exception e) {
+		}
+		catch (Exception e) {
 			e.printStackTrace();
 		}
 		return null;
 	}
-
-
+	
+	
 	/**
 	 * Gets a member field according to its key.
+	 * 
 	 * @param key
 	 * @return the field if exists otherwise null
 	 */
-	public Field getField(String key)	{
-
-		Field field = null; 
-
+	public Field getField(String key) {
+		
+		Field field = null;
+		
 		List<Field> fields = this.getAllFields();
-
+		
 		for (Field f : fields) {
 			Parameter parameter = f.getAnnotation(Parameter.class);
 			if (parameter != null && parameter.key().equals(key)) {
@@ -466,102 +485,106 @@
 				break;
 			}
 		}
-
+		
 		return field;
 	}
-
+	
 	/**
 	 * Returns all the member fields of the class instance (from all inherited classes).
+	 * 
 	 * @return the list of declared fields
 	 */
-	public List<Field> getAllFields()	{
-
-		List<Field> fields = new ArrayList<Field>();
+	public List<Field> getAllFields() {
+		
+		List<Field> fields = new ArrayList<>();
 		Class<?> clazz = this.getClass();
-
+		
 		while (clazz != Object.class) {
 			fields.addAll(Arrays.asList(clazz.getDeclaredFields()));
 			clazz = clazz.getSuperclass();
 		}
-
+		
 		return fields;
 	}
-
+	
 	/**
 	 * Stores the parameters of the specified type used for last computing.
+	 * 
 	 * @param parameterType
 	 * @param appendToLastParameters
 	 * @throws Exception
 	 */
 	protected void updateLastParameters(int parameterType) throws Exception {
-
+		
 		HashMap<String, Object> lastParameters;
-
+		
 		lastParameters = new HashMap<>();
-
+		
 		List<Field> fields = this.getAllFields();
-
+		
 		for (Field f : fields) {
 			Parameter parameter = f.getAnnotation(Parameter.class);
 			if (parameter == null || parameter.type() != parameterType) {
 				continue;
 			}
-
+			
 			String name;
-			if(!parameter.key().isEmpty())	{
+			if (!parameter.key().isEmpty()) {
 				name = parameter.key();
 			}
-			else	{
+			else {
 				name = f.getName();
 			}
-
+			
 			f.setAccessible(true);
 			lastParameters.put(name, f.get(this));
 		}
-
+		
 		this.parametersHistory.add(lastParameters);
-
+		
 		// truncate the stack to the max count
 		// FIXME: SJ: later, store this in a TBX preference
-		if(this.parametersHistory.size() > 5)	{
+		if (this.parametersHistory.size() > 5) {
 			this.parametersHistory.remove(0);
 			this.parametersHistory.remove(0);
 			this.parametersHistory.remove(0);
 		}
-
+		
 	}
-
+	
 	/**
 	 * Stores the last parameters used for computing.
+	 * 
 	 * @throws Exception
 	 */
 	protected void updateLastParameters() throws Exception {
 		this.updateLastParameters(Parameter.COMPUTING);
 	}
-
-
+	
+	
 	/**
 	 * Removes all the parameters of the specified type from the last parameters history.
+	 * 
 	 * @param parameterType
 	 * @throws Exception
 	 */
 	protected void clearLastParameters(int parameterType) {
 		List<Field> fields = this.getAllFields();
-
+		
 		for (Field f : fields) {
 			Parameter parameter = f.getAnnotation(Parameter.class);
 			if (parameter == null || parameter.type() != parameterType) {
 				continue;
 			}
-
+			
 			String name;
-			if(!parameter.key().isEmpty())	{
+			if (!parameter.key().isEmpty()) {
 				name = parameter.key();
 			}
-			else	{
+			else {
 				name = f.getName();
 			}
-
+			
 			f.setAccessible(true);
 			try {
 				this.getLastParametersFromHistory().remove(name);
@@ -570,10 +593,10 @@
 				// nothing to do if the stack is empty
 			}
 		}
-
-
+		
+		
 		try {
-			if(this.getLastParametersFromHistory().isEmpty())	{
+			if (this.getLastParametersFromHistory().isEmpty()) {
 				this.parametersHistory.remove(this.parametersHistory.size() - 1);
 			}
 		}
@@ -581,10 +604,11 @@
 			// nothing to do if the stack is empty
 		}
 	}
-
-
+	
+	
 	/**
 	 * Checks if a parameter value has changed since last computing.
+	 * 
 	 * @param key
 	 * @param parameterType
 	 * @return
@@ -592,30 +616,31 @@
 	public boolean hasParameterChanged(String key) {
 		return this.hasParameterChanged(key, this.getLastParametersFromHistory());
 	}
-
+	
 	/**
 	 * Checks if a parameter value has changed since last computing according to the specified external map.
+	 * 
 	 * @param key
 	 * @param lastParameters
 	 * @return
 	 */
 	public boolean hasParameterChanged(String key, HashMap<String, Object> lastParameters) {
-
-		if(lastParameters == null)	{
+		
+		if (lastParameters == null) {
 			return true;
 		}
-
+		
 		if (key.isEmpty()) {
 			return false;
 		}
-
+		
 		Object lastValue = lastParameters.get(key);
 		Object newValue = this.getParameter(key);
 		if (lastValue == null) {
-			if(newValue != null)	{
+			if (newValue != null) {
 				return true;
 			}
-			else	{
+			else {
 				return false;
 			}
 		}
@@ -623,128 +648,134 @@
 			return !lastValue.equals(newValue);
 		}
 	}
-
+	
 	/**
 	 * Checks if at least one parameter value of the specified parameter type has changed since last computing according to the specified external map.
+	 * 
 	 * @param lastParameters
 	 * @param parameterType
 	 * @return
 	 */
 	public boolean hasParameterChanged(HashMap<String, Object> lastParameters, int parameterType) throws Exception {
-
+		
 		// result has never been computed
-		if(lastParameters == null)	{
+		if (lastParameters == null) {
 			return true;
 		}
-
+		
 		boolean hasParameterChanged = false;
-
+		
 		List<Field> fields = this.getAllFields();
-
+		
 		for (Field f : fields) {
 			Parameter parameter = f.getAnnotation(Parameter.class);
 			if (parameter == null || parameter.type() != parameterType) {
 				continue;
 			}
 			String name;
-			if (!parameter.key().isEmpty())	{
+			if (!parameter.key().isEmpty()) {
 				name = parameter.key();
 			}
 			else {
 				name = f.getName();
 			}
-
+			
 			f.setAccessible(true); // to be able to test the field values
-
+			
 			hasParameterChanged = this.hasParameterChanged(name, lastParameters);
-
+			
 			if (hasParameterChanged) {
 				Log.finest("TXMResult.hasParameterChanged(): " + this.getClass().getSimpleName() + ": parameter " + name + " has changed.");
 				break;
 			}
 		}
-
+		
 		return hasParameterChanged;
 	}
-
-
+	
+	
 	/**
 	 * Checks if at least one computing parameter value has changed since last computing.
+	 * 
 	 * @return
 	 * @throws Exception
 	 */
 	public boolean hasParameterChanged() throws Exception {
 		return this.hasParameterChanged(this.getLastParametersFromHistory(), Parameter.COMPUTING);
 	}
-
-
+	
+	
 	/**
 	 * Dumps the command and default preferences of the result preferences node qualifier.
+	 * 
 	 * @return
 	 */
-	public String dumpPreferences()	{
-
+	public String dumpPreferences() {
+		
 		StringBuilder str = new StringBuilder();
-
-		if(TXMPreferences.resultScopeNodeExists(this))	{
+		
+		if (TXMPreferences.resultScopeNodeExists(this)) {
 			str.append("\nResult local node preferences\n"); //$NON-NLS-1$
 			str.append(TXMPreferences.getKeysAndValues(this.getParametersNodePath()));
 		}
-
+		
 		str.append("\nCommand preferences\n"); //$NON-NLS-1$
 		str.append(TXMPreferences.getKeysAndValues(this.commandPreferencesNodePath));
-
+		
 		str.append("\nDefault command preferences\n"); //$NON-NLS-1$
 		str.append(TXMPreferences.getKeysAndValues(DefaultScope.INSTANCE + "/" + this.commandPreferencesNodePath));
-
+		
 		return str.toString();
 	}
-
-
+	
+	
 	/**
 	 * Dumps the result computing parameters (Parameter annotation).
+	 * 
 	 * @return
 	 */
-	public String dumpParameters()	{
+	public String dumpParameters() {
 		return this.dumpParameters(Parameter.COMPUTING);
 	}
-
-
+	
+	
 	/**
 	 * Dumps the result computing parameters (Parameter annotation).
+	 * 
 	 * @param parametersType
 	 * @return
 	 */
-	public String dumpParameters(int parametersType)	{
-
+	public String dumpParameters(int parametersType) {
+		
 		StringBuilder str = new StringBuilder();
-
+		
 		str.append("Parameters (type = " + parametersType + " / " + Parameter.types[parametersType] + ")\n"); //$NON-NLS-1$
-
+		
 		List<Field> fields = this.getAllFields();
-
+		
 		for (Field f : fields) {
 			Parameter parameter = f.getAnnotation(Parameter.class);
 			if (parameter == null || parameter.type() != parametersType) {
 				continue;
 			}
 			f.setAccessible(true);
-
+			
 			String name;
-			if(!parameter.key().isEmpty())	{
+			if (!parameter.key().isEmpty()) {
 				name = parameter.key();
 			}
-			else	{
+			else {
 				name = f.getName();
 			}
-
+			
 			try {
 				Object v = f.get(this);
 				if (v != null) {
-					str.append(name + " ("+ v.getClass().getSimpleName() + ") = " + v + "\n"); //$NON-NLS-1$ //$NON-NLS-2$
-				} else {
-					str.append(name + " = NULL \n"); //$NON-NLS-1$ //$NON-NLS-2$
+					str.append(name + " (" + v.getClass().getSimpleName() + ") = " + v + "\n"); //$NON-NLS-1$ //$NON-NLS-2$
 				}
+				else {
+					str.append(name + " = NULL \n"); //$NON-NLS-1$
+				}
 			}
 			catch (IllegalArgumentException e) {
 				// TODO Auto-generated catch block
@@ -757,99 +788,99 @@
 		}
 		return str.toString();
 	}
-
-
-
-	//	/**
-	//	 * Updates the dirty state by comparing an old parameter with a new one.
-	//	 * 
-	//	 * @param lastValue may be null
-	//	 * @param newValue may be null
-	//	 */
-	//	protected void updateDirty(Object lastValue, Object newValue) {
-	//		if(lastValue == null && newValue == null)	{
-	//			return;
-	//		}
-	//		if (lastValue == null || !lastValue.equals(newValue)) {
-	//			Log.info("TXMResult.updateDirty(): " + this.getClass().getSimpleName() + ": setting dirty to true: last = "+ lastValue + " / new = " + newValue);
-	//			this.setDirty();
-	//		}
-	//	}
-
+	
+	
+	
+	// /**
+	// * Updates the dirty state by comparing an old parameter with a new one.
+	// *
+	// * @param lastValue may be null
+	// * @param newValue may be null
+	// */
+	// protected void updateDirty(Object lastValue, Object newValue) {
+	// if(lastValue == null && newValue == null) {
+	// return;
+	// }
+	// if (lastValue == null || !lastValue.equals(newValue)) {
+	// Log.info("TXMResult.updateDirty(): " + this.getClass().getSimpleName() + ": setting dirty to true: last = "+ lastValue + " / new = " + newValue);
+	// this.setDirty();
+	// }
+	// }
+	
 	/**
 	 * Sets the dirty state to true if a parameter has changed since last computing.
 	 * 
 	 * @throws Exception
 	 */
 	public void updateDirtyFromHistory() throws Exception {
-		//		
-		////		// result has never been computed
-		////		if(this.getLastParametersFromHistory() == null)	{
-		////			this.dirty = true;
-		////			return true;
-		////		}
+		//
+		//// // result has never been computed
+		//// if(this.getLastParametersFromHistory() == null) {
+		//// this.dirty = true;
+		//// return true;
+		//// }
 		////
-		////		List<Field> fields = this.getAllFields();
-		////		
-		////		for (Field f : fields) {
-		////			Parameter parameter = f.getAnnotation(Parameter.class);
-		////			if (parameter == null
-		////					|| parameter.type() == Parameter.INTERNAL
-		////					//|| parameter.type() != Parameter.COMPUTING
-		////					) {
-		////				continue;
-		////			}
-		////			String name;
-		////			if (!parameter.key().isEmpty())	{
-		////				name = parameter.key();
-		////			}
-		////			else {
-		////				name = f.getName();
-		////			}
+		//// List<Field> fields = this.getAllFields();
 		////
-		////			f.setAccessible(true); // to be able to test the field values
+		//// for (Field f : fields) {
+		//// Parameter parameter = f.getAnnotation(Parameter.class);
+		//// if (parameter == null
+		//// || parameter.type() == Parameter.INTERNAL
+		//// //|| parameter.type() != Parameter.COMPUTING
+		//// ) {
+		//// continue;
+		//// }
+		//// String name;
+		//// if (!parameter.key().isEmpty()) {
+		//// name = parameter.key();
+		//// }
+		//// else {
+		//// name = f.getName();
+		//// }
 		////
-		////			Object previousValue = this.getLastParametersFromHistory().get(name);
-		////			Object newValue = f.get(this);
+		//// f.setAccessible(true); // to be able to test the field values
 		////
-		////			//			// FIXME: debug
-		////			//			Log.finest("TXMResult.isDirtyFromHistory(): checking parameter: " + name);
+		//// Object previousValue = this.getLastParametersFromHistory().get(name);
+		//// Object newValue = f.get(this);
 		////
-		////			this.updateDirty(previousValue, newValue);
-		////			if (this.dirty) {
-		////				Log.finest("TXMResult.isDirtyFromHistory(): " + this.getClass().getSimpleName() + ": parameter " + name + " has changed.");
-		////				return this.dirty; // no need to go further
-		////			}
-		////		}
-		////		return this.dirty;
-		//		
-		//		this.dirty = this.hasParameterChanged();
-		////		if (this.chartDirty) {
-		////			// FIXME: debug
-		////			Log.finest("ChartResult.isChartDirtyFromHistory(): parameter " + name + " has changed.");
-		////			return this.chartDirty; // no need to go further
-		////		}
-		////		return this.dirty;
-		//		if(this.dirty)	{
-		//			return true;
-		//		}
-		//		else	{
-		//return this.hasParameterChanged();
-		//		}
-
-		if(this.hasParameterChanged())	{
+		//// // // FIXME: debug
+		//// // Log.finest("TXMResult.isDirtyFromHistory(): checking parameter: " + name);
+		////
+		//// this.updateDirty(previousValue, newValue);
+		//// if (this.dirty) {
+		//// Log.finest("TXMResult.isDirtyFromHistory(): " + this.getClass().getSimpleName() + ": parameter " + name + " has changed.");
+		//// return this.dirty; // no need to go further
+		//// }
+		//// }
+		//// return this.dirty;
+		//
+		// this.dirty = this.hasParameterChanged();
+		//// if (this.chartDirty) {
+		//// // FIXME: debug
+		//// Log.finest("ChartResult.isChartDirtyFromHistory(): parameter " + name + " has changed.");
+		//// return this.chartDirty; // no need to go further
+		//// }
+		//// return this.dirty;
+		// if(this.dirty) {
+		// return true;
+		// }
+		// else {
+		// return this.hasParameterChanged();
+		// }
+		
+		if (this.hasParameterChanged()) {
 			this.dirty = true;
 		}
-
+		
 	}
-
-
+	
+	
 	/**
 	 * Gets the list of parameters used during last computing or null if the result has not been computed yet.
 	 * 
 	 * @return
 	 */
-	public HashMap<String, Object> getLastParametersFromHistory()	{
+	public HashMap<String, Object> getLastParametersFromHistory() {
 		try {
 			return this.parametersHistory.get(this.parametersHistory.size() - 1);
 		}
@@ -857,7 +888,7 @@
 			return null;
 		}
 	}
-
+	
 	/**
 	 * Gets the dirty state.
 	 * 
@@ -866,7 +897,7 @@
 	public boolean isDirty() {
 		return this.dirty;
 	}
-
+	
 	/**
 	 * Marks the result as dirty so editors or others will know the TXMResult needs to be recomputed.
 	 * This method is also recursively called on all the children branch to mark them as dirty.
@@ -874,19 +905,21 @@
 	public void setDirty() {
 		this.setDirty(true);
 	}
-
+	
 	/**
-	 *  Sets the result dirty state so editors or others will know the TXMResult needs to be recomputed or not.
-	 *  This method is also recursively called on all the children branch sets the new dirty state.
+	 * Sets the result dirty state so editors or others will know the TXMResult needs to be recomputed or not.
+	 * This method is also recursively called on all the children branch sets the new dirty state.
+	 * 
 	 * @param dirty
 	 */
 	public void setDirty(boolean dirty) {
 		setDirty(dirty, true);
 	}
-
+	
 	/**
-	 *  Sets the result dirty state so editors or others will know the TXMResult needs to be recomputed or not.
-	 *  This method is also recursively called on all the children branch sets the new dirty state.
+	 * Sets the result dirty state so editors or others will know the TXMResult needs to be recomputed or not.
+	 * This method is also recursively called on all the children branch sets the new dirty state.
+	 * 
 	 * @param dirty
 	 */
 	public void setDirty(boolean dirty, boolean propagate) {
@@ -897,8 +930,8 @@
 			}
 		}
 	}
-
-
+	
+	
 	/**
 	 * Gets the value of the specified key in parameters, local result node or
 	 * default preferences nodes.
@@ -909,7 +942,7 @@
 	public int getIntParameterValue(String key) {
 		return TXMPreferences.getInt(key, this, this.commandPreferencesNodePath);
 	}
-
+	
 	/**
 	 * Gets the value of the specified key in parameters, local result node or
 	 * default preferences nodes.
@@ -920,7 +953,7 @@
 	public float getFloatParameterValue(String key) {
 		return TXMPreferences.getFloat(key, this, this.commandPreferencesNodePath);
 	}
-
+	
 	/**
 	 * Gets the value of the specified key in parameters, local result node or
 	 * default preferences nodes.
@@ -931,7 +964,7 @@
 	public double getDoubleParameterValue(String key) {
 		return TXMPreferences.getDouble(key, this, this.commandPreferencesNodePath);
 	}
-
+	
 	/**
 	 * Gets the value of the specified key in parameters, local result node or
 	 * default preferences nodes.
@@ -942,7 +975,7 @@
 	public boolean getBooleanParameterValue(String key) {
 		return TXMPreferences.getBoolean(key, this, this.commandPreferencesNodePath);
 	}
-
+	
 	/**
 	 * Gets the value of the specified key in parameters, local result node or
 	 * default preferences nodes.
@@ -953,7 +986,7 @@
 	public long getLongParameterValue(String key) {
 		return TXMPreferences.getLong(key, this, this.commandPreferencesNodePath);
 	}
-
+	
 	/**
 	 * Gets the value of the specified key in parameters, local result node or
 	 * default preferences nodes.
@@ -964,7 +997,7 @@
 	public String getStringParameterValue(String key) {
 		return TXMPreferences.getString(key, this, this.commandPreferencesNodePath);
 	}
-
+	
 	/**
 	 * Gets the value of the specified key in parameters, local result node or
 	 * default preferences nodes.
@@ -987,32 +1020,35 @@
 		String v = TXMPreferences.getString(key, this, this.commandPreferencesNodePath);
 		if (v != null && v.length() > 0) {
 			return new File(v);
-		} else {
+		}
+		else {
 			return null;
 		}
 	}
-
-
+	
+	
 	/**
 	 * Checks if the specified parameter exists.
+	 * 
 	 * @param key
 	 * @return
 	 */
-	public boolean parameterExists(String key)	{
+	public boolean parameterExists(String key) {
 		return TXMPreferences.keyExists(this.parametersNodePath, key);
 	}
-
+	
 	/**
 	 * Checks if a preference is empty (equals to "") in the command preference node.
 	 * An empty preference can be used to disable a functionality for a kind of result
 	 * (eg. A partition dimension bar chart does not have a legend so it can be used to not offer the hide/show legend button in UI).
+	 * 
 	 * @param key
 	 * @return
 	 */
-	public boolean isEmptyPreference(String key)	{
+	public boolean isEmptyPreference(String key) {
 		return TXMPreferences.isEmpty(this.commandPreferencesNodePath, key);
 	}
-
+	
 	/**
 	 * Stores the specified parameters pairs of key/value in a local node dedicated to the specified result. The node qualifier is generated by the <code>TXMResult.getUUID</code> method.
 	 * 
@@ -1022,54 +1058,56 @@
 	public void saveParameter(String key, List<?> values) {
 		this.saveParameter(key, StringUtils.join(values, UNDERSCORE));
 	}
-
-
+	
+	
 	/**
 	 * Stores the specified parameters pairs of key/value in a local node dedicated to the specified result. The node qualifier is generated by the <code>TXMResult.getUUID</code> method.
+	 * 
 	 * @param result
 	 * @param key
 	 * @param value
 	 */
-	public void saveParameter(String key, Object value)	{
+	public void saveParameter(String key, Object value) {
 		// FIXME: debug
-		//Log.info("TXMResult.saveParameter(): saving parameter " + key + " = " + value + " for " + this.getClass() + " (" + value.getClass() + ") to node.");
-
+		// Log.info("TXMResult.saveParameter(): saving parameter " + key + " = " + value + " for " + this.getClass() + " (" + value.getClass() + ") to node.");
+		
 		TXMPreferences.putLocal(this, key, value);
 	}
-
-
+	
+	
 	/**
 	 * Stores the result parameter fields declared by their @Parameter annotation in the persisted result node preferences.
 	 * One have to implement saveParameters() to save parameters that are not of primitive types (e.g. Property, List, HashMap...)
+	 * 
 	 * @return
 	 * @throws Exception
 	 */
 	public boolean autoSaveParametersFromAnnotations() throws Exception {
-
+		
 		Log.finest("TXMResult.autoSaveParametersFromAnnotations(): " + this.getClass().getSimpleName() + ": saving parameters to local node...");
-
+		
 		// internal data to save for unserialization
 		this.saveParameter("class", this.getClass().getName()); //$NON-NLS-1$
-
+		
 		this.saveParameter(TXMPreferences.RESULT_PARAMETERS_NODE_PATH, this.parametersNodePath);
-
+		
 		// FIXME: old version that not work well if a bundle has no preference initializer
-		//this.saveParameter(TXMPreferences.BUNDLE_ID, this.commandPreferencesNodePath);
+		// this.saveParameter(TXMPreferences.BUNDLE_ID, this.commandPreferencesNodePath);
 		// FIXME: new version
 		this.saveParameter(TXMPreferences.BUNDLE_ID, FrameworkUtil.getBundle(getClass()).getSymbolicName());
-
-
-
-		if (this.parent != null)	{
+		
+		
+		
+		if (this.parent != null) {
 			this.saveParameter(TXMPreferences.PARENT_PARAMETERS_NODE_PATH, this.parent.getParametersNodePath());
 		}
-
-		if(this.hasBeenComputedOnce)	{
+		
+		if (this.hasBeenComputedOnce) {
 			this.lazyName = this.getSimpleName();
 		}
-
+		
 		List<Field> fields = this.getAllFields();
-
+		
 		for (Field f : fields) {
 			Parameter parameter = f.getAnnotation(Parameter.class);
 			if (parameter == null) {
@@ -1079,66 +1117,70 @@
 			if (key.isEmpty()) {
 				continue; // no preference key defined
 			}
-
+			
 			if (f.getType().isAssignableFrom(int.class) || f.getType().isAssignableFrom(Integer.class) ||
 					f.getType().isAssignableFrom(double.class) || f.getType().isAssignableFrom(Double.class) ||
 					f.getType().isAssignableFrom(float.class) || f.getType().isAssignableFrom(Float.class) ||
 					f.getType().isAssignableFrom(boolean.class) || f.getType().isAssignableFrom(Boolean.class) ||
 					f.getType().isAssignableFrom(String.class) || f.getType().isAssignableFrom(File.class)
-
-					// FIXME: do not pass a Serializable for now
-					//|| !f.getType().isAssignableFrom(Serializable.class)
-					//|| !Serializable.class.isInstance(f)
-
-					) {
-
-
+			
+			// FIXME: do not pass a Serializable for now
+			// || !f.getType().isAssignableFrom(Serializable.class)
+			// || !Serializable.class.isInstance(f)
+			
+			) {
+				
+				
 				f.setAccessible(true); // set accessible to test the field values
 				try {
 					Object value = f.get(this);
 					if (value != null) {
 						this.saveParameter(key, value);
 					}
-				} catch (Exception e) {
+				}
+				catch (Exception e) {
 					e.printStackTrace();
 				}
-			} else if (f.getType().isAssignableFrom(Date.class)) {
+			}
+			else if (f.getType().isAssignableFrom(Date.class)) {
 				f.setAccessible(true); // set accessible to test the field values
 				try {
 					Object value = f.get(this);
 					if (value != null) {
-						this.saveParameter(key, TXMResult.ID_TIME_FORMAT.format((Date)value));
+						this.saveParameter(key, TXMResult.ID_TIME_FORMAT.format((Date) value));
 					}
-				} catch (Exception e) {
+				}
+				catch (Exception e) {
 					e.printStackTrace();
 				}
 			}
 		}
 		return true;
 	}
-
+	
 	/**
 	 * Dedicated to stores the result parameters in the persisted result node preferences.
 	 * One have to implement this method to save parameters that are not of primitive types (e.g. Property, List, HashMap...)
 	 * Parameters of primitive types are automatically saved after a computing.
+	 * 
 	 * @return
 	 * @throws Exception
 	 */
 	public abstract boolean saveParameters() throws Exception;
-
+	
 	/**
 	 * calls saveParameters() on this and children if childrenAsWell is set to true
 	 * 
-	 * only children 
+	 * only children
 	 * 
 	 * @param childrenAsWell save the children parameters as well
 	 * @return true if all saves were successful
 	 * @throws Exception
 	 */
 	public boolean saveParameters(boolean childrenAsWell) throws Exception {
-
+		
 		boolean ret = true;
-
+		
 		if (this.mustBePersisted()) {
 			ret = this.saveParameters();
 			if (childrenAsWell) {
@@ -1149,8 +1191,8 @@
 		}
 		return ret;
 	}
-
-	// FIXME: SJ: this method sould not call persist on children if childrenAsWell == false? 
+	
+	// FIXME: SJ: this method sould not call persist on children if childrenAsWell == false?
 	public void persist(boolean childrenAsWell) {
 		if (this.mustBePersisted()) {
 			TXMPreferences.flush(this);
@@ -1159,44 +1201,44 @@
 			}
 		}
 	}
-
+	
 	/**
 	 * 
 	 * @return
 	 * @throws Exception
 	 */
 	protected boolean autoLoadParametersFromAnnotations() throws Exception {
-		return this.autoLoadParametersFromAnnotations(Parameter.COMPUTING) && this.autoLoadParametersFromAnnotations(Parameter.INTERNAL); 
+		return this.autoLoadParametersFromAnnotations(Parameter.COMPUTING) && this.autoLoadParametersFromAnnotations(Parameter.INTERNAL);
 	}
-
+	
 	/**
 	 * Fills the result parameter fields declared by their @Parameter annotation from the persisted result node or default node of the preferences.
 	 * One have to implement loadParameters() to load parameters that are not of primitive types (e.g. Property, List, HashMap...)
 	 * 
 	 * @return
-	 * @throws Exception 
+	 * @throws Exception
 	 */
 	protected boolean autoLoadParametersFromAnnotations(int parameterType) throws Exception {
-
+		
 		List<Field> fields = this.getAllFields();
-
+		
 		for (Field f : fields) {
-
+			
 			Parameter parameter = f.getAnnotation(Parameter.class);
 			if (parameter == null || parameter.type() != parameterType) {
 				continue;
 			}
-
+			
 			String key = parameter.key();
-
+			
 			if (key.isEmpty()) {
 				continue; // no preference key defined for the parameter so it can't be filled with default value or result persistence value from preferences nodes
 			}
 			try {
 				f.setAccessible(true); // set accessible to test the field values
-
+				
 				Object value = null;
-
+				
 				// only manage primitive types
 				if (f.getType().isAssignableFrom(String.class)) {
 					value = this.getStringParameterValue(key);
@@ -1221,33 +1263,35 @@
 				}
 				// FIXME: test to automate other type creation as Property => problem here is that org.txm.core doesn't know the plug-in org.txm.searchengine.cqp.core
 				// could be done using reflection. Get the field runtime class, then get and call the constructor
-				//				else if (f.getType().isAssignableFrom(Property.class)) {
-				//					value = new Property(this.getStringParameterValue(key), Corpus.getCorpus(this));
-				//				}
+				// else if (f.getType().isAssignableFrom(Property.class)) {
+				// value = new Property(this.getStringParameterValue(key), Corpus.getCorpus(this));
+				// }
 				// MD: nope should be done via adapter or extension point "org.txm.searchengine.cqp.core" contributes to
 				// SJ: or better, when the abstraction of Property, etc. will be done, we could implement some extensions as in ChartCreator model to other engines, eg. SearchEngine, that will return
 				// the right class here
 				f.set(this, value);
-
+				
 				// FIXME: Debug
 				Log.finest("TXMResult.autoLoadParametersFromAnnotations(): setting parameter " + key + " = " + value + "\t[" + this.getClass() + "]");
-
-			} catch (Exception e) {
+				
+			}
+			catch (Exception e) {
 				e.printStackTrace();
 			}
 		}
 		return true;
 	}
-
+	
 	/**
 	 * Method dedicated to manually create and load non primitive parameters from strings stored in preference nodes in subclasses.
 	 * This method is called by the constructor of the class TXMResult.
 	 * The constructor also auto-loads the parameters that have a @Parameter annotation.
+	 * 
 	 * @return
 	 * @throws Exception
 	 */
 	public abstract boolean loadParameters() throws Exception;
-
+	
 	/**
 	 * Initializes the @Parameter class members objects
 	 * 
@@ -1255,31 +1299,33 @@
 	 * @return
 	 */
 	public abstract boolean setParameters(TXMParameters parameters) throws Exception;
-
+	
 	/**
 	 * Initializes the @Parameter class members objects
 	 * 
 	 * @param parameters
 	 * @return
-	 * @throws Exception 
+	 * @throws Exception
 	 */
 	public final boolean setParameters(HashMap<String, Object> parameters) throws Exception {
 		return setParameters(new TXMParameters(parameters));
 	}
-
+	
 	/**
 	 * Sets a parameter from its parameter annotation "key".
+	 * 
 	 * @param key
 	 * @param value
 	 * @return
 	 * @throws Exception
 	 */
-	public boolean setParameter(String key, Object value) throws Exception	{
+	public boolean setParameter(String key, Object value) throws Exception {
 		return setParameter(key, value, false);
 	}
-
+	
 	/**
 	 * Sets a parameter from its parameter annotation "key".
+	 * 
 	 * @param key
 	 * @param value
 	 * @param propagateToParent propagates the key=value to the parents if the result has no field=key
@@ -1287,83 +1333,84 @@
 	 * @return
 	 * @throws Exception
 	 */
-	public boolean setParameter(String key, Object value, boolean propagateToParent) throws Exception	{
-
+	public boolean setParameter(String key, Object value, boolean propagateToParent) throws Exception {
+		
 		List<Field> fields = this.getAllFields();
-
+		
 		Field targetField = null;
-
+		
 		for (Field f : fields) {
 			Parameter parameter = f.getAnnotation(Parameter.class);
 			if (parameter == null) {
 				continue;
 			}
-			if(!parameter.key().isEmpty() && parameter.key().equals(key))	{
+			if (!parameter.key().isEmpty() && parameter.key().equals(key)) {
 				targetField = f;
 				break;
 			}
 		}
-
-		if (targetField != null)	{
+		
+		if (targetField != null) {
 			targetField.setAccessible(true);
 			targetField.set(this, value);
-
+			
 			// Log
 			String message = "TXMResult.setParameter(): " + this.getClass().getSimpleName() + ": setting parameter " + key + " = " + value; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 			Log.finest(message);
-
+			
 		}
 		else if (this.parent != null && propagateToParent) {
 			this.parent.setParameter(key, value, propagateToParent);
 		}
-
+		
 		return true;
 	}
-
+	
 	/**
 	 * Deletes the object from its parent, also deletes the children. The <code>TXMResult.clean()</code> methods of this result and children results are applied before the deletion.
 	 * 
 	 * @return
 	 */
 	public final boolean delete() {
-
+		
 		try {
 			// FIXME: debug
 			// System.err.println("TXMResult.delete()");
-
+			
 			// START WITH CHILDREN
-
+			
 			// remove children and clean resources
 			while (this.children.size() > 0) {
 				TXMResult c = this.children.get(0);
 				c.delete(); // should call parent.removeResult(child)
-				//				TXMPreferences.delete(this.children.get(i));
-				//				this.removeChild(i);
+				// TXMPreferences.delete(this.children.get(i));
+				// this.removeChild(i);
 				this.children.remove(c); // but should be done already...
 			}
 			this.children.clear();
-
-			//THEN FINISH WITH THIS
+			
+			// THEN FINISH WITH THIS
 			// delete the local node
 			TXMPreferences.delete(this);
-
+			
 			// specific cleaning
 			this.clean();
-
+			
 			if (this.parent != null) {
-
+				
 				this.parent.removeChild(this);
-
+				
 			}
 			this.parent = null;
 			return true;
-		} catch (Exception e) {
+		}
+		catch (Exception e) {
 			e.printStackTrace();
 		}
-
+		
 		return false;
 	}
-
+	
 	/**
 	 * Deletes all non persistent results and saves the results to persist.
 	 */
@@ -1373,7 +1420,7 @@
 			TXMResult r = null;
 			r = todo.remove(0);
 			todo.addAll(0, r.getChildren());
-			if (r.mustBePersisted())	{ 
+			if (r.mustBePersisted()) {
 				TXMPreferences.flush(r);
 			}
 			else {
@@ -1382,10 +1429,11 @@
 			}
 		}
 	}
-
-
+	
+	
 	/**
 	 * Gets a child specified by its index in the children list.
+	 * 
 	 * @param index
 	 * @return the child specified by its index if exists otherwise null
 	 */
@@ -1397,7 +1445,7 @@
 			return null;
 		}
 	}
-
+	
 	/**
 	 * Adds a child result to this result.
 	 * If the child already have a parent, the child will be remove from its old parent children.
@@ -1409,18 +1457,19 @@
 		try {
 			// remove from current parent if exists
 			child.removeFromParent();
-
+			
 			child.setParent(this);
 			if (!this.children.contains(child)) {
 				return this.children.add(child);
 			}
-			//			}
-		} catch (Exception e) {
+			// }
+		}
+		catch (Exception e) {
 			// nothing to do
 		}
 		return false;
 	}
-
+	
 	/**
 	 * Inserts a child result in this result children list at the specified position.
 	 * 
@@ -1435,11 +1484,12 @@
 				this.children.add(index, child);
 				return true;
 			}
-		} catch (Exception e) {
 		}
+		catch (Exception e) {
+		}
 		return false;
 	}
-
+	
 	/**
 	 * Removes the specified child result.
 	 * 
@@ -1450,11 +1500,12 @@
 		try {
 			child.setParent(null);
 			return this.children.remove(child);
-		} catch (Exception e) {
 		}
+		catch (Exception e) {
+		}
 		return false;
 	}
-
+	
 	/**
 	 * Removes the child result specified by its index.
 	 * 
@@ -1464,12 +1515,13 @@
 	private boolean removeChild(int index) {
 		try {
 			return this.removeChild(this.children.get(index));
-		} catch (Exception e) {
-
 		}
+		catch (Exception e) {
+			
+		}
 		return false;
 	}
-
+	
 	/**
 	 * Removes the result from its parent: call the parent's removeResult method.
 	 * 
@@ -1478,22 +1530,24 @@
 	private boolean removeFromParent() {
 		try {
 			return this.parent.removeChild(this);
-		} catch (Exception e) {
-
 		}
+		catch (Exception e) {
+			
+		}
 		return false;
 	}
-
-
+	
+	
 	/**
 	 * Checks if the result has at least one child visible.
+	 * 
 	 * @return true if the result has at least one child visible
 	 */
 	public boolean hasVisibleChild() {
 		return !this.getChildren(true).isEmpty();
 	}
-
-
+	
+	
 	/**
 	 * Gets all the children results (not a clone).
 	 * 
@@ -1502,7 +1556,7 @@
 	public List<TXMResult> getChildren() {
 		return this.children;
 	}
-
+	
 	/**
 	 * Gets the children results.
 	 * 
@@ -1511,7 +1565,7 @@
 	public List<TXMResult> getChildren(boolean onlyVisible) {
 		return this.getChildren(null, onlyVisible);
 	}
-
+	
 	/**
 	 * Gets the children results specified by their class.
 	 * 
@@ -1521,7 +1575,7 @@
 	public List<? extends TXMResult> getChildren(Class type) {
 		return TXMResult.getNodes(this.children, type, false);
 	}
-
+	
 	/**
 	 * Gets the children results specified by their class.
 	 * 
@@ -1531,9 +1585,10 @@
 	public List<TXMResult> getChildren(Class type, boolean onlyVisible) {
 		return TXMResult.getNodes(this.children, type, onlyVisible);
 	}
-
+	
 	/**
 	 * Gets the first child result specified by its class.
+	 * 
 	 * @param type
 	 * @return the first child if exists otherwise null
 	 */
@@ -1546,17 +1601,19 @@
 			return null;
 		}
 	}
-
+	
 	/**
 	 * Deletes all the children
+	 * 
 	 * @return
 	 */
 	public void deleteChildren() {
 		deleteChildren(null);
 	}
-
+	
 	/**
 	 * Deletes the children of the specified class.
+	 * 
 	 * @param type
 	 * @return
 	 */
@@ -1566,9 +1623,10 @@
 			children.get(i).delete();
 		}
 	}
-
+	
 	/**
 	 * Gets the first child.
+	 * 
 	 * @param classSimpleName
 	 * @return
 	 */
@@ -1580,16 +1638,16 @@
 		}
 		return null;
 	}
-
-
+	
+	
 	/**
 	 * Gets the children of all the branch of the specified node in a flat list.
 	 * 
 	 * @return
 	 */
 	protected static List<TXMResult> getDeepChildren(TXMResult parent, Class<? extends TXMResult> clazz) {
-
-		List<TXMResult> results = new ArrayList<TXMResult>();
+		
+		List<TXMResult> results = new ArrayList<>();
 		List<? extends TXMResult> cc = parent.getChildren(clazz);
 		for (TXMResult r : cc) {
 			results.add(r);
@@ -1597,7 +1655,7 @@
 		}
 		return results;
 	}
-
+	
 	/**
 	 * Gets the children of all the branch in a flat list.
 	 * 
@@ -1606,7 +1664,7 @@
 	public List<TXMResult> getDeepChildren(Class<? extends TXMResult> clazz) {
 		return TXMResult.getDeepChildren(this, clazz);
 	}
-
+	
 	/**
 	 * Gets the children of all the branch in a flat list.
 	 * 
@@ -1615,7 +1673,7 @@
 	public static List<TXMResult> getDeepChildren(TXMResult r) {
 		return TXMResult.getDeepChildren(r, null);
 	}
-
+	
 	/**
 	 * Gets the children of all the branch in a flat list.
 	 * 
@@ -1624,26 +1682,27 @@
 	public List<TXMResult> getDeepChildren() {
 		return TXMResult.getDeepChildren(this);
 	}
-
+	
 	/**
 	 * Gets the TXMResult specified by its UUID in the children of the specified root result.
+	 * 
 	 * @param branchRoot
 	 * @param UUID
 	 * @return
 	 */
-	public static TXMResult getResult(TXMResult root, String nodePath)	{
+	public static TXMResult getResult(TXMResult root, String nodePath) {
 		TXMResult result = null;
-		if(root.getParametersNodePath().equals(nodePath))	{
+		if (root.getParametersNodePath().equals(nodePath)) {
 			return root; // root is the node we are looking for
 		}
-		else	{
+		else {
 			List<TXMResult> results = root.getChildren();
 			for (int i = 0; i < results.size(); i++) {
-				if(results.get(i).getParametersNodePath().equals(nodePath))	{
+				if (results.get(i).getParametersNodePath().equals(nodePath)) {
 					return results.get(i); // a direct children is the node we are looking for
 				}
 			}
-
+			
 			for (int i = 0; i < results.size(); i++) {
 				TXMResult r = getResult(results.get(i), nodePath);
 				if (r != null) {
@@ -1653,16 +1712,17 @@
 		}
 		return null; // not found
 	}
-
+	
 	/**
 	 * Gets the TXMResult specified by its UUID in the children of the Toolbox Workspace member.
+	 * 
 	 * @param UUID
 	 * @return
 	 */
-	public static TXMResult getResult(String nodePath)	{
+	public static TXMResult getResult(String nodePath) {
 		return getResult(Toolbox.workspace, nodePath);
 	}
-
+	
 	/**
 	 * Filters the nodes specified by their class and their visibility state.
 	 * 
@@ -1670,38 +1730,41 @@
 	 * @return
 	 */
 	protected static List<TXMResult> getNodes(List<TXMResult> srcNodes, Class<? extends TXMResult> type, boolean onlyVisible) {
-		List<TXMResult> nodes = new ArrayList<TXMResult>();
+		List<TXMResult> nodes = new ArrayList<>();
 		for (TXMResult child : srcNodes) {
 			try {
-				if ((type == null || 
-						child.getClass().asSubclass(type) != null) 
+				if ((type == null ||
+						child.getClass().asSubclass(type) != null)
 						&& (onlyVisible == false || child.isVisible())) {
 					nodes.add(child);
 				}
-
+				
 				// add children of a non visible result
-				else if (!child.isVisible() && child.hasChildren())	{
+				else if (!child.isVisible() && child.hasChildren()) {
 					List<TXMResult> subChidlren = child.getChildren(type, onlyVisible);
 					nodes.addAll(subChidlren);
 				}
-			} catch (Exception e) {
+			}
+			catch (Exception e) {
 				// nothing to do
 			}
 		}
 		return nodes;
 	}
-
+	
 	/**
 	 * Gets the direct children count.
+	 * 
 	 * @return the direct children count
 	 */
 	public int getChildrenCount() {
 		return this.children.size();
 	}
-
-
+	
+	
 	/**
 	 * Gets the root parent of the branch.
+	 * 
 	 * @return
 	 */
 	public TXMResult getRootParent() {
@@ -1710,14 +1773,16 @@
 		do {
 			root = parent;
 			parent = parent.getParent();
-		} while (parent != null);
-
+		}
+		while (parent != null);
+		
 		return root;
 	}
-
-
+	
+	
 	/**
 	 * Gets the first parent of the specified class, eg. this.getFirstParent(Partition.class);
+	 * 
 	 * @param type
 	 * @return
 	 */
@@ -1725,51 +1790,53 @@
 		TXMResult node = null;
 		TXMResult parent = this.parent;
 		do {
-			if(parent != null)	{
-				if(parent.getClass().equals(type)) {
-					node = parent;	
+			if (parent != null) {
+				if (parent.getClass().equals(type)) {
+					node = parent;
 				}
-
+				
 				parent = parent.getParent();
 			}
-		} while (parent != null && node == null);
-
+		}
+		while (parent != null && node == null);
+		
 		return node;
 	}
-
-
+	
+	
 	/**
 	 * Checks if the specified result is a child.
+	 * 
 	 * @return
 	 */
 	public boolean isChild(TXMResult child) {
 		return this.getDeepChildren().contains(child);
 	}
-
+	
 	/**
 	 * Gets the sibling nodes of this node result.
 	 */
 	public List<TXMResult> getSiblings() {
-		List<TXMResult> sibling = new ArrayList<TXMResult>();
+		List<TXMResult> sibling = new ArrayList<>();
 		if (this.parent != null) {
 			sibling.addAll(this.parent.getChildren());
 			sibling.remove(this);
 		}
 		return sibling;
 	}
-
+	
 	/**
 	 * Gets the sibling nodes of this node result, specified by their class.
 	 */
 	public List<TXMResult> getSiblings(Class type) {
-		List<TXMResult> sibling = new ArrayList<TXMResult>();
+		List<TXMResult> sibling = new ArrayList<>();
 		if (this.parent != null) {
 			sibling.addAll(TXMResult.getNodes(this.parent.getChildren(), type, true));
 			sibling.remove(this);
 		}
 		return sibling;
 	}
-
+	
 	/**
 	 * Checks if the result must be displayed.
 	 * 
@@ -1778,11 +1845,11 @@
 	public boolean isVisible() {
 		return this.visible;
 	}
-
+	
 	public boolean isParentVisible() {
 		return parent != null && (parent.isVisible() || parent.isInternalPersistable());
 	}
-
+	
 	/**
 	 * Sets the result visibility state.
 	 * Dedicated to UI purposes.
@@ -1793,7 +1860,7 @@
 	public void setVisible(boolean visible) {
 		this.visible = visible;
 	}
-
+	
 	/**
 	 * Sets the parent.
 	 * 
@@ -1802,7 +1869,7 @@
 	public void setParent(TXMResult parent) {
 		this.parent = parent;
 	}
-
+	
 	/**
 	 * Gets the parent.
 	 * 
@@ -1811,14 +1878,14 @@
 	public TXMResult getParent() {
 		return parent;
 	}
-
+	
 	/**
 	 * Gets the name of the result.
 	 * 
 	 * @return
 	 */
 	public abstract String getName();
-
+	
 	/**
 	 * Gets the simple name of the result.
 	 * Dedicated to be displayed in a small UI area.
@@ -1826,7 +1893,7 @@
 	 * @return
 	 */
 	public abstract String getSimpleName();
-
+	
 	/**
 	 * Gets some details about how the result has been computed (eg. additional parameters, etc.).
 	 * Dedicated to be displayed in a large UI area.
@@ -1834,39 +1901,39 @@
 	 * @return
 	 */
 	public abstract String getDetails();
-
-
+	
+	
 	/**
 	 * Gets a message indicating the start of computing.
 	 * Dedicated to indicate the start of computing and, for example, the parameters used for the computing.
 	 * 
-	 * @return
+	 * @return a message indicating the start of computing
 	 */
 	// FIXME: SJ: this method must become abstract in TXM0.8.1 and implemented by subclasses
 	public String getComputingStartMessage() {
-		return "Computing "+this.getClass().getSimpleName()+"...";
+		return "Computing " + this.getClass().getSimpleName() + "...";
 	}
-	//	public abstract String getComputingStartMessage();
-
-
+	// public abstract String getComputingStartMessage();
+	
+	
 	/**
 	 * Gets a message indicating the computing is done.
-	 * Dedicated to indicate the end of computing and, for example, some informations about the result (eg. : 12 matches found, No matches found, etc.).
+	 * Dedicated to indicate the end of computing and, for example, some informations about the result (eg. : "12 matches found.", "No match found.", etc.).
 	 * 
-	 * @return
+	 * @return a message indicating the computing is done
 	 */
 	// FIXME: SJ: this method must become abstract in TXM0.8.1 and implemented by subclasses
 	public String getComputingDoneMessage() {
 		return "";
 	}
-	//	public abstract String getComputingDoneMessage();
-
-
-
-
-
-
-
+	// public abstract String getComputingDoneMessage();
+	
+	
+	
+	
+	
+	
+	
 	/**
 	 * Gets the user name if exists otherwise, the lazy name if exists, otherwise the simple name.
 	 * 
@@ -1883,25 +1950,18 @@
 			return this.getSimpleName();
 		}
 	}
-
-
+	
+	
 	/**
 	 * Convenience method to get a shared name when the result is empty (not yet computed).
+	 * 
 	 * @return the string "..."
 	 */
-	public String getEmptyName()	{
+	public String getEmptyName() {
 		return "..."; //$NON-NLS-1$
 	}
-
-	//	/**
-	//	 * Returns a string representation of an unique ID for the result.
-	//	 * 
-	//	 * @return
-	//	 */
-	//	public String getUUID() {
-	//		return this.uniqueID;
-	//	}
-
+	
+	
 	/**
 	 * Gets a string representing the result that can be used as a file name (eg. for exporting in file).
 	 * 
@@ -1910,14 +1970,15 @@
 	// FIXME: to discuss and/or to move in export layer
 	public String getValidFileName() {
 		try {
-			//return FILE_NAME_PATTERN.matcher(this.getCurrentName()).replaceAll(UNDERSCORE);
+			// return FILE_NAME_PATTERN.matcher(this.getCurrentName()).replaceAll(UNDERSCORE);
 			return this.getCurrentName().replaceAll("[¤€§µ£°().,;:/?§%\"'*+\\-}\\]\\[{#~&]", "");
-		} catch (Exception e) {
+		}
+		catch (Exception e) {
 			Log.printStackTrace(e);
 		}
 		return ""; //$NON-NLS-1$
 	}
-
+	
 	/**
 	 * Gets a string representing the concatenation of the simple names of the branch of this result.
 	 * 
@@ -1934,31 +1995,34 @@
 	 * @return the full path
 	 */
 	public String getFullPathSimpleName(boolean showTypes) {
-
+		
 		// fill the branch
-		List<TXMResult> branch = new ArrayList<TXMResult>();
+		List<TXMResult> branch = new ArrayList<>();
 		TXMResult node = this;
 		do {
 			branch.add(node);
 			node = node.getParent();
-		} while (node != null);
-
+		}
+		while (node != null);
+		
 		// create the reversed string
 		StringBuilder b = new StringBuilder();
 		for (int i = branch.size() - 1; i >= 0; i--) {
 			if (showTypes) {
 				b.append("[\"" + branch.get(i).getClass().getSimpleName() + ": \"" + branch.get(i).getSimpleName() + "\"] / "); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-			} else {
-				b.append("[\"" + branch.get(i).getSimpleName() + "\"] / "); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 			}
+			else {
+				b.append("[\"" + branch.get(i).getSimpleName() + "\"] / "); //$NON-NLS-1$ //$NON-NLS-2$
+			}
 		}
+		// remove last ] and /
 		b.deleteCharAt(b.length() - 3);
 		b.deleteCharAt(b.length() - 2);
 		b.deleteCharAt(b.length() - 1);
-
+		
 		return b.toString();
 	}
-
+	
 	/**
 	 * Gets the weight of the node. Essentially used for sorting purpose.
 	 * 
@@ -1967,23 +2031,25 @@
 	public int getWeight() {
 		return weight;
 	}
-
+	
 	/**
 	 * Cleans and free some resources if needed. This methods is applied when
 	 * calling <code>TXMResult.delete()</code>.
 	 */
 	public abstract void clean();
-
+	
 	@Override
 	public TXMResult clone() {
 		return clone(null, true);
 	}
-
+	
 	public TXMResult clone(boolean all) {
 		return clone(null, all);
 	}
+	
 	/**
 	 * recursive method to clone a result
+	 * 
 	 * @param newParent necessary for cloning children in the right clone parent
 	 * @param all
 	 * @return
@@ -1991,38 +2057,39 @@
 	protected TXMResult clone(TXMResult newParent, boolean all) {
 		TXMResult clone = null;
 		try {
-			String newNodePath = this.getProject().getParametersNodeRootPath()+ createUUID() + "_" + this.getClass().getSimpleName();
+			String newNodePath = this.getProject().getParametersNodeRootPath() + createUUID() + "_" + this.getClass().getSimpleName();
 			TXMPreferences.cloneNode(this.getParametersNodePath(), newNodePath);
-
+			
 			if (newParent != null) { // change the cloned node parent preference
 				TXMPreferences.put(newNodePath, TXMPreferences.PARENT_PARAMETERS_NODE_PATH, newParent.getParametersNodePath());
 			}
-			clone =  this.getClass().getDeclaredConstructor(String.class).newInstance(newNodePath);
-
+			clone = this.getClass().getDeclaredConstructor(String.class).newInstance(newNodePath);
+			
 			if (all) {
 				for (TXMResult child : this.children) {
 					child.clone(clone, all);
 				}
 			}
-		} catch (Exception e) {
-			System.out.println(NLS.bind("Fail to clone {0}: {1}", this, e));
+		}
+		catch (Exception e) {
+			Log.severe(NLS.bind("Fail to clone {0}: {1}", this, e));
 			Log.printStackTrace(e);
 		}
 		return clone;
 	}
-
+	
 	public boolean importParameters(File parameters) {
 		try {
 			Properties props = new Properties();
 			props.load(IOUtils.getReader(parameters));
-
+			
 			// some tests before...
 			String className = props.getProperty("class");
 			if (className == null || className.length() == 0) {
 				System.out.println("** Error: No class internal parameter set.");
 				return false;
 			}
-
+			
 			if (this.getClass().getName().equals(className)) {
 				for (Object p : props.keySet()) {
 					String ps = p.toString();
@@ -2032,18 +2099,21 @@
 				}
 				this.autoLoadParametersFromAnnotations(); // update java parameters
 				this.loadParameters();
-			} else {
+			}
+			else {
 				System.out.println(NLS.bind("Cannot import parameters of {0} in a {1} result.", className, this.getClass().getName()));
 				return false;
 			}
-		} catch(Exception e) {
+		}
+		catch (Exception e) {
 			Log.printStackTrace(e);
 		}
 		return true;
 	}
-
+	
 	/**
 	 * import a result from a parameter file
+	 * 
 	 * @param allparameters the parameters file
 	 * @return the created result
 	 */
@@ -2051,28 +2121,28 @@
 		try {
 			Properties props = new Properties();
 			props.load(IOUtils.getReader(parameters));
-
+			
 			// some tests before...
 			String className = props.getProperty("class");
 			if (className == null || className.length() == 0) {
 				System.out.println("** Error: No class internal parameter set.");
 				return null;
 			}
-
+			
 			String bundleId = props.getProperty("bundle_id");
 			if (bundleId == null || bundleId.length() == 0) {
 				System.out.println("** Error: No bundle_id internal parameter set.");
 				return null;
 			}
-
+			
 			Bundle bundle = Platform.getBundle(bundleId);
 			if (bundle == null) {
 				Log.finest("** Error: can not restore object with bundle name " + bundleId); //$NON-NLS-1$
 				return null;
 			}
-
+			
 			// copy parameters
-			String newNodePath = this.getProject().getParametersNodeRootPath()+ createUUID() + "_" + className;
+			String newNodePath = this.getProject().getParametersNodeRootPath() + createUUID() + "_" + className;
 			TXMPreferences.put(newNodePath, TXMPreferences.PARENT_PARAMETERS_NODE_PATH, this.getParametersNodePath());
 			for (Object p : props.keySet()) {
 				String ps = p.toString();
@@ -2080,7 +2150,7 @@
 				if (TXMPreferences.RESULT_PARAMETERS_NODE_PATH.equals(ps)) continue;
 				TXMPreferences.put(newNodePath, ps, props.getProperty(ps, ""));
 			}
-
+			
 			// create instance
 			Class<?> cl = bundle.loadClass(className);
 			Constructor<?> cons = null;
@@ -2091,27 +2161,30 @@
 				}
 				try {
 					cons = cl.getConstructor(clazz);
-				} catch (Exception ce) {
+				}
+				catch (Exception ce) {
 					clazz = clazz.getSuperclass();
 				}
 			}
-
+			
 			if (cons == null) {
 				System.out.println(NLS.bind("Cannot import {0} in {1}", parameters, this));
-			} else {
+			}
+			else {
 				cons = cl.getConstructor(String.class);
 				TXMResult result = (TXMResult) cons.newInstance(newNodePath);
 				System.out.println(NLS.bind("{0} imported", result));
 				return result;
 			}
-
-		} catch (Exception e) {
+			
+		}
+		catch (Exception e) {
 			System.out.println(NLS.bind("Fail to import result from {0}: {1}", parameters, e));
 			Log.printStackTrace(e);
 		}
 		return null;
 	}
-
+	
 	/**
 	 * Set the TXMResult parameters
 	 * 
@@ -2120,8 +2193,8 @@
 	 * @return true if no parameter read occured
 	 * @throws CqiClientException
 	 */
-	//public abstract boolean setParameters(TXMParameters parameters) throws Exception;
-
+	// public abstract boolean setParameters(TXMParameters parameters) throws Exception;
+	
 	// this.parameters = parameters;
 	// if (this.parameters == null) {
 	// this.parameters = new TXMParameters();
@@ -2139,7 +2212,7 @@
 	// }
 	// }
 	// }
-
+	
 	/**
 	 * set the Java object class parameter members and check if the Java object
 	 * parameters are all set
@@ -2147,23 +2220,24 @@
 	 * @return true if parameters are all OK
 	 */
 	public abstract boolean canCompute() throws Exception;
-
-
+	
+	
 	/**
 	 * 
 	 */
 	public void acquireSemaphore() {
 		try {
 			this.progressSemaphore.acquire();
-		} catch (InterruptedException e) {
+		}
+		catch (InterruptedException e) {
 			Log.printStackTrace(e);
 		}
 	}
-
+	
 	/**
 	 * Computes the result if:
-	 *  - it can be computed (checking if all mandatory parameters are set)
-	 *  - it is dirty (manually or from history, if a parameters value has changed since last computing)
+	 * - it can be computed (checking if all mandatory parameters are set)
+	 * - it is dirty (manually or from history, if a parameters value has changed since last computing)
 	 * 
 	 * @return
 	 * @throws Exception
@@ -2171,11 +2245,11 @@
 	public boolean compute(boolean deepComputing) {
 		return this.compute(new LogMonitor("Computing " + this), deepComputing);
 	}
-
+	
 	/**
 	 * Computes the result if:
-	 *  - it can be computed (checking if all mandatory parameters are set)
-	 *  - it is dirty (manually or from history, if a parameters value has changed since last computing)
+	 * - it can be computed (checking if all mandatory parameters are set)
+	 * - it is dirty (manually or from history, if a parameters value has changed since last computing)
 	 * 
 	 * @return
 	 * @throws Exception
@@ -2183,8 +2257,8 @@
 	public boolean compute() {
 		return this.compute(new LogMonitor("Computing " + this));
 	}
-
-
+	
+	
 	/**
 	 * Computes the result if:
 	 * - it can be computed (checking if all mandatory parameters are set)
@@ -2196,8 +2270,8 @@
 	public boolean compute(IProgressMonitor monitor) {
 		return this.compute(monitor, true);
 	}
-
-
+	
+	
 	/**
 	 * Computes the result if:
 	 * - it can be computed (checking if all mandatory parameters are set)
@@ -2208,14 +2282,15 @@
 	 * @return
 	 */
 	protected boolean compute(IProgressMonitor monitor, boolean deepComputing) {
-
+		
+		// skip the process if the result is already in computing phase
 		if (this.computing) {
 			return true;
 		}
-
+		
 		this.computing = true;
-
-
+		
+		
 		// no changes to do
 		// FIXME: SJ: we need to do do some actions even if the object is locked, eg. updating parameters, saving parameters, etc.
 		// FIXME MD: nope the parameters must not move and will be saved in the current state
@@ -2223,127 +2298,129 @@
 			this.computing = false;
 			return true;
 		}
-
-
+		
+		
 		try {
-
+			
 			Log.finest("*** TXMResult.compute(): " + this.getClass().getSimpleName() + ": starting computing process...");
-
-
+			
+			
 			// FIXME: SJ: see if this skipComputing tests is still useful? is it possible to directly return instead?
-			// en fait voir ChartResult.compute() if(super.compute(monitor, true, false)), je pense que le prob vient du fait que si on retourne false dans TXMResult.compute() alors renderChart() ne sera pas appelé
-			// il faudrait retourner un état: skipped, computed, error, etc. 
+			// en fait voir ChartResult.compute() if(super.compute(monitor, true, false)), je pense que le prob vient du fait que si on retourne false dans TXMResult.compute() alors renderChart() ne
+			// sera pas appelé
+			// il faudrait retourner un état: skipped, computed, error, etc.
 			boolean skipComputing = false;
-
+			
 			this.monitor = monitor;
-
+			
 			// compute the parent if needed
 			if (this.parent != null && !(this.parent instanceof Project) && !(this.parent instanceof Workspace)) {
-
+				
 				Log.finest("TXMResult.compute(): " + this.getClass().getSimpleName() + ": starting parent (" + this.parent.getClass().getSimpleName() + ") computing process...");
-
+				
 				if (!this.parent.compute(monitor, true)) {
 					Log.finest("TXMResult.compute(): " + this.getClass().getSimpleName() + ": failed to compute parent result.");
 					this.computing = false;
 					return false;
 				}
 			}
-
+			
 			// update the dirty state from history if a parameter has changed since last computing
 			this.updateDirtyFromHistory();
-
+			
 			// check if the result is dirty
 			if (!this.isDirty()) {
 				Log.finest("--- TXMResult.compute(): " + this.getClass().getSimpleName() + ": result parameters have not changed since last computing, computing skipped.");
 				skipComputing = true;
 			}
-
-			if(!skipComputing)	{
-
-
+			
+			if (!skipComputing) {
+				
+				
 				// Debug
 				Log.finest("+++ TXMResult.compute(): " + this.getClass().getSimpleName() + ": computing result of type " + this.getClass() + "...");
-
+				
 				// Computing requirements test
 				if (!this.canCompute()) {
 					Log.finest("TXMResult.compute(): " + this.getClass().getSimpleName() + ": can not compute, missing or wrong parameters or error with parent computing, computing aborted.");
 					this.computing = false;
 					return false;
 				}
-
-				//Log.info(this.getComputingStartMessage());
-
-
-				if (monitor != null) monitor.subTask(this.getSimpleName()+"...");
+				
+				// Log.info(this.getComputingStartMessage());
+				
+				
+				if (monitor != null) monitor.subTask(this.getSimpleName() + "...");
 				// Computing
 				if (!this._compute()) {
 					Log.finest("TXMResult.compute(): " + this.getClass().getSimpleName() + ": computing failed.");
 					this.computing = false;
 					return false;
 				}
-
+				
 			}
-
+			
 			// clear the lazy name, no more needed since the object has been computed and getSimpleName() can now work
 			this.lazyName = null;
-
+			
 			// store last used parameters
 			this.updateLastParameters();
-
-
-			if(!skipComputing)	{
-
+			
+			
+			if (!skipComputing) {
+				
 				// store last used parameters
-				//				this.updateLastParameters();
+				// this.updateLastParameters();
 				if (this.hasBeenComputedOnce// don't update the computing date if the object has been lazy loaded
 						|| this.lastComputingDate == null) { // set the update date if never computed once
 					this.lastComputingDate = Calendar.getInstance().getTime(); // update this internal parameter before saving parameters
 				}
-
+				
 				if (!this.autoSaveParametersFromAnnotations()) {
 					Log.severe("TXMResult.compute(): " + this.getClass().getSimpleName() + ": failed to save parameters from annotations for " + this.getName() + ".");
 				}
 				if (!this.saveParameters()) {
 					Log.severe("TXMResult.compute():" + this.getClass().getSimpleName() + ": failed to save parameters for " + this.getName() + ".");
 				}
-
-				// FIXME: SJ: need to find a way to flush file only if it's necessary. For example at this time, at start when all Edition, Text, etc. are recreated, all .prefs file are flushed but it useless and slow
+				
+				// FIXME: SJ: need to find a way to flush file only if it's necessary. For example at this time, at start when all Edition, Text, etc. are recreated, all .prefs file are flushed but it
+				// useless and slow
 				// file persistence flush
 				if (this.mustBePersisted()) {
 					TXMPreferences.flush(this);
 				}
-
+				
 				this.dirty = false; // the computing was successful, the result is no more dirty
 				this.hasBeenComputedOnce = true;
-
+				
 				if (this.altered) {
 					Log.finest(NLS.bind("TXMResult.compute(): Warning {0} modifications have been lost.", this.getSimpleName()));
 				}
 				this.altered = false;
 				Log.finest("TXMResult.compute(): " + this.getClass().getSimpleName() + ": computing of result type " + this.getClass() + " done.");
-
-				//Log.info(this.getComputingDoneMessage());
-
-
+				
+				// Log.info(this.getComputingDoneMessage());
+				
+				
 			}
-
-
+			
+			
 			// Children computing
-			if(!skipComputing
+			if (!skipComputing
 					|| this.altered // FIXME: SJ: fix for computing LexicalTable children even if the LT is not dirty but only altered, need to define if it's a temporary fix or not
-					)	{
-
-				if (monitor != null && children.size() > 1) monitor.beginTask("Computing children of "+this, children.size());
+			) {
+				
+				if (monitor != null && children.size() > 1) monitor.beginTask("Computing children of " + this, children.size());
 				// set the children as dirty since the result has changed
 				for (int i = 0; i < this.children.size(); i++) {
 					this.children.get(i).setDirty();
 				}
-
+				
 				// Children cascade computing (if parent == null then it is the Workspace (Tree root))
 				if (deepComputing && this.parent != null) {
-
+					
 					Log.finest("TXMResult.compute(): " + this.getClass().getSimpleName() + ": cascade computing of " + this.children.size() + " child(ren).");
-
+					
 					for (int i = 0; i < this.children.size(); i++) {
 						this.children.get(i).compute(monitor, deepComputing);
 						
@@ -2351,7 +2428,7 @@
 					}
 				}
 			}
-
+			
 		}
 		catch (Exception e) {
 			e.printStackTrace();
@@ -2359,28 +2436,30 @@
 			this.computing = false;
 			return false;
 		}
-
+		
 		this.computing = false;
 		return true;
 	}
-
+	
 	/**
-	 * This method is dedicated to be implemented by the inherited result classes to define the computing steps.  
+	 * This method is dedicated to be implemented by the inherited result classes to define the computing steps.
+	 * 
 	 * @return true if the result was computed
 	 * 
 	 * @throws Exception
 	 */
 	protected abstract boolean _compute() throws Exception;
-
-
+	
+	
 	/***
 	 * Checks if the result must be persisted according to the persistence global preference or the user persistable state.
-	 * @return true if the result as been internally marked as persistable (eg. Corpora, Partition) or if the user has marked the result 
+	 * 
+	 * @return true if the result as been internally marked as persistable (eg. Corpora, Partition) or if the user has marked the result
 	 */
-	public boolean mustBePersisted()	{
+	public boolean mustBePersisted() {
 		return this.internalPersistable || this.userPersistable;
 	}
-
+	
 	/**
 	 * 
 	 * @return the array of extensions to show in the FileDialog SWT widget
@@ -2390,18 +2469,20 @@
 	public String[] getExportTXTExtensions() {
 		return new String[] { "*.csv" };
 	}
-
+	
 	/**
 	 * Checks if the monitor is canceled.
+	 * 
 	 * @return true if the monitor has been canceled by the user
 	 */
+	@Override
 	public boolean isCanceled() {
 		if (monitor != null) {
 			return monitor.isCanceled();
 		}
 		return false;
 	}
-
+	
 	/**
 	 * 
 	 * @return
@@ -2409,14 +2490,14 @@
 	public boolean tryAcquireSemaphore() {
 		return this.progressSemaphore.tryAcquire();
 	}
-
+	
 	/**
 	 * 
 	 */
 	public void releaseSemaphore() {
 		this.progressSemaphore.release();
 	}
-
+	
 	/**
 	 * You must set the current monitor to be available to manage the process
 	 * progress
@@ -2434,24 +2515,25 @@
 		this.monitor = monitor;
 		return true;
 	}
-
+	
 	@Deprecated
 	// FIXME: SJ: should be moved in an exporter extension
 	public abstract boolean toTxt(File outfile, String encoding, String colseparator, String txtseparator) throws Exception;
-
-
+	
+	
 	/**
 	 * Increments the progress of the specified amount of work.
 	 * 
 	 * @param amount of work
 	 */
+	@Override
 	public void worked(int amount) {
 		if (monitor != null) {
 			// System.out.println("worked "+amount);
 			monitor.worked(amount);
 		}
 	}
-
+	
 	/**
 	 * Increments the progress of the specified amount of work and displays a message.
 	 * 
@@ -2465,7 +2547,7 @@
 		}
 		Log.fine(message);
 	}
-
+	
 	@Override
 	public void beginTask(String name, int totalWork) {
 		if (monitor != null) {
@@ -2473,21 +2555,21 @@
 		}
 		Log.fine(name);
 	}
-
+	
 	@Override
 	public void done() {
 		if (monitor != null) {
 			monitor.done();
 		}
 	}
-
+	
 	@Override
 	public void internalWorked(double work) {
 		if (monitor != null) {
 			monitor.internalWorked(work);
 		}
 	}
-
+	
 	@Override
 	public void setCanceled(boolean value) {
 		if (monitor != null) {
@@ -2495,7 +2577,7 @@
 		}
 		Log.info("Canceling command...");
 	}
-
+	
 	@Override
 	public void setTaskName(String name) {
 		if (monitor != null) {
@@ -2503,7 +2585,7 @@
 		}
 		Log.fine(name);
 	}
-
+	
 	@Override
 	public void subTask(String name) {
 		if (monitor != null) {
@@ -2511,30 +2593,32 @@
 		}
 		Log.fine(name);
 	}
-
+	
 	/**
 	 * Gets the user defined name.
+	 * 
 	 * @return the user name
 	 */
 	public String getUserName() {
 		return userName;
 	}
-
+	
 	/**
 	 * Gets the result type. Should be localized (eg. CA => AFC, Word cloud => Nuage de mots).
 	 * This method can be used for logging or UI.
 	 * This method can also be used to sort the result by type (alphanumeric order) according to the current language.
+	 * 
 	 * @return
 	 */
 	public abstract String getResultType();
-
-
+	
+	
 	@Override
 	public int compareTo(TXMResult o) {
 		// Compare node weights
 		return Integer.compare(this.weight, o.weight);
 	}
-
+	
 	/**
 	 * 
 	 * @param e1
@@ -2544,12 +2628,13 @@
 	public static int compare(TXMResult e1, TXMResult e2) {
 		if (e1 == null && e2 == null) return 0;
 		if (e1 == null) return 1;
-
+		
 		return e1.getParametersNodePath().compareTo(e2.getParametersNodePath());
 	}
-
+	
 	/**
-	 * Sets a boolean state to define if the result has already been computed at least once or not. 
+	 * Sets a boolean state to define if the result has already been computed at least once or not.
+	 * 
 	 * @param hasBeenComputedOnce the hasBeenComputedOnce to set
 	 */
 	// FIXME: SJ: became useless
@@ -2557,51 +2642,56 @@
 	public void setHasBeenComputedOnce(boolean hasBeenComputedOnce) {
 		this.hasBeenComputedOnce = hasBeenComputedOnce;
 	}
-
+	
 	/**
 	 * Gets a boolean state defining if the result has already been computed at least once or not.
 	 * 
 	 * true if the result has already been lazy LOADED...........
+	 * 
 	 * @return
 	 */
 	public boolean hasBeenComputedOnce() {
 		return hasBeenComputedOnce;
 	}
-
-
+	
+	
 	/**
-	 * Gets the internal persistable state. 
+	 * Gets the internal persistable state.
+	 * 
 	 * @return the persistable
 	 */
 	public boolean isInternalPersistable() {
 		return internalPersistable;
 	}
-
+	
 	/**
 	 * Sets the internal persistable state. Results internally persisted will not be deleted when quitting, event if the user set them as non persistable.
+	 * 
 	 * @param persistable the persistable to set
 	 */
 	public void setInternalPersistable(boolean persistable) {
 		this.internalPersistable = persistable;
 	}
-
+	
 	/**
 	 * Gets the lazy name.
 	 * Since some result names need computed data, this name is dedicated to display the result name even if it has not been recomputed after being loaded.
+	 * 
 	 * @return the lazyName
 	 */
 	public String getLazyName() {
 		return lazyName;
 	}
-
+	
 	/**
 	 * Gets the user defined persistable state of the result.
+	 * 
 	 * @return the state
 	 */
 	public boolean isUserPersistable() {
 		return userPersistable;
 	}
-
+	
 	/**
 	 * Sets the user defined persistable state of the result.
 	 * Propagates persistence to parent and non-persistence to the children if needed.
@@ -2618,7 +2708,7 @@
 				child.setUserPersistable(userPersistable);
 			}
 		}
-
+		
 		// directly save and flush the preference
 		try {
 			if (this.isUserPersistable()) {
@@ -2631,61 +2721,65 @@
 			e.printStackTrace();
 		}
 	}
-
+	
 	/**
-	 * Swaps the user persistable state. 
+	 * Swaps the user persistable state.
 	 * 
 	 * propagate persistence to parent if necessary
 	 */
-	public void swapUserPersistableState()	{
+	public void swapUserPersistableState() {
 		this.setUserPersistable(!this.userPersistable);
 	}
-
+	
 	/**
 	 * Gets the project of the result.
+	 * 
 	 * @return the project of the result
 	 */
 	public final Project getProject() {
 		return (Project) this.getFirstParent(Project.class);
 	}
-
+	
 	/**
 	 * Gets the parameters node path.
+	 * 
 	 * @return the parametersNodePath
 	 */
 	public String getParametersNodePath() {
 		return parametersNodePath;
 	}
-
+	
 	/**
 	 * @return the parametersHistory
 	 */
 	public ArrayList<HashMap<String, Object>> getParametersHistory() {
 		return parametersHistory;
 	}
-
+	
 	/**
 	 * Gets the last computing date.
+	 * 
 	 * @return the last computing date
 	 */
 	public Date getLastComputingDate() {
 		return this.lastComputingDate;
 	}
-
+	
 	/**
 	 * Gets the creation date.
+	 * 
 	 * @return the creation date
 	 */
 	public Date getCreationDate() {
 		return this.creationDate;
 	}
-
-
+	
+	
 	public boolean toParametersFile(File outfile) throws IOException {
 		return TXMPreferences.flush(this, outfile);
 	}
-
-
+	
+	
 	/**
 	 * Generic toString() method for TXMResult.
 	 */
@@ -2699,7 +2793,7 @@
 		}
 		return this.getSimpleName();
 	}
-
+	
 	/**
 	 * Default implementation getSimpleDetails
 	 * 
Index: tmp/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/corpus/query/QueryPart.java
===================================================================
--- tmp/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/corpus/query/QueryPart.java	(revision 2409)
+++ tmp/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/corpus/query/QueryPart.java	(revision 2410)
@@ -39,16 +39,16 @@
  * @author sloiseau
  */
 public class QueryPart extends CQLQuery {
-
+	
 	/** The structure. */
 	protected StructuralUnit structure;
-
+	
 	/** The property. */
 	protected StructuralUnitProperty property;
-
+	
 	/** The value. */
 	protected String value;
-
+	
 	/**
 	 * Instantiates a new query part.
 	 * 
@@ -65,49 +65,50 @@
 		this.property = property;
 		this.value = value;
 		
-//		String tag = structure.getName() + TAG_ATTRIBUTE_SEPARATOR + property.getName();
-//		String label = "a"; //$NON-NLS-1$
-//		StringBuffer query = new StringBuffer();
-//		query.append(REGION_MACRO + START_MACRO_ARGS);
-//		query.append(tag + MACRO_ARGS_SEPARATOR + label + END_MACRO_ARGS);
-//		query.append(START_GLOBAL_CONSTRAINT + label + DOT + tag + EQUALS
-//				+ START_DOUBLE_QUOTE + value + END_DOUBLE_QUOTE);
-//		queryString = query.toString();
+		// String tag = structure.getName() + TAG_ATTRIBUTE_SEPARATOR + property.getName();
+		// String label = "a"; //$NON-NLS-1$
+		// StringBuffer query = new StringBuffer();
+		// query.append(REGION_MACRO + START_MACRO_ARGS);
+		// query.append(tag + MACRO_ARGS_SEPARATOR + label + END_MACRO_ARGS);
+		// query.append(START_GLOBAL_CONSTRAINT + label + DOT + tag + EQUALS
+		// + START_DOUBLE_QUOTE + value + END_DOUBLE_QUOTE);
+		// queryString = query.toString();
 		
 		if ("text".equals(structure.getName())) { // optimisation only for the text structure
-			queryString = "<"+property.getFullName()+"=\""+CQLQuery.addBackSlash(value)+"\">[] expand to "+structure.getName();
-		} else {
-			queryString = "[_."+property.getFullName()+"=\""+CQLQuery.addBackSlash(value)+"\"] expand to "+structure.getName();
+			queryString = "<" + property.getFullName() + "=\"" + CQLQuery.addBackSlash(value) + "\">[] expand to " + structure.getName();
 		}
+		else {
+			queryString = "[_." + property.getFullName() + "=\"" + CQLQuery.addBackSlash(value) + "\"] expand to " + structure.getName();
+		}
 	}
-
+	
 	public StructuralUnit getStructure() {
 		return structure;
 	}
-
+	
 	public StructuralUnitProperty getProperty() {
 		return property;
 	}
-
+	
 	public String getValue() {
 		return value;
 	}
-
-//	/*
-//	 * (non-Javadoc)
-//	 * 
-//	 * @see org.txm.searchengine.cqp.corpus.query.Query#getQueryString()
-//	 */
-//	/*
-//	 * Produce a query such as: [_.struct_property="value"] expand to struct
-//	 *  
-//	 * OLD VERSION: /region[TEI_type,a]::a.TEI_type="value"
-//	 */
-//	@Override
-//	public String getQueryString() {
-//		return queryString;
-//		
-//		// another way to query parts less restrictif but missleading
-//		//return String.format("[_.%s=\"%s\"] expand to %s", tag, value, structure.getName());
-//	}
+	
+	// /*
+	// * (non-Javadoc)
+	// *
+	// * @see org.txm.searchengine.cqp.corpus.query.Query#getQueryString()
+	// */
+	// /*
+	// * Produce a query such as: [_.struct_property="value"] expand to struct
+	// *
+	// * OLD VERSION: /region[TEI_type,a]::a.TEI_type="value"
+	// */
+	// @Override
+	// public String getQueryString() {
+	// return queryString;
+	//
+	// // another way to query parts less restrictif but missleading
+	// //return String.format("[_.%s=\"%s\"] expand to %s", tag, value, structure.getName());
+	// }
 }
Index: tmp/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/corpus/QueryResult.java
===================================================================
--- tmp/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/corpus/QueryResult.java	(revision 2409)
+++ tmp/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/corpus/QueryResult.java	(revision 2410)
@@ -131,6 +131,7 @@
 	 * @throws CqiClientException
 	 *             the cqi client exception
 	 */
+	@Override
 	public void drop() throws CqiClientException {
 		
 		try {
@@ -162,7 +163,8 @@
 		int n = this.getNMatch();
 		if (n > 0) {
 			return getEnds(0, n - 1);
-		} else {
+		}
+		else {
 			return new int[0];
 		}
 	}
@@ -214,14 +216,16 @@
 	 * @throws CqiClientException
 	 *             the cqi client exception
 	 */
+	@Override
 	public List<Match> getMatches() throws CqiClientException {
 		
 		int n = this.getNMatch();
 		if (n > 0) {
 			return getMatches(0, n - 1);
-		} else {
-			return new ArrayList<Match>();
 		}
+		else {
+			return new ArrayList<>();
+		}
 	}
 	
 	
@@ -247,15 +251,17 @@
 	 * @return
 	 * @throws CqiClientException
 	 */
+	@Override
 	public List<Match> getMatches(int from, int to) throws CqiClientException {
 		
 		int[] starts, ends, targets;
-		List<Match> res = new ArrayList<Match>();
+		List<Match> res = new ArrayList<>();
 		try {
 			starts = getStarts(from, to);
 			ends = getEnds(from, to);
 			targets = getTargets(from, to);
-		} catch (Exception e) {
+		}
+		catch (Exception e) {
 			throw new CqiClientException(e);
 		}
 		for (int i = 0; i <= to - from; i++) {
@@ -289,12 +295,14 @@
 	 * @throws CqiClientException
 	 *             the cqi client exception
 	 */
+	@Override
 	public int getNMatch() throws CqiClientException {
 		
 		// if (nMatch == -1) //
 		try {
 			nMatch = CorpusManager.getCorpusManager().getCqiClient().subCorpusSize(getQualifiedCqpId());
-		} catch (Exception e) {
+		}
+		catch (Exception e) {
 			return 0;
 		}
 		return nMatch;
@@ -351,6 +359,7 @@
 	 * 
 	 * @return the query
 	 */
+	@Override
 	public CQLQuery getQuery() {
 		
 		return query;
@@ -385,7 +394,8 @@
 			return CorpusManager.getCorpusManager().getCqiClient()
 					.dumpSubCorpus(getQualifiedCqpId(),
 							NetCqiClient.CQI_CONST_FIELD_MATCH, from, to);
-		} catch (Exception e) {
+		}
+		catch (Exception e) {
 			throw new CqiClientException(e);
 		}
 	}
@@ -395,7 +405,8 @@
 		int n = this.getNMatch();
 		if (n > 0) {
 			return getStarts(0, n - 1);
-		} else {
+		}
+		else {
 			return new int[0];
 		}
 	}
@@ -405,6 +416,7 @@
 		return CorpusManager.getCorpusManager().getCqiClient().dumpSubCorpus(getQualifiedCqpId(), NetCqiClient.CQI_CONST_FIELD_MATCH, from, to);
 	}
 	
+	@Override
 	public String toString() {
 		
 		return this.getQualifiedCqpId();
