@@ -124,12 +124,9 @@ public Predicate createUserFilter(CriteriaBuilder cb, CriteriaQuery cq, From<?,
124124
125125 public void createMissingFeatureConfigurations () {
126126
127- List <FeatureConfiguration > featureConfigurations = getAll ();
128- Map <FeatureType , FeatureConfiguration > existingListOfConfigurations =
129- featureConfigurations .stream ().collect (Collectors .toMap (FeatureConfiguration ::getFeatureType , Function .identity ()));
130-
127+ Map <FeatureType , FeatureConfiguration > configs = getServerFeatureConfigurations ();
131128 FeatureType .getAllServerFeatures ().forEach (featureType -> {
132- FeatureConfiguration savedConfiguration = existingListOfConfigurations .get (featureType );
129+ FeatureConfiguration savedConfiguration = configs .get (featureType );
133130 if (savedConfiguration == null ) {
134131 FeatureConfiguration configuration = FeatureConfiguration .build (featureType , featureType .isEnabledDefault ());
135132 ensurePersisted (configuration );
@@ -139,23 +136,31 @@ public void createMissingFeatureConfigurations() {
139136
140137 public void updateFeatureConfigurations () {
141138
142- List <FeatureConfiguration > featureConfigurations = getAll ();
143- Map <FeatureType , FeatureConfiguration > featureConfigurationMap =
144- featureConfigurations .stream ().collect (Collectors .toMap (FeatureConfiguration ::getFeatureType , Function .identity ()));
145-
139+ Map <FeatureType , FeatureConfiguration > configs = getServerFeatureConfigurations ();
146140 FeatureType .getAllServerFeatures ().forEach (featureType -> {
147141 if (featureType .isDependent ()) {
148- boolean hasEnabledDependentFeature = hasEnabledDependentFeature (featureType , featureConfigurationMap );
149-
142+ boolean hasEnabledDependentFeature = hasEnabledDependentFeature (featureType , configs );
150143 if (!hasEnabledDependentFeature ) {
151- FeatureConfiguration configuration = featureConfigurationMap .get (featureType );
144+ FeatureConfiguration configuration = configs .get (featureType );
152145 configuration .setEnabled (false );
153146 ensurePersisted (configuration );
154147 }
155148 }
156149 });
157150 }
158151
152+ private Map <FeatureType , FeatureConfiguration > getServerFeatureConfigurations () {
153+
154+ List <FeatureConfiguration > featureConfigurations = getAll ();
155+ Map <FeatureType , FeatureConfiguration > configurationsMap =
156+ featureConfigurations .stream ()
157+ .filter (e -> e .getFeatureType ().isServerFeature ())
158+ // In case a serverFeature happens not to be unique in the database, take the last one
159+ .collect (Collectors .toMap (FeatureConfiguration ::getFeatureType , Function .identity (), (e1 , e2 ) -> e2 ));
160+
161+ return configurationsMap ;
162+ }
163+
159164 private boolean hasEnabledDependentFeature (FeatureType featureType , Map <FeatureType , FeatureConfiguration > featureConfigurationMap ) {
160165
161166 for (FeatureType dependentFeatureType : featureType .getDependentFeatures ()) {
0 commit comments