1 package com.proalpha.pds.projconf.configure;
3 import java.io.BufferedReader;
5 import java.io.FileNotFoundException;
6 import java.io.FileReader;
7 import java.io.IOException;
8 import java.util.ArrayList;
9 import java.util.Arrays;
10 import java.util.Enumeration;
11 import java.util.List;
12 import java.util.Properties;
14 import java.util.TreeSet;
16 import org.eclipse.core.resources.IProject;
17 import org.eclipse.core.runtime.IStatus;
18 import org.eclipse.core.runtime.Path;
19 import org.eclipse.core.runtime.Status;
20 import org.slf4j.Logger;
21 import org.slf4j.LoggerFactory;
23 import com.openedge.pdt.project.OEProjectPlugin;
24 import com.openedge.pdt.project.connection.DatabaseConnectionManager;
25 import com.openedge.pdt.project.connection.DatabaseConnectionProfile;
26 import com.proalpha.pds.projconf.Activator;
27 import com.proalpha.pds.projconf.properties.PropertiesManager;
29 import net.sourceforge.sqlexplorer.AliasModel;
30 import net.sourceforge.sqlexplorer.IdentifierFactory;
31 import net.sourceforge.sqlexplorer.plugin.SQLExplorerPlugin;
32 import net.sourceforge.squirrel_sql.fw.id.IIdentifier;
33 import net.sourceforge.squirrel_sql.fw.sql.ISQLAlias;
39 private final Properties databaseProperties;
40 private final String projectVersionIdenifier;
41 private final String databaseDirectory;
42 private final String dlc;
45 String databaseDirectory, String dlc)
throws IOException {
47 this.projectVersionIdenifier = projectVersionIdenifier;
48 this.databaseDirectory = databaseDirectory;
55 private void addProfilesToConnectionManager(IProject project, List<DatabaseConnectionProfile> dbConnections) {
57 DatabaseConnectionManager databaseConnectionManager = OEProjectPlugin.getDefault()
58 .getDatabaseConnectionManager();
60 List<DatabaseConnectionProfile> existDBProfils = Arrays
61 .asList(databaseConnectionManager.getDatabaseConnectionProfiles());
65 for (DatabaseConnectionProfile dbProfile : dbConnections) {
66 if (existDBProfils.contains(dbProfile)) {
67 databaseConnectionManager.removeDatabaseConnectionProfile(dbProfile.getIdentifier());
69 dbProfile.setAutoStartServer(
false);
72 databaseConnectionManager
73 .addDatabaseConnectionProfile(dbConnections.toArray(
new DatabaseConnectionProfile[0]));
75 }
catch (Exception e) {
76 IStatus status =
new Status(IStatus.WARNING,
Activator.PLUGIN_ID, e.getMessage(), e);
80 if (project.exists()) {
81 databaseConnectionManager.writeDBMappingFile(dbConnections, project);
85 private String buildUrl(String dbPort, String dbName, String dbHost) {
86 return "jdbc:datadirect:openedge://" + dbHost +
":" + dbPort +
";databaseName=" + dbName;
95 private DatabaseConnectionProfile createDatabaseConnectionProfile(String logicalName) {
97 String physicalName = databaseDirectory +
"\\"
98 + databaseProperties.getProperty(logicalName +
".dbPhysicalName");
99 String connectionName = projectVersionIdenifier +
" " + logicalName;
101 String dbPort = databaseProperties.getProperty(logicalName +
".dbPort");
102 String dbHost = databaseProperties.getProperty(logicalName +
".dbHost");
103 String dbUserName = databaseProperties.getProperty(logicalName +
".dbUserName");
104 String dbPassword = databaseProperties.getProperty(logicalName +
".dbPassword");
105 String dbServerParameter = databaseProperties.getProperty(logicalName +
".dbServerParameter");
106 String dbParameters = databaseProperties.getProperty(logicalName +
".dbParameter");
107 String hasSecurity = databaseProperties.getProperty(logicalName +
".dbHasSecurity");
109 String url = buildUrl(dbPort,
new Path(physicalName).lastSegment(), dbHost);
111 ISQLAlias sqlAlias = createSQLAlias(connectionName, url, dbUserName, dbPassword);
112 DatabaseConnectionProfile dbProfile =
new DatabaseConnectionProfile(connectionName);
114 dbProfile.setIdentifier(connectionName.replace(
' ',
'_'));
115 dbProfile.setGroup(projectVersionIdenifier);
116 dbProfile.setPhysicalName(physicalName);
117 dbProfile.setLogicalName(logicalName);
118 dbProfile.setProVersion(identifyProgressVersion());
120 if (Boolean.valueOf(hasSecurity)) {
121 dbProfile.setUser(dbUserName);
122 dbProfile.setPassword(dbPassword);
125 if (dbParameters !=
null) {
126 dbProfile.setParameters(dbParameters);
129 dbProfile.setHost(dbHost);
130 dbProfile.setService(dbPort);
132 if (sqlAlias !=
null) {
133 dbProfile.setAsociatedSQLAlias(sqlAlias);
134 dbProfile.setSqlIdentifier(sqlAlias.getIdentifier().toString());
135 dbProfile.setSqlName(connectionName +
"_SQL");
136 dbProfile.setSqlAliasObject(sqlAlias);
137 dbProfile.setAutoStartServer(
true);
138 dbProfile.setAutoShutdownServer(
true);
139 dbProfile.setServerParameters(
"-db " + physicalName +
" " +
"-S " + dbPort +
" " + dbServerParameter);
145 private List<DatabaseConnectionProfile> createDatabaseConnectionProfile() {
148 List<DatabaseConnectionProfile> dbProfiles =
new ArrayList<>();
149 Set<String> databaseNames =
new TreeSet<>();
151 databaseNames.addAll(getDatabaseNames());
153 for (String logicalName : databaseNames) {
154 dbProfiles.add(createDatabaseConnectionProfile(logicalName));
170 List<DatabaseConnectionProfile> dbConnections = createDatabaseConnectionProfile();
172 addProfilesToConnectionManager(project, dbConnections);
176 private static void removeSQLAlias(String connectionName) {
177 AliasModel aliasModel = SQLExplorerPlugin.getDefault().getAliasModel();
178 for (Object alias : aliasModel.getElements()) {
179 if (((ISQLAlias) alias).getName().equals(connectionName +
"_SQL")) {
180 aliasModel.removeAlias((ISQLAlias) alias);
194 DatabaseConnectionManager manager = OEProjectPlugin.getDefault().getDatabaseConnectionManager();
197 DatabaseConnectionProfile[] databaseConnectionProfiles = manager.getDatabaseConnectionProfiles();
199 for (
int i = 0; i < databaseConnectionProfiles.length; i++) {
200 DatabaseConnectionProfile databaseConnectionProfile = databaseConnectionProfiles[i];
201 String connectionName;
203 if (databaseConnectionProfile.getGroup().equalsIgnoreCase(groupName)) {
204 connectionName = databaseConnectionProfile.getName();
205 manager.removeDatabaseConnectionProfile(databaseConnectionProfile.getIdentifier());
207 removeSQLAlias(connectionName);
211 }
catch (Exception e) {
212 IStatus status =
new Status(IStatus.INFO,
Activator.PLUGIN_ID, e.getMessage(), e);
226 private ISQLAlias createSQLAlias(String connectionName, String url, String userName, String password) {
228 IIdentifier identifier =
null;
229 Boolean isAliasExsits =
false;
230 ISQLAlias sqlAlias =
null;
232 AliasModel aliasModel = SQLExplorerPlugin.
getDefault().getAliasModel();
234 for (Object alias : aliasModel.getElements()) {
235 if (((ISQLAlias) alias).getName().equals(connectionName +
"_SQL")) {
236 isAliasExsits =
true;
237 sqlAlias = (ISQLAlias) alias;
242 if (!isAliasExsits) {
243 for (
int i = 0; i < SQLExplorerPlugin.getDefault().getDriverModel().size(); i++) {
245 if (SQLExplorerPlugin.getDefault().getDriverModel().getElement(i).getUrl()
246 .startsWith(
"jdbc:datadirect:openedge")) {
248 identifier = SQLExplorerPlugin.
getDefault().getDriverModel().getElement(i).getIdentifier();
253 sqlAlias = aliasModel.createAlias(IdentifierFactory.getInstance().createIdentifier());
256 sqlAlias.setName(connectionName +
"_SQL");
257 sqlAlias.setDriverIdentifier(identifier);
258 sqlAlias.setUrl(url.trim());
259 sqlAlias.setUserName(userName);
260 sqlAlias.setPassword(password);
261 sqlAlias.setAutoLogon(
true);
262 SQLExplorerPlugin.
getDefault().getAliasModel().addAlias(sqlAlias);
264 }
catch (Exception e) {
265 logger.error(e.getMessage(), e);
273 private Set<String> getDatabaseNames() {
274 Set<String> databaseNames =
new TreeSet<>();
276 Enumeration<?> propertyNames = databaseProperties.propertyNames();
278 while (propertyNames.hasMoreElements()) {
280 String propertyName = (String) propertyNames.nextElement();
282 databaseNames.add(propertyName.substring(0, propertyName.indexOf(
'.')));
286 return databaseNames;
289 private String identifyProgressVersion() {
290 String progressVersion =
"";
292 try (BufferedReader br =
new BufferedReader(
293 new FileReader(
new File(
new Path(dlc).append(
"version").toString())));) {
295 String line = br.readLine();
298 progressVersion = line.substring(17, 22);
301 }
catch (FileNotFoundException e) {
302 logger.error(
"Couldn't find version file in dlc dir", e);
303 }
catch (IOException e) {
304 logger.error(
"IOException occured during search of progress version", e);
307 return progressVersion;
static Activator getDefault()
static Properties getProperties(File inputFile)