@@ -109,23 +109,41 @@ public Map<String, Object> processArguments(Container container, User user, Map<
109109
110110 /**
111111 * Return the set of names that should not be allowed for properties. E.g., the names of columns
112- * from the hard table underlying this type.
112+ * from the hard table underlying this type, unioned with any names declared in the
113+ * {@link DomainTemplate}'s {@code <reservedColumnNames>} element that this domain was created from.
113114 * <p>
114- * Subclasses should typically override this method and union their kind-specific reserved set with
115- * {@link #getTemplateReservedPropertyNames(Domain)} (or with {@code super.getReservedPropertyNames(...)}
116- * when the override does not also override the {@code forCreate} variant). Doing so ensures that
117- * names declared in a {@code DomainTemplate}'s {@code <reservedColumnNames>} element are honored.
115+ * This method is {@code final}; subclasses contribute their kind-specific reserved set by overriding
116+ * {@link #getKindReservedPropertyNames(Domain, User, boolean)}. The base class always unions that
117+ * set with the template-declared set.
118118 *
119119 * @return set of strings containing the names. This will be compared ignoring case
120120 */
121- public Set <String > getReservedPropertyNames (Domain domain , User user )
121+ public final Set <String > getReservedPropertyNames (Domain domain , User user )
122122 {
123- return getTemplateReservedPropertyNames (domain );
123+ return getReservedPropertyNames (domain , user , false );
124124 }
125125
126- public Set <String > getReservedPropertyNames (Domain domain , User user , boolean forCreate )
126+ public final Set <String > getReservedPropertyNames (Domain domain , User user , boolean forCreate )
127127 {
128- return getReservedPropertyNames (domain , user );
128+ Set <String > reserved = new CaseInsensitiveHashSet (getKindReservedPropertyNames (domain , user , forCreate ));
129+ reserved .addAll (getTemplateReservedPropertyNames (domain ));
130+ return reserved ;
131+ }
132+
133+ /**
134+ * Return the kind-specific set of names that should not be allowed for properties. Subclasses override
135+ * this to contribute their static/hard-coded reserved names. The base class will automatically union
136+ * the result with any names declared in the {@link DomainTemplate}'s {@code <reservedColumnNames>}
137+ * element via {@link #getReservedPropertyNames(Domain, User, boolean)}.
138+ *
139+ * @param forCreate true when validating names during domain creation; some kinds reserve additional
140+ * names only at creation time.
141+ * @return set of strings containing the names.
142+ */
143+ @ NotNull
144+ protected Set <String > getKindReservedPropertyNames (Domain domain , User user , boolean forCreate )
145+ {
146+ return Collections .emptySet ();
129147 }
130148
131149 /**
0 commit comments