From a6cb5161ff8b8d002d08c32d631e96239de2962d Mon Sep 17 00:00:00 2001 From: lionsoul2014 Date: Thu, 20 Nov 2025 15:40:54 +0800 Subject: [PATCH] config and config builder is ready --- .../java/org/lionsoul/ip2region/Config.java | 70 +++++++++++++++++++ .../org/lionsoul/ip2region/ConfigBuilder.java | 60 ++++++++++++++++ .../org/lionsoul/ip2region/ConfigTest.java | 39 +++++++++++ 3 files changed, 169 insertions(+) create mode 100644 binding/java/src/main/java/org/lionsoul/ip2region/Config.java create mode 100644 binding/java/src/main/java/org/lionsoul/ip2region/ConfigBuilder.java create mode 100644 binding/java/src/test/java/org/lionsoul/ip2region/ConfigTest.java diff --git a/binding/java/src/main/java/org/lionsoul/ip2region/Config.java b/binding/java/src/main/java/org/lionsoul/ip2region/Config.java new file mode 100644 index 0000000..64069f7 --- /dev/null +++ b/binding/java/src/main/java/org/lionsoul/ip2region/Config.java @@ -0,0 +1,70 @@ +// Copyright 2022 The Ip2Region Authors. All rights reserved. +// Use of this source code is governed by a Apache2.0-style +// license that can be found in the LICENSE file. +package org.lionsoul.ip2region; + +import java.io.IOException; + +import org.lionsoul.ip2region.xdb.Header; +import org.lionsoul.ip2region.xdb.Searcher; +import org.lionsoul.ip2region.xdb.Version; +import org.lionsoul.ip2region.xdb.XdbException; + +/** + * ip2region config class + * @Author Lion + * @Date 2025/11/20 +*/ +public class Config { + // cache policy consts + public static final int NoCache = 0; + public static final int VIndexCache = 1; + public static final int BufferCache = 2; + + // search cache policy + public final int cachePolicy; + + // xdb file path + public final String xdbPath; + public final Header header; + public final Version ipVersion; + + // search limitation for NoCache or VIndexCache Only + public final int minSearchers; + public final int maxSearchers; + + // config builder + public static ConfigBuilder custom() { + return new ConfigBuilder(); + } + + public Config(int cachePolicy, String xdbPath) throws IOException, XdbException { + this(cachePolicy, xdbPath, 10, 30); + } + + public Config(int cachePolicy, String xdbPath, int minSearchers, int maxSearchers) throws IOException, XdbException { + this.cachePolicy = cachePolicy; + this.xdbPath = xdbPath; + + // load the header from the xdb path + final Header header = Searcher.loadHeaderFromFile(xdbPath); + this.header = header; + this.ipVersion = Version.fromHeader(header); + + this.minSearchers = minSearchers; + this.maxSearchers = maxSearchers; + } + + @Override public String toString() { + final StringBuffer sb = new StringBuffer(); + sb.append('{'); + sb.append("cache_policy:").append(cachePolicy).append(','); + sb.append("xdb_path:").append(xdbPath).append(','); + sb.append("header:").append(header.toString()).append(','); + sb.append("version:").append(ipVersion.toString()).append(','); + sb.append("min_searchers:").append(minSearchers).append(','); + sb.append("max_searchers:").append(maxSearchers); + sb.append('}'); + return sb.toString(); + } +} diff --git a/binding/java/src/main/java/org/lionsoul/ip2region/ConfigBuilder.java b/binding/java/src/main/java/org/lionsoul/ip2region/ConfigBuilder.java new file mode 100644 index 0000000..c25f9c1 --- /dev/null +++ b/binding/java/src/main/java/org/lionsoul/ip2region/ConfigBuilder.java @@ -0,0 +1,60 @@ +// Copyright 2022 The Ip2Region Authors. All rights reserved. +// Use of this source code is governed by a Apache2.0-style +// license that can be found in the LICENSE file. + +package org.lionsoul.ip2region; + +import java.io.IOException; + +import org.lionsoul.ip2region.xdb.XdbException; + +/** + * ip2region config builder + * @Author Lion + * @Date 2025/11/20 +*/ +public class ConfigBuilder { + + // cache policy + private int cachePolicy = Config.VIndexCache; + + // xdb file path + private String xdbPath = null; + + // min searchers + private int minSearchers = 10; + + // max searchers + private int maxSearchers = 30; + + public ConfigBuilder() {} + + public ConfigBuilder(String xdbPath) { + this.xdbPath = xdbPath; + } + + public ConfigBuilder setCachePolicy(int cachePolicy) { + this.cachePolicy = cachePolicy; + return this; + } + + public ConfigBuilder setXdbPath(String xdbPath) { + this.xdbPath = xdbPath; + return this; + } + + public ConfigBuilder setMinSearchers(int minSearchers) { + this.minSearchers = minSearchers; + return this; + } + + public ConfigBuilder setMaxSearchers(int maxSearchers) { + this.maxSearchers = maxSearchers; + return this; + } + + // build the final #Config instance with the current config items + public Config build() throws IOException, XdbException { + return new Config(cachePolicy, xdbPath, minSearchers, maxSearchers); + } +} \ No newline at end of file diff --git a/binding/java/src/test/java/org/lionsoul/ip2region/ConfigTest.java b/binding/java/src/test/java/org/lionsoul/ip2region/ConfigTest.java new file mode 100644 index 0000000..58e365e --- /dev/null +++ b/binding/java/src/test/java/org/lionsoul/ip2region/ConfigTest.java @@ -0,0 +1,39 @@ +package org.lionsoul.ip2region; +import java.io.IOException; +import java.security.CodeSource; + +import org.junit.Test; +import org.lionsoul.ip2region.xdb.Log; +import org.lionsoul.ip2region.xdb.XdbException; + +public class ConfigTest { + + private static final Log log = Log.getLogger(ConfigTest.class).setLevel(Log.DEBUG); + + public String getDataPath(String xdbFile) { + final CodeSource cs = this.getClass().getProtectionDomain().getCodeSource(); + if (cs != null) { + // log.debugf("code path: %s", cs.getLocation().getPath().concat("../../../../data/")); + return cs.getLocation().getPath().concat("../../../../data/").concat(xdbFile); + } else { + return "../../../../data/".concat(xdbFile); + } + } + + @Test + public void testConfig() throws IOException, XdbException { + final Config config = new Config(Config.VIndexCache, getDataPath("ip2region_v4.xdb"), 5, 10); + log.debugf("config: %s", config); + } + + @Test + public void testBuildConfig() throws IOException, XdbException { + final Config config = Config.custom() + .setCachePolicy(Config.BufferCache) + .setXdbPath(getDataPath("ip2region_v6.xdb")) + .setMinSearchers(10) + .setMaxSearchers(30) + .build(); + log.debugf("builded config: %s", config); + } +}