View Javadoc
1   package org.codehaus.modello.plugin.java.metadata;
2   
3   /*
4    * Copyright (c) 2004, Codehaus.org
5    *
6    * Permission is hereby granted, free of charge, to any person obtaining a copy of
7    * this software and associated documentation files (the "Software"), to deal in
8    * the Software without restriction, including without limitation the rights to
9    * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
10   * of the Software, and to permit persons to whom the Software is furnished to do
11   * so, subject to the following conditions:
12   *
13   * The above copyright notice and this permission notice shall be included in all
14   * copies or substantial portions of the Software.
15   *
16   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22   * SOFTWARE.
23   */
24  
25  import javax.inject.Named;
26  import javax.inject.Singleton;
27  
28  import java.util.Map;
29  
30  import org.codehaus.modello.metadata.AbstractMetadataPlugin;
31  import org.codehaus.modello.metadata.AssociationMetadata;
32  import org.codehaus.modello.metadata.ClassMetadata;
33  import org.codehaus.modello.metadata.FieldMetadata;
34  import org.codehaus.modello.metadata.InterfaceMetadata;
35  import org.codehaus.modello.metadata.MetadataPlugin;
36  import org.codehaus.modello.metadata.ModelMetadata;
37  import org.codehaus.modello.model.Model;
38  import org.codehaus.modello.model.ModelAssociation;
39  import org.codehaus.modello.model.ModelClass;
40  import org.codehaus.modello.model.ModelField;
41  import org.codehaus.modello.model.ModelInterface;
42  
43  /**
44   * @author <a href="mailto:evenisse@codehaus.org">Emmanuel Venisse </a>
45   */
46  @Named("java")
47  @Singleton
48  public class JavaMetadataPlugin extends AbstractMetadataPlugin implements MetadataPlugin {
49      public static final String JAVA_ABSTRACT = "java.abstract";
50  
51      public static final String JAVA_ADDER = "java.adder";
52  
53      public static final String JAVA_BIDI = "java.bidi";
54  
55      public static final String JAVA_ENABLED = "java.enabled";
56  
57      public static final String JAVA_GETTER = "java.getter";
58  
59      public static final String JAVA_INIT = "java.init";
60  
61      public static final String JAVA_SETTER = "java.setter";
62  
63      public static final String JAVA_USE_INTERFACE = "java.useInterface";
64  
65      public static final String JAVA_CLONE = "java.clone";
66  
67      public static final String JAVA_CLONE_HOOK = "java.clone.hook";
68  
69      /**
70       * @since 1.8
71       */
72      public static final String JAVA_GENERATE_TOSTRING = "java.toString";
73  
74      public static final String JAVA_SUPPRESS_ALL_WARNINGS = "java.suppressAllWarnings";
75  
76      /**
77       * @since 1.8
78       */
79      public static final String JAVA_GENERATE_BUILDER = "java.builder";
80  
81      /**
82       * @since 1.8
83       */
84      public static final String JAVA_GENERATE_STATIC_CREATORS = "java.staticCreator";
85  
86      // ----------------------------------------------------------------------
87      // Map to Metadata
88      // ----------------------------------------------------------------------
89  
90      public ModelMetadata getModelMetadata(Model model, Map<String, String> data) {
91          JavaModelMetadata metadata = new JavaModelMetadata();
92  
93          metadata.setSuppressAllWarnings(getBoolean(data, JAVA_SUPPRESS_ALL_WARNINGS, true));
94  
95          return metadata;
96      }
97  
98      public ClassMetadata getClassMetadata(ModelClass clazz, Map<String, String> data) {
99          JavaClassMetadata metadata = new JavaClassMetadata();
100 
101         metadata.setEnabled(getBoolean(data, JAVA_ENABLED, true));
102 
103         metadata.setAbstract(getBoolean(data, JAVA_ABSTRACT, false));
104 
105         metadata.setCloneMode(getString(data, JAVA_CLONE));
106 
107         metadata.setCloneHook(getString(data, JAVA_CLONE_HOOK));
108 
109         metadata.setGenerateToString(getBoolean(data, JAVA_GENERATE_TOSTRING, false));
110 
111         metadata.setGenerateBuilder(getBoolean(data, JAVA_GENERATE_BUILDER, false));
112 
113         metadata.setGenerateStaticCreators(getBoolean(data, JAVA_GENERATE_STATIC_CREATORS, false));
114 
115         return metadata;
116     }
117 
118     public InterfaceMetadata getInterfaceMetadata(ModelInterface iface, Map<String, String> data) {
119         return new JavaInterfaceMetadata();
120     }
121 
122     public FieldMetadata getFieldMetadata(ModelField field, Map<String, String> data) {
123         JavaFieldMetadata metadata = new JavaFieldMetadata();
124 
125         metadata.setGetter(getBoolean(data, JAVA_GETTER, true));
126 
127         String fieldType = field.getType();
128         metadata.setBooleanGetter((fieldType != null) && fieldType.endsWith("oolean"));
129 
130         metadata.setSetter(getBoolean(data, JAVA_SETTER, true));
131 
132         return metadata;
133     }
134 
135     public AssociationMetadata getAssociationMetadata(ModelAssociation association, Map<String, String> data) {
136         JavaAssociationMetadata metadata = new JavaAssociationMetadata();
137 
138         metadata.setAdder(getBoolean(data, JAVA_ADDER, true));
139 
140         metadata.setBidi(getBoolean(data, JAVA_BIDI, true));
141 
142         metadata.setInterfaceName(getString(data, JAVA_USE_INTERFACE));
143 
144         metadata.setInitializationMode(getString(data, JAVA_INIT));
145 
146         metadata.setCloneMode(getString(data, JAVA_CLONE));
147 
148         return metadata;
149     }
150 }