Пример #1
0
 /// <summary>
 /// The main production execution method
 /// </summary>
 /// <param name="production">A <see cref="Production"/> instance</param>
 /// <param name="productionContext">A <see cref="ProductionContext"/> instance</param>
 /// <returns>A ProductionResult</returns>
 public ProductionResult ExecuteProduction(Production production, ProductionContext productionContext)
 {
     _productionContext = productionContext;
     // Production could be templated, resolve its parameters using the ProductionContext parameters as context values
     production.ResolveParameters(_productionContext.Parameters);
     // now add Production parameters to ProductionContext parameters
     _productionContext.AddParameters(production.Parameters);
     _productionResult = new ProductionResult();
     foreach (TransformationInfo transformationInfo in production.Transformations)
     {
         TransformationResult transformationResult = ExecuteTransformation(transformationInfo);
         _productionResult.AccumulateTransformationResult(transformationResult);
         if (transformationResult.TransformationResultType == TransformationResultType.CodeEmitter)
         {
             List<GeneratedArtifact> artifacts = transformationResult.CodeEmitter.EmitCode(_productionContext.TargetTechnologies, _productionContext);
             _productionResult.AddGeneratedArtifacts(artifacts);
         }
         else if (transformationResult.TransformationResultType == TransformationResultType.NewModel)
         {
             if (string.IsNullOrEmpty(transformationInfo.OutputModelKey))
                 throw new FactoryException("Missing OutputModelKey in a Transformation resulting in a new Model " + transformationInfo.ToString());
             _productionContext.SetModel(transformationInfo.OutputModelKey, transformationResult.Model);
         }
     }
     return _productionResult;
 }
Пример #2
0
 /// <summary>
 /// Write a <see cref="ProductionResult"/> to persistent storage.
 /// </summary>
 /// <param name="productionResult">The <see cref="ProductionResult"/></param>
 /// <param name="productionContext">The <see cref="ProductionContext"/></param>
 /// <returns>A <see cref="ProductionPersistence"/> instance</returns>
 public ProductionPersistence Persist(ProductionResult productionResult, ProductionContext productionContext)
 {
     ProductionPersistence retval = new ProductionPersistence(productionContext.Parameters);
     foreach (GeneratedArtifact generatedArtifact in productionResult.GeneratedArtifacts)
     {
         IArtifactPersister artifactPersister = FactoryHost.Instance.GetArtifactPersister(generatedArtifact.TargetLanguage, null);
         artifactPersister.Persist(generatedArtifact, productionContext, retval);
     }
     return retval;
 }
Пример #3
0
 /// <summary>
 /// Persist a production
 /// </summary>
 /// <param name="productionResult">A <see cref="ProductionResult"/> instance</param>
 /// <param name="productionContext">A <see cref="ProductionContext"/> instance</param>
 /// <returns></returns>
 public ProductionPersistence PersistProduction(ProductionResult productionResult, ProductionContext productionContext)
 {
     ProductionPersister productionPersister = new ProductionPersister();
     return productionPersister.Persist(productionResult, productionContext);
 }