X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fcommons%2Fprotocol-framework%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fconfig%2Fyang%2Fprotocol%2Fframework%2FTimedReconnectStrategyFactoryModule.java;fp=opendaylight%2Fcommons%2Fprotocol-framework%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fconfig%2Fyang%2Fprotocol%2Fframework%2FTimedReconnectStrategyFactoryModule.java;h=b8849c7a1d7c8b42db885274f3f8311b2c6626e3;hp=0000000000000000000000000000000000000000;hb=56826bda1a245133196c07694249adcc53671f21;hpb=e467b27c2487308a0e4b12f3565b6e1077e103e2 diff --git a/opendaylight/commons/protocol-framework/src/main/java/org/opendaylight/controller/config/yang/protocol/framework/TimedReconnectStrategyFactoryModule.java b/opendaylight/commons/protocol-framework/src/main/java/org/opendaylight/controller/config/yang/protocol/framework/TimedReconnectStrategyFactoryModule.java new file mode 100644 index 0000000000..b8849c7a1d --- /dev/null +++ b/opendaylight/commons/protocol-framework/src/main/java/org/opendaylight/controller/config/yang/protocol/framework/TimedReconnectStrategyFactoryModule.java @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.controller.config.yang.protocol.framework; + +import io.netty.util.concurrent.EventExecutor; + +import org.opendaylight.controller.config.api.JmxAttributeValidationException; +import org.opendaylight.protocol.framework.ReconnectStrategy; +import org.opendaylight.protocol.framework.ReconnectStrategyFactory; +import org.opendaylight.protocol.framework.TimedReconnectStrategy; + +import com.google.common.base.Preconditions; + +/** +* +*/ +public final class TimedReconnectStrategyFactoryModule extends org.opendaylight.controller.config.yang.protocol.framework.AbstractTimedReconnectStrategyFactoryModule + { + + public TimedReconnectStrategyFactoryModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) { + super(identifier, dependencyResolver); + } + + public TimedReconnectStrategyFactoryModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver, + TimedReconnectStrategyFactoryModule oldModule, java.lang.AutoCloseable oldInstance) { + + super(identifier, dependencyResolver, oldModule, oldInstance); + } + + @Override + protected void customValidation(){ + JmxAttributeValidationException.checkNotNull(getSleepFactor(), "value is not set.", sleepFactorJmxAttribute); + JmxAttributeValidationException.checkCondition(getSleepFactor().doubleValue() >= 1, "value " + getSleepFactor() + + " is less than 1", sleepFactorJmxAttribute); + + JmxAttributeValidationException.checkNotNull(getConnectTime(), "value is not set.", connectTimeJmxAttribute); + JmxAttributeValidationException.checkCondition(getConnectTime() >= 0, "value " + getConnectTime() + + " is less than 0", connectTimeJmxAttribute); + + JmxAttributeValidationException.checkNotNull(getMinSleep(), "value is not set.", minSleepJmxAttribute); + JmxAttributeValidationException.checkCondition(getMaxSleep() == null || getMinSleep() <= getMaxSleep(), + "value " + getMinSleep() + " is greter than MaxSleep " + getMaxSleep(), minSleepJmxAttribute); + } + + @Override + public java.lang.AutoCloseable createInstance() { + return new TimedReconnectStrategyFactoryCloseable(getExecutorDependency(), + getConnectTime(), getMinSleep(), getSleepFactor().doubleValue(), getMaxSleep(), getMaxAttempts(), + getDeadline()); + } + + private static final class TimedReconnectStrategyFactoryCloseable implements ReconnectStrategyFactory, AutoCloseable { + + private final EventExecutor executor; + private final Long deadline, maxAttempts, maxSleep; + private final double sleepFactor; + private final int connectTime; + private final long minSleep; + + public TimedReconnectStrategyFactoryCloseable(final EventExecutor executor, final int connectTime, final long minSleep, final double sleepFactor, + final Long maxSleep, final Long maxAttempts, final Long deadline) { + Preconditions.checkArgument(maxSleep == null || minSleep <= maxSleep); + Preconditions.checkArgument(sleepFactor >= 1); + Preconditions.checkArgument(connectTime >= 0); + this.executor = Preconditions.checkNotNull(executor); + this.deadline = deadline; + this.maxAttempts = maxAttempts; + this.minSleep = minSleep; + this.maxSleep = maxSleep; + this.sleepFactor = sleepFactor; + this.connectTime = connectTime; + } + + @Override + public void close() throws Exception { + // no-op + } + + @Override + public ReconnectStrategy createReconnectStrategy() { + return new TimedReconnectStrategy(this.executor, + this.connectTime, this.minSleep, this.sleepFactor, this.maxSleep, this.maxAttempts, + this.deadline); + } + + } +}