Skip to content

Commit 701f898

Browse files
authored
Merge pull request #11 from fugerit-org/feature/issue_10_config_provider
0.8.9 (2023-01-22)
2 parents e40b1e9 + a8ebe08 commit 701f898

File tree

11 files changed

+168
-9
lines changed

11 files changed

+168
-9
lines changed

docgen/parameters.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
{
22
"title" : "Jupiter (Fugerit Core A.P.I.)",
33
"name": "Jupiter",
4-
"version" : "0.8.8",
5-
"date" : "22/01/2023",
4+
"version" : "0.8.9",
5+
"date" : "27/01/2023",
66
"organization" : {
77
"name" : "Fugerit Org",
88
"url" : "https://www.fugerit.org"

docgen/release-notes.txt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1-
0.8.8 (2023-01-22)
1+
0.8.9 (2023-01-22)
2+
------------------
3+
+ [Develop a config provider feature for external configuration source](https://github.com/fugerit-org/fj-lib/issues/10)
4+
5+
0.8.8 (2023-01-22)
26
------------------
37
+ Rename JFile implementation
48

fj-core-jvfs/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<parent>
88
<groupId>org.fugerit.java</groupId>
99
<artifactId>fj-lib</artifactId>
10-
<version>0.8.8</version>
10+
<version>0.8.9</version>
1111
</parent>
1212

1313
<name>fj-core-jvfs</name>

fj-core/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<parent>
88
<groupId>org.fugerit.java</groupId>
99
<artifactId>fj-lib</artifactId>
10-
<version>0.8.8</version>
10+
<version>0.8.9</version>
1111
</parent>
1212

1313
<name>fj-core</name>
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package org.fugerit.java.core.cfg.provider;
2+
3+
import java.io.InputStream;
4+
5+
import org.fugerit.java.core.cfg.ConfigException;
6+
7+
public interface ConfigProvider {
8+
9+
InputStream readConfiguration( String mode, String path ) throws ConfigException;
10+
11+
}
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package org.fugerit.java.core.cfg.provider;
2+
3+
import java.util.HashMap;
4+
import java.util.Map;
5+
6+
import org.fugerit.java.core.lang.helpers.StringUtils;
7+
import org.fugerit.java.core.util.ObjectUtils;
8+
9+
public class ConfigProviderFacade {
10+
11+
private static ConfigProvider defaultProvider = new DefaultConfigProvider();
12+
13+
private static final ConfigProviderFacade INSTANCE = new ConfigProviderFacade();
14+
15+
public static ConfigProviderFacade getInstance() {
16+
return INSTANCE;
17+
}
18+
19+
private Map<String, ConfigProvider> map;
20+
21+
private ConfigProviderFacade() {
22+
this.map = new HashMap<>();
23+
}
24+
25+
public ConfigProvider getDefaultProvider() {
26+
return defaultProvider;
27+
}
28+
29+
public ConfigProvider getProviderByName( String name ) {
30+
return this.resolveProvider(name);
31+
}
32+
33+
public ConfigProvider getProviderByCaller( Object caller ) {
34+
return this.resolveProvider( caller.getClass().getName() );
35+
}
36+
37+
public ConfigProvider getProviderWithDefault( String name, Object caller ) {
38+
ConfigProvider configProvider = null;
39+
if ( StringUtils.isNotEmpty( name ) ) {
40+
configProvider = this.map.get( name );
41+
}
42+
if ( configProvider == null && caller != null ) {
43+
configProvider = this.map.get( caller.getClass().getName() );
44+
}
45+
return ObjectUtils.objectWithDefault( configProvider , this.getDefaultProvider() );
46+
}
47+
48+
public void setDefaultProvider( ConfigProvider configProvider ) {
49+
defaultProvider = configProvider;
50+
}
51+
52+
private ConfigProvider resolveProvider( String name ) {
53+
return ObjectUtils.objectWithDefault( map.get( name ) , defaultProvider );
54+
}
55+
56+
public ConfigProvider registerByCaller( Object caller, ConfigProvider configProvider ) {
57+
String name = caller.getClass().getName();
58+
return this.registerByName(name, configProvider);
59+
}
60+
61+
public ConfigProvider registerByName( String name, ConfigProvider configProvider ) {
62+
ConfigProvider previousProvider = map.get( name );
63+
this.map.put( name , configProvider );
64+
return previousProvider;
65+
}
66+
67+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package org.fugerit.java.core.cfg.provider;
2+
3+
import java.io.InputStream;
4+
5+
import org.fugerit.java.core.cfg.ConfigException;
6+
import org.fugerit.java.core.lang.helpers.Wrapper;
7+
8+
public class ConfigProviderWrapper implements Wrapper<ConfigProvider>, ConfigProvider {
9+
10+
@Override
11+
public InputStream readConfiguration(String mode, String path) throws ConfigException {
12+
return this.wrapped.readConfiguration(mode, path);
13+
}
14+
15+
private ConfigProvider wrapped;
16+
17+
public ConfigProviderWrapper() {
18+
this( ConfigProviderFacade.getInstance().getDefaultProvider() );
19+
}
20+
21+
public ConfigProviderWrapper(ConfigProvider wrapped) {
22+
super();
23+
this.wrapped = wrapped;
24+
}
25+
26+
@Override
27+
public ConfigProvider unwrapModel() {
28+
return this.unwrap();
29+
}
30+
31+
@Override
32+
public void wrapModel(ConfigProvider wrapped) {
33+
this.wrapped = wrapped;
34+
}
35+
36+
@Override
37+
public ConfigProvider unwrap() {
38+
return this.wrapped;
39+
}
40+
41+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package org.fugerit.java.core.cfg.provider;
2+
3+
import java.io.InputStream;
4+
5+
import org.fugerit.java.core.cfg.ConfigException;
6+
import org.fugerit.java.core.io.helper.StreamHelper;
7+
8+
public class DefaultConfigProvider implements ConfigProvider {
9+
10+
@Override
11+
public InputStream readConfiguration(String mode, String path) throws ConfigException {
12+
InputStream is = null;
13+
try {
14+
is = StreamHelper.resolveStreamByMode( mode , path );
15+
} catch (Exception e) {
16+
throw new ConfigException( "Error loading configuration mode:"+mode+", path:"+path, e );
17+
}
18+
return is;
19+
}
20+
21+
}

fj-core/src/main/java/org/fugerit/java/core/cfg/xml/GenericListCatalogConfig.java

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515

1616
import org.fugerit.java.core.cfg.ConfigException;
1717
import org.fugerit.java.core.cfg.helpers.XMLConfigurableObject;
18+
import org.fugerit.java.core.cfg.provider.ConfigProvider;
19+
import org.fugerit.java.core.cfg.provider.ConfigProviderFacade;
1820
import org.fugerit.java.core.io.helper.StreamHelper;
1921
import org.fugerit.java.core.lang.helpers.BooleanUtils;
2022
import org.fugerit.java.core.lang.helpers.ClassHelper;
@@ -94,6 +96,8 @@ public class GenericListCatalogConfig<T> extends XMLConfigurableObject {
9496

9597
private Properties generalProps;
9698

99+
private ConfigProvider configProvider;
100+
97101
/**
98102
* Creates a new DataListCatalogConfig wth default configuration.
99103
*/
@@ -179,6 +183,11 @@ public GenericListCatalogConfig( String attTagDataList, String attTagData ) {
179183
* Bean population mode
180184
*/
181185
public static final String ATT_BEAN_MODE = "bean-mode";
186+
187+
/**
188+
* Name of the config provider to use
189+
*/
190+
public static final String ATT_CONFIG_PROVIDER_NAME = "config-provider-name";
182191

183192
/**
184193
* Default, bean population mode (by default read only attributes)
@@ -284,6 +293,9 @@ public void configure(Element tag) throws ConfigException {
284293
DOMUtils.attributesToProperties( tag, this.getGeneralProps() );
285294
logger.info( "general props : "+this.getGeneralProps() );
286295

296+
String confgiProviderName = this.getGeneralProps().getProperty( ATT_CONFIG_PROVIDER_NAME );
297+
this.configProvider = ConfigProviderFacade.getInstance().getProviderWithDefault( confgiProviderName , this );
298+
287299
String tryXsdValidation = this.getGeneralProps().getProperty( ATT_TRY_XSD_VALIDATION, ATT_TRY_XSD_VALIDATION_DEFAULT );
288300
if ( BooleanUtils.isTrue( tryXsdValidation ) ) {
289301
if ( this.hasDefinition() ) {
@@ -414,8 +426,7 @@ public void configure(Element tag) throws ConfigException {
414426
String path = currentModule.getAttribute( ATT_TAG_MODULE_CONF_PATH );
415427
String unsafe = currentModule.getAttribute( ATT_TAG_MODULE_CONF_UNSAFE );
416428
logger.info( "Loading module id="+id+" mode="+mode+" path="+path );
417-
try {
418-
InputStream is = StreamHelper.resolveStreamByMode( mode , path );
429+
try ( InputStream is = this.getConfigProvider().readConfiguration( mode, path) ) {
419430
Document currentModuleDoc = DOMIO.loadDOMDoc( is );
420431
Element rootTag = currentModuleDoc.getDocumentElement();
421432
this.configure( rootTag );
@@ -479,6 +490,10 @@ public void setSchemaId(String schemaId) {
479490
this.schemaId = schemaId;
480491
}
481492

493+
protected ConfigProvider getConfigProvider() {
494+
return this.configProvider;
495+
}
496+
482497
/**
483498
* Check if the catalog config has a schema definition
484499
*

fj-tool/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<parent>
88
<groupId>org.fugerit.java</groupId>
99
<artifactId>fj-lib</artifactId>
10-
<version>0.8.8</version>
10+
<version>0.8.9</version>
1111
</parent>
1212

1313
<name>fj-tool</name>

0 commit comments

Comments
 (0)