Skip to content

Commit 15759e1

Browse files
committed
feat(QTDI-1914): Change the SPI interface and add a unit test.
1 parent fabc258 commit 15759e1

File tree

7 files changed

+81
-30
lines changed

7 files changed

+81
-30
lines changed

sample-parent/sample-features/dynamic-dependencies/classloader-test-library/src/main/java/org/talend/sdk/component/sample/feature/dynamicdependencies/classloadertestlibrary/StringMapTransformer.java

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22,44 +22,43 @@
2222
import java.nio.charset.StandardCharsets;
2323
import java.util.ArrayList;
2424
import java.util.List;
25-
import java.util.Map;
2625
import java.util.ServiceLoader;
27-
import java.util.function.BiFunction;
26+
import java.util.function.Function;
2827
import java.util.stream.Collectors;
2928
import java.util.stream.Stream;
3029

3130
import org.talend.sdk.component.api.exception.ComponentException;
3231

3332
public class StringMapTransformer<T> {
3433

35-
private final StringMapProvider stringMapProvider;
34+
private final StringProvider stringMapProvider;
3635

3736
public StringMapTransformer(final boolean failIfSeveralServicesFound) {
38-
ServiceLoader<StringMapProvider> serviceLoader = ServiceLoader.load(StringMapProvider.class);
37+
ServiceLoader<StringProvider> serviceLoader = ServiceLoader.load(StringProvider.class);
3938

40-
List<StringMapProvider> stringMapProviderList = new ArrayList<>();
39+
List<StringProvider> stringMapProviderList = new ArrayList<>();
4140
serviceLoader.iterator().forEachRemaining(stringMapProviderList::add);
4241

4342
if (stringMapProviderList.size() <= 0) {
44-
throw new ComponentException("No %s service found.".formatted(StringMapProvider.class));
43+
throw new ComponentException("No SPI service found for %s.".formatted(StringProvider.class));
4544
}
4645

4746
if (stringMapProviderList.size() > 1 && failIfSeveralServicesFound) {
4847
String join = stringMapProviderList.stream()
4948
.map(m -> m.getClass().getName())
5049
.collect(Collectors.joining("\n"));
5150
throw new ComponentException("More than one %s service has been found: %s"
52-
.formatted(StringMapProvider.class, join));
51+
.formatted(StringProvider.class, join));
5352
}
5453

5554
this.stringMapProvider = stringMapProviderList.get(0);
5655
}
5756

58-
public List<T> transform(final BiFunction<String, String, T> function) {
59-
Map<String, String> map = stringMapProvider.getMap();
60-
return map.entrySet()
57+
public List<T> transform(final Function<String, T> function) {
58+
List<String> strings = stringMapProvider.getStrings();
59+
return strings
6160
.stream()
62-
.map(e -> function.apply(e.getKey(), e.getValue()))
61+
.map(function::apply)
6362
.toList();
6463
}
6564

sample-parent/sample-features/dynamic-dependencies/classloader-test-library/src/main/java/org/talend/sdk/component/sample/feature/dynamicdependencies/classloadertestlibrary/StringMapProvider.java renamed to sample-parent/sample-features/dynamic-dependencies/classloader-test-library/src/main/java/org/talend/sdk/component/sample/feature/dynamicdependencies/classloadertestlibrary/StringProvider.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,10 @@
1515
*/
1616
package org.talend.sdk.component.sample.feature.dynamicdependencies.classloadertestlibrary;
1717

18-
import java.util.Map;
18+
import java.util.List;
1919

20-
public interface StringMapProvider {
20+
public interface StringProvider {
2121

22-
Map<String, String> getMap();
22+
List<String> getStrings();
2323

2424
}

sample-parent/sample-features/dynamic-dependencies/classloader-test-spi/src/main/java/org/talend/sdk/component/sample/feature/dynamicdependencies/classloadertestspi/StringMapProviderImpl.java renamed to sample-parent/sample-features/dynamic-dependencies/classloader-test-spi/src/main/java/org/talend/sdk/component/sample/feature/dynamicdependencies/classloadertestspi/StringProviderImpl.java

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,21 +15,15 @@
1515
*/
1616
package org.talend.sdk.component.sample.feature.dynamicdependencies.classloadertestspi;
1717

18-
import java.util.HashMap;
19-
import java.util.Map;
18+
import java.util.Arrays;
19+
import java.util.List;
2020

21-
import org.talend.sdk.component.sample.feature.dynamicdependencies.classloadertestlibrary.StringMapProvider;
21+
import org.talend.sdk.component.sample.feature.dynamicdependencies.classloadertestlibrary.StringProvider;
2222

23-
public class StringMapProviderImpl implements StringMapProvider {
23+
public class StringProviderImpl implements StringProvider {
2424

2525
@Override
26-
public Map<String, String> getMap() {
27-
Map<String, String> map = new HashMap<>();
28-
map.put("key1", "value1");
29-
map.put("key2", "value2");
30-
map.put("key3", "value3");
31-
map.put("key4", "value4");
32-
map.put("key5", "value5");
33-
return map;
26+
public List<String> getStrings() {
27+
return Arrays.asList("value1", "value2", "value3");
3428
}
3529
}

sample-parent/sample-features/dynamic-dependencies/classloader-test-spi/src/main/resources/META-INF/services/org.talend.sdk.component.sample.feature.dynamicdependencies.classloadertestlibrary.StringMapProvider renamed to sample-parent/sample-features/dynamic-dependencies/classloader-test-spi/src/main/resources/META-INF/services/org.talend.sdk.component.sample.feature.dynamicdependencies.classloadertestlibrary.StringProvider

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,4 @@
1313
# limitations under the License.
1414
# Here you can change all your configuration display names to use more explicit labels
1515
# You can also translate your configuration by adding one file by local Messages_fr.properties for french for example
16-
org.talend.sdk.component.sample.feature.dynamicdependencies.classloadertestspi.StringMapProviderImpl
16+
org.talend.sdk.component.sample.feature.dynamicdependencies.classloadertestspi.StringProviderImpl

sample-parent/sample-features/dynamic-dependencies/classloader-test-spi/src/test/java/org/talend/sdk/component/sample/feature/dynamicdependencies/classloadertestspi/StringMapProviderImplTest.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
import java.util.ArrayList;
2121
import java.util.List;
22+
import java.util.function.Function;
2223

2324
import org.junit.jupiter.api.Assertions;
2425
import org.junit.jupiter.api.Test;
@@ -29,11 +30,11 @@ class StringMapProviderImplTest {
2930
@Test
3031
void testSPI() {
3132
StringMapTransformer<String> stringMapTransformer = new StringMapTransformer<>(true);
32-
List<String> transform = stringMapTransformer.transform((s1, s2) -> s1 + ":" + s2);
33+
List<String> transform = stringMapTransformer.transform(Function.identity());
3334
List<String> sorted = new ArrayList<>(transform);
3435
sorted.sort(String::compareTo);
3536
String collect = String.join("/", sorted);
36-
Assertions.assertEquals("key1:value1/key2:value2/key3:value3/key4:value4/key5:value5",
37+
Assertions.assertEquals("value1/value2/value3",
3738
collect);
3839
}
3940

sample-parent/sample-features/dynamic-dependencies/dynamic-dependencies-with-spi/src/main/java/org/talend/sdk/component/sample/feature/dynamicdependencies/withspi/service/DynamicDependenciesWithSPIService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ public Schema guessSchema4Input(final @Option("configuration") Dataset dse) {
6767
public Iterator<Record> getRecordIterator() {
6868
StringMapTransformer<Record> stringMapTransformer = new StringMapTransformer<>(true);
6969
List<Record> records = stringMapTransformer
70-
.transform((s1, s2) -> recordBuilderFactory.newRecordBuilder().withString(s1, s2).build());
70+
.transform(s -> recordBuilderFactory.newRecordBuilder().withString("value", s).build());
7171
return records.iterator();
7272
}
7373

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
/**
2+
* Copyright (C) 2006-2025 Talend Inc. - www.talend.com
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package org.talend.sdk.component.sample.feature.dynamicdependencies.withspi.input;
17+
18+
import java.util.List;
19+
20+
import org.junit.jupiter.api.Assertions;
21+
import org.junit.jupiter.api.Test;
22+
import org.talend.sdk.component.api.record.Record;
23+
import org.talend.sdk.component.junit.BaseComponentsHandler;
24+
import org.talend.sdk.component.junit.SimpleFactory;
25+
import org.talend.sdk.component.junit5.Injected;
26+
import org.talend.sdk.component.junit5.WithComponents;
27+
import org.talend.sdk.component.runtime.manager.chain.Job;
28+
import org.talend.sdk.component.sample.feature.dynamicdependencies.withspi.config.Config;
29+
30+
@WithComponents("org.talend.sdk.component.sample.feature.dynamicdependencies.withspi")
31+
class DynamicDependenciesWithSPIInputTest {
32+
33+
@Injected
34+
protected BaseComponentsHandler handler;
35+
36+
@Test
37+
public void testGeneratedRecord() {
38+
Config config = new Config();
39+
String queryString = SimpleFactory.configurationByExample().forInstance(config).configured().toQueryString();
40+
41+
Job.components()
42+
.component("input", "DynamicDependenciesWithSPI://Input?" + queryString)
43+
.component("collector", "test://collector")
44+
.connections()
45+
.from("input")
46+
.to("collector")
47+
.build()
48+
.run();
49+
50+
List<Record> collectedData = handler.getCollectedData(Record.class);
51+
Assertions.assertEquals(3, collectedData.size());
52+
Assertions.assertEquals("value1", collectedData.get(0).getString("value"));
53+
Assertions.assertEquals("value2", collectedData.get(1).getString("value"));
54+
Assertions.assertEquals("value3", collectedData.get(2).getString("value"));
55+
}
56+
57+
}

0 commit comments

Comments
 (0)