r716 - in branches/eugene-2.0: eugene/src/main/java/org/nuiton/eugene eugene-test/src/main/java/org/nuiton/eugene/test/generator
Author: fdesbois Date: 2009-11-13 14:24:38 +0100 (Fri, 13 Nov 2009) New Revision: 716 Modified: branches/eugene-2.0/eugene-test/src/main/java/org/nuiton/eugene/test/generator/Megatron.java branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/Transformer.java Log: - Suppress initInputModel - Add previous Transformer managment to transform the input model before starting the real current transformation Modified: branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/Transformer.java =================================================================== --- branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/Transformer.java 2009-11-13 13:00:23 UTC (rev 715) +++ branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/Transformer.java 2009-11-13 13:24:38 UTC (rev 716) @@ -47,6 +47,11 @@ protected Template<O> outputTemplate; /** + * Previous transformer to modify input model + */ + protected Transformer<I, I> previousTransformer; + + /** * Output model. */ protected O outputModel; @@ -71,21 +76,15 @@ * @since 2.0.0 */ protected void init(I model) { - this.model = initInputModel(model); + this.model = model; + this.previousTransformer = initPreviousTransformer(); this.outputTemplate = initOutputTemplate(); this.outputTemplate.setProperties(getOutputProperties()); this.outputModel = initOutputModel(); } - /** - * Initialization of the Input model. By default, this method do nothing. You have - * to override it if you want to do some transformation of the input model. - * @param model input Model from Reader - * @return the input Model - * @since 2.0.0 - */ - protected I initInputModel(I model) { - return model; + protected Transformer<I, I> initPreviousTransformer() { + return null; } /** @@ -145,10 +144,11 @@ /** - * Transform an input model and use destination directory to put generated files for output generator. - * This method initialize the transformer then transform the input model into an other model - * with ${@link #transform(org.nuiton.eugene.models.Model) method and finally generate from - * the output model, using the output generator and the destination directory. + * This method apply the current transformation. You can use an other transformer for previous transformation + * by overriding {@link #initPreviousTransformer} method. In this case, the current transformation will be apply + * on the output model of the previous one. In the simple other case, the current transformation transform the input model + * into an output model. You must override {@link #initOutputModel} and {@link #initOutputTemplate } methods to initialize + * output model and output template to apply (generally a generator). * @param model input model to transform and generate * @param destDir destination directory to put generated files * @throws IOException @@ -156,12 +156,22 @@ */ @Override public void applyTemplate(I model, File destDir) throws IOException { - transform(model); + // previous transformation + if (previousTransformer != null) { + // transformation only, no application of next template + previousTransformer.transform(model); + // current transformation + transform(previousTransformer.getOutputModel()); + } else { + // current transformation + transform(model); + } + // after template application getOutputTemplate().applyTemplate(getOutputModel(), destDir); } /** - * Transformation method from an input Model. This method also initialize input model, output model + * Transformation method from an input Model. This method also initialize previous transformer, output model * and output generator with ${@link #init(org.nuiton.eugene.models.Model) } method. * @param model input model * @since 2.0.0 @@ -172,7 +182,7 @@ } /** - * Method to override for the transformation. Initialization (InputModel, OutputModel, OutputGenerator) + * Method to override for the transformation. Initialization (PreviousTransformer, OutputModel, OutputGenerator) * is made before transformation call. This method only transform an input model into an output model. * No generation is done neither outputGenerator call. * @since 2.0.0 Modified: branches/eugene-2.0/eugene-test/src/main/java/org/nuiton/eugene/test/generator/Megatron.java =================================================================== --- branches/eugene-2.0/eugene-test/src/main/java/org/nuiton/eugene/test/generator/Megatron.java 2009-11-13 13:00:23 UTC (rev 715) +++ branches/eugene-2.0/eugene-test/src/main/java/org/nuiton/eugene/test/generator/Megatron.java 2009-11-13 13:24:38 UTC (rev 716) @@ -25,14 +25,12 @@ /* CAS modele de sortie vide : modele d'entree transformee par BeanTransformer + */ + @Override + protected ObjectModelTransformerToJava initPreviousTransformer() { + return new BeanTransformer(); + } - @Override - protected ObjectModel initInputModel(ObjectModel model) { // preparation du modele d'entrée - BeanTransformer beanTransformer = new BeanTransformer(); - beanTransformer.transform(model); - return beanTransformer.getOutputModel(); - }*/ - @Override public void transformFromClass(ObjectModelClass clazz) {
participants (1)
-
fdesbois@users.nuiton.org