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,
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() {
+ 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: