You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by ma...@apache.org on 2023/02/22 20:13:58 UTC
[james-project] 01/08: Use extension method pattern to replace utility methods
This is an automated email from the ASF dual-hosted git repository.
matthieu pushed a commit to branch refactorings-5
in repository https://gitbox.apache.org/repos/asf/james-project.git
commit a6df85207f8834ec5e31a0fab7226d297e0bf0e5
Author: Matthieu Baechler <ma...@baechler-craftsmanship.fr>
AuthorDate: Thu Feb 9 21:29:22 2023 +0100
Use extension method pattern to replace utility methods
---
.../org/apache/james/transport/mailets/EntityType.scala | 14 ++++++--------
.../apache/james/transport/mailets/GlobalRateLimit.scala | 12 ++++++------
.../james/transport/mailets/PerRecipientRateLimit.scala | 9 +++++----
.../james/transport/mailets/PerSenderRateLimit.scala | 9 +++++----
4 files changed, 22 insertions(+), 22 deletions(-)
diff --git a/server/mailet/rate-limiter/src/main/scala/org/apache/james/transport/mailets/EntityType.scala b/server/mailet/rate-limiter/src/main/scala/org/apache/james/transport/mailets/EntityType.scala
index ca65489936..4fbbebd009 100644
--- a/server/mailet/rate-limiter/src/main/scala/org/apache/james/transport/mailets/EntityType.scala
+++ b/server/mailet/rate-limiter/src/main/scala/org/apache/james/transport/mailets/EntityType.scala
@@ -32,17 +32,15 @@ import scala.util.Try
case class KeyPrefix(value: String)
-object DurationParsingUtil {
- def parseDuration(mailetConfig: MailetConfig): Duration = Option(mailetConfig.getInitParameter("duration"))
- .map(string => DurationParser.parse(string, ChronoUnit.SECONDS))
- .getOrElse(throw new IllegalArgumentException("'duration' is compulsory"))
-}
+object ConfigurationOps {
+ implicit class DurationOps(mailetConfig: MailetConfig) {
+ def getDuration(key: String): Option[Duration] = Option(mailetConfig.getInitParameter(key))
+ .map(string => DurationParser.parse(string, ChronoUnit.SECONDS))
+ }
-object PrecisionParsingUtil {
- def parsePrecision(mailetConfig: MailetConfig): Option[Duration] = Option(mailetConfig.getInitParameter("precision"))
- .map(string => DurationParser.parse(string, ChronoUnit.SECONDS))
}
+
sealed trait EntityType {
def asString(): String
diff --git a/server/mailet/rate-limiter/src/main/scala/org/apache/james/transport/mailets/GlobalRateLimit.scala b/server/mailet/rate-limiter/src/main/scala/org/apache/james/transport/mailets/GlobalRateLimit.scala
index a0f119111e..e579d361c8 100644
--- a/server/mailet/rate-limiter/src/main/scala/org/apache/james/transport/mailets/GlobalRateLimit.scala
+++ b/server/mailet/rate-limiter/src/main/scala/org/apache/james/transport/mailets/GlobalRateLimit.scala
@@ -21,10 +21,11 @@ package org.apache.james.transport.mailets
import java.time.Duration
import java.util
-
import com.google.common.collect.ImmutableList
+
import javax.inject.Inject
import org.apache.james.rate.limiter.api.{AcceptableRate, RateExceeded, RateLimiter, RateLimiterFactory, RateLimitingKey, RateLimitingResult}
+import org.apache.james.transport.mailets.ConfigurationOps.DurationOps
import org.apache.mailet.base.GenericMailet
import org.apache.mailet.{Mail, ProcessingState}
import org.reactivestreams.Publisher
@@ -108,8 +109,10 @@ class GlobalRateLimit @Inject()(rateLimiterFactory: RateLimiterFactory) extends
private var keyPrefix: Option[KeyPrefix] = _
override def init(): Unit = {
- val duration: Duration = parseDuration()
- val precision: Option[Duration] = parsePrecision()
+ val duration: Duration = getMailetConfig.getDuration("duration")
+ .getOrElse(throw new IllegalArgumentException("'duration' is compulsory"))
+
+ val precision: Option[Duration] = getMailetConfig.getDuration("precision")
keyPrefix = Option(getInitParameter("keyPrefix")).map(KeyPrefix)
exceededProcessor = getInitParameter("exceededProcessor", Mail.ERROR)
@@ -122,9 +125,6 @@ class GlobalRateLimit @Inject()(rateLimiterFactory: RateLimiterFactory) extends
totalSizeRateLimiter = globalRateLimiter(TotalSize)
}
- def parseDuration(): Duration = DurationParsingUtil.parseDuration(getMailetConfig)
- def parsePrecision(): Option[Duration] = PrecisionParsingUtil.parsePrecision(getMailetConfig)
-
override def service(mail: Mail): Unit = {
val pivot: RateLimitingResult = AcceptableRate
val result = SFlux.merge(Seq(
diff --git a/server/mailet/rate-limiter/src/main/scala/org/apache/james/transport/mailets/PerRecipientRateLimit.scala b/server/mailet/rate-limiter/src/main/scala/org/apache/james/transport/mailets/PerRecipientRateLimit.scala
index dd65a01138..0e0a4b16a9 100644
--- a/server/mailet/rate-limiter/src/main/scala/org/apache/james/transport/mailets/PerRecipientRateLimit.scala
+++ b/server/mailet/rate-limiter/src/main/scala/org/apache/james/transport/mailets/PerRecipientRateLimit.scala
@@ -21,13 +21,14 @@ package org.apache.james.transport.mailets
import java.time.Duration
import java.util
-
import com.google.common.annotations.VisibleForTesting
import com.google.common.collect.ImmutableList
+
import javax.inject.Inject
import org.apache.james.core.MailAddress
import org.apache.james.lifecycle.api.LifecycleUtil
import org.apache.james.rate.limiter.api.{AcceptableRate, RateExceeded, RateLimiter, RateLimiterFactory, RateLimitingKey, RateLimitingResult}
+import org.apache.james.transport.mailets.ConfigurationOps.DurationOps
import org.apache.james.util.ReactorUtils.DEFAULT_CONCURRENCY
import org.apache.mailet.base.GenericMailet
import org.apache.mailet.{Mail, ProcessingState}
@@ -98,7 +99,7 @@ class PerRecipientRateLimit @Inject()(rateLimiterFactory: RateLimiterFactory) ex
override def init(): Unit = {
val duration: Duration = parseDuration()
- val precision: Option[Duration] = parsePrecision()
+ val precision: Option[Duration] = getMailetConfig.getDuration("precision")
val keyPrefix: Option[KeyPrefix] = Option(getInitParameter("keyPrefix")).map(KeyPrefix)
exceededProcessor = getInitParameter("exceededProcessor", Mail.ERROR)
@@ -132,8 +133,8 @@ class PerRecipientRateLimit @Inject()(rateLimiterFactory: RateLimiterFactory) ex
}
@VisibleForTesting
- def parseDuration(): Duration = DurationParsingUtil.parseDuration(getMailetConfig)
- def parsePrecision(): Option[Duration] = PrecisionParsingUtil.parsePrecision(getMailetConfig)
+ def parseDuration(): Duration = getMailetConfig.getDuration("duration")
+ .getOrElse(throw new IllegalArgumentException("'duration' is compulsory"))
private def createRateLimiter(entityType: EntityType, duration: Duration, precision: Option[Duration],
rateLimiterFactory: RateLimiterFactory, keyPrefix: Option[KeyPrefix]): Option[PerRecipientRateLimiter] =
diff --git a/server/mailet/rate-limiter/src/main/scala/org/apache/james/transport/mailets/PerSenderRateLimit.scala b/server/mailet/rate-limiter/src/main/scala/org/apache/james/transport/mailets/PerSenderRateLimit.scala
index 956d063f90..c48831d9a9 100644
--- a/server/mailet/rate-limiter/src/main/scala/org/apache/james/transport/mailets/PerSenderRateLimit.scala
+++ b/server/mailet/rate-limiter/src/main/scala/org/apache/james/transport/mailets/PerSenderRateLimit.scala
@@ -21,12 +21,13 @@ package org.apache.james.transport.mailets
import java.time.Duration
import java.util
-
import com.google.common.annotations.VisibleForTesting
import com.google.common.collect.ImmutableList
+
import javax.inject.Inject
import org.apache.james.core.MailAddress
import org.apache.james.rate.limiter.api.{AcceptableRate, RateExceeded, RateLimiter, RateLimiterFactory, RateLimitingKey, RateLimitingResult}
+import org.apache.james.transport.mailets.ConfigurationOps.DurationOps
import org.apache.mailet.base.GenericMailet
import org.apache.mailet.{Mail, ProcessingState}
import org.reactivestreams.Publisher
@@ -109,7 +110,7 @@ class PerSenderRateLimit @Inject()(rateLimiterFactory: RateLimiterFactory) exten
override def init(): Unit = {
val duration: Duration = parseDuration()
- val precision: Option[Duration] = parsePrecision()
+ val precision: Option[Duration] = getMailetConfig.getDuration("precision")
keyPrefix = Option(getInitParameter("keyPrefix")).map(KeyPrefix)
exceededProcessor = getInitParameter("exceededProcessor", Mail.ERROR)
@@ -123,8 +124,8 @@ class PerSenderRateLimit @Inject()(rateLimiterFactory: RateLimiterFactory) exten
}
@VisibleForTesting
- def parseDuration(): Duration = DurationParsingUtil.parseDuration(getMailetConfig)
- def parsePrecision(): Option[Duration] = PrecisionParsingUtil.parsePrecision(getMailetConfig)
+ def parseDuration(): Duration = getMailetConfig.getDuration("duration")
+ .getOrElse(throw new IllegalArgumentException("'duration' is compulsory"))
override def service(mail: Mail): Unit = mail.getMaybeSender
.asOptional()
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org