Skip to content

Commit e3ba1cb

Browse files
committed
visibility cleanup, move AbstractExternal-s
1 parent bb6a907 commit e3ba1cb

34 files changed

+796
-553
lines changed

libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/StableBridgeAPI.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,11 @@ static <T, B extends StableBridgeAPI<T>> B fromInternal(final T delegate, final
5050
* An {@code ProxyInternal<INTERNAL>} is an implementation of {@code StableBridgeAPI<INTERNAL>} that
5151
* proxies calls to a delegate that is an actual {@code INTERNAL}.
5252
*
53+
* <p>
54+
* implementations are intended to be <em>opaque</em> to consumers of this library,
55+
* and should <em>NOT</em> have public constructors.
56+
* </p>
57+
*
5358
* @param <INTERNAL>
5459
*/
5560
abstract class ProxyInternal<INTERNAL> implements StableBridgeAPI<INTERNAL> {

libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/common/ProjectIdBridge.java

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@
1212
import org.elasticsearch.cluster.metadata.ProjectId;
1313
import org.elasticsearch.logstashbridge.StableBridgeAPI;
1414

15+
/**
16+
* A {@link StableBridgeAPI} for {@link ProjectId}
17+
*/
1518
public interface ProjectIdBridge extends StableBridgeAPI<ProjectId> {
1619
String id();
1720

@@ -28,18 +31,22 @@ static ProjectIdBridge getDefault() {
2831
return ProxyInternal.DEFAULT;
2932
}
3033

31-
class ProxyInternal implements ProjectIdBridge {
32-
private final ProjectId internalDelegate;
33-
34-
static final ProjectIdBridge.ProxyInternal DEFAULT = new ProjectIdBridge.ProxyInternal(ProjectId.DEFAULT);
35-
36-
public ProxyInternal(ProjectId internalDelegate) {
37-
this.internalDelegate = internalDelegate;
34+
/**
35+
* An implementation of {@link ProjectIdBridge} that proxies calls to
36+
* an internal {@link ProjectId} instance.
37+
*
38+
* @see StableBridgeAPI.ProxyInternal
39+
*/
40+
final class ProxyInternal extends StableBridgeAPI.ProxyInternal<ProjectId> implements ProjectIdBridge {
41+
private static final ProjectIdBridge.ProxyInternal DEFAULT = new ProjectIdBridge.ProxyInternal(ProjectId.DEFAULT);
42+
43+
ProxyInternal(ProjectId internalDelegate) {
44+
super(internalDelegate);
3845
}
3946

4047
@Override
4148
public String id() {
42-
return toInternal().id();
49+
return this.internalDelegate.id();
4350
}
4451

4552
@Override

libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/common/SettingsBridge.java

Lines changed: 11 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -12,53 +12,27 @@
1212
import org.elasticsearch.logstashbridge.StableBridgeAPI;
1313

1414
/**
15-
* An external bridge for {@link Settings}
15+
* A {@link StableBridgeAPI} for {@link Settings}
1616
*/
1717
public interface SettingsBridge extends StableBridgeAPI<Settings> {
1818

1919
static SettingsBridge fromInternal(final Settings delegate) {
20-
return new SettingsBridge.ProxyInternal(delegate);
20+
return new ProxyInternal(delegate);
2121
}
2222

23-
static Builder builder() {
24-
return Builder.fromInternal(Settings.builder());
25-
}
26-
27-
class ProxyInternal extends StableBridgeAPI.ProxyInternal<Settings> implements SettingsBridge {
28-
public ProxyInternal(Settings internalDelegate) {
29-
super(internalDelegate);
30-
}
23+
static SettingsBuilderBridge builder() {
24+
return SettingsBuilderBridge.fromInternal(Settings.builder());
3125
}
3226

3327
/**
34-
* An external bridge for {@link Settings.Builder} that proxies calls to a real {@link Settings.Builder}
28+
* An implementation of {@link SettingsBridge} that proxies calls to
29+
* an internal {@link Settings} instance.
30+
*
31+
* @see StableBridgeAPI.ProxyInternal
3532
*/
36-
interface Builder extends StableBridgeAPI<Settings.Builder> {
37-
38-
Builder put(String key, String value);
39-
40-
SettingsBridge build();
41-
42-
static Builder fromInternal(final Settings.Builder builder) {
43-
return new ProxyInternal(builder);
44-
}
45-
46-
class ProxyInternal extends StableBridgeAPI.ProxyInternal<Settings.Builder> implements Builder {
47-
public ProxyInternal(Settings.Builder internalDelegate) {
48-
super(internalDelegate);
49-
}
50-
51-
@Override
52-
public Builder put(String key, String value) {
53-
internalDelegate.put(key, value);
54-
return this;
55-
}
56-
57-
@Override
58-
public SettingsBridge build() {
59-
final Settings delegate = internalDelegate.build();
60-
return SettingsBridge.fromInternal(delegate);
61-
}
33+
final class ProxyInternal extends StableBridgeAPI.ProxyInternal<Settings> implements SettingsBridge {
34+
ProxyInternal(Settings internalDelegate) {
35+
super(internalDelegate);
6236
}
6337
}
6438
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
/*
2+
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3+
* or more contributor license agreements. Licensed under the "Elastic License
4+
* 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side
5+
* Public License v 1"; you may not use this file except in compliance with, at
6+
* your election, the "Elastic License 2.0", the "GNU Affero General Public
7+
* License v3.0 only", or the "Server Side Public License, v 1".
8+
*/
9+
10+
package org.elasticsearch.logstashbridge.common;
11+
12+
import org.elasticsearch.common.settings.Settings;
13+
import org.elasticsearch.logstashbridge.StableBridgeAPI;
14+
15+
/**
16+
* A {@link StableBridgeAPI} for {@link Settings.Builder}.
17+
*/
18+
public interface SettingsBuilderBridge extends StableBridgeAPI<Settings.Builder> {
19+
20+
SettingsBuilderBridge put(String key, String value);
21+
22+
SettingsBridge build();
23+
24+
static SettingsBuilderBridge fromInternal(final Settings.Builder builder) {
25+
return new ProxyInternal(builder);
26+
}
27+
28+
/**
29+
* An implementation of {@link SettingsBuilderBridge} that proxies calls to
30+
* an internal {@link Settings.Builder} instance.
31+
*
32+
* @see StableBridgeAPI.ProxyInternal
33+
*/
34+
final class ProxyInternal extends StableBridgeAPI.ProxyInternal<Settings.Builder> implements SettingsBuilderBridge {
35+
ProxyInternal(Settings.Builder internalDelegate) {
36+
super(internalDelegate);
37+
}
38+
39+
@Override
40+
public SettingsBuilderBridge put(String key, String value) {
41+
internalDelegate.put(key, value);
42+
return this;
43+
}
44+
45+
@Override
46+
public SettingsBridge build() {
47+
final Settings delegate = internalDelegate.build();
48+
return SettingsBridge.fromInternal(delegate);
49+
}
50+
}
51+
}

libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/core/CheckedBiFunctionBridge.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,14 @@
1212
import org.elasticsearch.common.CheckedBiFunction;
1313
import org.elasticsearch.logstashbridge.StableBridgeAPI;
1414

15+
/**
16+
* A stable interface on top of {@link CheckedBiFunction}.
17+
* @param <T> type of lhs parameter
18+
* @param <U> type of rhs parameter
19+
* @param <R> type of return value
20+
* @param <E> type of anticipated exception
21+
*/
22+
@FunctionalInterface
1523
public interface CheckedBiFunctionBridge<T, U, R, E extends Exception> extends StableBridgeAPI<CheckedBiFunction<T, U, R, E>> {
1624
R apply(T t, U u) throws E;
1725

libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/core/IOUtilsBridge.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
* An external bridge for {@link IOUtils}
1717
*/
1818
public class IOUtilsBridge {
19+
private IOUtilsBridge() {}
20+
1921
public static void closeWhileHandlingException(final Iterable<? extends Closeable> objects) {
2022
IOUtils.closeWhileHandlingException(objects);
2123
}

libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/core/RefCountingRunnableBridge.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
import java.io.Closeable;
1717

1818
/**
19-
* An external bridge for {@link RefCountingRunnable} that proxies calls through a real {@link RefCountingRunnable}
19+
* A {@link StableBridgeAPI} for {@link RefCountingRunnable}
2020
*/
2121
public interface RefCountingRunnableBridge extends StableBridgeAPI<RefCountingRunnable>, Closeable {
2222

@@ -38,9 +38,10 @@ static RefCountingRunnableBridge create(final Runnable delegate) {
3838

3939
/**
4040
* An implementation of {@link RefCountingRunnableBridge} that proxies calls through
41-
* to an internal {@link RefCountingRunnable}
41+
* to an internal {@link RefCountingRunnable}.
42+
* @see StableBridgeAPI.ProxyInternal
4243
*/
43-
class ProxyInternal extends StableBridgeAPI.ProxyInternal<RefCountingRunnable> implements RefCountingRunnableBridge {
44+
final class ProxyInternal extends StableBridgeAPI.ProxyInternal<RefCountingRunnable> implements RefCountingRunnableBridge {
4445
private ProxyInternal(final RefCountingRunnable delegate) {
4546
super(delegate);
4647
}

libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/core/ReleasableBridge.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@
1414

1515
import java.io.Closeable;
1616

17+
/**
18+
* A {@link StableBridgeAPI} for {@link Releasable} for use with {@link RefCountingRunnableBridge}
19+
*/
1720
public interface ReleasableBridge extends StableBridgeAPI<Releasable>, Closeable {
1821

1922
@Override // only RuntimeException
@@ -23,9 +26,14 @@ static ReleasableBridge fromInternal(Releasable releasable) {
2326
return new ProxyInternal(releasable);
2427
}
2528

26-
class ProxyInternal extends StableBridgeAPI.ProxyInternal<Releasable> implements ReleasableBridge {
29+
/**
30+
* An implementation of {@link ReleasableBridge} that proxies calls through
31+
* to an internal {@link Releasable}.
32+
* @see StableBridgeAPI.ProxyInternal
33+
*/
34+
final class ProxyInternal extends StableBridgeAPI.ProxyInternal<Releasable> implements ReleasableBridge {
2735

28-
public ProxyInternal(final Releasable delegate) {
36+
private ProxyInternal(final Releasable delegate) {
2937
super(delegate);
3038
}
3139

libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/env/EnvironmentBridge.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
import java.nio.file.Path;
1616

1717
/**
18-
* An external bridge for {@link Environment}
18+
* A {@link StableBridgeAPI} for {@link Environment}
1919
*/
2020
public interface EnvironmentBridge extends StableBridgeAPI<Environment> {
2121
static EnvironmentBridge fromInternal(final Environment delegate) {
@@ -26,7 +26,12 @@ static EnvironmentBridge create(final SettingsBridge bridgedSettings, final Path
2626
return fromInternal(new Environment(bridgedSettings.toInternal(), configPath));
2727
}
2828

29-
class ProxyInternal extends StableBridgeAPI.ProxyInternal<Environment> implements EnvironmentBridge {
29+
/**
30+
* An implementation of {@link EnvironmentBridge} that proxies calls through
31+
* to an internal {@link Environment}.
32+
* @see StableBridgeAPI.ProxyInternal
33+
*/
34+
final class ProxyInternal extends StableBridgeAPI.ProxyInternal<Environment> implements EnvironmentBridge {
3035
private ProxyInternal(final Environment delegate) {
3136
super(delegate);
3237
}
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
/*
2+
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3+
* or more contributor license agreements. Licensed under the "Elastic License
4+
* 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side
5+
* Public License v 1"; you may not use this file except in compliance with, at
6+
* your election, the "Elastic License 2.0", the "GNU Affero General Public
7+
* License v3.0 only", or the "Server Side Public License, v 1".
8+
*/
9+
10+
package org.elasticsearch.logstashbridge.geoip;
11+
12+
import com.maxmind.db.Reader;
13+
14+
import org.elasticsearch.common.CheckedBiFunction;
15+
import org.elasticsearch.ingest.geoip.IpDatabase;
16+
17+
import java.io.IOException;
18+
19+
/**
20+
* The {@code IpDatabaseBridge.AbstractExternal} is an abstract base class for implementing
21+
* the {@link IpDatabaseBridge} externally to the Elasticsearch code-base. It takes care of
22+
* the details of maintaining a singular internal-form implementation of {@link IpDatabase}
23+
* that proxies calls to the external implementation.
24+
*/
25+
public abstract class AbstractExternalIpDatabaseBridge implements IpDatabaseBridge {
26+
private ProxyExternal internalDatabase;
27+
28+
@Override
29+
public IpDatabase toInternal() {
30+
if (internalDatabase == null) {
31+
internalDatabase = new ProxyExternal();
32+
}
33+
return internalDatabase;
34+
}
35+
36+
/**
37+
* An implementation of {@link IpDatabase} that proxies calls to
38+
* a bridged {@link AbstractExternalIpDatabaseBridge} instance.
39+
*/
40+
private final class ProxyExternal implements IpDatabase {
41+
42+
@Override
43+
public String getDatabaseType() throws IOException {
44+
return AbstractExternalIpDatabaseBridge.this.getDatabaseType();
45+
}
46+
47+
@Override
48+
public <RESPONSE> RESPONSE getResponse(String ipAddress, CheckedBiFunction<Reader, String, RESPONSE, Exception> responseProvider) {
49+
return AbstractExternalIpDatabaseBridge.this.getResponse(ipAddress, responseProvider::apply);
50+
}
51+
52+
@Override
53+
public void close() throws IOException {
54+
AbstractExternalIpDatabaseBridge.this.close();
55+
}
56+
}
57+
}

0 commit comments

Comments
 (0)