Skip to content

Commit ecf5c0f

Browse files
committed
Read configuration settings from client.cfg.dev
1 parent afd7ca2 commit ecf5c0f

File tree

11 files changed

+124
-88
lines changed

11 files changed

+124
-88
lines changed
Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,39 @@
11
package com.genexus.util;
22

3-
import java.io.*;
3+
import com.genexus.diagnostics.core.ILogger;
4+
import com.genexus.diagnostics.core.LogManager;
5+
6+
import java.io.IOException;
7+
import java.io.InputStream;
48

59
public class IniFileMultiple extends IniFile {
10+
public static final ILogger logger = LogManager.getLogger(IniFileMultiple.class);
611
private IniFile additionalProperties;
712

8-
public IniFileMultiple(InputStream in, InputStream in2) throws IOException {
13+
public IniFileMultiple(InputStream in) throws IOException {
914
super(in);
10-
try {
11-
additionalProperties = new IniFile(in2);
12-
} catch (Exception e) { }
15+
}
16+
17+
public void addConfigurationSource(String configId, InputStream in) {
18+
if (in != null) {
19+
try {
20+
additionalProperties = new IniFile(in);
21+
logger.debug(String.format("Additional configuration file '%s' lodad", configId));
22+
} catch (Exception e) {
23+
logger.warn(String.format("Could not read additional configuration file: '%s'", configId), e);
24+
}
25+
}
1326
}
1427

1528
@Override
1629
public String getProperty(String section, String key, String defaultValue) {
1730
String value = null;
18-
if (additionalProperties != null){
31+
if (additionalProperties != null) {
1932
value = additionalProperties.getProperty(section, key);
2033
}
2134
if (value == null) {
2235
value = super.getProperty(section, key, defaultValue);
2336
}
2437
return value;
2538
}
26-
27-
2839
}

java/client.cfg

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ MODEL_NUM= 2
33
GENERATOR_NUM= 12
44
LOGIN_AS_USERID=0
55
SMTP_HOST=
6-
NAME_SPACE= com.mockdb
6+
NAME_SPACE=com.genexus.sampleapp
77
NAME_HOST=
88
CORBA_SERVER_NAME=
99
DCOM_GUID=
@@ -28,7 +28,7 @@ CS_REORG=1
2828
CS_REORGJAVA=1
2929
SUBFILE_ORDER=Y
3030
FC_READONLY=GRAYED
31-
PACKAGE=com.mockdb
31+
PACKAGE=com.genexus.sampleapp
3232
DECIMAL_POINT=.
3333
DATE_FMT= DMY
3434
CTOD_DATE_FMT= L
@@ -51,7 +51,7 @@ SAMESITE_COOKIE=Lax
5151
StorageTimeZone= 1
5252
GX_BUILD_NUMBER=17233991
5353
ODBC_CALLS=0
54-
NameSpace1= com.mockdb
54+
NameSpace1=com.genexus.sampleapp
5555
LANGUAGE=German
5656
LANG_NAME=German
5757
Theme=Carmine
@@ -141,7 +141,7 @@ decimal_point= ,
141141
thousand_sep= .
142142
date_fmt= DMY
143143
culture= ar-SA
144-
[com.mockdb]
144+
[com.genexus.sampleapp]
145145
GXDB_LOCATION=
146146
JTA=0
147147
DataSource1=DEFAULT
@@ -152,7 +152,7 @@ JDBCLogPath=
152152
JDBCLogLevel=0
153153
JDBCLogBuffer=0
154154
JDBCLogDetail=0
155-
[com.mockdb|DEFAULT]
155+
[com.genexus.sampleapp|DEFAULT]
156156
CS_DBNAME=
157157
INFORMIX_DB=ANSI
158158
CS_LIBL400=

java/client.cfg.dev

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
[Client]
2+
MY_CUSTOM_PTY=SAMPLE_VALUE_FOR_DEV

java/client.cfg.prod

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
[Client]
2+
MY_CUSTOM_PTY=SAMPLE_VALUE_FOR_PROD
3+
MY_CUSTOM_PTY_PROD=SHOULD_NOT_BE_READ

java/src/main/java/com/genexus/ConfigFileFinder.java

Lines changed: 46 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,48 @@
11
package com.genexus;
22

3-
import java.io.BufferedInputStream;
4-
import java.io.FileInputStream;
5-
import java.io.FileNotFoundException;
6-
import java.io.IOException;
7-
import java.io.InputStream;
8-
3+
import com.genexus.diagnostics.core.ILogger;
4+
import com.genexus.diagnostics.core.LogManager;
95
import com.genexus.util.IniFile;
106
import com.genexus.util.IniFileMultiple;
117

12-
public class ConfigFileFinder
13-
{
8+
import java.io.*;
9+
10+
public class ConfigFileFinder {
11+
public static final ILogger logger = LogManager.getLogger(ConfigFileFinder.class);
1412
private static final String CRYPTO_CFG = "crypto.cfg";
1513
private static final String PROD_ENV_SUFFIX = ".prod";
14+
private static final String DEV_ENV_SUFFIX = ".dev";
1615

17-
public static IniFile getConfigFile(Class resourceClassParm, String fileName, Class defaultResourceClass)
18-
{
16+
public static IniFile getConfigFile(Class resourceClassParm, String fileName, Class defaultResourceClass) {
1917
IniFileStream iniFileStream = new IniFileStream(resourceClassParm, fileName, defaultResourceClass).invoke();
2018
InputStream is = iniFileStream.getIs();
2119
InputStream crypto = iniFileStream.getCrypto();
2220

23-
IniFileStream iniFileStreamProdEnv = new IniFileStream(resourceClassParm, fileName + PROD_ENV_SUFFIX, defaultResourceClass).invoke();
24-
InputStream isProdEnv = iniFileStreamProdEnv.getIs();
25-
21+
//If client.cfg.dev is present, any other client.cfg.* will not be read
22+
IniFileStream configurationOverride = new IniFileStream(resourceClassParm, fileName + DEV_ENV_SUFFIX, defaultResourceClass);
23+
if (configurationOverride == null || configurationOverride.invoke().getIs() == null) {
24+
configurationOverride = new IniFileStream(resourceClassParm, fileName + PROD_ENV_SUFFIX, defaultResourceClass);
25+
}
26+
2627
IniFile iniFile = null;
2728

28-
try
29-
{
30-
iniFile = new IniFileMultiple(is, isProdEnv);
31-
}
32-
catch (IOException e)
33-
{
34-
if (ApplicationContext.getInstance().isGXUtility())
35-
{
29+
try {
30+
iniFile = new IniFileMultiple(is);
31+
((IniFileMultiple) iniFile).addConfigurationSource(configurationOverride.fileName, configurationOverride.invoke().getIs());
32+
} catch (IOException e) {
33+
if (ApplicationContext.getInstance().isGXUtility()) {
3634
iniFile = new IniFile(fileName);
37-
}
38-
else
39-
{
35+
} else {
4036
String userDir;
41-
try
42-
{
37+
try {
4338
userDir = System.getProperty("user.dir") + "\\";
44-
}
45-
catch (SecurityException ex)
46-
{
39+
} catch (SecurityException ex) {
4740
userDir = "";
4841
}
4942

50-
throw new InternalError("Can't open " + userDir + fileName + " / " + e.getMessage());
43+
String errMessage = "Can't open " + userDir + fileName;
44+
logger.fatal(errMessage, e);
45+
throw new InternalError(errMessage + " / " + e.getMessage());
5146
}
5247
}
5348

@@ -85,63 +80,47 @@ public IniFileStream invoke() {
8580
if (ClientContext.getModelContext() != null)
8681
resourceClass = ClientContext.getModelContext().getPackageClass();
8782

88-
if (is == null && resourceClass != null)
89-
{
83+
if (is == null && resourceClass != null) {
9084
is = ResourceReader.getResourceAsStream(resourceClass, fileName);
91-
if (is != null)
92-
{
85+
if (is != null) {
9386
crypto = ResourceReader.getResourceAsStream(resourceClass, CRYPTO_CFG);
9487
}
9588
}
9689

9790
// This is for GeneXus programs set where is the .cfg file
98-
if (is == null && defaultResourceClass != null)
99-
{
91+
if (is == null && defaultResourceClass != null) {
10092
is = ResourceReader.getResourceAsStream(defaultResourceClass, fileName);
101-
if (is != null)
102-
{
93+
if (is != null) {
10394
crypto = ResourceReader.getResourceAsStream(resourceClass, CRYPTO_CFG);
10495
}
10596
}
10697

107-
if (is == null)
108-
{
109-
try
110-
{
98+
if (is == null) {
99+
try {
100+
is = new BufferedInputStream(new FileInputStream(fileName));
101+
if (is != null) {
102+
crypto = new BufferedInputStream(new FileInputStream(CRYPTO_CFG));
103+
}
104+
} catch (FileNotFoundException e) {
105+
try {
111106
is = new BufferedInputStream(new FileInputStream(fileName));
112-
if (is != null)
113-
{
107+
if (is != null) {
114108
crypto = new BufferedInputStream(new FileInputStream(CRYPTO_CFG));
115109
}
110+
} catch (FileNotFoundException e2) {
111+
;
116112
}
117-
catch (FileNotFoundException e)
118-
{
119-
try
120-
{
121-
is = new BufferedInputStream(new FileInputStream(fileName));
122-
if (is != null)
123-
{
124-
crypto = new BufferedInputStream(new FileInputStream(CRYPTO_CFG));
125-
}
126-
}
127-
catch (FileNotFoundException e2) { ; }
128-
}
113+
}
129114
}
130115

131-
if (is == null)
132-
{
133-
if (ApplicationContext.getInstance().isGXUtility())
134-
{
135-
try
136-
{
116+
if (is == null) {
117+
if (ApplicationContext.getInstance().isGXUtility()) {
118+
try {
137119
is = new FileInputStream(fileName);
138-
if (is != null)
139-
{
120+
if (is != null) {
140121
crypto = new FileInputStream(fileName);
141122
}
142-
}
143-
catch (IOException e)
144-
{
123+
} catch (IOException e) {
145124
}
146125
}
147126
}

java/src/test/java/com/genexus/TestGxReadEnvVar.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.genexus;
22

33

4+
import com.genexus.sampleapp.GXcfg;
45
import com.genexus.specific.java.Connect;
56
import com.genexus.util.EnvVarReader;
67
import org.junit.Assert;
@@ -14,17 +15,17 @@
1415
public class TestGxReadEnvVar {
1516

1617
private static final String GX_PROP = "DB_URL";
17-
private static final String GX_DATASTORE = "COM.MOCKDB|DEFAULT";
18+
private static final String GX_DATASTORE = "COM.GENEXUS.SAMPLEAPP|DEFAULT";
1819
private static final String FIRST_ENV_VAR = "GX_DEFAULT_DB_URL";
19-
private static final String SECOND_ENV_VAR = "GX_COM_MOCKDB_DEFAULT_DB_URL";
20+
private static final String SECOND_ENV_VAR = "GX_COM_GENEXUS_SAMPLEAPP_DEFAULT_DB_URL";
2021
private static final String FIRST_VALUE = "FirstDB_URL";
2122
private static final String SECOND_VALUE = "SecondDB_URL";
2223

2324
@Test
2425
public void testGxReadEnvVar()
2526
{
2627
Connect.init();
27-
ModelContext modelContext = ModelContext.getModelContext(com.mockdb.GXcfg.class);
28+
ModelContext modelContext = ModelContext.getModelContext(GXcfg.class);
2829
try {
2930
Map<String, String> newenv = new HashMap<>();
3031
newenv.put(FIRST_ENV_VAR, FIRST_VALUE);
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package com.genexus.configuration;
2+
3+
import com.genexus.Application;
4+
import com.genexus.sampleapp.GXcfg;
5+
import com.genexus.specific.java.Connect;
6+
import org.junit.Before;
7+
import org.junit.Test;
8+
9+
import static org.junit.Assert.assertEquals;
10+
11+
public class TestConfigurationOverride {
12+
13+
@Before
14+
public void setUpStreams() {
15+
Connect.init();
16+
Application.init(GXcfg.class);
17+
}
18+
19+
@Test
20+
public void testReadConfiguration() {
21+
String packageName = Application.getClientPreferences().getPACKAGE();
22+
assertEquals("com.genexus.sampleapp", packageName);
23+
}
24+
25+
@Test
26+
public void testReadConfigurationFromDev() {
27+
String customOverridablePty = Application.getClientPreferences().getProperty("MY_CUSTOM_PTY", "");
28+
assertEquals("SAMPLE_VALUE_FOR_DEV", customOverridablePty);
29+
}
30+
31+
@Test
32+
public void testReadConfigurationFromProdError() {
33+
String customOverridablePty = Application.getClientPreferences().getProperty("MY_CUSTOM_PTY_PROD", "");
34+
assertEquals("", customOverridablePty);
35+
}
36+
}

java/src/test/java/com/genexus/db/driver/TestMockDataAccess.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.genexus.db.driver;
22

3+
import com.genexus.sampleapp.GXcfg;
34
import com.mockdb.*;
45
import com.genexus.Application;
56
import org.junit.Before;

java/src/test/java/com/mockdb/GXcfg.java renamed to java/src/test/java/com/genexus/sampleapp/GXcfg.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.mockdb ;
1+
package com.genexus.sampleapp;
22
import com.genexus.*;
33

44
public final class GXcfg

java/src/test/java/com/mockdb/ausemockdataaccess.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
package com.mockdb ;
22
import com.genexus.*;
33
import com.genexus.db.*;
4+
import com.genexus.sampleapp.GXcfg;
5+
46
import java.sql.*;
57

68
public final class ausemockdataaccess extends GXProcedure
79
{
810
public static void main( String args[] )
911
{
10-
Application.init(com.mockdb.GXcfg.class);
12+
Application.init(GXcfg.class);
1113
ausemockdataaccess pgm = new ausemockdataaccess (-1);
1214
Application.realMainProgram = pgm;
1315
pgm.executeCmdLine(args);
@@ -92,7 +94,7 @@ private void privateExecute( )
9294
public static Object refClasses( )
9395
{
9496
GXutil.refClasses(usemockdataaccess.class);
95-
return new com.mockdb.GXcfg();
97+
return new GXcfg();
9698
}
9799

98100
protected void cleanup( )

0 commit comments

Comments
 (0)