From 07251465c362532264069be9c42d4a976cd07e18 Mon Sep 17 00:00:00 2001 From: Vincent BOUSSAUD Date: Thu, 12 Feb 2026 16:24:32 +0100 Subject: [PATCH 1/3] [SAFRAN-1207] Replace text field with combo in ConnectionInformationDialog --- .../META-INF/MANIFEST.MF | 3 +- .../liquibasegen/ConnectionInformation.java | 12 ++++ .../handlers/ChangelogHandler.java | 47 +++++++++++-- .../ui/ConnectionInformationDialog.java | 67 ++++++++++++------- 4 files changed, 98 insertions(+), 31 deletions(-) create mode 100644 reversers/database-synchroniser/plugins/org.obeonetwork.dsl.database.liquibasegen/src/org/obeonetwork/dsl/database/liquibasegen/ConnectionInformation.java diff --git a/reversers/database-synchroniser/plugins/org.obeonetwork.dsl.database.liquibasegen/META-INF/MANIFEST.MF b/reversers/database-synchroniser/plugins/org.obeonetwork.dsl.database.liquibasegen/META-INF/MANIFEST.MF index 75a5082cc..aefc51889 100644 --- a/reversers/database-synchroniser/plugins/org.obeonetwork.dsl.database.liquibasegen/META-INF/MANIFEST.MF +++ b/reversers/database-synchroniser/plugins/org.obeonetwork.dsl.database.liquibasegen/META-INF/MANIFEST.MF @@ -13,7 +13,8 @@ Require-Bundle: org.eclipse.core.runtime, org.eclipse.core.resources, org.obeonetwork.dsl.database.drivers, liquibase, - org.obeonetwork.utils.common.ui + org.obeonetwork.utils.common.ui, + org.eclipse.swt Bundle-RequiredExecutionEnvironment: JavaSE-17 Automatic-Module-Name: org.obeonetwork.dsl.database.liquibasegen Bundle-ActivationPolicy: lazy diff --git a/reversers/database-synchroniser/plugins/org.obeonetwork.dsl.database.liquibasegen/src/org/obeonetwork/dsl/database/liquibasegen/ConnectionInformation.java b/reversers/database-synchroniser/plugins/org.obeonetwork.dsl.database.liquibasegen/src/org/obeonetwork/dsl/database/liquibasegen/ConnectionInformation.java new file mode 100644 index 000000000..ea5e0315c --- /dev/null +++ b/reversers/database-synchroniser/plugins/org.obeonetwork.dsl.database.liquibasegen/src/org/obeonetwork/dsl/database/liquibasegen/ConnectionInformation.java @@ -0,0 +1,12 @@ +package org.obeonetwork.dsl.database.liquibasegen; + +import java.util.Objects; + +public record ConnectionInformation(String url, String username, String password) { + public ConnectionInformation { + Objects.requireNonNull(url); + Objects.requireNonNull(username); + Objects.requireNonNull(password); + } + +} diff --git a/reversers/database-synchroniser/plugins/org.obeonetwork.dsl.database.liquibasegen/src/org/obeonetwork/dsl/database/liquibasegen/handlers/ChangelogHandler.java b/reversers/database-synchroniser/plugins/org.obeonetwork.dsl.database.liquibasegen/src/org/obeonetwork/dsl/database/liquibasegen/handlers/ChangelogHandler.java index 11654c3a5..b497138e6 100644 --- a/reversers/database-synchroniser/plugins/org.obeonetwork.dsl.database.liquibasegen/src/org/obeonetwork/dsl/database/liquibasegen/handlers/ChangelogHandler.java +++ b/reversers/database-synchroniser/plugins/org.obeonetwork.dsl.database.liquibasegen/src/org/obeonetwork/dsl/database/liquibasegen/handlers/ChangelogHandler.java @@ -13,8 +13,12 @@ import static org.obeonetwork.dsl.database.liquibasegen.Activator.getLiquibaseVersion; import java.io.FileInputStream; +import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.List; import java.util.Properties; import org.eclipse.core.commands.AbstractHandler; @@ -28,6 +32,7 @@ import org.eclipse.jface.window.Window; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.handlers.HandlerUtil; +import org.obeonetwork.dsl.database.liquibasegen.ConnectionInformation; import org.obeonetwork.dsl.database.liquibasegen.LiquibaseUpdater; import org.obeonetwork.dsl.database.liquibasegen.ui.ConnectionInformationDialog; import org.obeonetwork.utils.common.ui.handlers.EventHelper; @@ -42,6 +47,8 @@ */ @SuppressWarnings("restriction") public class ChangelogHandler extends AbstractHandler { + private static final String CREDENTIALS_PROPERTIES_FILE_NAME = "credentials.properties"; + private final static String LIQUIBASE_PROPERTIES_FILE_NAME = "liquibase.properties"; //$NON-NLS-1$ private Shell shell; @@ -89,15 +96,43 @@ public Object execute(ExecutionEvent event) throws ExecutionException { * @throws IOException */ private boolean openConnectionInformationDialog(File liquibasePropertiesFile) throws IOException { - Properties liquibaseProperties = new Properties(); - InputStream inputStream = new FileInputStream(liquibasePropertiesFile.getLocation().toOSString()); - liquibaseProperties.load(inputStream); + + java.io.File credentialsPropertiesFile = Paths.get(liquibasePropertiesFile.getParent().getLocationURI()).resolve(CREDENTIALS_PROPERTIES_FILE_NAME).toFile(); + + Properties credentialsProperties = new Properties(); + // Check if credentials file exist + if (!credentialsPropertiesFile.exists()) { + Properties liquibaseProperties = new Properties(); + InputStream inputStream = new FileInputStream(liquibasePropertiesFile.getLocation().toOSString()); + liquibaseProperties.load(inputStream); + + // initialize credentials file using default values in liquibase file + credentialsProperties.setProperty("url.1", liquibaseProperties.getProperty("url", "")); + credentialsProperties.setProperty("username.1", liquibaseProperties.getProperty("username", "")); + credentialsProperties.setProperty("password.1", liquibaseProperties.getProperty("password", "")); + + final FileOutputStream credentialsFos = new FileOutputStream(credentialsPropertiesFile); + credentialsProperties.store(credentialsFos, "Credentials for database connections"); + inputStream.close(); + credentialsFos.close(); + }else { + final FileInputStream credentialsFis = new FileInputStream(credentialsPropertiesFile); + credentialsProperties.load(credentialsFis); + credentialsFis.close(); + } + + int count = 1; + List connectionInformations = new ArrayList<>(); + while (credentialsProperties.getProperty("url."+count)!=null) { + connectionInformations.add(new ConnectionInformation(credentialsProperties.getProperty("url."+count,""), + credentialsProperties.getProperty("username."+count,""), + credentialsProperties.getProperty("password."+count,""))); + count++; + } ConnectionInformationDialog connectionInformationDialog = new ConnectionInformationDialog( shell, - liquibaseProperties.getProperty("url", ""), //$NON-NLS-1$ //$NON-NLS-2$ - liquibaseProperties.getProperty("username", ""), //$NON-NLS-1$ //$NON-NLS-2$ - liquibaseProperties.getProperty("password", "")); //$NON-NLS-1$ //$NON-NLS-2$ + connectionInformations); connectionInformationDialog.open(); diff --git a/reversers/database-synchroniser/plugins/org.obeonetwork.dsl.database.liquibasegen/src/org/obeonetwork/dsl/database/liquibasegen/ui/ConnectionInformationDialog.java b/reversers/database-synchroniser/plugins/org.obeonetwork.dsl.database.liquibasegen/src/org/obeonetwork/dsl/database/liquibasegen/ui/ConnectionInformationDialog.java index 1a0f31047..a19fbce86 100644 --- a/reversers/database-synchroniser/plugins/org.obeonetwork.dsl.database.liquibasegen/src/org/obeonetwork/dsl/database/liquibasegen/ui/ConnectionInformationDialog.java +++ b/reversers/database-synchroniser/plugins/org.obeonetwork.dsl.database.liquibasegen/src/org/obeonetwork/dsl/database/liquibasegen/ui/ConnectionInformationDialog.java @@ -10,6 +10,10 @@ *******************************************************************************/ package org.obeonetwork.dsl.database.liquibasegen.ui; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.swt.SWT; @@ -18,11 +22,13 @@ import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; +import org.obeonetwork.dsl.database.liquibasegen.ConnectionInformation; /** * Creates a dialog for defining the identifiers of the database. @@ -35,6 +41,7 @@ public class ConnectionInformationDialog extends Dialog { private String url; private String username; private String password; + private List connectionInformations; /** * Create the dialog. @@ -43,11 +50,12 @@ public class ConnectionInformationDialog extends Dialog { * @param username * @param password */ - public ConnectionInformationDialog(Shell parentShell, String url, String username, String password) { + public ConnectionInformationDialog(Shell parentShell, List connectionInformations) { super(parentShell); - this.url = url; - this.username = username; - this.password = password; + this.connectionInformations = connectionInformations; + url = connectionInformations.get(0).url(); + username = ""; + password = ""; } /** @@ -69,16 +77,6 @@ protected Control createDialogArea(Composite parent) { lblNewLabel.setLayoutData(gd_lblNewLabel); lblNewLabel.setText("URL"); - Text urlText = new Text(composite, SWT.BORDER); - urlText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); - urlText.setText(url); - urlText.addModifyListener(new ModifyListener() { - @Override - public void modifyText(ModifyEvent e) { - url = ((Text) e.widget).getText(); - } - }); - Composite composite_1 = new Composite(container, SWT.NONE); composite_1.setLayout(new GridLayout(2, false)); GridData gd_composite_1 = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1); @@ -92,16 +90,6 @@ public void modifyText(ModifyEvent e) { lblNewLabel_1.setLayoutData(gd_lblNewLabel_1); lblNewLabel_1.setText("Username"); - Text usernameText = new Text(composite_1, SWT.BORDER); - usernameText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); - usernameText.setText(username); - usernameText.addModifyListener(new ModifyListener() { - @Override - public void modifyText(ModifyEvent e) { - username = ((Text) e.widget).getText(); - } - }); - Composite composite_2 = new Composite(container, SWT.NONE); composite_2.setLayout(new GridLayout(2, false)); composite_2.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1)); @@ -113,7 +101,38 @@ public void modifyText(ModifyEvent e) { lblNewLabel_2.setLayoutData(gd_lblNewLabel_2); lblNewLabel_2.setText("Password"); + Text usernameText = new Text(composite_1, SWT.BORDER); Text passwordText = new Text(composite_2, SWT.BORDER); + + Combo urlCombo = new Combo(composite, SWT.BORDER); + urlCombo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); + connectionInformations.stream().map(ConnectionInformation::url).forEach(ciUrl -> urlCombo.add(ciUrl)); + urlCombo.addModifyListener(new ModifyListener() { + + @Override + public void modifyText(ModifyEvent e) { + url = ((Combo) e.widget).getText(); + Optional selectedConInf = connectionInformations.stream().filter(ci -> ci.url().equals(url)).findFirst(); + selectedConInf.ifPresentOrElse( + (ci) -> usernameText.setText( ci.username()), + () -> usernameText.setText("")); + selectedConInf.ifPresentOrElse( + (ci) -> passwordText.setText(ci.password()), + () -> passwordText.setText("")); + } + }); + + + usernameText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); + usernameText.setText(username); + usernameText.addModifyListener(new ModifyListener() { + @Override + public void modifyText(ModifyEvent e) { + username = ((Text) e.widget).getText(); + } + }); + + passwordText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1)); passwordText.setText(password); passwordText.addModifyListener(new ModifyListener() { From 6717cc2ba331ebf7756dbc7e80844b34138e890d Mon Sep 17 00:00:00 2001 From: Vincent BOUSSAUD Date: Thu, 12 Feb 2026 16:57:34 +0100 Subject: [PATCH 2/3] [SAFRAN-1207] Add properties sample as comment --- .../dsl/database/liquibasegen/handlers/ChangelogHandler.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/reversers/database-synchroniser/plugins/org.obeonetwork.dsl.database.liquibasegen/src/org/obeonetwork/dsl/database/liquibasegen/handlers/ChangelogHandler.java b/reversers/database-synchroniser/plugins/org.obeonetwork.dsl.database.liquibasegen/src/org/obeonetwork/dsl/database/liquibasegen/handlers/ChangelogHandler.java index b497138e6..8aaa84c48 100644 --- a/reversers/database-synchroniser/plugins/org.obeonetwork.dsl.database.liquibasegen/src/org/obeonetwork/dsl/database/liquibasegen/handlers/ChangelogHandler.java +++ b/reversers/database-synchroniser/plugins/org.obeonetwork.dsl.database.liquibasegen/src/org/obeonetwork/dsl/database/liquibasegen/handlers/ChangelogHandler.java @@ -112,7 +112,10 @@ private boolean openConnectionInformationDialog(File liquibasePropertiesFile) th credentialsProperties.setProperty("password.1", liquibaseProperties.getProperty("password", "")); final FileOutputStream credentialsFos = new FileOutputStream(credentialsPropertiesFile); - credentialsProperties.store(credentialsFos, "Credentials for database connections"); + credentialsProperties.store(credentialsFos, "Credentials for database connections"+System.lineSeparator()+System.lineSeparator()+ + "url.X = //url/database" +System.lineSeparator()+ + "username.X = username"+System.lineSeparator()+ + "password.X = password"+System.lineSeparator()); inputStream.close(); credentialsFos.close(); }else { From fc867b4e65dfa239ea2423a68c89a8d86bdc5d09 Mon Sep 17 00:00:00 2001 From: Vincent BOUSSAUD Date: Thu, 12 Feb 2026 17:09:39 +0100 Subject: [PATCH 3/3] [SAFRAN-1207] Set attributes with values from properties --- .../ui/ConnectionInformationDialog.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/reversers/database-synchroniser/plugins/org.obeonetwork.dsl.database.liquibasegen/src/org/obeonetwork/dsl/database/liquibasegen/ui/ConnectionInformationDialog.java b/reversers/database-synchroniser/plugins/org.obeonetwork.dsl.database.liquibasegen/src/org/obeonetwork/dsl/database/liquibasegen/ui/ConnectionInformationDialog.java index a19fbce86..f03ebb81a 100644 --- a/reversers/database-synchroniser/plugins/org.obeonetwork.dsl.database.liquibasegen/src/org/obeonetwork/dsl/database/liquibasegen/ui/ConnectionInformationDialog.java +++ b/reversers/database-synchroniser/plugins/org.obeonetwork.dsl.database.liquibasegen/src/org/obeonetwork/dsl/database/liquibasegen/ui/ConnectionInformationDialog.java @@ -114,11 +114,16 @@ public void modifyText(ModifyEvent e) { url = ((Combo) e.widget).getText(); Optional selectedConInf = connectionInformations.stream().filter(ci -> ci.url().equals(url)).findFirst(); selectedConInf.ifPresentOrElse( - (ci) -> usernameText.setText( ci.username()), - () -> usernameText.setText("")); + (ci) -> {usernameText.setText( ci.username()); + username = ci.username(); + }, + () -> {usernameText.setText(""); + username="";}); selectedConInf.ifPresentOrElse( - (ci) -> passwordText.setText(ci.password()), - () -> passwordText.setText("")); + (ci) -> {passwordText.setText(ci.password()); + password=ci.password();}, + () -> {passwordText.setText(""); + password="";}); } });