001    /*
002     *  Licensed to the Apache Software Foundation (ASF) under one
003     *  or more contributor license agreements.  See the NOTICE file
004     *  distributed with this work for additional information
005     *  regarding copyright ownership.  The ASF licenses this file
006     *  to you under the Apache License, Version 2.0 (the
007     *  "License"); you may not use this file except in compliance
008     *  with the License.  You may obtain a copy of the License at
009     *
010     *        http://www.apache.org/licenses/LICENSE-2.0
011     *
012     *  Unless required by applicable law or agreed to in writing,
013     *  software distributed under the License is distributed on an
014     *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015     *  KIND, either express or implied.  See the License for the
016     *  specific language governing permissions and limitations
017     *  under the License.
018     */
019    
020    package org.apache.isis.progmodels.dflt;
021    
022    import org.apache.isis.core.metamodel.progmodel.ProgrammingModelAbstract;
023    import org.apache.isis.core.progmodel.facets.actions.debug.annotation.DebugAnnotationFacetFactory;
024    import org.apache.isis.core.progmodel.facets.actions.defaults.method.ActionDefaultsFacetFactory;
025    import org.apache.isis.core.progmodel.facets.actions.executed.annotation.ExecutedAnnotationFacetFactory;
026    import org.apache.isis.core.progmodel.facets.actions.executed.prefix.ExecutedViaNamingConventionFacetFactory;
027    import org.apache.isis.core.progmodel.facets.actions.exploration.annotation.ExplorationAnnotationFacetFactory;
028    import org.apache.isis.core.progmodel.facets.actions.invoke.ActionInvocationFacetFactory;
029    import org.apache.isis.core.progmodel.facets.actions.notcontributed.annotation.NotContributedAnnotationFacetFactory;
030    import org.apache.isis.core.progmodel.facets.actions.notinservicemenu.annotation.NotInServiceMenuAnnotationFacetFactory;
031    import org.apache.isis.core.progmodel.facets.actions.notinservicemenu.method.NotInServiceMenuMethodFacetFactory;
032    import org.apache.isis.core.progmodel.facets.actions.prototype.annotation.PrototypeAnnotationFacetFactory;
033    import org.apache.isis.core.progmodel.facets.actions.typeof.annotation.TypeOfAnnotationForActionsFacetFactory;
034    import org.apache.isis.core.progmodel.facets.actions.validate.method.ActionValidationFacetViaValidateMethodFacetFactory;
035    import org.apache.isis.core.progmodel.facets.collections.accessor.CollectionAccessorFacetFactory;
036    import org.apache.isis.core.progmodel.facets.collections.aggregated.AggregatedIfCollectionFacetFactory;
037    import org.apache.isis.core.progmodel.facets.collections.clear.CollectionClearFacetFactory;
038    import org.apache.isis.core.progmodel.facets.collections.collection.CollectionFacetFactory;
039    import org.apache.isis.core.progmodel.facets.collections.disabled.fromimmutable.DisabledFacetForCollectionDerivedFromImmutableTypeFacetFactory;
040    import org.apache.isis.core.progmodel.facets.collections.modify.CollectionAddRemoveAndValidateFacetFactory;
041    import org.apache.isis.core.progmodel.facets.collections.notpersisted.annotation.NotPersistedAnnotationForCollectionFacetFactory;
042    import org.apache.isis.core.progmodel.facets.collections.typeof.TypeOfAnnotationForCollectionsFacetFactory;
043    import org.apache.isis.core.progmodel.facets.fallback.FallbackFacetFactory;
044    import org.apache.isis.core.progmodel.facets.members.describedas.annotation.DescribedAsAnnotationOnMemberFacetFactory;
045    import org.apache.isis.core.progmodel.facets.members.describedas.staticmethod.DescribedAsFacetViaDescriptionMethodFacetFactory;
046    import org.apache.isis.core.progmodel.facets.members.disable.annotation.DisabledAnnotationFacetFactory;
047    import org.apache.isis.core.progmodel.facets.members.disable.forsession.DisabledFacetViaDisableForSessionMethodFacetFactory;
048    import org.apache.isis.core.progmodel.facets.members.disable.method.DisabledFacetViaDisableMethodFacetFactory;
049    import org.apache.isis.core.progmodel.facets.members.disable.staticmethod.DisabledFacetViaProtectMethodFacetFactory;
050    import org.apache.isis.core.progmodel.facets.members.hide.annotation.HiddenAnnotationForMemberFacetFactory;
051    import org.apache.isis.core.progmodel.facets.members.hide.forsession.HiddenFacetViaHideForSessionMethodFacetFactory;
052    import org.apache.isis.core.progmodel.facets.members.hide.method.HiddenFacetViaHideMethodFacetFactory;
053    import org.apache.isis.core.progmodel.facets.members.hide.staticmethod.HiddenFacetViaAlwaysHideMethodFacetFactory;
054    import org.apache.isis.core.progmodel.facets.members.named.annotation.NamedAnnotationOnMemberFacetFactory;
055    import org.apache.isis.core.progmodel.facets.members.named.staticmethod.NamedFacetViaNameMethodFacetFactory;
056    import org.apache.isis.core.progmodel.facets.members.order.MemberOrderAnnotationFacetFactory;
057    import org.apache.isis.core.progmodel.facets.object.aggregated.annotation.AggregatedAnnotationFacetFactory;
058    import org.apache.isis.core.progmodel.facets.object.bounded.annotation.BoundedAnnotationFacetFactory;
059    import org.apache.isis.core.progmodel.facets.object.bounded.markerifc.BoundedMarkerInterfaceFacetFactory;
060    import org.apache.isis.core.progmodel.facets.object.callbacks.create.CreatedCallbackFacetFactory;
061    import org.apache.isis.core.progmodel.facets.object.callbacks.load.LoadCallbackFacetFactory;
062    import org.apache.isis.core.progmodel.facets.object.callbacks.persist.PersistCallbackFacetFactory;
063    import org.apache.isis.core.progmodel.facets.object.callbacks.persist.PersistCallbackViaSaveMethodFacetFactory;
064    import org.apache.isis.core.progmodel.facets.object.callbacks.remove.RemoveCallbackFacetFactory;
065    import org.apache.isis.core.progmodel.facets.object.callbacks.update.UpdateCallbackFacetFactory;
066    import org.apache.isis.core.progmodel.facets.object.choices.enums.EnumFacetFactory;
067    import org.apache.isis.core.progmodel.facets.object.defaults.annotation.DefaultedAnnotationFacetFactory;
068    import org.apache.isis.core.progmodel.facets.object.describedas.annotation.DescribedAsAnnotationOnTypeFacetFactory;
069    import org.apache.isis.core.progmodel.facets.object.dirty.method.DirtyMethodsFacetFactory;
070    import org.apache.isis.core.progmodel.facets.object.encodeable.EncodableAnnotationFacetFactory;
071    import org.apache.isis.core.progmodel.facets.object.facets.annotation.FacetsAnnotationFacetFactory;
072    import org.apache.isis.core.progmodel.facets.object.hidden.HiddenAnnotationForTypeFacetFactory;
073    import org.apache.isis.core.progmodel.facets.object.icon.method.IconMethodFacetFactory;
074    import org.apache.isis.core.progmodel.facets.object.ignore.annotation.RemoveIgnoreAnnotationMethodsFacetFactory;
075    import org.apache.isis.core.progmodel.facets.object.ignore.isis.RemoveSetDomainObjectContainerMethodFacetFactory;
076    import org.apache.isis.core.progmodel.facets.object.ignore.isis.RemoveStaticGettersAndSettersFacetFactory;
077    import org.apache.isis.core.progmodel.facets.object.ignore.javalang.IteratorFilteringFacetFactory;
078    import org.apache.isis.core.progmodel.facets.object.ignore.javalang.RemoveGetClassMethodFacetFactory;
079    import org.apache.isis.core.progmodel.facets.object.ignore.javalang.RemoveInitMethodFacetFactory;
080    import org.apache.isis.core.progmodel.facets.object.ignore.javalang.RemoveJavaLangObjectMethodsFacetFactory;
081    import org.apache.isis.core.progmodel.facets.object.ignore.javalang.RemoveSuperclassMethodsFacetFactory;
082    import org.apache.isis.core.progmodel.facets.object.ignore.javalang.SyntheticMethodFilteringFacetFactory;
083    import org.apache.isis.core.progmodel.facets.object.immutable.annotation.ImmutableAnnotationFacetFactory;
084    import org.apache.isis.core.progmodel.facets.object.immutable.markerifc.ImmutableMarkerInterfacesFacetFactory;
085    import org.apache.isis.core.progmodel.facets.object.mask.annotation.MaskAnnotationForTypeFacetFactory;
086    import org.apache.isis.core.progmodel.facets.object.maxlen.annotation.MaxLengthAnnotationForTypeFacetFactory;
087    import org.apache.isis.core.progmodel.facets.object.multiline.annotation.MultiLineAnnotationOnTypeFacetFactory;
088    import org.apache.isis.core.progmodel.facets.object.named.annotation.NamedAnnotationOnTypeFacetFactory;
089    import org.apache.isis.core.progmodel.facets.object.named.staticmethod.NamedFacetViaSingularNameStaticMethodFacetFactory;
090    import org.apache.isis.core.progmodel.facets.object.notpersistable.NotPersistableAnnotationFacetFactory;
091    import org.apache.isis.core.progmodel.facets.object.notpersistable.NotPersistableMarkerInterfacesFacetFactory;
092    import org.apache.isis.core.progmodel.facets.object.orderactions.ActionOrderAnnotationFacetFactory;
093    import org.apache.isis.core.progmodel.facets.object.orderfields.FieldOrderAnnotationFacetFactory;
094    import org.apache.isis.core.progmodel.facets.object.parseable.ParseableFacetFactory;
095    import org.apache.isis.core.progmodel.facets.object.plural.annotation.PluralAnnotationFacetFactory;
096    import org.apache.isis.core.progmodel.facets.object.plural.staticmethod.PluralMethodFacetFactory;
097    import org.apache.isis.core.progmodel.facets.object.regex.annotation.RegExFacetAnnotationForTypeFacetFactory;
098    import org.apache.isis.core.progmodel.facets.object.title.TitleMethodFacetFactory;
099    import org.apache.isis.core.progmodel.facets.object.typicallen.annotation.TypicalLengthAnnotationOnTypeFacetFactory;
100    import org.apache.isis.core.progmodel.facets.object.validate.method.ValidateObjectViaValidateMethodFacetFactory;
101    import org.apache.isis.core.progmodel.facets.object.validperspec.MustSatisfySpecificationOnTypeFacetFactory;
102    import org.apache.isis.core.progmodel.facets.object.validprops.ObjectValidPropertiesFacetFactory;
103    import org.apache.isis.core.progmodel.facets.object.value.annotation.ValueFacetFactory;
104    import org.apache.isis.core.progmodel.facets.param.choices.enums.ParameterChoicesFacetDerivedFromChoicesFacetFacetFactory;
105    import org.apache.isis.core.progmodel.facets.param.choices.method.ActionChoicesFacetFactory;
106    import org.apache.isis.core.progmodel.facets.param.choices.methodnum.ActionParameterChoicesFacetFactory;
107    import org.apache.isis.core.progmodel.facets.param.defaults.fromtype.ParameterDefaultDerivedFromTypeFacetFactory;
108    import org.apache.isis.core.progmodel.facets.param.defaults.methodnum.ActionParameterDefaultsFacetFactory;
109    import org.apache.isis.core.progmodel.facets.param.describedas.annotation.DescribedAsAnnotationOnParameterFacetFactory;
110    import org.apache.isis.core.progmodel.facets.param.mandatory.annotation.OptionalAnnotationForParameterFacetFactory;
111    import org.apache.isis.core.progmodel.facets.param.mandatory.dflt.MandatoryDefaultForParametersFacetFactory;
112    import org.apache.isis.core.progmodel.facets.param.multiline.annotation.MultiLineAnnotationOnParameterFacetFactory;
113    import org.apache.isis.core.progmodel.facets.param.named.annotation.NamedAnnotationOnParameterFacetFactory;
114    import org.apache.isis.core.progmodel.facets.param.typicallen.annotation.TypicalLengthAnnotationOnParameterFacetFactory;
115    import org.apache.isis.core.progmodel.facets.param.typicallen.fromtype.TypicalLengthFacetForParameterDerivedFromTypeFacetFactory;
116    import org.apache.isis.core.progmodel.facets.param.validate.maskannot.MaskAnnotationForParameterFacetFactory;
117    import org.apache.isis.core.progmodel.facets.param.validate.maxlenannot.MaxLengthAnnotationForParameterFacetFactory;
118    import org.apache.isis.core.progmodel.facets.param.validate.perspec.MustSatisfySpecificationOnParameterFacetFactory;
119    import org.apache.isis.core.progmodel.facets.param.validate.regexannot.RegExFacetAnnotationForParameterFacetFactory;
120    import org.apache.isis.core.progmodel.facets.properties.accessor.PropertyAccessorFacetFactory;
121    import org.apache.isis.core.progmodel.facets.properties.choices.enums.PropertyChoicesFacetDerivedFromChoicesFacetFacetFactory;
122    import org.apache.isis.core.progmodel.facets.properties.choices.method.PropertyChoicesFacetFactory;
123    import org.apache.isis.core.progmodel.facets.properties.defaults.fromtype.PropertyDefaultDerivedFromTypeFacetFactory;
124    import org.apache.isis.core.progmodel.facets.properties.defaults.method.PropertyDefaultFacetFactory;
125    import org.apache.isis.core.progmodel.facets.properties.disabled.fromimmutable.DisabledFacetForPropertyDerivedFromImmutableTypeFacetFactory;
126    import org.apache.isis.core.progmodel.facets.properties.mandatory.annotation.OptionalAnnotationForPropertyFacetFactory;
127    import org.apache.isis.core.progmodel.facets.properties.mandatory.dflt.MandatoryDefaultForPropertiesFacetFactory;
128    import org.apache.isis.core.progmodel.facets.properties.mandatory.staticmethod.PropertyOptionalFacetFactory;
129    import org.apache.isis.core.progmodel.facets.properties.modify.PropertyModifyFacetFactory;
130    import org.apache.isis.core.progmodel.facets.properties.modify.PropertySetAndClearFacetFactory;
131    import org.apache.isis.core.progmodel.facets.properties.multiline.annotation.MultiLineAnnotationOnPropertyFacetFactory;
132    import org.apache.isis.core.progmodel.facets.properties.notpersisted.annotation.NotPersistedAnnotationForPropertyFacetFactory;
133    import org.apache.isis.core.progmodel.facets.properties.typicallen.annotation.TypicalLengthAnnotationOnPropertyFacetFactory;
134    import org.apache.isis.core.progmodel.facets.properties.typicallen.fromtype.TypicalLengthFacetForPropertyDerivedFromTypeFacetFactory;
135    import org.apache.isis.core.progmodel.facets.properties.validate.PropertyValidateDefaultFacetFactory;
136    import org.apache.isis.core.progmodel.facets.properties.validate.PropertyValidateFacetFactory;
137    import org.apache.isis.core.progmodel.facets.properties.validate.maskannot.MaskAnnotationForPropertyFacetFactory;
138    import org.apache.isis.core.progmodel.facets.properties.validate.maxlenannot.MaxLengthAnnotationForPropertyFacetFactory;
139    import org.apache.isis.core.progmodel.facets.properties.validate.perspec.MustSatisfySpecificationOnPropertyFacetFactory;
140    import org.apache.isis.core.progmodel.facets.properties.validate.regexannot.RegExFacetAnnotationForPropertyFacetFactory;
141    import org.apache.isis.core.progmodel.facets.value.bigdecimal.BigDecimalValueTypeFacetFactory;
142    import org.apache.isis.core.progmodel.facets.value.biginteger.BigIntegerValueTypeFacetFactory;
143    import org.apache.isis.core.progmodel.facets.value.booleans.BooleanPrimitiveValueTypeFacetFactory;
144    import org.apache.isis.core.progmodel.facets.value.booleans.BooleanWrapperValueTypeFacetFactory;
145    import org.apache.isis.core.progmodel.facets.value.bytes.BytePrimitiveValueTypeFacetFactory;
146    import org.apache.isis.core.progmodel.facets.value.bytes.ByteWrapperValueTypeFacetFactory;
147    import org.apache.isis.core.progmodel.facets.value.chars.CharPrimitiveValueTypeFacetFactory;
148    import org.apache.isis.core.progmodel.facets.value.chars.CharWrapperValueTypeFacetFactory;
149    import org.apache.isis.core.progmodel.facets.value.color.ColorValueTypeFacetFactory;
150    import org.apache.isis.core.progmodel.facets.value.date.DateValueTypeFacetFactory;
151    import org.apache.isis.core.progmodel.facets.value.datesql.JavaSqlDateValueTypeFacetFactory;
152    import org.apache.isis.core.progmodel.facets.value.datetime.DateTimeValueTypeFacetFactory;
153    import org.apache.isis.core.progmodel.facets.value.dateutil.JavaUtilDateValueTypeFacetFactory;
154    import org.apache.isis.core.progmodel.facets.value.floats.FloatPrimitiveValueTypeFacetFactory;
155    import org.apache.isis.core.progmodel.facets.value.floats.FloatWrapperValueTypeFacetFactory;
156    import org.apache.isis.core.progmodel.facets.value.image.ImageValueTypeFacetFactory;
157    import org.apache.isis.core.progmodel.facets.value.imageawt.JavaAwtImageValueTypeFacetFactory;
158    import org.apache.isis.core.progmodel.facets.value.integer.IntPrimitiveValueTypeFacetFactory;
159    import org.apache.isis.core.progmodel.facets.value.integer.IntWrapperValueTypeFacetFactory;
160    import org.apache.isis.core.progmodel.facets.value.longs.DoublePrimitiveValueTypeFacetFactory;
161    import org.apache.isis.core.progmodel.facets.value.longs.DoubleWrapperValueTypeFacetFactory;
162    import org.apache.isis.core.progmodel.facets.value.longs.LongPrimitiveValueTypeFacetFactory;
163    import org.apache.isis.core.progmodel.facets.value.longs.LongWrapperValueTypeFacetFactory;
164    import org.apache.isis.core.progmodel.facets.value.money.MoneyValueTypeFacetFactory;
165    import org.apache.isis.core.progmodel.facets.value.password.PasswordValueTypeFacetFactory;
166    import org.apache.isis.core.progmodel.facets.value.percentage.PercentageValueTypeFacetFactory;
167    import org.apache.isis.core.progmodel.facets.value.shortint.ShortPrimitiveValueTypeFacetFactory;
168    import org.apache.isis.core.progmodel.facets.value.shortint.ShortWrapperValueTypeFacetFactory;
169    import org.apache.isis.core.progmodel.facets.value.string.StringValueTypeFacetFactory;
170    import org.apache.isis.core.progmodel.facets.value.time.TimeValueTypeFacetFactory;
171    import org.apache.isis.core.progmodel.facets.value.timesql.JavaSqlTimeValueTypeFacetFactory;
172    import org.apache.isis.core.progmodel.facets.value.timestamp.TimeStampValueTypeFacetFactory;
173    import org.apache.isis.core.progmodel.facets.value.timestampsql.JavaSqlTimeStampValueTypeFacetFactory;
174    
175    public class ProgrammingModelFacetsJava5 extends ProgrammingModelAbstract {
176    
177        public ProgrammingModelFacetsJava5() {
178    
179            // must be first, so any Facets created can be replaced by other FacetFactorys later.
180            addFactory(FallbackFacetFactory.class);
181    
182            addFactory(IteratorFilteringFacetFactory.class);
183            addFactory(SyntheticMethodFilteringFacetFactory.class);
184            addFactory(RemoveSuperclassMethodsFacetFactory.class);
185            addFactory(RemoveJavaLangObjectMethodsFacetFactory.class);
186            addFactory(RemoveSetDomainObjectContainerMethodFacetFactory.class);
187            addFactory(RemoveInitMethodFacetFactory.class);
188            addFactory(RemoveStaticGettersAndSettersFacetFactory.class);
189            addFactory(RemoveGetClassMethodFacetFactory.class);
190            addFactory(RemoveIgnoreAnnotationMethodsFacetFactory.class);
191    
192            // must be before any other FacetFactories that install MandatoryFacet.class facets
193            addFactory(MandatoryDefaultForPropertiesFacetFactory.class);
194            addFactory(MandatoryDefaultForParametersFacetFactory.class);
195    
196            addFactory(PropertyValidateDefaultFacetFactory.class);
197    
198            // enum support
199            addFactory(EnumFacetFactory.class);
200            addFactory(ParameterChoicesFacetDerivedFromChoicesFacetFacetFactory.class);
201            addFactory(PropertyChoicesFacetDerivedFromChoicesFacetFacetFactory.class);
202    
203            // properties
204            addFactory(PropertyAccessorFacetFactory.class);
205            addFactory(PropertySetAndClearFacetFactory.class);
206            addFactory(PropertyModifyFacetFactory.class); // must come after PropertySetAndClearFacetFactory
207            addFactory(PropertyValidateFacetFactory.class);
208            addFactory(PropertyChoicesFacetFactory.class);
209            addFactory(PropertyDefaultFacetFactory.class);
210            addFactory(PropertyOptionalFacetFactory.class);
211    
212            // collections
213            addFactory(CollectionAccessorFacetFactory.class);
214            addFactory(CollectionClearFacetFactory.class);
215            addFactory(CollectionAddRemoveAndValidateFacetFactory.class);
216    
217            // actions
218            addFactory(ActionInvocationFacetFactory.class);
219            addFactory(ActionValidationFacetViaValidateMethodFacetFactory.class);
220            addFactory(ActionChoicesFacetFactory.class);
221            addFactory(ActionParameterChoicesFacetFactory.class);
222            addFactory(ActionDefaultsFacetFactory.class);
223            addFactory(ActionParameterDefaultsFacetFactory.class);
224    
225            // members in general
226            addFactory(NamedFacetViaNameMethodFacetFactory.class);
227            addFactory(DescribedAsFacetViaDescriptionMethodFacetFactory.class);
228            addFactory(DisabledFacetViaDisableForSessionMethodFacetFactory.class);
229            addFactory(DisabledFacetViaDisableMethodFacetFactory.class);
230            addFactory(DisabledFacetViaProtectMethodFacetFactory.class);
231            addFactory(HiddenFacetViaHideForSessionMethodFacetFactory.class);
232            addFactory(HiddenFacetViaAlwaysHideMethodFacetFactory.class);
233            addFactory(HiddenFacetViaHideMethodFacetFactory.class);
234    
235            addFactory(IconMethodFacetFactory.class);
236    
237            addFactory(CreatedCallbackFacetFactory.class);
238            addFactory(LoadCallbackFacetFactory.class);
239            addFactory(PersistCallbackViaSaveMethodFacetFactory.class);
240            addFactory(PersistCallbackFacetFactory.class);
241            addFactory(UpdateCallbackFacetFactory.class);
242            addFactory(RemoveCallbackFacetFactory.class);
243    
244            addFactory(DirtyMethodsFacetFactory.class);
245            addFactory(ValidateObjectViaValidateMethodFacetFactory.class);
246            addFactory(ObjectValidPropertiesFacetFactory.class);
247            addFactory(PluralMethodFacetFactory.class);
248            addFactory(NamedFacetViaSingularNameStaticMethodFacetFactory.class);
249            addFactory(TitleMethodFacetFactory.class);
250    
251            addFactory(ActionOrderAnnotationFacetFactory.class);
252            addFactory(AggregatedAnnotationFacetFactory.class);
253            addFactory(BoundedAnnotationFacetFactory.class);
254            addFactory(BoundedMarkerInterfaceFacetFactory.class);
255            addFactory(DebugAnnotationFacetFactory.class);
256    
257            addFactory(DefaultedAnnotationFacetFactory.class);
258            addFactory(PropertyDefaultDerivedFromTypeFacetFactory.class);
259            addFactory(ParameterDefaultDerivedFromTypeFacetFactory.class);
260    
261            addFactory(DescribedAsAnnotationOnTypeFacetFactory.class);
262            addFactory(DescribedAsAnnotationOnMemberFacetFactory.class);
263            addFactory(DescribedAsAnnotationOnParameterFacetFactory.class);
264    
265            addFactory(DisabledAnnotationFacetFactory.class);
266            addFactory(EncodableAnnotationFacetFactory.class);
267            addFactory(ExecutedAnnotationFacetFactory.class);
268            addFactory(ExecutedViaNamingConventionFacetFactory.class);
269            addFactory(ExplorationAnnotationFacetFactory.class);
270            addFactory(PrototypeAnnotationFacetFactory.class);
271            addFactory(NotContributedAnnotationFacetFactory.class);
272            addFactory(NotInServiceMenuAnnotationFacetFactory.class);
273            addFactory(NotInServiceMenuMethodFacetFactory.class);
274            addFactory(FieldOrderAnnotationFacetFactory.class);
275    
276            addFactory(HiddenAnnotationForTypeFacetFactory.class);
277            addFactory(HiddenAnnotationForMemberFacetFactory.class);
278    
279            addFactory(ImmutableAnnotationFacetFactory.class);
280            addFactory(DisabledFacetForPropertyDerivedFromImmutableTypeFacetFactory.class);
281            addFactory(DisabledFacetForCollectionDerivedFromImmutableTypeFacetFactory.class);
282    
283            addFactory(ImmutableMarkerInterfacesFacetFactory.class);
284    
285            addFactory(MaxLengthAnnotationForTypeFacetFactory.class);
286            addFactory(MaxLengthAnnotationForPropertyFacetFactory.class);
287            addFactory(MaxLengthAnnotationForParameterFacetFactory.class);
288    
289            addFactory(MemberOrderAnnotationFacetFactory.class);
290    
291            addFactory(MustSatisfySpecificationOnTypeFacetFactory.class);
292            addFactory(MustSatisfySpecificationOnPropertyFacetFactory.class);
293            addFactory(MustSatisfySpecificationOnParameterFacetFactory.class);
294    
295            addFactory(MultiLineAnnotationOnTypeFacetFactory.class);
296            addFactory(MultiLineAnnotationOnPropertyFacetFactory.class);
297            addFactory(MultiLineAnnotationOnParameterFacetFactory.class);
298    
299            addFactory(NamedAnnotationOnTypeFacetFactory.class);
300            addFactory(NamedAnnotationOnMemberFacetFactory.class);
301            addFactory(NamedAnnotationOnParameterFacetFactory.class);
302    
303            addFactory(NotPersistableAnnotationFacetFactory.class);
304            addFactory(NotPersistableMarkerInterfacesFacetFactory.class);
305    
306            addFactory(NotPersistedAnnotationForCollectionFacetFactory.class);
307            addFactory(NotPersistedAnnotationForPropertyFacetFactory.class);
308    
309            addFactory(OptionalAnnotationForPropertyFacetFactory.class);
310            addFactory(OptionalAnnotationForParameterFacetFactory.class);
311    
312            addFactory(ParseableFacetFactory.class);
313            addFactory(PluralAnnotationFacetFactory.class);
314    
315            // must come after any facets that install titles
316            addFactory(MaskAnnotationForTypeFacetFactory.class);
317            addFactory(MaskAnnotationForPropertyFacetFactory.class);
318            addFactory(MaskAnnotationForParameterFacetFactory.class);
319    
320            // must come after any facets that install titles, and after mask
321            // if takes precedence over mask.
322            addFactory(RegExFacetAnnotationForTypeFacetFactory.class);
323            addFactory(RegExFacetAnnotationForPropertyFacetFactory.class);
324            addFactory(RegExFacetAnnotationForParameterFacetFactory.class);
325    
326            addFactory(TypeOfAnnotationForCollectionsFacetFactory.class);
327            addFactory(TypeOfAnnotationForActionsFacetFactory.class);
328    
329            addFactory(TypicalLengthFacetForPropertyDerivedFromTypeFacetFactory.class);
330            addFactory(TypicalLengthFacetForParameterDerivedFromTypeFacetFactory.class);
331    
332            addFactory(TypicalLengthAnnotationOnTypeFacetFactory.class);
333            addFactory(TypicalLengthAnnotationOnPropertyFacetFactory.class);
334            addFactory(TypicalLengthAnnotationOnParameterFacetFactory.class);
335    
336            // built-in value types for Java language
337            addFactory(BooleanPrimitiveValueTypeFacetFactory.class);
338            addFactory(BooleanWrapperValueTypeFacetFactory.class);
339            addFactory(BytePrimitiveValueTypeFacetFactory.class);
340            addFactory(ByteWrapperValueTypeFacetFactory.class);
341            addFactory(ShortPrimitiveValueTypeFacetFactory.class);
342            addFactory(ShortWrapperValueTypeFacetFactory.class);
343            addFactory(IntPrimitiveValueTypeFacetFactory.class);
344            addFactory(IntWrapperValueTypeFacetFactory.class);
345            addFactory(LongPrimitiveValueTypeFacetFactory.class);
346            addFactory(LongWrapperValueTypeFacetFactory.class);
347            addFactory(FloatPrimitiveValueTypeFacetFactory.class);
348            addFactory(FloatWrapperValueTypeFacetFactory.class);
349            addFactory(DoublePrimitiveValueTypeFacetFactory.class);
350            addFactory(DoubleWrapperValueTypeFacetFactory.class);
351            addFactory(CharPrimitiveValueTypeFacetFactory.class);
352            addFactory(CharWrapperValueTypeFacetFactory.class);
353            addFactory(BigIntegerValueTypeFacetFactory.class);
354            addFactory(BigDecimalValueTypeFacetFactory.class);
355            addFactory(JavaSqlDateValueTypeFacetFactory.class);
356            addFactory(JavaSqlTimeValueTypeFacetFactory.class);
357            addFactory(JavaUtilDateValueTypeFacetFactory.class);
358            addFactory(JavaSqlTimeStampValueTypeFacetFactory.class);
359            addFactory(StringValueTypeFacetFactory.class);
360    
361            // applib values
362            addFactory(DateValueTypeFacetFactory.class);
363            addFactory(DateTimeValueTypeFacetFactory.class);
364            addFactory(ColorValueTypeFacetFactory.class);
365            addFactory(MoneyValueTypeFacetFactory.class);
366            addFactory(PasswordValueTypeFacetFactory.class);
367            addFactory(PercentageValueTypeFacetFactory.class);
368            addFactory(TimeStampValueTypeFacetFactory.class);
369            addFactory(TimeValueTypeFacetFactory.class);
370            addFactory(ImageValueTypeFacetFactory.class);
371            addFactory(JavaAwtImageValueTypeFacetFactory.class);
372    
373            // written to not trample over TypeOf if already installed
374            addFactory(CollectionFacetFactory.class);
375            // must come after CollectionFacetFactory
376            addFactory(AggregatedIfCollectionFacetFactory.class);
377    
378            // so we can dogfood the NO applib "value" types
379            addFactory(ValueFacetFactory.class);
380    
381            addFactory(FacetsAnnotationFacetFactory.class);
382        }
383    
384    }