code: public final void execute() throws MojoExecutionException {
  
  		// Initialize missing Mojo parameters
  		initMojoMultiValueParameters();
  
  		// If skip flag set then omit code generator execution
  		if (isSkip()) {
  			getLog().info("Skipping code generator execution");
  			return;
  		}
  
  		// Check model file
  		File modelFile = getModelFile();
  		if (!modelFile.exists() || !modelFile.isFile()) {
  			throw new MojoExecutionException("Model file '" + model + "' specified in <model/> does not exists");
  		}
  
  		// If not forced flag set the check for modified source files
  		Set<String> changedFiles;
  		if (isForce()) {
  			getLog().info("Forced code generator execution");
  			changedFiles = null;
  		} else {
  			changedFiles = getChangedFiles();
  		}
  
  		// Code generator is only executed if force flag is set or source files
  		// are modified
  		if (changedFiles == null || !changedFiles.isEmpty()) {
  
  			// If clean flag set then delete the previously generated files
  			if (isClean()) {
  				deleteGeneratedFiles();
  			} else {
  				getLog().info("Automatic cleanup disabled - keeping " + "previously generated files");
  			}
  
  			// Execute Sculptor code generator
  			if (!executeGenerator()) {
  				throw new MojoExecutionException("Sculptor code generator failed");
  			}
  		}
  
  		// Extend the Maven projects compile source roots and resource
  		// directories with the generators directories
  		extendProjectCompileRootsAndResources();
  	}
docs: Strategy implementation of running the code generator:
  <ol>
  <li>check the <code>skip</code> flag
  <li>check the specified <code>workflowDescriptor</code> file
  <li>get a list of modified files from <code>checkFileSets</code>
  <li>run the code generator
  <li>update the <code>statusFile</code>
  <li>extend the compile roots and resources of the enclosing Maven project
  with the output directories of the code generator
  </ol>