diff src/main/java/org/monetdb/mcl/net/ClientInfo.java @ 903:778959b2e0a4

Send ClientInfo on startup Configurable through the client_info=bool, client_application=NAME, client_remark=MESSAGE properties.
author Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
date Fri, 14 Jun 2024 15:57:49 +0200 (10 months ago)
parents
children 2d880f90be2a
line wrap: on
line diff
new file mode 100644
--- /dev/null
+++ b/src/main/java/org/monetdb/mcl/net/ClientInfo.java
@@ -0,0 +1,74 @@
+package org.monetdb.mcl.net;
+
+import org.monetdb.jdbc.MonetDriver;
+
+import java.sql.ClientInfoStatus;
+import java.sql.SQLClientInfoException;
+import java.util.Collections;
+import java.util.Map;
+import java.util.Properties;
+
+public class ClientInfo {
+	private static final String defaultHostname = findHostname();
+
+	private static final String defaultClientLibrary = findClientLibrary();
+
+	private static final int defaultPid = findPid();
+
+	private final Properties props;
+
+	public ClientInfo() {
+		props = new Properties();
+		props.setProperty("ClientHostname", defaultHostname);
+		props.setProperty("ClientLibrary", defaultClientLibrary);
+		props.setProperty("ClientPid", "" + defaultPid);
+		props.setProperty("ApplicationName", "");
+		props.setProperty("ClientRemark", "");
+	}
+
+	private static String findHostname() {
+		return "my host";
+	}
+
+	private static int findPid() {
+		return 42;
+	}
+
+	private static String findClientLibrary() {
+		return "monetdb-java " + MonetDriver.getDriverVersion();
+	}
+
+	public String format() {
+		StringBuilder builder = new StringBuilder(200);
+		for (String name : props.stringPropertyNames()) {
+			String value = props.getProperty(name);
+			builder.append(name);
+			builder.append('=');
+			builder.append(value);
+			builder.append('\n');
+		}
+		return builder.toString();
+	}
+
+	public Properties get() {
+		Properties ret = new Properties();
+		ret.putAll(props);
+		return ret;
+	}
+
+	public boolean set(String name, String value) throws SQLClientInfoException {
+		if (value == null)
+			value = "";
+		if (value.contains("\n")) {
+			Map<String, ClientInfoStatus> map = Collections.singletonMap(name, ClientInfoStatus.REASON_VALUE_INVALID);
+			throw new SQLClientInfoException(map);
+		}
+		if (props.containsKey(name)) {
+			props.setProperty(name, value);
+			return true;
+		} else {
+			return false;
+		}
+	}
+
+}