Skip to content

Commit

Permalink
Read configuration settings from client.cfg.dev
Browse files Browse the repository at this point in the history
  • Loading branch information
ggallotti committed Oct 5, 2022
1 parent afd7ca2 commit ecf5c0f
Show file tree
Hide file tree
Showing 11 changed files with 124 additions and 88 deletions.
27 changes: 19 additions & 8 deletions common/src/main/java/com/genexus/util/IniFileMultiple.java
Original file line number Diff line number Diff line change
@@ -1,28 +1,39 @@
package com.genexus.util;

import java.io.*;
import com.genexus.diagnostics.core.ILogger;
import com.genexus.diagnostics.core.LogManager;

import java.io.IOException;
import java.io.InputStream;

public class IniFileMultiple extends IniFile {
public static final ILogger logger = LogManager.getLogger(IniFileMultiple.class);
private IniFile additionalProperties;

public IniFileMultiple(InputStream in, InputStream in2) throws IOException {
public IniFileMultiple(InputStream in) throws IOException {
super(in);
try {
additionalProperties = new IniFile(in2);
} catch (Exception e) { }
}

public void addConfigurationSource(String configId, InputStream in) {
if (in != null) {
try {
additionalProperties = new IniFile(in);
logger.debug(String.format("Additional configuration file '%s' lodad", configId));
} catch (Exception e) {
logger.warn(String.format("Could not read additional configuration file: '%s'", configId), e);
}
}
}

@Override
public String getProperty(String section, String key, String defaultValue) {
String value = null;
if (additionalProperties != null){
if (additionalProperties != null) {
value = additionalProperties.getProperty(section, key);
}
if (value == null) {
value = super.getProperty(section, key, defaultValue);
}
return value;
}


}
10 changes: 5 additions & 5 deletions java/client.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ MODEL_NUM= 2
GENERATOR_NUM= 12
LOGIN_AS_USERID=0
SMTP_HOST=
NAME_SPACE= com.mockdb
NAME_SPACE=com.genexus.sampleapp
NAME_HOST=
CORBA_SERVER_NAME=
DCOM_GUID=
Expand All @@ -28,7 +28,7 @@ CS_REORG=1
CS_REORGJAVA=1
SUBFILE_ORDER=Y
FC_READONLY=GRAYED
PACKAGE=com.mockdb
PACKAGE=com.genexus.sampleapp
DECIMAL_POINT=.
DATE_FMT= DMY
CTOD_DATE_FMT= L
Expand All @@ -51,7 +51,7 @@ SAMESITE_COOKIE=Lax
StorageTimeZone= 1
GX_BUILD_NUMBER=17233991
ODBC_CALLS=0
NameSpace1= com.mockdb
NameSpace1=com.genexus.sampleapp
LANGUAGE=German
LANG_NAME=German
Theme=Carmine
Expand Down Expand Up @@ -141,7 +141,7 @@ decimal_point= ,
thousand_sep= .
date_fmt= DMY
culture= ar-SA
[com.mockdb]
[com.genexus.sampleapp]
GXDB_LOCATION=
JTA=0
DataSource1=DEFAULT
Expand All @@ -152,7 +152,7 @@ JDBCLogPath=
JDBCLogLevel=0
JDBCLogBuffer=0
JDBCLogDetail=0
[com.mockdb|DEFAULT]
[com.genexus.sampleapp|DEFAULT]
CS_DBNAME=
INFORMIX_DB=ANSI
CS_LIBL400=
Expand Down
2 changes: 2 additions & 0 deletions java/client.cfg.dev
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
[Client]
MY_CUSTOM_PTY=SAMPLE_VALUE_FOR_DEV
3 changes: 3 additions & 0 deletions java/client.cfg.prod
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[Client]
MY_CUSTOM_PTY=SAMPLE_VALUE_FOR_PROD
MY_CUSTOM_PTY_PROD=SHOULD_NOT_BE_READ
113 changes: 46 additions & 67 deletions java/src/main/java/com/genexus/ConfigFileFinder.java
Original file line number Diff line number Diff line change
@@ -1,53 +1,48 @@
package com.genexus;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

import com.genexus.diagnostics.core.ILogger;
import com.genexus.diagnostics.core.LogManager;
import com.genexus.util.IniFile;
import com.genexus.util.IniFileMultiple;

public class ConfigFileFinder
{
import java.io.*;

public class ConfigFileFinder {
public static final ILogger logger = LogManager.getLogger(ConfigFileFinder.class);
private static final String CRYPTO_CFG = "crypto.cfg";
private static final String PROD_ENV_SUFFIX = ".prod";
private static final String DEV_ENV_SUFFIX = ".dev";

public static IniFile getConfigFile(Class resourceClassParm, String fileName, Class defaultResourceClass)
{
public static IniFile getConfigFile(Class resourceClassParm, String fileName, Class defaultResourceClass) {
IniFileStream iniFileStream = new IniFileStream(resourceClassParm, fileName, defaultResourceClass).invoke();
InputStream is = iniFileStream.getIs();
InputStream crypto = iniFileStream.getCrypto();

IniFileStream iniFileStreamProdEnv = new IniFileStream(resourceClassParm, fileName + PROD_ENV_SUFFIX, defaultResourceClass).invoke();
InputStream isProdEnv = iniFileStreamProdEnv.getIs();

//If client.cfg.dev is present, any other client.cfg.* will not be read
IniFileStream configurationOverride = new IniFileStream(resourceClassParm, fileName + DEV_ENV_SUFFIX, defaultResourceClass);
if (configurationOverride == null || configurationOverride.invoke().getIs() == null) {
configurationOverride = new IniFileStream(resourceClassParm, fileName + PROD_ENV_SUFFIX, defaultResourceClass);
}

IniFile iniFile = null;

try
{
iniFile = new IniFileMultiple(is, isProdEnv);
}
catch (IOException e)
{
if (ApplicationContext.getInstance().isGXUtility())
{
try {
iniFile = new IniFileMultiple(is);
((IniFileMultiple) iniFile).addConfigurationSource(configurationOverride.fileName, configurationOverride.invoke().getIs());
} catch (IOException e) {
if (ApplicationContext.getInstance().isGXUtility()) {
iniFile = new IniFile(fileName);
}
else
{
} else {
String userDir;
try
{
try {
userDir = System.getProperty("user.dir") + "\\";
}
catch (SecurityException ex)
{
} catch (SecurityException ex) {
userDir = "";
}

throw new InternalError("Can't open " + userDir + fileName + " / " + e.getMessage());
String errMessage = "Can't open " + userDir + fileName;
logger.fatal(errMessage, e);
throw new InternalError(errMessage + " / " + e.getMessage());
}
}

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

if (is == null && resourceClass != null)
{
if (is == null && resourceClass != null) {
is = ResourceReader.getResourceAsStream(resourceClass, fileName);
if (is != null)
{
if (is != null) {
crypto = ResourceReader.getResourceAsStream(resourceClass, CRYPTO_CFG);
}
}

// This is for GeneXus programs set where is the .cfg file
if (is == null && defaultResourceClass != null)
{
if (is == null && defaultResourceClass != null) {
is = ResourceReader.getResourceAsStream(defaultResourceClass, fileName);
if (is != null)
{
if (is != null) {
crypto = ResourceReader.getResourceAsStream(resourceClass, CRYPTO_CFG);
}
}

if (is == null)
{
try
{
if (is == null) {
try {
is = new BufferedInputStream(new FileInputStream(fileName));
if (is != null) {
crypto = new BufferedInputStream(new FileInputStream(CRYPTO_CFG));
}
} catch (FileNotFoundException e) {
try {
is = new BufferedInputStream(new FileInputStream(fileName));
if (is != null)
{
if (is != null) {
crypto = new BufferedInputStream(new FileInputStream(CRYPTO_CFG));
}
} catch (FileNotFoundException e2) {
;
}
catch (FileNotFoundException e)
{
try
{
is = new BufferedInputStream(new FileInputStream(fileName));
if (is != null)
{
crypto = new BufferedInputStream(new FileInputStream(CRYPTO_CFG));
}
}
catch (FileNotFoundException e2) { ; }
}
}
}

if (is == null)
{
if (ApplicationContext.getInstance().isGXUtility())
{
try
{
if (is == null) {
if (ApplicationContext.getInstance().isGXUtility()) {
try {
is = new FileInputStream(fileName);
if (is != null)
{
if (is != null) {
crypto = new FileInputStream(fileName);
}
}
catch (IOException e)
{
} catch (IOException e) {
}
}
}
Expand Down
7 changes: 4 additions & 3 deletions java/src/test/java/com/genexus/TestGxReadEnvVar.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.genexus;


import com.genexus.sampleapp.GXcfg;
import com.genexus.specific.java.Connect;
import com.genexus.util.EnvVarReader;
import org.junit.Assert;
Expand All @@ -14,17 +15,17 @@
public class TestGxReadEnvVar {

private static final String GX_PROP = "DB_URL";
private static final String GX_DATASTORE = "COM.MOCKDB|DEFAULT";
private static final String GX_DATASTORE = "COM.GENEXUS.SAMPLEAPP|DEFAULT";
private static final String FIRST_ENV_VAR = "GX_DEFAULT_DB_URL";
private static final String SECOND_ENV_VAR = "GX_COM_MOCKDB_DEFAULT_DB_URL";
private static final String SECOND_ENV_VAR = "GX_COM_GENEXUS_SAMPLEAPP_DEFAULT_DB_URL";
private static final String FIRST_VALUE = "FirstDB_URL";
private static final String SECOND_VALUE = "SecondDB_URL";

@Test
public void testGxReadEnvVar()
{
Connect.init();
ModelContext modelContext = ModelContext.getModelContext(com.mockdb.GXcfg.class);
ModelContext modelContext = ModelContext.getModelContext(GXcfg.class);
try {
Map<String, String> newenv = new HashMap<>();
newenv.put(FIRST_ENV_VAR, FIRST_VALUE);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package com.genexus.configuration;

import com.genexus.Application;
import com.genexus.sampleapp.GXcfg;
import com.genexus.specific.java.Connect;
import org.junit.Before;
import org.junit.Test;

import static org.junit.Assert.assertEquals;

public class TestConfigurationOverride {

@Before
public void setUpStreams() {
Connect.init();
Application.init(GXcfg.class);
}

@Test
public void testReadConfiguration() {
String packageName = Application.getClientPreferences().getPACKAGE();
assertEquals("com.genexus.sampleapp", packageName);
}

@Test
public void testReadConfigurationFromDev() {
String customOverridablePty = Application.getClientPreferences().getProperty("MY_CUSTOM_PTY", "");
assertEquals("SAMPLE_VALUE_FOR_DEV", customOverridablePty);
}

@Test
public void testReadConfigurationFromProdError() {
String customOverridablePty = Application.getClientPreferences().getProperty("MY_CUSTOM_PTY_PROD", "");
assertEquals("", customOverridablePty);
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.genexus.db.driver;

import com.genexus.sampleapp.GXcfg;
import com.mockdb.*;
import com.genexus.Application;
import org.junit.Before;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.mockdb ;
package com.genexus.sampleapp;
import com.genexus.*;

public final class GXcfg
Expand Down
6 changes: 4 additions & 2 deletions java/src/test/java/com/mockdb/ausemockdataaccess.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
package com.mockdb ;
import com.genexus.*;
import com.genexus.db.*;
import com.genexus.sampleapp.GXcfg;

import java.sql.*;

public final class ausemockdataaccess extends GXProcedure
{
public static void main( String args[] )
{
Application.init(com.mockdb.GXcfg.class);
Application.init(GXcfg.class);
ausemockdataaccess pgm = new ausemockdataaccess (-1);
Application.realMainProgram = pgm;
pgm.executeCmdLine(args);
Expand Down Expand Up @@ -92,7 +94,7 @@ private void privateExecute( )
public static Object refClasses( )
{
GXutil.refClasses(usemockdataaccess.class);
return new com.mockdb.GXcfg();
return new GXcfg();
}

protected void cleanup( )
Expand Down
5 changes: 3 additions & 2 deletions java/src/test/java/com/mockdb/usemockdataaccess.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
package com.mockdb ;
import com.genexus.*;
import com.genexus.sampleapp.GXcfg;

public final class usemockdataaccess extends GXProcedure
{
public static void main( String args[] )
{
Application.init(com.mockdb.GXcfg.class);
Application.init(GXcfg.class);
usemockdataaccess pgm = new usemockdataaccess (-1);
Application.realMainProgram = pgm;
pgm.executeCmdLine(args);
Expand All @@ -21,7 +22,7 @@ public void executeCmdLine( String args[] )
public usemockdataaccess( )
{
super( -1 , new ModelContext( usemockdataaccess.class ), "" );
Application.init(com.mockdb.GXcfg.class);
Application.init(GXcfg.class);
}

public usemockdataaccess( int remoteHandle )
Expand Down

0 comments on commit ecf5c0f

Please sign in to comment.