Merge "Statistics-Manager - Performance Improvement 1) Introduced statistics request...
[controller.git] / opendaylight / netconf / config-netconf-connector / src / main / java / org / opendaylight / controller / netconf / confignetconfconnector / operations / editconfig / EditStrategyType.java
index a7a0518cc53f6b1711ee017026bf41bb8928e459..6b81603dcd01cdffa0ce3d4b5c9486fc66db2b8d 100644 (file)
@@ -8,11 +8,13 @@
 
 package org.opendaylight.controller.netconf.confignetconfconnector.operations.editconfig;
 
+import com.google.common.collect.Multimap;
+import org.opendaylight.controller.netconf.api.NetconfDocumentedException;
+import org.opendaylight.controller.netconf.confignetconfconnector.exception.OperationNotPermittedException;
+
 import java.util.EnumSet;
 import java.util.Set;
 
-import com.google.common.base.Preconditions;
-
 public enum EditStrategyType {
     // can be default
     merge, replace, none,
@@ -21,20 +23,8 @@ public enum EditStrategyType {
 
     private static final Set<EditStrategyType> defaultStrats = EnumSet.of(merge, replace, none);
 
-    private static EditStrategyType defaultStrat = merge;
-
-    public static EditStrategyType defaultStrategy() {
-        return defaultStrat;
-    }
-
-    public static void setDefaultStrategy(EditStrategyType strat) {
-        Preconditions.checkArgument(strat.canBeDefault(), "Default edit strategy can be only of value " + defaultStrats
-                + ", but was " + strat);
-        defaultStrat = strat;
-    }
-
-    public static void resetDefaultStrategy() {
-        setDefaultStrategy(EditStrategyType.merge);
+    public static EditStrategyType getDefaultStrategy() {
+        return merge;
     }
 
     public boolean isEnforcing() {
@@ -52,23 +42,28 @@ public enum EditStrategyType {
                     + this);
         }
     }
+    public static void compareParsedStrategyToDefaultEnforcing(EditStrategyType parsedStrategy,
+                                                                  EditStrategyType defaultStrategy) throws OperationNotPermittedException {
+        if (defaultStrategy.isEnforcing()) {
+            if (parsedStrategy != defaultStrategy){
+                throw new OperationNotPermittedException(String.format("With "
+                        + defaultStrategy
+                        + " as "
+                        + EditConfigXmlParser.DEFAULT_OPERATION_KEY
+                        + " operations on module elements are not permitted since the default option is restrictive"),
+                        NetconfDocumentedException.ErrorType.application,
+                        NetconfDocumentedException.ErrorTag.operation_failed,
+                        NetconfDocumentedException.ErrorSeverity.error);
+            }
+        }
 
-    private static final EnumSet<EditStrategyType> defaults;
-
-    static {
-        defaults = EnumSet.of(merge, replace, none);
-    }
-
-    private boolean canBeDefault() {
-        return defaults.contains(this);
     }
-
-    public EditConfigStrategy getFittingStrategy() {
+    public EditConfigStrategy getFittingStrategy(Multimap<String, String> providedServices) {
         switch (this) {
         case merge:
-            return new MergeEditConfigStrategy();
+            return new MergeEditConfigStrategy(providedServices);
         case replace:
-            return new ReplaceEditConfigStrategy();
+            return new ReplaceEditConfigStrategy(providedServices);
         case delete:
             return new DeleteEditConfigStrategy();
         case remove: