View Javadoc

1   package com.atlassian.vcache;
2   
3   import java.time.Duration;
4   import java.util.Optional;
5   import javax.annotation.Nonnull;
6   
7   import com.atlassian.annotations.PublicApi;
8   
9   import static com.atlassian.vcache.SettingsUtils.ifPresent;
10  import static java.util.Objects.requireNonNull;
11  
12  /**
13   * An immutable representation of settings for an {@link ExternalCache}.
14   *
15   * @since 1.0
16   */
17  @PublicApi
18  public class ExternalCacheSettings
19  {
20      private final Optional<Duration> defaultTtl;
21      private final Optional<Integer> entryCountHint;
22      private final Optional<ChangeRate> dataChangeRateHint;
23      private final Optional<ChangeRate> entryGrowthRateHint;
24  
25      ExternalCacheSettings(
26              Optional<Duration> defaultTtl,
27              Optional<Integer> entryCountHint,
28              Optional<ChangeRate> dataChangeRateHint,
29              Optional<ChangeRate> entryGrowthRateHint)
30      {
31          this.defaultTtl = requireNonNull(defaultTtl);
32          this.entryCountHint = requireNonNull(entryCountHint);
33          this.dataChangeRateHint = requireNonNull(dataChangeRateHint);
34          this.entryGrowthRateHint = requireNonNull(entryGrowthRateHint);
35      }
36  
37      /**
38       * Returns a new {@link ExternalCacheSettings} instance where the current settings
39       * are overridden with settings specified in <tt>overrides</tt>.
40       * @param overrides contains the settings to override
41       * @return a new {@link ExternalCacheSettings} instance with the <tt>overrides</tt> settings applied.
42       */
43      @Nonnull
44      public ExternalCacheSettings override(ExternalCacheSettings overrides)
45      {
46          return new ExternalCacheSettings(
47                  ifPresent(overrides.getDefaultTtl(), getDefaultTtl()),
48                  ifPresent(overrides.getEntryCountHint(), getEntryCountHint()),
49                  ifPresent(overrides.getDataChangeRateHint(), getDataChangeRateHint()),
50                  ifPresent(overrides.getEntryGrowthRateHint(), getEntryGrowthRateHint()));
51      }
52  
53      /**
54       * Returns the default time-to-live for entries when added.
55       * @return the default time-to-live for entries when added.
56       */
57      @Nonnull
58      public Optional<Duration> getDefaultTtl()
59      {
60          return defaultTtl;
61      }
62  
63      /**
64       * Returns the hint for the expected number of entries
65       * @return the hint for the expected number of entries
66       */
67      @Nonnull
68      public Optional<Integer> getEntryCountHint()
69      {
70          return entryCountHint;
71      }
72  
73      /**
74       * Returns the hint for the expected change rate for data updates.
75       * @return the hint for the expected change rate for data updates.
76       */
77      @Nonnull
78      public Optional<ChangeRate> getDataChangeRateHint()
79      {
80          return dataChangeRateHint;
81      }
82  
83      /**
84       * Returns the hint for the expected change rate for entry additions.
85       * @return the hint for the expected change rate for entry additions.
86       */
87      @Nonnull
88      public Optional<ChangeRate> getEntryGrowthRateHint()
89      {
90          return entryGrowthRateHint;
91      }
92  }