config and config builder is ready
This commit is contained in:
parent
bd30b77d54
commit
a6cb5161ff
|
|
@ -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 <chenxin619315@gmail.com>
|
||||||
|
* @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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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 <chenxin619315@gmail.com>
|
||||||
|
* @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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue