View Javadoc
1   /*
2    * #%L
3    * ToPIA :: Persistence
4    * $Id$
5    * $HeadURL$
6    * %%
7    * Copyright (C) 2004 - 2014 CodeLutin
8    * %%
9    * This program is free software: you can redistribute it and/or modify
10   * it under the terms of the GNU Lesser General Public License as 
11   * published by the Free Software Foundation, either version 3 of the 
12   * License, or (at your option) any later version.
13   * 
14   * This program is distributed in the hope that it will be useful,
15   * but WITHOUT ANY WARRANTY; without even the implied warranty of
16   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17   * GNU General Lesser Public License for more details.
18   * 
19   * You should have received a copy of the GNU General Lesser Public 
20   * License along with this program.  If not, see
21   * <http://www.gnu.org/licenses/lgpl-3.0.html>.
22   * #L%
23   */
24  
25  package org.nuiton.topia.generator;
26  
27  import org.apache.commons.logging.Log;
28  import org.apache.commons.logging.LogFactory;
29  import org.codehaus.plexus.component.annotations.Component;
30  import org.nuiton.eugene.AbstractMetaTransformer;
31  import org.nuiton.eugene.Template;
32  import org.nuiton.eugene.models.object.ObjectModel;
33  import org.nuiton.eugene.models.object.ObjectModelClass;
34  import org.nuiton.eugene.models.object.validator.AttributeNamesValidator;
35  import org.nuiton.eugene.models.object.validator.ClassNamesValidator;
36  import org.nuiton.eugene.models.object.validator.ObjectModelValidator;
37  
38  import java.util.ArrayList;
39  import java.util.List;
40  
41  /**
42   * Created: 20 déc. 2009
43   *
44   * @author tchemit &lt;chemit@codelutin.com&gt;
45   * @version $Id$
46   * @since 2.3.0
47   */
48  @Component(role = Template.class, hint = "org.nuiton.topia.generator.TopiaMetaTransformer")
49  public class TopiaMetaTransformer extends AbstractMetaTransformer<ObjectModel> {
50  
51      /** Logger */
52      private static final Log log = LogFactory.getLog(TopiaMetaTransformer.class);
53  
54      public TopiaMetaTransformer() {
55  //        super(
56  //                EntityTransformer.class,
57  //                DAOTransformer.class,
58  //                DAOImplTransformer.class,
59  //                DAOAbstractTransformer.class,
60  //                DAOHelperTransformer.class,
61  //                EntityHibernateMappingGenerator.class
62  //        );
63  
64          setTemplateTypes(
65                  EntityTransformer.class,
66                  EntityDAOTransformer.class,
67  //                DAOTransformer.class,
68  //                DAOImplTransformer.class,
69  //                DAOAbstractTransformer.class,
70                  DAOHelperTransformer.class,
71                  EntityHibernateMappingGenerator.class
72          );
73      }
74  
75      protected boolean validateModel(ObjectModel model) {
76          List<ObjectModelValidator> validators = new ArrayList<ObjectModelValidator>();
77  
78          AttributeNamesValidator attrValidator = new AttributeNamesValidator(
79                  model);
80          attrValidator.addNameAndReason("next",
81                                         "Le nom d'attribut \"next\" est incompatible avec HSQL");
82          attrValidator.addNameAndReason("value",
83                                         "Le nom d'attribut \"value\" est incompatible avec certains SGBD");
84          attrValidator.addNameAndReason("values",
85                                         "Le nom d'attribut \"values\" est incompatible avec certains SGBD");
86          attrValidator.addNameAndReason("begin",
87                                         "Le nom d'attribut \"begin\" est incompatible avec certains SGBD");
88          attrValidator.addNameAndReason("end",
89                                         "Le nom d'attribut \"end\" est incompatible avec certains SGBD");
90          attrValidator.addNameAndReason("authorization",
91                                         "Le nom d'attribut \"authorization\" est incompatible avec certains SGBD");
92          attrValidator.addNameAndReason("order",
93                                         "Le nom d'attribut \"order\" est incompatible avec certains SGBD");
94          validators.add(attrValidator);
95  
96          ClassNamesValidator classValidator = new ClassNamesValidator(model);
97          classValidator.addNameAndReason("constraint", "Nom de classe incompatible avec certains SGBD");
98          classValidator.addNameAndReason("user", "Nom de classe incompatible avec certains SGBD");
99          validators.add(classValidator);
100 
101         validators.add(new TopiaJavaValidator(model));
102         validators.add(new TopiaRelationValidator(model));
103 
104         for (ObjectModelValidator validator : validators) {
105             if (!validator.validate()) {
106                 for (String error : validator.getErrors()) {
107                     if (log.isWarnEnabled()) {
108                         log.warn("[VALIDATION] " + error);
109                     }
110                 }
111             }
112         }
113 
114         // test before all if there is some entities to generate
115         List<ObjectModelClass> classes = TopiaGeneratorUtil.getEntityClasses(model, true);
116 
117         if (classes.isEmpty()) {
118             // no entity to generate, can stop safely
119             if (log.isWarnEnabled()) {
120                 log.warn("No entity to generate, " + getClass().getName() +
121                          " is skipped");
122             }
123             return false;
124         }
125         //FIXME-TC20091220 seems we still generate if there is some validation errors ? not very normal
126         return true;
127     }
128 
129 }