code: @Override
  	public List<ParsingError> doValidate() {
  
  		List<ParsingError> result = new ArrayList<> ();
  
  		// Basic checks
  		if( Utils.isEmptyOrWhitespaces( this.key ))
  			result.add( error( ErrorCode.CMD_EMPTY_VARIABLE_NAME ));
  
  		// Formatted time must be processed apart.
  		// Such a variable must be single on its line.
  		else if( this.value.startsWith( FORMATTED_TIME_PREFIX )
  				&& this.value.endsWith( ")" )) {
  
  			String datePattern = extractDatePattern( this.value );
  			if( datePattern.contains( "$(" )) {
  				result.add( error( ErrorCode.CMD_NO_MIX_FOR_PATTERNS, variable( this.key )));
  
  			} else try {
  				new SimpleDateFormat( datePattern );
  
  			} catch( Exception e ) {
  				result.add( error( ErrorCode.CMD_INVALID_DATE_PATTERN, value( datePattern )));
  			}
  		}
  
  		// A formatted time in the middle of something else?
  		else if( this.value.contains( FORMATTED_TIME_PREFIX )) {
  			result.add( error( ErrorCode.CMD_NO_MIX_FOR_PATTERNS, variable( this.value )));
  		}
  
  		// The index variable is very strict
  		Pattern indexPattern = Pattern.compile( EXISTING_INDEX_PATTERN );
  		if( this.value.contains( EXISTING_INDEX_PREFIX )
  				&& ! indexPattern.matcher( this.value ).matches()) {
  			result.add( error( ErrorCode.CMD_INVALID_INDEX_PATTERN, variable( this.value )));
  		}
  
  		// Validate instance existence at the end, and only if no error was found before
  		if( result.isEmpty()
  				&& this.instancePath != null
  				&& ! this.context.instanceExists( this.instancePath ))
  			result.add( error( ErrorCode.CMD_NO_MATCHING_INSTANCE ));
  
  		return result;
  	}
docs: /*
  (non-Javadoc)
  @see net.roboconf.core.commands.AbstractCommandInstruction#doValidate()