From c780f75a684e337357b723443ad2503ddff4af1e Mon Sep 17 00:00:00 2001
From: lutoff <lutoff@localhost>
Date: Mon, 23 Jul 2007 08:04:48 +0000
Subject: [PATCH] This commit corresponds to the following issues: https://opends.dev.java.net/issues/show_bug.cgi?id=1340 https://opends.dev.java.net/issues/show_bug.cgi?id=1341
---
opends/src/ads/org/opends/admin/ads/ADSContext.java | 160 +++++++++++++++++++++++++++++++++++++++++++++--------
1 files changed, 135 insertions(+), 25 deletions(-)
diff --git a/opends/src/ads/org/opends/admin/ads/ADSContext.java b/opends/src/ads/org/opends/admin/ads/ADSContext.java
index c100998..43ebe03 100644
--- a/opends/src/ads/org/opends/admin/ads/ADSContext.java
+++ b/opends/src/ads/org/opends/admin/ads/ADSContext.java
@@ -61,6 +61,29 @@
{
private static final Logger LOG =
Logger.getLogger(ADSContext.class.getName());
+
+ /**
+ * Enumeration containing the different server properties syntaxes
+ * that could be stored in the ADS.
+ */
+ public enum ServerPropertySyntax
+ {
+ /**
+ * String syntax.
+ */
+ STRING,
+
+ /**
+ * Integer syntax.
+ */
+ INTEGER,
+
+ /**
+ * Boolean syntax.
+ */
+ BOOLEAN;
+ };
+
/**
* Enumeration containing the different server properties that are stored in
* the ADS.
@@ -70,80 +93,83 @@
/**
* The ID used to identify the server.
*/
- ID("id"),
+ ID("id",ServerPropertySyntax.STRING),
/**
* The host name of the server.
*/
- HOST_NAME("hostname"),
+ HOST_NAME("hostname",ServerPropertySyntax.STRING),
/**
* The LDAP port of the server.
*/
- LDAP_PORT("ldapport"),
+ LDAP_PORT("ldapport",ServerPropertySyntax.INTEGER),
/**
* The JMX port of the server.
*/
- JMX_PORT("jmxport"),
+ JMX_PORT("jmxport",ServerPropertySyntax.INTEGER),
/**
* The JMX secure port of the server.
*/
- JMXS_PORT("jmxsport"),
+ JMXS_PORT("jmxsport",ServerPropertySyntax.INTEGER),
/**
* The LDAPS port of the server.
*/
- LDAPS_PORT("ldapsport"),
+ LDAPS_PORT("ldapsport",ServerPropertySyntax.INTEGER),
/**
* The certificate used by the server.
*/
- CERTIFICATE("certificate"),
+ CERTIFICATE("certificate",ServerPropertySyntax.STRING),
/**
* The path where the server is installed.
*/
- INSTANCE_PATH("instancepath"),
+ INSTANCE_PATH("instancepath",ServerPropertySyntax.STRING),
/**
* The description of the server.
*/
- DESCRIPTION("description"),
+ DESCRIPTION("description",ServerPropertySyntax.STRING),
/**
* The OS of the machine where the server is installed.
*/
- HOST_OS("os"),
+ HOST_OS("os",ServerPropertySyntax.STRING),
/**
* Whether LDAP is enabled or not.
*/
- LDAP_ENABLED("ldapEnabled"),
+ LDAP_ENABLED("ldapEnabled",ServerPropertySyntax.BOOLEAN),
/**
* Whether LDAPS is enabled or not.
*/
- LDAPS_ENABLED("ldapsEnabled"),
+ LDAPS_ENABLED("ldapsEnabled",ServerPropertySyntax.BOOLEAN),
/**
* Whether StartTLS is enabled or not.
*/
- STARTTLS_ENABLED("startTLSEnabled"),
+ STARTTLS_ENABLED("startTLSEnabled",ServerPropertySyntax.BOOLEAN),
/**
* Whether JMX is enabled or not.
*/
- JMX_ENABLED("jmxEnabled"),
+ JMX_ENABLED("jmxEnabled",ServerPropertySyntax.BOOLEAN),
/**
* Whether JMX is enabled or not.
*/
- JMXS_ENABLED("jmxsEnabled"),
+ JMXS_ENABLED("jmxsEnabled",ServerPropertySyntax.BOOLEAN),
/**
* The location of the server.
*/
- LOCATION("location"),
+ LOCATION("location",ServerPropertySyntax.STRING),
/**
* The groups to which this server belongs.
*/
- GROUPS("memberofgroups");
+ GROUPS("memberofgroups",ServerPropertySyntax.STRING);
private String attrName;
+ private ServerPropertySyntax attSyntax;
+
/**
* Private constructor.
* @param n the name of the attribute.
*/
- private ServerProperty(String n)
+ private ServerProperty(String n,ServerPropertySyntax s)
{
attrName = n;
+ attSyntax = s ;
}
/**
@@ -154,8 +180,38 @@
{
return attrName;
}
+
+ /**
+ * Returns the attribute syntax.
+ * @return the attribute syntax.
+ */
+ public ServerPropertySyntax getAttributeSyntax()
+ {
+ return attSyntax;
+ }
};
+ private static HashMap<String, ServerProperty> nameToServerProperty = null;
+ /**
+ * Get a ServerProperty associated to a name.
+ * @param name The name of the property to retreive.
+ *
+ * @return The corresponding ServerProperty or null if name
+ * doesn't matech with an existing property.
+ */
+ public static ServerProperty getPropFromName(String name)
+ {
+ if (nameToServerProperty == null)
+ {
+ nameToServerProperty = new HashMap<String, ServerProperty>();
+ for (ServerProperty s : ServerProperty.values())
+ {
+ nameToServerProperty.put(s.getAttributeName(), s);
+ }
+ }
+ return nameToServerProperty.get(name);
+ }
+
/**
* The list of server properties that are multivalued.
*/
@@ -294,15 +350,27 @@
/**
* Method called to udpate the properties of a server in the ADS.
* @param serverProperties the new properties of the server.
+ * @param newServerId The new server Identifier, or null.
* @throws ADSContextException if the server could not be registered.
*/
- public void updateServer(Map<ServerProperty, Object> serverProperties)
- throws ADSContextException
+ public void updateServer(Map<ServerProperty, Object> serverProperties,
+ String newServerId) throws ADSContextException
{
LdapName dn = makeDNFromServerProperties(serverProperties);
- BasicAttributes attrs = makeAttrsFromServerProperties(serverProperties);
+
try
{
+ if (newServerId != null)
+ {
+ HashMap<ServerProperty, Object> newServerProps =
+ new HashMap<ServerProperty, Object>(serverProperties);
+ newServerProps.put(ServerProperty.ID,newServerId);
+ LdapName newDn = makeDNFromServerProperties(newServerProps);
+ dirContext.rename(dn, newDn);
+ dn = newDn ;
+ serverProperties.put(ServerProperty.ID,newServerId);
+ }
+ BasicAttributes attrs = makeAttrsFromServerProperties(serverProperties);
dirContext.modifyAttributes(dn, InitialLdapContext.REPLACE_ATTRIBUTE,
attrs);
}
@@ -391,7 +459,7 @@
{
if (x.getError() == ADSContextException.ErrorType.ALREADY_REGISTERED)
{
- updateServer(serverProperties);
+ updateServer(serverProperties, null);
}
else
{
@@ -950,10 +1018,10 @@
* port.
* @throws ADSContextException if something goes wrong.
*/
- private static LdapName makeDNFromHostnamePort(String hostnamePort)
+ private static LdapName makeDNFromServerUniqueId(String serverUniqueId)
throws ADSContextException
{
- String cnValue = Rdn.escapeValue(hostnamePort);
+ String cnValue = Rdn.escapeValue(serverUniqueId);
return nameFromDN("cn=" + cnValue + "," + getServerContainerDN());
}
@@ -991,6 +1059,12 @@
private static LdapName makeDNFromServerProperties(
Map<ServerProperty, Object> serverProperties) throws ADSContextException
{
+ String serverID ;
+ if ( (serverID = getServerID(serverProperties)) != null )
+ {
+ return makeDNFromServerUniqueId(serverID);
+ }
+
String hostname = getHostname(serverProperties);
try
{
@@ -1000,12 +1074,29 @@
catch (ADSContextException ace)
{
ServerDescriptor s = ServerDescriptor.createStandalone(serverProperties);
- return makeDNFromHostnamePort(s.getHostPort(true));
+ return makeDNFromServerUniqueId(s.getHostPort(true));
}
}
/**
* This method returns the DN of the entry that corresponds to the given
+ * server properties.
+ * @param serverProperties the server properties.
+ * @return the DN of the entry that corresponds to the given server
+ * properties.
+ * @throws ADSContextException if something goes wrong.
+ */
+ public static String getServerIdFromServerProperties(
+ Map<ServerProperty, Object> serverProperties) throws ADSContextException
+ {
+ LdapName ldapName = makeDNFromServerProperties(serverProperties);
+ String rdn = ldapName.get(ldapName.size() -1);
+ int pos = rdn.indexOf("=");
+ return rdn.substring(pos+1);
+ }
+
+ /**
+ * This method returns the DN of the entry that corresponds to the given
* administrator properties.
* @param adminProperties the administrator properties.
* @return the DN of the entry that corresponds to the given administrator
@@ -1422,6 +1513,25 @@
}
/**
+ * Returns the Server ID for the given properties.
+ * @param serverProperties the server properties.
+ * @return the server ID for the given properties or null.
+ */
+ private static String getServerID(
+ Map<ServerProperty, Object> serverProperties)
+ {
+ String result = (String) serverProperties.get(ServerProperty.ID);
+ if (result != null)
+ {
+ if (result.length() == 0)
+ {
+ result = null;
+ }
+ }
+ return result;
+ }
+
+ /**
* Returns the install path for the given properties.
* @param serverProperties the server properties.
* @return the install path for the given properties.
--
Gitblit v1.10.0