Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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;
}


}
11 changes: 6 additions & 5 deletions java/client.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,15 @@ 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=
CONN_TIMEOUT=300
HELP_MODE=WINHTML
HELP_BASEURL=
PREFERRED_UI=BEST
MY_CUSTOM_PTY=SAMPLE_VALUE_FOR_ROOTCFG
JFC_LF=NATIVE
CALENDAR=1
CALC=1
Expand All @@ -28,7 +29,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 +52,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 +142,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 +153,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