From 06ec8c88556b02782c7b91a233de91eaf4a1439d Mon Sep 17 00:00:00 2001
From: jvergara <jvergara@localhost>
Date: Tue, 09 Jun 2009 12:28:05 +0000
Subject: [PATCH] Fix for issue 3550 (Consider making the control panel able to manage remote servers)
---
opends/src/guitools/org/opends/guitools/controlpanel/ui/MainMenuBar.java | 97 +
opends/src/guitools/org/opends/guitools/controlpanel/datamodel/ControlPanelInfo.java | 393 +++++-
opends/src/guitools/org/opends/guitools/controlpanel/ui/VLVIndexPanel.java | 16
opends/src/guitools/org/opends/guitools/controlpanel/util/ConfigReader.java | 15
opends/src/guitools/org/opends/guitools/controlpanel/task/RebuildIndexTask.java | 27
opends/src/guitools/org/opends/guitools/controlpanel/ui/DeleteBackendPanel.java | 8
opends/src/guitools/org/opends/guitools/controlpanel/ui/RestorePanel.java | 92 +
opends/src/server/org/opends/server/monitors/SystemInfoMonitorProvider.java | 13
opends/src/server/org/opends/server/tools/RebuildIndex.java | 90 +
opends/src/guitools/org/opends/guitools/controlpanel/ui/NewVLVIndexPanel.java | 18
opends/src/guitools/org/opends/guitools/controlpanel/task/DeleteBaseDNAndBackendTask.java | 2
opends/src/server/org/opends/server/tasks/RebuildTask.java | 110 -
opends/src/guitools/org/opends/guitools/controlpanel/ui/ConnectionHandlerMonitoringPanel.java | 10
opends/src/guitools/org/opends/guitools/controlpanel/task/DeleteEntryTask.java | 4
opends/src/guitools/org/opends/guitools/controlpanel/ui/BackupPanel.java | 97 +
opends/src/guitools/org/opends/guitools/controlpanel/ui/CustomAttributePanel.java | 12
opends/src/guitools/org/opends/guitools/controlpanel/task/Task.java | 83 +
opends/src/guitools/org/opends/guitools/controlpanel/ui/BackupListPanel.java | 46
opends/src/guitools/org/opends/guitools/controlpanel/ui/BrowseGeneralMonitoringPanel.java | 17
opends/src/guitools/org/opends/guitools/controlpanel/ui/WindowsServicePanel.java | 43
opends/src/guitools/org/opends/guitools/controlpanel/task/ResetUserPasswordTask.java | 4
opends/src/guitools/org/opends/guitools/controlpanel/ui/ControlCenterMainPane.java | 54
opends/src/guitools/org/opends/guitools/controlpanel/ui/CustomObjectClassPanel.java | 12
opends/src/guitools/org/opends/guitools/controlpanel/util/SchemaLoader.java | 47
opends/src/messages/messages/admin_tool.properties | 80 +
opends/src/guitools/org/opends/guitools/controlpanel/ui/LocalOrRemotePanel.java | 881 ++++++++++++++
opends/src/guitools/org/opends/guitools/controlpanel/browser/BrowserController.java | 13
opends/src/guitools/org/opends/guitools/controlpanel/datamodel/ServerDescriptor.java | 79 +
opends/src/guitools/org/opends/guitools/controlpanel/ControlPanel.java | 78
opends/src/guitools/org/opends/guitools/controlpanel/ui/AbstractBrowseEntriesPanel.java | 10
opends/src/guitools/org/opends/guitools/controlpanel/task/DeleteIndexTask.java | 2
opends/src/guitools/org/opends/guitools/controlpanel/task/ModifyEntryTask.java | 4
opends/src/guitools/org/opends/guitools/controlpanel/ui/StandardObjectClassPanel.java | 14
opends/src/guitools/org/opends/guitools/controlpanel/ui/VerifyIndexPanel.java | 17
opends/src/guitools/org/opends/guitools/controlpanel/ui/NewObjectClassPanel.java | 6
opends/src/guitools/org/opends/guitools/controlpanel/ui/StatusPanel.java | 141 ++
opends/src/guitools/org/opends/guitools/controlpanel/task/StartStopTask.java | 2
opends/src/guitools/org/opends/guitools/controlpanel/ui/JavaPropertiesPanel.java | 43
opends/src/guitools/org/opends/guitools/controlpanel/task/AddToGroupTask.java | 4
opends/src/guitools/org/opends/guitools/controlpanel/ui/ViewEntryPanel.java | 11
opends/src/guitools/org/opends/guitools/controlpanel/util/ConfigFromDirContext.java | 105 +
opends/src/guitools/org/opends/guitools/controlpanel/task/NewEntryTask.java | 4
opends/src/guitools/org/opends/guitools/controlpanel/ui/NewBaseDNPanel.java | 149 ++
opends/src/guitools/org/opends/guitools/controlpanel/ui/DeleteBaseDNPanel.java | 8
opends/src/guitools/org/opends/guitools/controlpanel/ui/StandardAttributePanel.java | 3
opends/src/guitools/org/opends/guitools/controlpanel/ui/ExportLDIFPanel.java | 37
opends/src/guitools/org/opends/guitools/controlpanel/ui/NewAttributePanel.java | 6
opends/src/guitools/org/opends/guitools/controlpanel/util/RemoteSchemaLoader.java | 185 +++
opends/src/guitools/org/opends/guitools/controlpanel/ui/StatusGenericPanel.java | 121 +
opends/src/server/org/opends/server/tools/status/StatusCli.java | 4
opends/src/guitools/org/opends/guitools/controlpanel/ui/IndexPanel.java | 14
opends/src/guitools/org/opends/guitools/controlpanel/ui/RebuildIndexPanel.java | 17
opends/src/guitools/org/opends/guitools/controlpanel/util/ConfigFromFile.java | 31
opends/src/guitools/org/opends/guitools/controlpanel/ui/NewIndexPanel.java | 5
opends/src/guitools/org/opends/guitools/controlpanel/ui/SimplifiedViewEntryPanel.java | 2
opends/src/guitools/org/opends/guitools/controlpanel/util/Utilities.java | 109 +
opends/src/guitools/org/opends/guitools/controlpanel/ui/ImportLDIFPanel.java | 68
57 files changed, 3,052 insertions(+), 511 deletions(-)
diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/ControlPanel.java b/opends/src/guitools/org/opends/guitools/controlpanel/ControlPanel.java
index bf16506..5651cf3 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/ControlPanel.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/ControlPanel.java
@@ -36,11 +36,12 @@
import javax.swing.WindowConstants;
import org.opends.guitools.controlpanel.datamodel.ControlPanelInfo;
-import org.opends.guitools.controlpanel.datamodel.ServerDescriptor;
import org.opends.guitools.controlpanel.ui.ControlCenterMainPane;
+import org.opends.guitools.controlpanel.ui.GenericDialog;
import org.opends.guitools.controlpanel.ui.MainMenuBar;
import org.opends.guitools.controlpanel.util.Utilities;
import org.opends.messages.AdminToolMessages;
+import org.opends.quicksetup.Installation;
import org.opends.messages.Message;
import org.opends.quicksetup.util.Utils;
@@ -55,6 +56,7 @@
private JFrame dlg;
private ControlPanelInfo info;
private ControlCenterMainPane controlCenterPane;
+ private MainMenuBar menuBar;
/**
* Main method that is used for testing purposes. The control-panel
@@ -83,15 +85,16 @@
/**
* Method that creates the ControlCenterInfo object that will be in all the
- * control panel. Here it basically reads the configuration of the
- * configuration file.
+ * control panel. Nothing is done here: the user must say whether the server
+ * is local or remote.
* @param args the arguments that are passed in the command line.
*/
public void initialize(String[] args)
{
info = ControlPanelInfo.getInstance();
- info.regenerateDescriptor();
- info.startPooling();
+ // Call Installation because the LocalOrRemotePanel uses it to check
+ // whether the server is running or not and to get the install path.
+ Installation.getLocal();
}
/**
@@ -99,34 +102,47 @@
*/
public void createAndDisplayGUI()
{
-// Create and set up the content pane.
- controlCenterPane = new ControlCenterMainPane(info);
- // Create and set up the window.
- dlg = new JFrame();
- dlg.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
- final MainMenuBar menuBar = new MainMenuBar(info);
- dlg.addWindowListener(new WindowAdapter() {
- public void windowClosing(WindowEvent e) {
- menuBar.quitClicked();
+ GenericDialog localOrRemote =
+ ControlCenterMainPane.getLocalOrRemoteDialog(info);
+ Utilities.centerOnScreen(localOrRemote);
+ localOrRemote.setVisible(true);
+
+ if (info.getServerDescriptor() == null)
+ {
+ menuBar = new MainMenuBar(info);
+ // Assume that the user decided to quit the application
+ menuBar.quitClicked();
+ }
+ // To be sure that the dlg receives the new configuration event before
+ // calling pack.
+ SwingUtilities.invokeLater(new Runnable()
+ {
+ public void run()
+ {
+ // Create and set up the content pane.
+ controlCenterPane = new ControlCenterMainPane(info);
+ // Create and set up the window.
+ dlg = new JFrame();
+ dlg.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
+ final MainMenuBar menuBar = new MainMenuBar(info);
+ dlg.addWindowListener(new WindowAdapter() {
+ public void windowClosing(WindowEvent e) {
+ menuBar.quitClicked();
+ }
+ });
+ dlg.setJMenuBar(menuBar);
+ String title = Utils.getCustomizedObject(
+ "INFO_CONTROL_PANEL_TITLE",
+ AdminToolMessages.INFO_CONTROL_PANEL_TITLE.get(),
+ Message.class).toString();
+ dlg.setTitle(title);
+ dlg.setContentPane(controlCenterPane);
+ dlg.pack();
+ Utilities.centerOnScreen(dlg);
+
+ dlg.setVisible(true);
}
});
- dlg.setJMenuBar(menuBar);
- String title = Utils.getCustomizedObject(
- "INFO_CONTROL_PANEL_TITLE",
- AdminToolMessages.INFO_CONTROL_PANEL_TITLE.get(),
- Message.class).toString();
- dlg.setTitle(title);
- dlg.setContentPane(controlCenterPane);
-
- dlg.pack();
- Utilities.centerOnScreen(dlg);
- dlg.setVisible(true);
- if (info.getServerDescriptor().getStatus() ==
- ServerDescriptor.ServerStatus.STARTED)
- {
- controlCenterPane.getLoginDialog().setVisible(true);
- controlCenterPane.getLoginDialog().toFront();
- }
}
private static void initLookAndFeel() throws Throwable
diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/browser/BrowserController.java b/opends/src/guitools/org/opends/guitools/controlpanel/browser/BrowserController.java
index f0c536b..cec350c 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/browser/BrowserController.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/browser/BrowserController.java
@@ -36,6 +36,8 @@
import java.util.Set;
import java.util.SortedSet;
import java.util.TreeSet;
+import java.util.logging.Level;
+import java.util.logging.Logger;
import javax.naming.NameNotFoundException;
import javax.naming.NamingException;
@@ -133,6 +135,9 @@
private String filter;
+ private static final Logger LOG =
+ Logger.getLogger(BrowserController.class.getName());
+
/**
* Constructor of the BrowserController.
* @param tree the tree that must be updated.
@@ -1540,8 +1545,9 @@
try {
refreshTaskDidProgress(task, oldState, newState);
}
- catch(Exception x) {
- x.printStackTrace();
+ catch(Throwable t)
+ {
+ LOG.log(Level.SEVERE, "Error calling refreshTaskDidProgress: "+t, t);
}
}
};
@@ -1735,7 +1741,8 @@
if (node.getError() != null) {
if (node.getError().getException() != null)
{
- node.getError().getException().printStackTrace();
+ LOG.log(Level.SEVERE, "node has error: "+node.getError().getException(),
+ node.getError().getException());
}
modifiers |= IconPool.MODIFIER_ERROR;
}
diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/datamodel/ControlPanelInfo.java b/opends/src/guitools/org/opends/guitools/controlpanel/datamodel/ControlPanelInfo.java
index d76e9b5..8e037ee 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/datamodel/ControlPanelInfo.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/datamodel/ControlPanelInfo.java
@@ -27,6 +27,7 @@
package org.opends.guitools.controlpanel.datamodel;
+import java.io.File;
import java.net.InetAddress;
import java.util.Collection;
import java.util.Collections;
@@ -58,7 +59,7 @@
import org.opends.guitools.controlpanel.util.ConfigReader;
import org.opends.guitools.controlpanel.util.Utilities;
import org.opends.quicksetup.util.UIKeyStore;
-import org.opends.server.core.DirectoryServer;
+import org.opends.quicksetup.util.Utils;
import org.opends.server.tools.ConfigureWindowsService;
/**
@@ -88,11 +89,16 @@
private String startTLSURL;
private String ldapsURL;
private String adminConnectorURL;
+ private String localAdminConnectorURL;
private String lastWorkingBindDN;
private String lastWorkingBindPwd;
+ private String lastRemoteHostName;
+ private String lastRemoteAdministrationURL;
private static boolean mustDeregisterConfig;
+ private boolean isLocal = true;
+
private Set<AbstractIndexDescriptor> modifiedIndexes =
new HashSet<AbstractIndexDescriptor>();
@@ -296,6 +302,8 @@
{
lastWorkingBindDN = ConnectionUtils.getBindDN(ctx);
lastWorkingBindPwd = ConnectionUtils.getBindPassword(ctx);
+ lastRemoteHostName = ConnectionUtils.getHostName(ctx);
+ lastRemoteAdministrationURL = ConnectionUtils.getLdapUrl(ctx);
}
}
@@ -420,7 +428,9 @@
*/
protected ConfigFromDirContext createNewConfigFromDirContextReader()
{
- return new ConfigFromDirContext();
+ ConfigFromDirContext configFromDirContext = new ConfigFromDirContext();
+ configFromDirContext.setIsLocal(isLocal());
+ return configFromDirContext;
}
/**
@@ -439,39 +449,55 @@
desc.setSchema(reader.getSchema());
desc.setSchemaEnabled(reader.isSchemaEnabled());
}
+ private int i=0;
/**
* Regenerates the last found ServerDescriptor object.
*
*/
public synchronized void regenerateDescriptor()
{
+ boolean isLocal = isLocal();
+
ServerDescriptor desc = createNewServerDescriptorInstance();
+ desc.setIsLocal(isLocal);
InitialLdapContext ctx = getDirContext();
- desc.setInstallPath(Utilities.getServerRootDirectory());
- desc.setInstancePath(Utilities.getInstanceRootDirectory(
- Utilities.getServerRootDirectory().getAbsolutePath()));
- boolean windowsServiceEnabled = false;
- if (Utilities.isWindows())
+ if (isLocal)
{
- int result = ConfigureWindowsService.serviceState(null, null);
- windowsServiceEnabled =
- result == ConfigureWindowsService.SERVICE_STATE_ENABLED;
- }
- desc.setWindowsServiceEnabled(windowsServiceEnabled);
- desc.setOpenDSVersion(
+ desc.setOpenDSVersion(
org.opends.server.util.DynamicConstants.FULL_VERSION_STRING);
+ desc.setInstallPath(Utilities.getServerRootDirectory());
+ desc.setInstancePath(Utilities.getInstanceRootDirectory(
+ Utilities.getServerRootDirectory().getAbsolutePath()));
+ boolean windowsServiceEnabled = false;
+ if (Utilities.isWindows())
+ {
+ int result = ConfigureWindowsService.serviceState(null, null);
+ windowsServiceEnabled =
+ result == ConfigureWindowsService.SERVICE_STATE_ENABLED;
+ }
+ desc.setWindowsServiceEnabled(windowsServiceEnabled);
+ }
+ else
+ {
+ if (lastRemoteHostName != null)
+ {
+ desc.setHostname(lastRemoteHostName);
+ }
+ }
ConfigReader reader;
ServerDescriptor.ServerStatus status = null;
for (Task task : getTasks())
{
if ((task.getType() == Task.Type.START_SERVER) &&
- task.getState() == Task.State.RUNNING)
+ (task.getState() == Task.State.RUNNING) &&
+ isRunningOnServer(desc, task))
{
status = ServerDescriptor.ServerStatus.STARTING;
}
else if ((task.getType() == Task.Type.STOP_SERVER) &&
- task.getState() == Task.State.RUNNING)
+ (task.getState() == Task.State.RUNNING) &&
+ isRunningOnServer(desc, task))
{
status = ServerDescriptor.ServerStatus.STOPPING;
}
@@ -514,11 +540,19 @@
userDataCtx = null;
}
}
- reader = createNewConfigFromFileReader();
- ((ConfigFromFile)reader).readConfiguration();
+ if (isLocal)
+ {
+ reader = createNewConfigFromFileReader();
+ ((ConfigFromFile)reader).readConfiguration();
+ }
+ else
+ {
+ reader = null;
+ }
desc.setAuthenticated(false);
}
- else if (Utilities.isServerRunning(
+ else if (!isLocal ||
+ Utilities.isServerRunning(
Utilities.getInstanceRootDirectory(
desc.getInstallPath().getAbsolutePath())))
{
@@ -529,8 +563,19 @@
// Try with previous credentials.
try
{
- ctx = Utilities.getAdminDirContext(this, lastWorkingBindDN,
+ if (isLocal)
+ {
+ ctx = Utilities.getAdminDirContext(this, lastWorkingBindDN,
lastWorkingBindPwd);
+ }
+ else if (lastRemoteAdministrationURL != null)
+ {
+ ctx = Utils.createLdapsContext(lastRemoteAdministrationURL,
+ lastWorkingBindDN,
+ lastWorkingBindPwd,
+ Utils.getDefaultLDAPTimeout(), null,
+ getTrustManager());
+ }
}
catch (ConfigReadException cre)
{
@@ -546,83 +591,117 @@
}
}
- if (ctx == null)
+ if (isLocal && (ctx == null))
{
reader = createNewConfigFromFileReader();
((ConfigFromFile)reader).readConfiguration();
}
else
{
- reader = createNewConfigFromDirContextReader();
- ((ConfigFromDirContext)reader).readConfiguration(ctx);
- if (reader.getExceptions().size() > 0)
+ if (!isLocal && (ctx == null))
{
- // Check the connection
- boolean connectionWorks = false;
- int nMaxErrors = 5;
- for (int i=0; i< nMaxErrors && !connectionWorks; i++)
+ desc.setStatus(ServerDescriptor.ServerStatus.NOT_CONNECTED_TO_REMOTE);
+ reader = null;
+ }
+ else
+ {
+ reader = createNewConfigFromDirContextReader();
+ ((ConfigFromDirContext)reader).readConfiguration(ctx);
+ if (reader.getExceptions().size() > 0)
{
- try
- {
- Utilities.pingDirContext(ctx);
- connectionWorks = true;
- }
- catch (NamingException ne)
+ // Check the connection
+ boolean connectionWorks = false;
+ int nMaxErrors = 5;
+ for (int i=0; i< nMaxErrors && !connectionWorks; i++)
{
try
{
- Thread.sleep(400);
+ Utilities.pingDirContext(ctx);
+ connectionWorks = true;
+ }
+ catch (NamingException ne)
+ {
+ try
+ {
+ Thread.sleep(400);
+ }
+ catch (Throwable t)
+ {
+ }
+ }
+ }
+ if (!connectionWorks)
+ {
+ if (isLocal)
+ {
+ // Try with offline info
+ reader = createNewConfigFromFileReader();
+ ((ConfigFromFile)reader).readConfiguration();
+ }
+ else
+ {
+ desc.setStatus(
+ ServerDescriptor.ServerStatus.NOT_CONNECTED_TO_REMOTE);
+ reader = null;
+ }
+ try
+ {
+ ctx.close();
}
catch (Throwable t)
{
}
- }
- }
- if (!connectionWorks)
- {
- // Try with offline info
- reader = createNewConfigFromFileReader();
- ((ConfigFromFile)reader).readConfiguration();
- try
- {
- ctx.close();
- }
- catch (Throwable t)
- {
- }
- this.ctx = null;
- if (connectionPool.isConnectionRegistered(userDataCtx))
- {
+ this.ctx = null;
+ if (connectionPool.isConnectionRegistered(userDataCtx))
+ {
+ try
+ {
+ connectionPool.unregisterConnection(userDataCtx);
+ }
+ catch (Throwable t)
+ {
+ }
+ }
try
{
- connectionPool.unregisterConnection(userDataCtx);
+ userDataCtx.close();
}
catch (Throwable t)
{
}
+ userDataCtx = null;
}
- try
- {
- userDataCtx.close();
- }
- catch (Throwable t)
- {
- }
- userDataCtx = null;
}
}
}
- desc.setAuthenticated(reader instanceof ConfigFromDirContext);
- desc.setJavaVersion(reader.getJavaVersion());
- desc.setOpenConnections(reader.getOpenConnections());
- if (reader instanceof ConfigFromDirContext)
+ if (reader != null)
{
- ConfigFromDirContext rCtx = (ConfigFromDirContext)reader;
- desc.setRootMonitor(rCtx.getRootMonitor());
- desc.setEntryCachesMonitor(rCtx.getEntryCaches());
- desc.setJvmMemoryUsageMonitor(rCtx.getJvmMemoryUsage());
- desc.setSystemInformationMonitor(rCtx.getSystemInformation());
- desc.setWorkQueueMonitor(rCtx.getWorkQueue());
+ desc.setAuthenticated(reader instanceof ConfigFromDirContext);
+ desc.setJavaVersion(reader.getJavaVersion());
+ desc.setOpenConnections(reader.getOpenConnections());
+ if (reader instanceof ConfigFromDirContext)
+ {
+ ConfigFromDirContext rCtx = (ConfigFromDirContext)reader;
+ desc.setRootMonitor(rCtx.getRootMonitor());
+ desc.setEntryCachesMonitor(rCtx.getEntryCaches());
+ desc.setJvmMemoryUsageMonitor(rCtx.getJvmMemoryUsage());
+ desc.setSystemInformationMonitor(rCtx.getSystemInformation());
+ desc.setWorkQueueMonitor(rCtx.getWorkQueue());
+ desc.setOpenDSVersion((String)Utilities.getFirstMonitoringValue(
+ rCtx.getVersionMonitor(), "fullVersion"));
+ String installPath = (String)Utilities.getFirstMonitoringValue(
+ rCtx.getSystemInformation(), "installPath");
+ if (installPath != null)
+ {
+ desc.setInstallPath(new File(installPath));
+ }
+ String instancePath = (String)Utilities.getFirstMonitoringValue(
+ rCtx.getSystemInformation(), "instancePath");
+ if (instancePath != null)
+ {
+ desc.setInstancePath(new File(instancePath));
+ }
+ }
}
}
else
@@ -632,24 +711,21 @@
reader = createNewConfigFromFileReader();
((ConfigFromFile)reader).readConfiguration();
}
- updateServerDescriptor(reader, desc);
+ if (reader != null)
+ {
+ updateServerDescriptor(reader, desc);
+ }
if ((serverDesc == null) || !serverDesc.equals(desc))
{
serverDesc = desc;
- // Update the schema: so that when we call the server code the latest
- // schema read is used.
- if (serverDesc.getSchema() != null)
- {
- if (!ServerDescriptor.areSchemasEqual(serverDesc.getSchema(),
- DirectoryServer.getSchema()))
- {
- DirectoryServer.setSchema(desc.getSchema());
- }
- }
ldapURL = getURL(serverDesc, ConnectionHandlerDescriptor.Protocol.LDAP);
ldapsURL = getURL(serverDesc, ConnectionHandlerDescriptor.Protocol.LDAPS);
adminConnectorURL = getAdminConnectorURL(serverDesc);
+ if (serverDesc.isLocal())
+ {
+ localAdminConnectorURL = adminConnectorURL;
+ }
startTLSURL = getURL(serverDesc,
ConnectionHandlerDescriptor.Protocol.LDAP_STARTTLS);
ConfigurationChangeEvent ev = new ConfigurationChangeEvent(this, desc);
@@ -766,6 +842,7 @@
regenerateDescriptor();
Thread.sleep(poolingPeriod);
}
+
}
catch (Throwable t)
{
@@ -861,7 +938,29 @@
*/
public String getAdminConnectorURL()
{
- return adminConnectorURL;
+ if (isLocal)
+ {
+ // If the user set isLocal to true, we want to return the
+ // localAdminConnectorURL (in particular if regenerateDescriptor has not
+ // been called).
+ return localAdminConnectorURL;
+ }
+ else
+ {
+ return adminConnectorURL;
+ }
+ }
+
+ /**
+ * Gets the Administration Connector URL based in what is read in the local
+ * configuration. It returns <CODE>null</CODE> if no Administration
+ * Connector URL was found.
+ * @return the Administration Connector URL to be used to connect
+ * to the local server.
+ */
+ public String getLocalAdminConnectorURL()
+ {
+ return localAdminConnectorURL;
}
/**
@@ -958,20 +1057,27 @@
String url = null;
ConnectionHandlerDescriptor desc = server.getAdminConnector();
- int port = desc.getPort();
- SortedSet<InetAddress> addresses = desc.getAddresses();
- if (addresses.size() == 0) {
- if (port > 0) {
- url = "ldaps://localhost:" + port;
- }
- } else {
- if (port > 0) {
- InetAddress address = addresses.first();
- url = "ldaps://" +
+ if (desc != null)
+ {
+ int port = desc.getPort();
+ SortedSet<InetAddress> addresses = desc.getAddresses();
+ if (addresses.size() == 0) {
+ if (port > 0) {
+ url = "ldaps://localhost:" + port;
+ }
+ } else {
+ if (port > 0) {
+ InetAddress address = addresses.first();
+ url = "ldaps://" +
ConnectionUtils.getHostNameForLdapUrl(address.getHostAddress()) + ":"
+ port;
+ }
}
}
+ else
+ {
+ url = null;
+ }
return url;
}
@@ -1081,6 +1187,26 @@
}
/**
+ * Sets whether the server is local or not.
+ * @param isLocal whether the server is local or not.
+ */
+ public void setIsLocal(boolean isLocal)
+ {
+ this.isLocal = isLocal;
+ }
+
+ /**
+ * Returns <CODE>true</CODE> if we are trying to manage the local host and
+ * <CODE>false</CODE> otherwise.
+ * @return <CODE>true</CODE> if we are trying to manage the local host and
+ * <CODE>false</CODE> otherwise.
+ */
+ public boolean isLocal()
+ {
+ return isLocal;
+ }
+
+ /**
* Returns the connection pool to be used by the LDAP entry browsers.
* @return the connection pool to be used by the LDAP entry browsers.
*/
@@ -1115,4 +1241,87 @@
{
this.poolingPeriod = poolingPeriod;
}
+
+ /**
+ * Returns whether the provided task is running on the provided server or not.
+ * The code takes into account that the server object might not be fully
+ * initialized (but at least it contains the host name and the instance
+ * path if it is local).
+ * @param server the server.
+ * @param task the task to be analyzed.
+ * @return <CODE>true</CODE> if the provided task is running on the provided
+ * server and <CODE>false</CODE> otherwise.
+ */
+ private boolean isRunningOnServer(ServerDescriptor server, Task task)
+ {
+ boolean isRunningOnServer;
+ if (!server.isLocal() || !task.getServer().isLocal())
+ {
+ if (!server.isLocal())
+ {
+ // At this point we only have connection information about the new
+ // server. Use the dir context which corresponds to the server to
+ // compare things.
+ String host1 = server.getHostname();
+ String host2 = task.getServer().getHostname();
+ if (host1 == null)
+ {
+ isRunningOnServer = host2 == null;
+ }
+ else
+ {
+ isRunningOnServer = host1.equalsIgnoreCase(host2);
+ }
+ if (isRunningOnServer)
+ {
+ // Compare administration port;
+ int adminPort1 = -1;
+ int adminPort2 = -1;
+ if (server.getAdminConnector() != null)
+ {
+ adminPort1 = server.getAdminConnector().getPort();
+ }
+
+ if (getDirContext() != null)
+ {
+ adminPort2 = ConnectionUtils.getPort(getDirContext());
+ }
+ isRunningOnServer = adminPort1 == adminPort2;
+ }
+ }
+ else
+ {
+ // Compare host names and paths
+ File f1 = server.getInstancePath();
+ File f2 = task.getServer().getInstancePath();
+
+ String host1 = server.getHostname();
+ String host2 = task.getServer().getHostname();
+ if (host1 == null)
+ {
+ isRunningOnServer = host2 == null;
+ }
+ else
+ {
+ isRunningOnServer = host1.equalsIgnoreCase(host2);
+ }
+ if (isRunningOnServer)
+ {
+ if (f1 == null)
+ {
+ isRunningOnServer = f2 == null;
+ }
+ else
+ {
+ isRunningOnServer = f1.equals(f2);
+ }
+ }
+ }
+ }
+ else
+ {
+ isRunningOnServer = true;
+ }
+ return isRunningOnServer;
+ }
}
diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/datamodel/ServerDescriptor.java b/opends/src/guitools/org/opends/guitools/controlpanel/datamodel/ServerDescriptor.java
index 16f4612..7f2dfbd 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/datamodel/ServerDescriptor.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/datamodel/ServerDescriptor.java
@@ -83,18 +83,22 @@
private boolean isAuthenticated;
- private static String hostName = "locahost";
+ private static String localHostName = "locahost";
static
{
try
{
- hostName = java.net.InetAddress.getLocalHost().getHostName();
+ localHostName = java.net.InetAddress.getLocalHost().getHostName();
}
catch (Throwable t)
{
}
};
+ private String hostName = localHostName;
+
+ private boolean isLocal = true;
+
/**
* Enumeration indicating the status of the server.
*
@@ -118,6 +122,10 @@
*/
STOPPING,
/**
+ * Not connected to remote.
+ */
+ NOT_CONNECTED_TO_REMOTE,
+ /**
* Status Unknown.
*/
UNKNOWN
@@ -295,6 +303,11 @@
if (equals)
{
+ equals = desc.isLocal() == isLocal();
+ }
+
+ if (equals)
+ {
equals = desc.isAuthenticated() == isAuthenticated();
}
@@ -305,12 +318,26 @@
if (equals)
{
- equals = desc.getInstallPath().equals(getInstallPath());
+ if (desc.getInstallPath() == null)
+ {
+ equals = getInstallPath() == null;
+ }
+ else
+ {
+ equals = desc.getInstallPath().equals(getInstallPath());
+ }
}
if (equals)
{
- equals = desc.getInstancePath().equals(getInstancePath());
+ if (desc.getInstancePath() == null)
+ {
+ equals = getInstancePath() == null;
+ }
+ else
+ {
+ equals = desc.getInstancePath().equals(getInstancePath());
+ }
}
if (equals)
@@ -327,7 +354,14 @@
if (equals)
{
- equals = desc.getOpenDSVersion().equals(getOpenDSVersion());
+ if (desc.getOpenDSVersion() == null)
+ {
+ equals = getOpenDSVersion() == null;
+ }
+ else
+ {
+ equals = desc.getOpenDSVersion().equals(getOpenDSVersion());
+ }
}
if (equals)
@@ -484,6 +518,37 @@
}
/**
+ * Sets the host name of the server.
+ * @param hostName the host name of the server.
+ */
+ public void setHostname(String hostName)
+ {
+ this.hostName = hostName;
+ }
+
+ /**
+ * Returns <CODE>true</CODE> if we are trying to manage the local host and
+ * <CODE>false</CODE> otherwise.
+ * @return <CODE>true</CODE> if we are trying to manage the local host and
+ * <CODE>false</CODE> otherwise.
+ */
+ public boolean isLocal()
+ {
+ return isLocal;
+ }
+
+ /**
+ * Sets whether this server represents the local instance or a remote server.
+ * @param isLocal whether this server represents the local instance or a
+ * remote server (in another machine or in another installation on the same
+ * machine).
+ */
+ public void setIsLocal(boolean isLocal)
+ {
+ this.isLocal = isLocal;
+ }
+
+ /**
* Returns the exceptions that occurred while reading the configuration.
* @return the exceptions that occurred while reading the configuration.
*/
@@ -772,7 +837,9 @@
public void setAdminConnector(ConnectionHandlerDescriptor adminConnector)
{
this.adminConnector = adminConnector;
- }/**
+ }
+
+ /**
* Sets the monitoring entry for the entry caches.
* @param entryCaches the monitoring entry for the entry caches.
*/
diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/task/AddToGroupTask.java b/opends/src/guitools/org/opends/guitools/controlpanel/task/AddToGroupTask.java
index 0da60ad..1c7f3ca 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/task/AddToGroupTask.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/task/AddToGroupTask.java
@@ -22,7 +22,7 @@
* CDDL HEADER END
*
*
- * Copyright 2008 Sun Microsystems, Inc.
+ * Copyright 2008-2009 Sun Microsystems, Inc.
*/
package org.opends.guitools.controlpanel.task;
@@ -150,7 +150,7 @@
boolean canLaunch = true;
if (!isServerRunning())
{
- if (state == State.RUNNING)
+ if (state == State.RUNNING && runningOnSameServer(taskToBeLaunched))
{
// All the operations are incompatible if they apply to this
// backend for safety. This is a short operation so the limitation
diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/task/DeleteBaseDNAndBackendTask.java b/opends/src/guitools/org/opends/guitools/controlpanel/task/DeleteBaseDNAndBackendTask.java
index 157d245..66e7a62 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/task/DeleteBaseDNAndBackendTask.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/task/DeleteBaseDNAndBackendTask.java
@@ -218,7 +218,7 @@
Collection<Message> incompatibilityReasons)
{
boolean canLaunch = true;
- if (state == State.RUNNING)
+ if (state == State.RUNNING && runningOnSameServer(taskToBeLaunched))
{
// All the operations are incompatible if they apply to this
// backend for safety. This is a short operation so the limitation
diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/task/DeleteEntryTask.java b/opends/src/guitools/org/opends/guitools/controlpanel/task/DeleteEntryTask.java
index c6751b4..c6cb688 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/task/DeleteEntryTask.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/task/DeleteEntryTask.java
@@ -22,7 +22,7 @@
* CDDL HEADER END
*
*
- * Copyright 2008 Sun Microsystems, Inc.
+ * Copyright 2008-2009 Sun Microsystems, Inc.
*/
package org.opends.guitools.controlpanel.task;
@@ -182,7 +182,7 @@
boolean canLaunch = true;
if (!isServerRunning())
{
- if (state == State.RUNNING)
+ if (state == State.RUNNING && runningOnSameServer(taskToBeLaunched))
{
// All the operations are incompatible if they apply to this
// backend for safety.
diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/task/DeleteIndexTask.java b/opends/src/guitools/org/opends/guitools/controlpanel/task/DeleteIndexTask.java
index bbc7918..cd1408d 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/task/DeleteIndexTask.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/task/DeleteIndexTask.java
@@ -125,7 +125,7 @@
Collection<Message> incompatibilityReasons)
{
boolean canLaunch = true;
- if (state == State.RUNNING)
+ if (state == State.RUNNING && runningOnSameServer(taskToBeLaunched))
{
// All the operations are incompatible if they apply to this
// backend for safety. This is a short operation so the limitation
diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/task/ModifyEntryTask.java b/opends/src/guitools/org/opends/guitools/controlpanel/task/ModifyEntryTask.java
index fdb47c5..ad24b54 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/task/ModifyEntryTask.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/task/ModifyEntryTask.java
@@ -22,7 +22,7 @@
* CDDL HEADER END
*
*
- * Copyright 2008 Sun Microsystems, Inc.
+ * Copyright 2008-2009 Sun Microsystems, Inc.
*/
package org.opends.guitools.controlpanel.task;
@@ -203,7 +203,7 @@
boolean canLaunch = true;
if (!isServerRunning())
{
- if (state == State.RUNNING)
+ if (state == State.RUNNING && runningOnSameServer(taskToBeLaunched))
{
// All the operations are incompatible if they apply to this
// backend for safety. This is a short operation so the limitation
diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/task/NewEntryTask.java b/opends/src/guitools/org/opends/guitools/controlpanel/task/NewEntryTask.java
index 10ad4ab..bd388f6 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/task/NewEntryTask.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/task/NewEntryTask.java
@@ -22,7 +22,7 @@
* CDDL HEADER END
*
*
- * Copyright 2008 Sun Microsystems, Inc.
+ * Copyright 2008-2009 Sun Microsystems, Inc.
*/
package org.opends.guitools.controlpanel.task;
@@ -155,7 +155,7 @@
boolean canLaunch = true;
if (!isServerRunning())
{
- if (state == State.RUNNING)
+ if (state == State.RUNNING && runningOnSameServer(taskToBeLaunched))
{
// All the operations are incompatible if they apply to this
// backend for safety. This is a short operation so the limitation
diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/task/RebuildIndexTask.java b/opends/src/guitools/org/opends/guitools/controlpanel/task/RebuildIndexTask.java
index b85b9b0..a2ccac5 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/task/RebuildIndexTask.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/task/RebuildIndexTask.java
@@ -22,7 +22,7 @@
* CDDL HEADER END
*
*
- * Copyright 2008 Sun Microsystems, Inc.
+ * Copyright 2008-2009 Sun Microsystems, Inc.
*/
package org.opends.guitools.controlpanel.task;
@@ -50,6 +50,7 @@
import org.opends.server.admin.client.ldap.LDAPManagementContext;
import org.opends.server.admin.std.client.LocalDBBackendCfgClient;
import org.opends.server.admin.std.client.RootCfgClient;
+import org.opends.server.tools.RebuildIndex;
import org.opends.server.types.OpenDsException;
import org.opends.server.util.cli.CommandBuilder;
@@ -109,7 +110,7 @@
Collection<Message> incompatibilityReasons)
{
boolean canLaunch = true;
- if (state == State.RUNNING)
+ if (state == State.RUNNING && runningOnSameServer(taskToBeLaunched))
{
// All the operations are incompatible if they apply to this
// backend.
@@ -137,8 +138,9 @@
{
boolean mustDisable = false;
boolean mustEnable = false;
+ boolean isLocal = getInfo().getServerDescriptor().isLocal();
String backendName = backendSet.iterator().next();
- if (isServerRunning())
+ if (isServerRunning() && isLocal)
{
for (BackendDescriptor backend :
getInfo().getServerDescriptor().getBackends())
@@ -188,8 +190,16 @@
}
});
- returnCode = executeCommandLine(getCommandLinePath("rebuild-index"),
- args);
+ if (isLocal)
+ {
+ returnCode = executeCommandLine(getCommandLinePath("rebuild-index"),
+ args);
+ }
+ else
+ {
+ returnCode = RebuildIndex.mainRebuildIndex(args, false,
+ outPrintStream, errorPrintStream);
+ }
if (returnCode != 0)
{
@@ -258,6 +268,13 @@
}
}
+ boolean isLocal = getInfo().getServerDescriptor().isLocal();
+ if (!isLocal)
+ {
+ args.addAll(getConnectionCommandLineArguments());
+ args.addAll(getConfigCommandLineArguments());
+ }
+
return args;
}
diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/task/ResetUserPasswordTask.java b/opends/src/guitools/org/opends/guitools/controlpanel/task/ResetUserPasswordTask.java
index bb060f9..c435139 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/task/ResetUserPasswordTask.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/task/ResetUserPasswordTask.java
@@ -22,7 +22,7 @@
* CDDL HEADER END
*
*
- * Copyright 2008 Sun Microsystems, Inc.
+ * Copyright 2008-2009 Sun Microsystems, Inc.
*/
package org.opends.guitools.controlpanel.task;
@@ -190,7 +190,7 @@
boolean canLaunch = true;
if (!isServerRunning())
{
- if (state == State.RUNNING)
+ if (state == State.RUNNING && runningOnSameServer(taskToBeLaunched))
{
// All the operations are incompatible if they apply to this
// backend for safety. This is a short operation so the limitation
diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/task/StartStopTask.java b/opends/src/guitools/org/opends/guitools/controlpanel/task/StartStopTask.java
index f8cd1a6..69d182a 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/task/StartStopTask.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/task/StartStopTask.java
@@ -79,7 +79,7 @@
Collection<Message> incompatibilityReasons)
{
boolean canLaunch = true;
- if (state == State.RUNNING)
+ if (state == State.RUNNING && runningOnSameServer(taskToBeLaunched))
{
incompatibilityReasons.add(getIncompatibilityMessage(this,
taskToBeLaunched));
diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/task/Task.java b/opends/src/guitools/org/opends/guitools/controlpanel/task/Task.java
index edbbba4..c494188 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/task/Task.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/task/Task.java
@@ -22,7 +22,7 @@
* CDDL HEADER END
*
*
- * Copyright 2008 Sun Microsystems, Inc.
+ * Copyright 2008-2009 Sun Microsystems, Inc.
*/
package org.opends.guitools.controlpanel.task;
@@ -53,6 +53,7 @@
import org.opends.guitools.controlpanel.util.ProcessReader;
import org.opends.guitools.controlpanel.util.Utilities;
import org.opends.messages.Message;
+import org.opends.quicksetup.Installation;
import org.opends.server.types.ByteString;
import org.opends.server.types.DN;
import org.opends.server.types.Schema;
@@ -68,6 +69,7 @@
public abstract class Task
{
private static String localHostName = null;
+ private String binDir;
static
{
// Do this since by default the hostname used by the connection is
@@ -275,6 +277,8 @@
protected Process process;
private ControlPanelInfo info;
+ private ServerDescriptor server;
+
private ProgressDialog progressDialog;
private static int MAX_BINARY_LENGTH_TO_DISPLAY = 1024;
@@ -313,6 +317,7 @@
logs.append(msg+"\n");
}
});
+ server = info.getServerDescriptor();
}
/**
@@ -600,16 +605,80 @@
*/
protected String getBinaryDir()
{
- if (Utilities.isWindows())
+ if (binDir == null)
{
- return getInfo().getServerDescriptor().getInstallPath() +
- File.separator + "bat" + File.separator;
+ File f = Installation.getLocal().getBinariesDirectory();
+ try
+ {
+ binDir = f.getCanonicalPath();
+ }
+ catch (Throwable t)
+ {
+ binDir = f.getAbsolutePath();
+ }
+ if (binDir.lastIndexOf(File.separatorChar) != (binDir.length() - 1))
+ {
+ binDir += File.separatorChar;
+ }
+ }
+
+ return binDir;
+ }
+
+ /**
+ * Check whether the provided task and this task run on the same server.
+ * @param task the task the task to be analyzed.
+ * @return <CODE>true</CODE> if both tasks run on the same server and
+ * <CODE>false</CODE> otherwise.
+ */
+ protected boolean runningOnSameServer(Task task)
+ {
+ boolean runningOnSameServer = false;
+ if (getServer().isLocal() && task.getServer().isLocal())
+ {
+ runningOnSameServer = true;
}
else
{
- return getInfo().getServerDescriptor().getInstallPath() +
- File.separator + "bin" + File.separator;
+ // Compare the host name and the instance path. This is safer than
+ // comparing ports: we might be running locally on a stopped instance with
+ // the same configuration as a "remote" (though located on the same
+ // machine) server.
+ File f1 = getServer().getInstancePath();
+ File f2 = task.getServer().getInstancePath();
+
+ String host1 = getServer().getHostname();
+ String host2 = task.getServer().getHostname();
+ if (host1 == null)
+ {
+ runningOnSameServer = host2 == null;
+ }
+ else
+ {
+ runningOnSameServer = host1.equalsIgnoreCase(host2);
+ }
+ if (runningOnSameServer)
+ {
+ if (f1 == null)
+ {
+ runningOnSameServer = f2 == null;
+ }
+ else
+ {
+ runningOnSameServer = f1.equals(f2);
+ }
+ }
}
+ return runningOnSameServer;
+ }
+
+ /**
+ * Returns the server descriptor on which the task was launched.
+ * @return the server descriptor on which the task was launched.
+ */
+ public ServerDescriptor getServer()
+ {
+ return server;
}
/**
@@ -729,7 +798,7 @@
if (isServerRunning() && (ctx != null))
{
String hostName = localHostName;
- if (hostName == null)
+ if ((hostName == null) || !getInfo().getServerDescriptor().isLocal())
{
hostName = ConnectionUtils.getHostName(ctx);
}
diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/ui/AbstractBrowseEntriesPanel.java b/opends/src/guitools/org/opends/guitools/controlpanel/ui/AbstractBrowseEntriesPanel.java
index 53888ff..2c06dd8 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/ui/AbstractBrowseEntriesPanel.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/ui/AbstractBrowseEntriesPanel.java
@@ -1366,6 +1366,16 @@
}
}
}
+ else if (status == ServerDescriptor.ServerStatus.NOT_CONNECTED_TO_REMOTE)
+ {
+ MessageBuilder mb = new MessageBuilder();
+ mb.append(INFO_CTRL_PANEL_CANNOT_CONNECT_TO_REMOTE_DETAILS.get(
+ desc.getHostname()));
+ mb.append("<br><br>"+getAuthenticateHTML());
+ errorDetails = mb.toMessage();
+ errorTitle = INFO_CTRL_PANEL_CANNOT_CONNECT_TO_REMOTE_SUMMARY.get();
+ displayErrorPane = true;
+ }
else
{
errorTitle = INFO_CTRL_PANEL_SERVER_NOT_RUNNING_SUMMARY.get();
diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/ui/BackupListPanel.java b/opends/src/guitools/org/opends/guitools/controlpanel/ui/BackupListPanel.java
index 0f4807d..8b9c8f3 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/ui/BackupListPanel.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/ui/BackupListPanel.java
@@ -132,6 +132,8 @@
*/
protected JTable backupList;
+ private JLabel lRemoteFileHelp;
+
/**
* Whether the backup parent directory has been initialized with a value or
* not.
@@ -214,6 +216,15 @@
gbc.weightx = 0.0;
add(browse, gbc);
+ lRemoteFileHelp = Utilities.createInlineHelpLabel(
+ INFO_CTRL_PANEL_REMOTE_SERVER_PATH.get());
+ gbc.gridx = 1;
+ gbc.gridwidth = 2;
+ gbc.insets.top = 3;
+ gbc.insets.left = 10;
+ gbc.gridy ++;
+ add(lRemoteFileHelp, gbc);
+
gbc.gridx = 0;
gbc.gridy ++;
gbc.insets.top = 10;
@@ -222,6 +233,7 @@
INFO_CTRL_PANEL_AVAILABLE_BACKUPS_LABEL.get());
gbc.anchor = GridBagConstraints.NORTHWEST;
gbc.fill = GridBagConstraints.NONE;
+ gbc.gridwidth = 1;
add(lAvailableBackups, gbc);
gbc.gridx = 1;
@@ -339,7 +351,7 @@
verifyBackup.setEnabled(false);
tableScroll.setVisible(false);
lRefreshingList.setText(REFRESHING_LIST.toString());
- lRefreshingList.setVisible(true);
+ lRefreshingList.setVisible(isLocal());
final int lastSelectedRow = backupList.getSelectedRow();
final String parentPath = parentDirectory.getText();
@@ -428,6 +440,7 @@
{
model.fireTableDataChanged();
lRefreshingList.setText(NO_BACKUPS_FOUND.toString());
+ lRefreshingList.setVisible(isLocal());
}
errorPane.setVisible(false);
// This is done to perform checks against whether we require to
@@ -522,20 +535,41 @@
if (!backupDirectoryInitialized &&
(parentDirectory.getText().length() == 0))
{
- final String path =
- org.opends.quicksetup.util.Utils.getPath(
- new File(desc.getInstancePath(),
- org.opends.quicksetup.Installation.BACKUPS_PATH_RELATIVE));
+ String path;
+
+ File f = new File(desc.getInstancePath(),
+ org.opends.quicksetup.Installation.BACKUPS_PATH_RELATIVE);
+ try
+ {
+ path = f.getCanonicalPath();
+ }
+ catch (Throwable t)
+ {
+ path = f.getAbsolutePath();
+ }
+ final String fPath = path;
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
- parentDirectory.setText(path);
+ parentDirectory.setText(fPath);
refreshList();
backupDirectoryInitialized = true;
}
});
}
+ SwingUtilities.invokeLater(new Runnable()
+ {
+ public void run()
+ {
+ lRemoteFileHelp.setVisible(!isLocal());
+ browse.setVisible(isLocal());
+ lAvailableBackups.setVisible(isLocal());
+ tableScroll.setVisible(isLocal());
+ refreshList.setVisible(isLocal());
+ verifyBackup.setVisible(isLocal());
+ }
+ });
}
/**
diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/ui/BackupPanel.java b/opends/src/guitools/org/opends/guitools/controlpanel/ui/BackupPanel.java
index b59839e..d0be1e1 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/ui/BackupPanel.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/ui/BackupPanel.java
@@ -22,7 +22,7 @@
* CDDL HEADER END
*
*
- * Copyright 2008 Sun Microsystems, Inc.
+ * Copyright 2008-2009 Sun Microsystems, Inc.
*/
package org.opends.guitools.controlpanel.ui;
@@ -81,6 +81,7 @@
private JComboBox backends;
private JCheckBox allBackends;
private JTextField backupID;
+ private JTextField parentBackupID;
private JRadioButton fullBackup;
private JRadioButton incrementalBackup;
private JCheckBox compressData;
@@ -91,6 +92,7 @@
private JLabel lBackend;
private JLabel lNoBackendsFound;
private JLabel lBackupID;
+ private JLabel lParentID;
private JLabel lBackupType;
private JLabel lBackupOptions;
@@ -220,6 +222,7 @@
gbc.gridx = 0;
gbc.gridy ++;
super.createLayout(gbc);
+
verifyBackup.setVisible(false);
lAvailableBackups.setText(
INFO_CTRL_PANEL_AVAILABLE_PARENT_BACKUPS_LABEL.get().toString());
@@ -229,6 +232,21 @@
gbc.insets.top = 10;
gbc.gridwidth = 1;
gbc.anchor = GridBagConstraints.WEST;
+ lParentID = Utilities.createPrimaryLabel(
+ INFO_CTRL_PANEL_PARENT_BACKUP_ID_LABEL.get());
+ add(lParentID, gbc);
+ parentBackupID = Utilities.createMediumTextField();
+ gbc.weightx = 0.0;
+ gbc.gridx ++;
+ gbc.insets.left = 10;
+ gbc.fill = GridBagConstraints.NONE;
+ gbc.gridwidth = 2;
+ add(parentBackupID, gbc);
+
+ gbc.gridy ++;
+ gbc.gridx = 0;
+ gbc.gridwidth = 1;
+ gbc.insets.left = 0;
lBackupOptions = Utilities.createPrimaryLabel(
INFO_CTRL_PANEL_BACKUP_OPTIONS_LABEL.get());
add(lBackupOptions, gbc);
@@ -275,6 +293,11 @@
refreshList.setEnabled(enable);
tableScroll.setEnabled(enable);
backupList.setEnabled(enable);
+ lAvailableBackups.setEnabled(enable);
+ lRefreshingList.setEnabled(enable);
+ lParentID.setEnabled(enable);
+ parentBackupID.setEnabled(enable);
+ verifyBackup.setEnabled(enable && getSelectedBackup() != null);
}
};
incrementalBackup.addChangeListener(changeListener);
@@ -290,7 +313,7 @@
*/
public void configurationChanged(ConfigurationChangeEvent ev)
{
- ServerDescriptor desc = ev.getNewDescriptor();
+ final ServerDescriptor desc = ev.getNewDescriptor();
updateSimpleBackendComboBoxModel(backends, lNoBackendsFound, desc);
SwingUtilities.invokeLater(new Runnable()
{
@@ -300,11 +323,23 @@
public void run()
{
allBackends.setVisible(backends.getModel().getSize() > 0);
+ lParentID.setVisible(!desc.isLocal());
+ parentBackupID.setVisible(!desc.isLocal());
+ if (desc.isLocal())
+ {
+ lPath.setText(INFO_CTRL_PANEL_BACKUP_PATH_LABEL.get().toString());
+ }
+ else
+ {
+ lPath.setText(
+ INFO_CTRL_PANEL_PARENT_BACKUP_PATH_LABEL.get().toString());
+ }
}
});
super.configurationChanged(ev);
- updateErrorPaneAndOKButtonIfAuthRequired(getInfo().getServerDescriptor(),
- INFO_CTRL_PANEL_AUTHENTICATION_REQUIRED_FOR_BACKUP.get());
+ updateErrorPaneAndOKButtonIfAuthRequired(desc,
+ isLocal() ? INFO_CTRL_PANEL_AUTHENTICATION_REQUIRED_FOR_BACKUP.get() :
+ INFO_CTRL_PANEL_CANNOT_CONNECT_TO_REMOTE_DETAILS.get(desc.getHostname()));
}
/**
@@ -315,6 +350,7 @@
setPrimaryValid(lBackend);
setPrimaryValid(lPath);
setPrimaryValid(lAvailableBackups);
+ setPrimaryValid(lParentID);
backupIDInitialized = false;
final LinkedHashSet<Message> errors = new LinkedHashSet<Message>();
@@ -343,7 +379,7 @@
errors.add(ERR_CTRL_PANEL_NO_BACKUP_PATH_PROVIDED.get());
setPrimaryInvalid(lPath);
}
- else
+ else if (isLocal())
{
File f = new File(parentPath);
if (f.isFile())
@@ -364,7 +400,7 @@
setPrimaryInvalid(lBackupID);
}
- if (errors.isEmpty())
+ if (errors.isEmpty() && isLocal())
{
File f = new File(parentPath, dir);
if (f.isFile())
@@ -377,12 +413,24 @@
if (incrementalBackup.isSelected())
{
- boolean selected = backupList.isVisible() &&
- (getSelectedBackup() != null);
- if (!selected)
+ if (isLocal())
{
- errors.add(ERR_CTRL_PANEL_NO_PARENT_BACKUP_SELECTED.get());
- setPrimaryInvalid(lAvailableBackups);
+ boolean selected = backupList.isVisible() &&
+ (getSelectedBackup() != null);
+ if (!selected)
+ {
+ errors.add(ERR_CTRL_PANEL_NO_PARENT_BACKUP_SELECTED.get());
+ setPrimaryInvalid(lAvailableBackups);
+ }
+ }
+ else
+ {
+ String parentID = parentBackupID.getText();
+ if ((parentID == null) || (parentID.trim().equals("")))
+ {
+ errors.add(ERR_CTRL_PANEL_NO_PARENT_BACKUP_ID_PROVIDED.get());
+ setPrimaryInvalid(lParentID);
+ }
}
}
@@ -604,8 +652,15 @@
}
if (incrementalBackup.isSelected())
{
- BackupDescriptor backup = getSelectedBackup();
- dir = backup.getPath().getAbsolutePath();
+ if (isLocal())
+ {
+ BackupDescriptor backup = getSelectedBackup();
+ dir = backup.getPath().getAbsolutePath();
+ }
+ else
+ {
+ dir = parentDirectory.getText();
+ }
}
else
{
@@ -637,7 +692,7 @@
Collection<Message> incompatibilityReasons)
{
boolean canLaunch = true;
- if (state == State.RUNNING)
+ if (state == State.RUNNING && runningOnSameServer(taskToBeLaunched))
{
// All the operations are incompatible if they apply to this
// backend.
@@ -734,9 +789,17 @@
if (incrementalBackup.isSelected())
{
args.add("--incremental");
- BackupDescriptor backup = getSelectedBackup();
- args.add("--incrementalBaseID");
- args.add(backup.getID());
+ if (isLocal())
+ {
+ BackupDescriptor backup = getSelectedBackup();
+ args.add("--incrementalBaseID");
+ args.add(backup.getID());
+ }
+ else
+ {
+ args.add("--incrementalBaseID");
+ args.add(parentBackupID.getText());
+ }
}
diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/ui/BrowseGeneralMonitoringPanel.java b/opends/src/guitools/org/opends/guitools/controlpanel/ui/BrowseGeneralMonitoringPanel.java
index 9560bc5..581c8f7 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/ui/BrowseGeneralMonitoringPanel.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/ui/BrowseGeneralMonitoringPanel.java
@@ -369,6 +369,16 @@
displayErrorPane = true;
}
}
+ else if (status == ServerDescriptor.ServerStatus.NOT_CONNECTED_TO_REMOTE)
+ {
+ MessageBuilder mb = new MessageBuilder();
+ mb.append(INFO_CTRL_PANEL_CANNOT_CONNECT_TO_REMOTE_DETAILS.get(
+ server.getHostname()));
+ mb.append("<br><br>"+getAuthenticateHTML());
+ errorDetails = mb.toMessage();
+ errorTitle = INFO_CTRL_PANEL_CANNOT_CONNECT_TO_REMOTE_SUMMARY.get();
+ displayErrorPane = true;
+ }
else
{
errorTitle = INFO_CTRL_PANEL_SERVER_NOT_RUNNING_SUMMARY.get();
@@ -614,8 +624,11 @@
private String getServerName(ServerDescriptor server)
{
- String serverName = server.getHostname()+":"+
- server.getAdminConnector().getPort();
+ String serverName = server.getHostname();
+ if (server.getAdminConnector() != null)
+ {
+ serverName +=":"+server.getAdminConnector().getPort();
+ }
return serverName;
}
diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/ui/ConnectionHandlerMonitoringPanel.java b/opends/src/guitools/org/opends/guitools/controlpanel/ui/ConnectionHandlerMonitoringPanel.java
index e6bb42b..e8c7709 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/ui/ConnectionHandlerMonitoringPanel.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/ui/ConnectionHandlerMonitoringPanel.java
@@ -351,6 +351,16 @@
displayErrorPane = true;
}
}
+ else if (status == ServerDescriptor.ServerStatus.NOT_CONNECTED_TO_REMOTE)
+ {
+ MessageBuilder mb = new MessageBuilder();
+ mb.append(INFO_CTRL_PANEL_CANNOT_CONNECT_TO_REMOTE_DETAILS.get(
+ server.getHostname()));
+ mb.append("<br><br>"+getAuthenticateHTML());
+ errorDetails = mb.toMessage();
+ errorTitle = INFO_CTRL_PANEL_CANNOT_CONNECT_TO_REMOTE_SUMMARY.get();
+ displayErrorPane = true;
+ }
else
{
errorTitle = INFO_CTRL_PANEL_SERVER_NOT_RUNNING_SUMMARY.get();
diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/ui/ControlCenterMainPane.java b/opends/src/guitools/org/opends/guitools/controlpanel/ui/ControlCenterMainPane.java
index e70d462..0f6435b 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/ui/ControlCenterMainPane.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/ui/ControlCenterMainPane.java
@@ -178,7 +178,7 @@
* Returns the login dialog used to ask authentication to the user.
* @return the login dialog used to ask authentication to the user.
*/
- public GenericDialog getLoginDialog()
+ private GenericDialog getLoginDialog()
{
return statusPane.getLoginDialog();
}
@@ -207,10 +207,60 @@
INFO_CTRL_PANEL_NOT_AUTHENTICATED.get().toString());
}
}
- else
+ else if (server.isLocal())
{
lAuthenticatedAs.setText(
INFO_CTRL_PANEL_NOT_AUTHENTICATED_SERVER_NOT_RUNNING.get().toString());
}
+ else
+ {
+ lAuthenticatedAs.setText(
+ INFO_CTRL_PANEL_NOT_AUTHENTICATED_SERVER_REMOTE.get(
+ server.getHostname()).toString());
+ }
+ }
+
+ private static GenericDialog localOrRemoteDlg;
+ private static GenericDialog loginDlg;
+
+ /**
+ * Returns the dialog that is in charge of asking the user the server
+ * to be administer. This method will return always the same dialog. The
+ * dialog will do all the logic of updating the ControlPanelInfo object.
+ * @param info the control panel information object.
+ * @return the dialog that is in charge of asking the user the server
+ * to be administer.
+ */
+ public static GenericDialog getLocalOrRemoteDialog(ControlPanelInfo info)
+ {
+ if (localOrRemoteDlg == null)
+ {
+ LocalOrRemotePanel localOrRemotePanel = new LocalOrRemotePanel();
+ localOrRemotePanel.setInfo(info);
+ localOrRemoteDlg = new GenericDialog(null, localOrRemotePanel);
+ localOrRemoteDlg.setModal(true);
+ localOrRemoteDlg.pack();
+ }
+ return localOrRemoteDlg;
+ }
+
+ /**
+ * Returns the dialog that is in charge of asking the user the authentication
+ * for the local server. This method will return always the same dialog.
+ * @param info the control panel information object. The
+ * dialog will do all the logic of updating the ControlPanelInfo object.
+ * @return the dialog that is in charge of asking the user the authentication
+ * for the local server.
+ */
+ public static GenericDialog getLocalServerLoginDialog(ControlPanelInfo info)
+ {
+ if (loginDlg == null)
+ {
+ LoginPanel loginPanel = new LoginPanel();
+ loginDlg = new GenericDialog(null, loginPanel);
+ loginPanel.setInfo(info);
+ loginDlg.setModal(true);
+ }
+ return loginDlg;
}
}
diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/ui/CustomAttributePanel.java b/opends/src/guitools/org/opends/guitools/controlpanel/ui/CustomAttributePanel.java
index 7b1e713..2f3abf3 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/ui/CustomAttributePanel.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/ui/CustomAttributePanel.java
@@ -41,6 +41,7 @@
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;
+import org.opends.guitools.controlpanel.datamodel.ServerDescriptor;
import org.opends.guitools.controlpanel.event.ConfigurationChangeEvent;
import org.opends.guitools.controlpanel.event.ScrollPaneBorderListener;
import org.opends.guitools.controlpanel.task.DeleteSchemaElementsTask;
@@ -136,10 +137,13 @@
/**
* {@inheritDoc}
*/
- public void configurationChanged(final ConfigurationChangeEvent ev)
+ public void configurationChanged(ConfigurationChangeEvent ev)
{
- updateErrorPaneIfAuthRequired(ev.getNewDescriptor(),
- INFO_CTRL_PANEL_AUTHENTICATION_REQUIRED_FOR_ATTRIBUTE_DELETE.get());
+ final ServerDescriptor desc = ev.getNewDescriptor();
+ updateErrorPaneIfAuthRequired(desc,
+ isLocal() ?
+ INFO_CTRL_PANEL_AUTHENTICATION_REQUIRED_FOR_ATTRIBUTE_DELETE.get() :
+ INFO_CTRL_PANEL_CANNOT_CONNECT_TO_REMOTE_DETAILS.get(desc.getHostname()));
SwingUtilities.invokeLater(new Runnable()
{
/**
@@ -147,7 +151,7 @@
*/
public void run()
{
- delete.setEnabled(!authenticationRequired(ev.getNewDescriptor()));
+ delete.setEnabled(!authenticationRequired(desc));
}
});
}
diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/ui/CustomObjectClassPanel.java b/opends/src/guitools/org/opends/guitools/controlpanel/ui/CustomObjectClassPanel.java
index 18f7298..89028af 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/ui/CustomObjectClassPanel.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/ui/CustomObjectClassPanel.java
@@ -41,6 +41,7 @@
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;
+import org.opends.guitools.controlpanel.datamodel.ServerDescriptor;
import org.opends.guitools.controlpanel.event.ConfigurationChangeEvent;
import org.opends.guitools.controlpanel.event.ScrollPaneBorderListener;
import org.opends.guitools.controlpanel.task.DeleteSchemaElementsTask;
@@ -116,10 +117,13 @@
/**
* {@inheritDoc}
*/
- public void configurationChanged(final ConfigurationChangeEvent ev)
+ public void configurationChanged(ConfigurationChangeEvent ev)
{
- updateErrorPaneIfAuthRequired(ev.getNewDescriptor(),
- INFO_CTRL_PANEL_AUTHENTICATION_REQUIRED_FOR_OBJECTCLASS_DELETE.get());
+ final ServerDescriptor desc = ev.getNewDescriptor();
+ updateErrorPaneIfAuthRequired(desc,
+ isLocal() ?
+ INFO_CTRL_PANEL_AUTHENTICATION_REQUIRED_FOR_OBJECTCLASS_DELETE.get() :
+ INFO_CTRL_PANEL_CANNOT_CONNECT_TO_REMOTE_DETAILS.get(desc.getHostname()));
SwingUtilities.invokeLater(new Runnable()
{
/**
@@ -127,7 +131,7 @@
*/
public void run()
{
- delete.setEnabled(!authenticationRequired(ev.getNewDescriptor()));
+ delete.setEnabled(!authenticationRequired(desc));
}
});
}
diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/ui/DeleteBackendPanel.java b/opends/src/guitools/org/opends/guitools/controlpanel/ui/DeleteBackendPanel.java
index ac9fffa..ebc1f6c 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/ui/DeleteBackendPanel.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/ui/DeleteBackendPanel.java
@@ -22,7 +22,7 @@
* CDDL HEADER END
*
*
- * Copyright 2008 Sun Microsystems, Inc.
+ * Copyright 2008-2009 Sun Microsystems, Inc.
*/
package org.opends.guitools.controlpanel.ui;
@@ -96,8 +96,10 @@
}
}
updateList(newElements);
- updateErrorPaneAndOKButtonIfAuthRequired(getInfo().getServerDescriptor(),
- INFO_CTRL_PANEL_AUTHENTICATION_REQUIRED_FOR_BACKEND_DELETE.get());
+ updateErrorPaneAndOKButtonIfAuthRequired(desc,
+ isLocal() ?
+ INFO_CTRL_PANEL_AUTHENTICATION_REQUIRED_FOR_BACKEND_DELETE.get() :
+ INFO_CTRL_PANEL_CANNOT_CONNECT_TO_REMOTE_DETAILS.get(desc.getHostname()));
}
/**
diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/ui/DeleteBaseDNPanel.java b/opends/src/guitools/org/opends/guitools/controlpanel/ui/DeleteBaseDNPanel.java
index 5e82097..63463a9 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/ui/DeleteBaseDNPanel.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/ui/DeleteBaseDNPanel.java
@@ -22,7 +22,7 @@
* CDDL HEADER END
*
*
- * Copyright 2008 Sun Microsystems, Inc.
+ * Copyright 2008-2009 Sun Microsystems, Inc.
*/
package org.opends.guitools.controlpanel.ui;
@@ -362,8 +362,10 @@
}
}
updateList(newElements);
- updateErrorPaneAndOKButtonIfAuthRequired(getInfo().getServerDescriptor(),
- INFO_CTRL_PANEL_AUTHENTICATION_REQUIRED_FOR_BASE_DN_DELETE.get());
+ updateErrorPaneAndOKButtonIfAuthRequired(desc,
+ isLocal() ?
+ INFO_CTRL_PANEL_AUTHENTICATION_REQUIRED_FOR_BASE_DN_DELETE.get() :
+ INFO_CTRL_PANEL_CANNOT_CONNECT_TO_REMOTE_DETAILS.get(desc.getHostname()));
}
/**
diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/ui/ExportLDIFPanel.java b/opends/src/guitools/org/opends/guitools/controlpanel/ui/ExportLDIFPanel.java
index 263b5bd..1115fb2 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/ui/ExportLDIFPanel.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/ui/ExportLDIFPanel.java
@@ -22,7 +22,7 @@
* CDDL HEADER END
*
*
- * Copyright 2008 Sun Microsystems, Inc.
+ * Copyright 2008-2009 Sun Microsystems, Inc.
*/
package org.opends.guitools.controlpanel.ui;
@@ -47,12 +47,14 @@
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JTextField;
+import javax.swing.SwingUtilities;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import org.opends.guitools.controlpanel.datamodel.ControlPanelInfo;
+import org.opends.guitools.controlpanel.datamodel.ServerDescriptor;
import org.opends.guitools.controlpanel.event.BrowseActionListener;
import org.opends.guitools.controlpanel.event.ConfigurationChangeEvent;
import org.opends.guitools.controlpanel.task.Task;
@@ -76,11 +78,13 @@
private JCheckBox generateSignedHash;
private JCheckBox wrapText;
private JTextField wrapColumn;
+ private JButton bBrowse;
private JLabel lBackend;
private JLabel lNoBackendsFound;
private JLabel lFile;
private JLabel lExportOptions;
+ private JLabel lRemoteFileHelp;
private JCheckBox excludeOperationalAttrs;
private DocumentListener documentListener;
@@ -195,7 +199,7 @@
gbc.weightx = 1.0;
gbc.fill = GridBagConstraints.HORIZONTAL;
add(file, gbc);
- JButton bBrowse = Utilities.createButton(
+ bBrowse = Utilities.createButton(
INFO_CTRL_PANEL_BROWSE_BUTTON_LABEL.get());
bBrowse.addActionListener(
new BrowseActionListener(file,
@@ -205,6 +209,16 @@
gbc.weightx = 0.0;
bBrowse.setOpaque(false);
add(bBrowse, gbc);
+
+ lRemoteFileHelp = Utilities.createInlineHelpLabel(
+ INFO_CTRL_PANEL_REMOTE_SERVER_PATH.get());
+ gbc.gridx = 1;
+ gbc.insets.top = 3;
+ gbc.insets.left = 10;
+ gbc.gridy ++;
+ gbc.gridwidth = 3;
+ add(lRemoteFileHelp, gbc);
+
gbc.gridx = 1;
gbc.gridy ++;
gbc.insets.left = 30;
@@ -312,11 +326,22 @@
*/
public void configurationChanged(ConfigurationChangeEvent ev)
{
+ ServerDescriptor desc = ev.getNewDescriptor();
updateSimpleBackendComboBoxModel(backends, lNoBackendsFound,
ev.getNewDescriptor());
- updateErrorPaneAndOKButtonIfAuthRequired(getInfo().getServerDescriptor(),
- INFO_CTRL_PANEL_AUTHENTICATION_REQUIRED_FOR_EXPORT.get());
+ updateErrorPaneAndOKButtonIfAuthRequired(desc,
+ isLocal() ? INFO_CTRL_PANEL_AUTHENTICATION_REQUIRED_FOR_EXPORT.get() :
+ INFO_CTRL_PANEL_CANNOT_CONNECT_TO_REMOTE_DETAILS.get(desc.getHostname()));
+
+ SwingUtilities.invokeLater(new Runnable()
+ {
+ public void run()
+ {
+ lRemoteFileHelp.setVisible(!isLocal());
+ bBrowse.setVisible(isLocal());
+ }
+ });
}
/**
@@ -350,7 +375,7 @@
errors.add(INFO_NO_LDIF_PATH.get());
setPrimaryInvalid(lFile);
}
- else
+ else if (isLocal())
{
File f = new File(ldifPath);
if (f.isDirectory())
@@ -468,7 +493,7 @@
Collection<Message> incompatibilityReasons)
{
boolean canLaunch = true;
- if (state == State.RUNNING)
+ if (state == State.RUNNING && runningOnSameServer(taskToBeLaunched))
{
// All the operations are incompatible if they apply to this
// backend.
diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/ui/ImportLDIFPanel.java b/opends/src/guitools/org/opends/guitools/controlpanel/ui/ImportLDIFPanel.java
index 5fa2d5b..bb17888 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/ui/ImportLDIFPanel.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/ui/ImportLDIFPanel.java
@@ -48,6 +48,7 @@
import javax.swing.JLabel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
+import javax.swing.SwingUtilities;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.event.DocumentEvent;
@@ -55,6 +56,7 @@
import org.opends.guitools.controlpanel.datamodel.BackendDescriptor;
import org.opends.guitools.controlpanel.datamodel.ControlPanelInfo;
+import org.opends.guitools.controlpanel.datamodel.ServerDescriptor;
import org.opends.guitools.controlpanel.event.BrowseActionListener;
import org.opends.guitools.controlpanel.event.ConfigurationChangeEvent;
import org.opends.guitools.controlpanel.task.Task;
@@ -84,6 +86,9 @@
private JTextField skipsFile;
private JCheckBox overwriteRejectsFile;
private JCheckBox overwriteSkipsFile;
+ private JButton bBrowse;
+ private JButton rejectsBrowse;
+ private JButton skipsBrowse;
private JLabel lBackend;
private JLabel lNoBackendsFound;
@@ -92,6 +97,9 @@
private JLabel lSchemaValidation;
private JLabel lRejectsFile;
private JLabel lSkipsFile;
+ private JLabel lRemoteFileHelp;
+ private JLabel lRemoteRejectsHelp;
+ private JLabel lRemoteSkipsHelp;
private DocumentListener documentListener;
@@ -204,7 +212,7 @@
gbc.weightx = 1.0;
gbc.fill = GridBagConstraints.HORIZONTAL;
add(file, gbc);
- JButton bBrowse = Utilities.createButton(
+ bBrowse = Utilities.createButton(
INFO_CTRL_PANEL_BROWSE_BUTTON_LABEL.get());
bBrowse.addActionListener(
new BrowseActionListener(file,
@@ -214,6 +222,16 @@
gbc.weightx = 0.0;
bBrowse.setOpaque(false);
add(bBrowse, gbc);
+
+ lRemoteFileHelp = Utilities.createInlineHelpLabel(
+ INFO_CTRL_PANEL_REMOTE_SERVER_PATH.get());
+ gbc.gridx = 1;
+ gbc.gridwidth = 2;
+ gbc.insets.top = 3;
+ gbc.insets.left = 10;
+ gbc.gridy ++;
+ add(lRemoteFileHelp, gbc);
+
gbc.gridx = 1;
gbc.gridy ++;
gbc.insets.left = 30;
@@ -310,7 +328,7 @@
gbc.weightx = 1.0;
gbc.fill = GridBagConstraints.HORIZONTAL;
add(rejectsFile, gbc);
- final JButton rejectsBrowse =
+ rejectsBrowse =
Utilities.createButton(INFO_CTRL_PANEL_BROWSE_BUTTON_LABEL.get());
rejectsBrowse.addActionListener(
new BrowseActionListener(rejectsFile,
@@ -321,6 +339,16 @@
gbc.insets.left = 10;
rejectsBrowse.setOpaque(false);
add(rejectsBrowse, gbc);
+
+ lRemoteRejectsHelp = Utilities.createInlineHelpLabel(
+ INFO_CTRL_PANEL_REMOTE_SERVER_PATH.get());
+ gbc.gridx = 1;
+ gbc.gridwidth = 2;
+ gbc.insets.top = 3;
+ gbc.insets.left = 10;
+ gbc.gridy ++;
+ add(lRemoteRejectsHelp, gbc);
+
gbc.gridx = 1;
gbc.gridy ++;
gbc.insets.left = 30;
@@ -370,7 +398,7 @@
gbc.weightx = 1.0;
gbc.fill = GridBagConstraints.HORIZONTAL;
add(skipsFile, gbc);
- final JButton skipsBrowse =
+ skipsBrowse =
Utilities.createButton(INFO_CTRL_PANEL_BROWSE_BUTTON_LABEL.get());
skipsBrowse.addActionListener(
new BrowseActionListener(skipsFile,
@@ -382,6 +410,15 @@
skipsBrowse.setOpaque(false);
add(skipsBrowse, gbc);
+ lRemoteSkipsHelp = Utilities.createInlineHelpLabel(
+ INFO_CTRL_PANEL_REMOTE_SERVER_PATH.get());
+ gbc.gridx = 1;
+ gbc.gridwidth = 2;
+ gbc.insets.top = 3;
+ gbc.insets.left = 10;
+ gbc.gridy ++;
+ add(lRemoteSkipsHelp, gbc);
+
gbc.gridx = 1;
gbc.gridy ++;
gbc.insets.left = 30;
@@ -446,10 +483,23 @@
*/
public void configurationChanged(ConfigurationChangeEvent ev)
{
- updateSimpleBackendComboBoxModel(backends, lNoBackendsFound,
- ev.getNewDescriptor());
- updateErrorPaneAndOKButtonIfAuthRequired(getInfo().getServerDescriptor(),
- INFO_CTRL_PANEL_AUTHENTICATION_REQUIRED_FOR_IMPORT.get());
+ ServerDescriptor desc = ev.getNewDescriptor();
+ updateSimpleBackendComboBoxModel(backends, lNoBackendsFound, desc);
+ updateErrorPaneAndOKButtonIfAuthRequired(desc,
+ isLocal() ? INFO_CTRL_PANEL_AUTHENTICATION_REQUIRED_FOR_IMPORT.get() :
+ INFO_CTRL_PANEL_CANNOT_CONNECT_TO_REMOTE_DETAILS.get(desc.getHostname()));
+ SwingUtilities.invokeLater(new Runnable()
+ {
+ public void run()
+ {
+ lRemoteFileHelp.setVisible(!isLocal());
+ bBrowse.setVisible(isLocal());
+ rejectsBrowse.setVisible(isLocal());
+ skipsBrowse.setVisible(isLocal());
+ lRemoteRejectsHelp.setVisible(!isLocal());
+ lRemoteSkipsHelp.setVisible(!isLocal());
+ }
+ });
}
/**
@@ -483,7 +533,7 @@
{
errors.add(INFO_NO_LDIF_PATH.get());
setPrimaryInvalid(lFile);
- } else if (!Utils.fileExists(ldifPath))
+ } else if (isLocal() && !Utils.fileExists(ldifPath))
{
errors.add(INFO_LDIF_FILE_DOES_NOT_EXIST.get());
setPrimaryInvalid(lFile);
@@ -622,7 +672,7 @@
Collection<Message> incompatibilityReasons)
{
boolean canLaunch = true;
- if (state == State.RUNNING)
+ if (state == State.RUNNING && runningOnSameServer(taskToBeLaunched))
{
// All the operations are incompatible if they apply to this
// backend.
diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/ui/IndexPanel.java b/opends/src/guitools/org/opends/guitools/controlpanel/ui/IndexPanel.java
index b3d86b7..11bef95 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/ui/IndexPanel.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/ui/IndexPanel.java
@@ -60,6 +60,7 @@
import org.opends.guitools.controlpanel.datamodel.AbstractIndexDescriptor;
import org.opends.guitools.controlpanel.datamodel.ControlPanelInfo;
import org.opends.guitools.controlpanel.datamodel.IndexDescriptor;
+import org.opends.guitools.controlpanel.datamodel.ServerDescriptor;
import org.opends.guitools.controlpanel.event.ConfigurationChangeEvent;
import org.opends.guitools.controlpanel.event.ScrollPaneBorderListener;
import org.opends.guitools.controlpanel.task.DeleteIndexTask;
@@ -249,10 +250,13 @@
/**
* {@inheritDoc}
*/
- public void configurationChanged(final ConfigurationChangeEvent ev)
+ public void configurationChanged(ConfigurationChangeEvent ev)
{
- updateErrorPaneIfAuthRequired(ev.getNewDescriptor(),
- INFO_CTRL_PANEL_AUTHENTICATION_REQUIRED_FOR_INDEX_EDITING.get());
+ final ServerDescriptor desc = ev.getNewDescriptor();
+ updateErrorPaneIfAuthRequired(desc,
+ isLocal() ?
+ INFO_CTRL_PANEL_AUTHENTICATION_REQUIRED_FOR_INDEX_EDITING.get() :
+ INFO_CTRL_PANEL_CANNOT_CONNECT_TO_REMOTE_DETAILS.get(desc.getHostname()));
SwingUtilities.invokeLater(new Runnable()
{
/**
@@ -261,7 +265,7 @@
public void run()
{
checkSaveButton();
- deleteIndex.setEnabled(!authenticationRequired(ev.getNewDescriptor()));
+ deleteIndex.setEnabled(!authenticationRequired(desc));
}
});
}
@@ -581,7 +585,7 @@
Collection<Message> incompatibilityReasons)
{
boolean canLaunch = true;
- if (state == State.RUNNING)
+ if (state == State.RUNNING && runningOnSameServer(taskToBeLaunched))
{
// All the operations are incompatible if they apply to this
// backend for safety. This is a short operation so the limitation
diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/ui/JavaPropertiesPanel.java b/opends/src/guitools/org/opends/guitools/controlpanel/ui/JavaPropertiesPanel.java
index 5b3c28c..090ecff 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/ui/JavaPropertiesPanel.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/ui/JavaPropertiesPanel.java
@@ -155,7 +155,9 @@
private boolean readUseOpenDSJavaHome;
private boolean readUseOpenDSJavaArgs;
- private boolean firstDisplay = true;
+ private boolean initialized = false;
+
+ private boolean previousLocal = true;
private Message READING_JAVA_SETTINGS =
INFO_CTRL_PANEL_READING_JAVA_SETTINGS_SUMMARY.get();
@@ -240,7 +242,6 @@
gbc.insets.left = 0;
add(useOpenDSJavaHomeLabel, gbc);
-
gbc.gridx = 1;
gbc.gridy ++;
gbc.fill = GridBagConstraints.HORIZONTAL;
@@ -416,7 +417,7 @@
comps = new JComponent[] {
javaHome, useOpenDSJavaHome, useSpecifiedJavaHome, browse,
- useOpenDSJavaArgs, useSpecifiedJavaArgs
+ useOpenDSJavaArgs, useSpecifiedJavaArgs, showAll
};
}
@@ -425,6 +426,31 @@
*/
public void configurationChanged(ConfigurationChangeEvent ev)
{
+ final boolean isLocal = ev.getNewDescriptor().isLocal();
+ if (isLocal != previousLocal)
+ {
+ previousLocal = isLocal;
+ SwingUtilities.invokeLater(new Runnable()
+ {
+ /**
+ * {@inheritDoc}
+ */
+ public void run()
+ {
+ if (!isLocal)
+ {
+ displayErrorMessage(INFO_CTRL_PANEL_SERVER_REMOTE_SUMMARY.get(),
+ INFO_CTRL_PANEL_SERVER_MUST_BE_LOCAL_JAVA_PROPERTIES_SUMMARY.get());
+ setEnabledOK(false);
+ }
+ else
+ {
+ displayMainPanel();
+ setEnabledOK(true);
+ }
+ }
+ });
+ }
}
/**
@@ -433,9 +459,14 @@
@Override
public void toBeDisplayed(boolean visible)
{
- if (visible && (firstDisplay || !updatedByUser()))
+ boolean isLocal = true;
+ if (getInfo() != null)
{
- firstDisplay = false;
+ isLocal = getInfo().getServerDescriptor().isLocal();
+ }
+ if (visible && isLocal && (!initialized || !updatedByUser()))
+ {
+ initialized = true;
initContents();
}
}
@@ -1376,7 +1407,7 @@
boolean canLaunch = true;
if (!isServerRunning())
{
- if (state == State.RUNNING)
+ if (state == State.RUNNING && runningOnSameServer(taskToBeLaunched))
{
// All the operations are incompatible if they apply to this
// backend for safety. This is a short operation so the limitation
diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/ui/LocalOrRemotePanel.java b/opends/src/guitools/org/opends/guitools/controlpanel/ui/LocalOrRemotePanel.java
new file mode 100644
index 0000000..b75f70c
--- /dev/null
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/ui/LocalOrRemotePanel.java
@@ -0,0 +1,881 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE
+ * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
+ * add the following below this CDDL HEADER, with the fields enclosed
+ * by brackets "[]" replaced with your own identifying information:
+ * Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ * Copyright 2009 Sun Microsystems, Inc.
+ */
+
+package org.opends.guitools.controlpanel.ui;
+
+import static org.opends.messages.AdminToolMessages.*;
+import static org.opends.messages.QuickSetupMessages.*;
+
+import java.awt.Component;
+import java.awt.GridBagConstraints;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.File;
+import java.io.IOException;
+import java.net.URI;
+import java.security.cert.X509Certificate;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.naming.NamingEnumeration;
+import javax.naming.NamingException;
+import javax.naming.directory.SearchControls;
+import javax.naming.directory.SearchResult;
+import javax.naming.ldap.InitialLdapContext;
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JPasswordField;
+import javax.swing.JTextField;
+import javax.swing.SwingUtilities;
+
+import org.opends.admin.ads.util.ApplicationTrustManager;
+import org.opends.admin.ads.util.ConnectionUtils;
+import org.opends.guitools.controlpanel.datamodel.ConfigReadException;
+import org.opends.guitools.controlpanel.datamodel.CustomSearchResult;
+import org.opends.guitools.controlpanel.event.ConfigurationChangeEvent;
+import org.opends.guitools.controlpanel.task.OnlineUpdateException;
+import org.opends.guitools.controlpanel.util.BackgroundTask;
+import org.opends.guitools.controlpanel.util.Utilities;
+import org.opends.messages.Message;
+import org.opends.quicksetup.Installation;
+import org.opends.quicksetup.UserDataCertificateException;
+import org.opends.quicksetup.ui.CertificateDialog;
+import org.opends.quicksetup.util.UIKeyStore;
+import org.opends.quicksetup.util.Utils;
+import org.opends.server.monitors.VersionMonitorProvider;
+import org.opends.server.types.DN;
+import org.opends.server.types.OpenDsException;
+import org.opends.server.util.DynamicConstants;
+
+/**
+ * The panel that appears when the user is asked to provide authentication.
+ *
+ */
+public class LocalOrRemotePanel extends StatusGenericPanel
+{
+ private static final long serialVersionUID = 5051556513294844797L;
+
+ private JComboBox combo;
+ private JLabel portLabel;
+ private JTextField hostName;
+ private JTextField port;
+ private JPasswordField pwd;
+ private JTextField dn;
+ private JLabel pwdLabel;
+ private JLabel dnLabel;
+ private String usedUrl;
+ private JLabel localInstallLabel;
+ private JLabel localInstall;
+
+ private JLabel localNotRunning;
+
+ private boolean isLocalServerRunning;
+
+ private static final Logger LOG =
+ Logger.getLogger(LocalOrRemotePanel.class.getName());
+
+ /**
+ * Default constructor.
+ *
+ */
+ public LocalOrRemotePanel()
+ {
+ super();
+ createLayout();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public Message getTitle()
+ {
+ return INFO_CTRL_PANEL_LOCAL_OR_REMOTE_PANEL_TITLE.get();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public GenericDialog.ButtonType getButtonType()
+ {
+ return GenericDialog.ButtonType.OK_CANCEL;
+ }
+
+ /**
+ * Creates the layout of the panel (but the contents are not populated here).
+ */
+ private void createLayout()
+ {
+ GridBagConstraints gbc = new GridBagConstraints();
+
+ gbc.anchor = GridBagConstraints.WEST;
+ gbc.gridx = 0;
+ gbc.gridy = 0;
+
+ gbc.weightx = 0.0;
+ gbc.weighty = 0.0;
+ String localServerInstallPath;
+ File instancePath = Installation.getLocal().getInstanceDirectory();
+ try
+ {
+ localServerInstallPath = instancePath.getCanonicalPath();
+ }
+ catch (IOException ioe)
+ {
+ localServerInstallPath = instancePath.getAbsolutePath();
+ }
+ combo = Utilities.createComboBox();
+ combo.setModel(new DefaultComboBoxModel(
+ new Object[] {INFO_CTRL_PANEL_LOCAL_SERVER.get(),
+ INFO_CTRL_PANEL_REMOTE_SERVER.get()}));
+ combo.setSelectedIndex(0);
+ gbc.gridwidth = 2;
+ add(Utilities.createDefaultLabel(INFO_CTRL_PANEL_LOCAL_OR_REMOTE.get()),
+ gbc);
+ gbc.gridwidth = 1;
+ gbc.insets.top = 10;
+ gbc.gridy ++;
+ add(combo, gbc);
+ gbc.gridx = 1;
+
+ localNotRunning = Utilities.createDefaultLabel();
+ Utilities.setWarningLabel(localNotRunning,
+ INFO_CTRL_PANEL_LOCAL_SERVER_NOT_RUNNING.get());
+ gbc.insets.left = 10;
+ add(localNotRunning, gbc);
+ hostName = Utilities.createMediumTextField();
+ add(hostName, gbc);
+ gbc.insets.top = 10;
+ gbc.gridy ++;
+ gbc.insets.left = 0;
+ gbc.weightx = 0.0;
+ gbc.insets.right = 0;
+ gbc.gridx = 0;
+
+ ActionListener actionListener = new ActionListener()
+ {
+ public void actionPerformed(ActionEvent ev)
+ {
+ updateComponentState();
+ }
+ };
+ combo.addActionListener(actionListener);
+
+ gbc.gridx = 0;
+ gbc.gridwidth = 1;
+
+
+ localInstallLabel = Utilities.createPrimaryLabel(
+ INFO_CTRL_PANEL_INSTANCE_PATH_LABEL.get());
+ gbc.insets.left = 0;
+ add(localInstallLabel, gbc);
+ gbc.gridx = 1;
+ gbc.insets.left = 10;
+ gbc.weightx = 1.0;
+ gbc.fill = GridBagConstraints.HORIZONTAL;
+ localInstall = Utilities.createDefaultLabel();
+ localInstall.setText(localServerInstallPath);
+ add(localInstall, gbc);
+
+ gbc.gridy ++;
+ gbc.insets.top = 10;
+ gbc.insets.left = 0;
+ gbc.gridx = 0;
+ gbc.weightx = 0.0;
+ portLabel = Utilities.createPrimaryLabel(
+ INFO_CTRL_PANEL_ADMINISTRATION_PORT.get());
+ add(portLabel, gbc);
+ gbc.gridx = 1;
+ gbc.insets.left = 10;
+ port = Utilities.createMediumTextField();
+ port.setText("4444");
+ gbc.weightx = 1.0;
+ gbc.fill = GridBagConstraints.HORIZONTAL;
+ add(port, gbc);
+
+ gbc.gridy ++;
+ gbc.gridx = 0;
+ gbc.weightx = 0.0;
+ gbc.fill = GridBagConstraints.NONE;
+ gbc.insets.left = 0;
+ dnLabel = Utilities.createPrimaryLabel(INFO_CTRL_PANEL_BIND_DN_LABEL.get());
+ add(dnLabel, gbc);
+ gbc.insets.left = 10;
+ gbc.gridx = 1;
+ dn = Utilities.createTextField("cn=Directory Manager", 20);
+ gbc.weightx = 1.0;
+ gbc.fill = GridBagConstraints.HORIZONTAL;
+ gbc.insets.left = 10;
+ add(dn, gbc);
+ gbc.insets.top = 10;
+ gbc.insets.left = 0;
+
+ gbc.gridx = 0;
+ gbc.gridy ++;
+ gbc.weightx = 0.0;
+ gbc.fill = GridBagConstraints.NONE;
+ pwdLabel = Utilities.createPrimaryLabel(
+ INFO_CTRL_PANEL_BIND_PASSWORD_LABEL.get());
+ gbc.insets.left = 0;
+ add(pwdLabel, gbc);
+ gbc.insets.left = 10;
+ gbc.gridx = 1;
+ pwd = Utilities.createPasswordField();
+ gbc.weightx = 1.0;
+ gbc.fill = GridBagConstraints.HORIZONTAL;
+ add(pwd, gbc);
+
+ addBottomGlue(gbc);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public Component getPreferredFocusComponent()
+ {
+ return pwd;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void configurationChanged(ConfigurationChangeEvent ev)
+ {
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void toBeDisplayed(boolean visible)
+ {
+ super.toBeDisplayed(visible);
+ if (visible)
+ {
+ // Do it outside the event thread if the panel requires it.
+ BackgroundTask<Void> worker = new BackgroundTask<Void>()
+ {
+ public Void processBackgroundTask() throws Throwable
+ {
+ try
+ {
+ Thread.sleep(200);
+ }
+ catch (Throwable t)
+ {
+ }
+ File instancePath = Installation.getLocal().getInstanceDirectory();
+ isLocalServerRunning = Utilities.isServerRunning(instancePath);
+ return null;
+ }
+
+
+ public void backgroundTaskCompleted(Void returnValue,
+ Throwable t)
+ {
+ updateComponentState();
+ displayMainPanel();
+ }
+ };
+ displayMessage(INFO_CTRL_PANEL_LOADING_PANEL_SUMMARY.get());
+ worker.startBackgroundTask();
+ pwd.setText("");
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void okClicked()
+ {
+ setPrimaryValid(portLabel);
+ setPrimaryValid(dnLabel);
+ setPrimaryValid(pwdLabel);
+ final LinkedHashSet<Message> errors = new LinkedHashSet<Message>();
+
+ boolean dnInvalid = false;
+ boolean pwdInvalid = false;
+
+ final boolean isLocal = combo.getSelectedIndex() == 0;
+
+ boolean doChecks = !isLocal || isLocalServerRunning;
+ if (doChecks)
+ {
+ if ("".equals(dn.getText().trim()))
+ {
+ dnInvalid = true;
+ errors.add(INFO_EMPTY_DIRECTORY_MANAGER_DN.get());
+ }
+ else if (!Utils.isDn(dn.getText()))
+ {
+ dnInvalid = true;
+ errors.add(INFO_NOT_A_DIRECTORY_MANAGER_DN.get());
+ }
+
+ if ("".equals(pwd.getPassword().length == 0))
+ {
+ pwdInvalid = true;
+ errors.add(INFO_EMPTY_PWD.get());
+ }
+ if (dnInvalid)
+ {
+ setPrimaryInvalid(dnLabel);
+ }
+
+ if (pwdInvalid)
+ {
+ setPrimaryInvalid(pwdLabel);
+ }
+
+ if (!isLocal)
+ {
+ if ("".equals(hostName.getText().trim()))
+ {
+ errors.add(INFO_EMPTY_REMOTE_HOST_NAME.get());
+ }
+
+ try
+ {
+ int p = Integer.parseInt(port.getText());
+ if ((p <= 0) || (p > 65535))
+ {
+ errors.add(INFO_INVALID_REMOTE_SERVER_PORT.get(0, 65535));
+ }
+ }
+ catch (Throwable t)
+ {
+ errors.add(INFO_INVALID_REMOTE_SERVER_PORT.get(0, 65535));
+ }
+ }
+ }
+
+ if (errors.isEmpty())
+ {
+ setEnabledOK(false);
+ displayMessage(INFO_CTRL_PANEL_VERIFYING_AUTHENTICATION_SUMMARY.get());
+
+ BackgroundTask<InitialLdapContext> worker =
+ new BackgroundTask<InitialLdapContext>()
+ {
+ /**
+ * {@inheritDoc}
+ */
+ public InitialLdapContext processBackgroundTask() throws Throwable
+ {
+ getInfo().stopPooling();
+ if (isLocal)
+ {
+ // At least load the local information.
+ SwingUtilities.invokeLater(new Runnable()
+ {
+ public void run()
+ {
+ displayMessage(
+ INFO_CTRL_PANEL_READING_CONFIGURATION_SUMMARY.get());
+ }
+ });
+ if (getInfo().isLocal() != isLocal)
+ {
+ closeInfoConnections();
+ }
+ getInfo().setIsLocal(isLocal);
+ getInfo().regenerateDescriptor();
+ if (!isLocalServerRunning)
+ {
+ return null;
+ }
+ }
+ InitialLdapContext ctx = null;
+ try
+ {
+ if (isLocal)
+ {
+ usedUrl = getInfo().getAdminConnectorURL();
+ ctx = Utilities.getAdminDirContext(getInfo(), dn.getText(),
+ String.valueOf(pwd.getPassword()));
+ }
+ else
+ {
+ usedUrl =
+ "ldaps://"+hostName.getText().trim()+":"+port.getText().trim();
+ ctx = Utils.createLdapsContext(usedUrl, dn.getText(),
+ String.valueOf(pwd.getPassword()),
+ Utils.getDefaultLDAPTimeout(), null,
+ getInfo().getTrustManager());
+ checkVersion(ctx);
+ }
+
+ try
+ {
+ Thread.sleep(500);
+ }
+ catch (Throwable t)
+ {
+ }
+ SwingUtilities.invokeLater(new Runnable()
+ {
+ public void run()
+ {
+ displayMessage(
+ INFO_CTRL_PANEL_READING_CONFIGURATION_SUMMARY.get());
+ }
+ });
+ closeInfoConnections();
+ getInfo().setIsLocal(isLocal);
+ getInfo().setDirContext(ctx);
+ getInfo().setUserDataDirContext(null);
+ getInfo().regenerateDescriptor();
+ return ctx;
+ } catch (Throwable t)
+ {
+ if (ctx != null)
+ {
+ try
+ {
+ ctx.close();
+ }
+ catch (Throwable t1)
+ {
+ }
+ }
+ throw t;
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void backgroundTaskCompleted(InitialLdapContext ctx,
+ Throwable throwable)
+ {
+ boolean handleCertificateException = false;
+
+ boolean localServerErrorConnecting = false;
+
+ if (throwable != null)
+ {
+ LOG.log(Level.INFO, "Error connecting: " + throwable, throwable);
+
+ if (isVersionException(throwable))
+ {
+ errors.add(((OpenDsException)throwable).getMessageObject());
+ }
+ else if (Utils.isCertificateException(throwable))
+ {
+ ApplicationTrustManager.Cause cause =
+ getInfo().getTrustManager().getLastRefusedCause();
+
+ LOG.log(Level.INFO, "Certificate exception cause: "+cause);
+ UserDataCertificateException.Type excType = null;
+ if (cause == ApplicationTrustManager.Cause.NOT_TRUSTED)
+ {
+ excType = UserDataCertificateException.Type.NOT_TRUSTED;
+ }
+ else if (cause ==
+ ApplicationTrustManager.Cause.HOST_NAME_MISMATCH)
+ {
+ excType = UserDataCertificateException.Type.HOST_NAME_MISMATCH;
+ }
+ else
+ {
+ Message msg = Utils.getThrowableMsg(
+ INFO_ERROR_CONNECTING_TO_LOCAL.get(), throwable);
+ errors.add(msg);
+ }
+
+ if (excType != null)
+ {
+ String h;
+ int p;
+ try
+ {
+ URI uri = new URI(usedUrl);
+ h = uri.getHost();
+ p = uri.getPort();
+ }
+ catch (Throwable t)
+ {
+ LOG.log(Level.WARNING,
+ "Error parsing ldap url of ldap url.", t);
+ h = INFO_NOT_AVAILABLE_LABEL.get().toString();
+ p = -1;
+ }
+ UserDataCertificateException udce =
+ new UserDataCertificateException(null,
+ INFO_CERTIFICATE_EXCEPTION.get(h, String.valueOf(p)),
+ throwable, h, p,
+ getInfo().getTrustManager().getLastRefusedChain(),
+ getInfo().getTrustManager().getLastRefusedAuthType(),
+ excType);
+
+ handleCertificateException(udce);
+ handleCertificateException = true;
+ }
+ }
+ else if (throwable instanceof NamingException)
+ {
+ boolean found = false;
+ String providedDn = dn.getText();
+ if (isLocal)
+ {
+ Iterator<DN> it = getInfo().getServerDescriptor().
+ getAdministrativeUsers().iterator();
+ while (it.hasNext() && !found)
+ {
+ found = Utils.areDnsEqual(providedDn, it.next().toString());
+ }
+ if (!found)
+ {
+ errors.add(INFO_NOT_A_DIRECTORY_MANAGER_IN_CONFIG.get());
+ }
+ else
+ {
+ errors.add(ERR_CANNOT_CONNECT_TO_LOGIN_WITHOUT_CAUSE.get());
+ }
+ localServerErrorConnecting = true;
+ }
+ else
+ {
+ String msg = throwable.toString();
+ errors.add(ERR_CANNOT_CONNECT_TO_REMOTE.get(
+ hostName.getText().trim(),
+ port.getText().trim(),
+ msg));
+ setPrimaryInvalid(portLabel);
+ }
+ setPrimaryInvalid(dnLabel);
+ setPrimaryInvalid(pwdLabel);
+ }
+ else if (throwable instanceof ConfigReadException)
+ {
+ LOG.log(Level.WARNING,
+ "Error reading configuration: "+throwable, throwable);
+ errors.add(((ConfigReadException)throwable).getMessageObject());
+ }
+ else
+ {
+ // This is a bug
+ LOG.log(Level.SEVERE,
+ "Unexpected error: "+throwable, throwable);
+ errors.add(Utils.getThrowableMsg(INFO_BUG_MSG.get(), throwable));
+ }
+ }
+ displayMainPanel();
+ setEnabledOK(true);
+ if (!errors.isEmpty())
+ {
+ if (!localServerErrorConnecting)
+ {
+ displayErrorDialog(errors);
+ }
+ else
+ {
+ ArrayList<String> stringErrors = new ArrayList<String>();
+ for (Message err : errors)
+ {
+ stringErrors.add(err.toString());
+ }
+ String msg = Utilities.getStringFromCollection(stringErrors,
+ "<br>");
+ if (displayConfirmationDialog(
+ INFO_CTRL_PANEL_CONFIRMATION_REQUIRED_SUMMARY.get(),
+ INFO_CTRL_PANEL_ERROR_CONNECTING_TO_LOCAL.get(msg)))
+ {
+ Utilities.getParentDialog(
+ LocalOrRemotePanel.this).setVisible(false);
+ }
+ }
+ pwd.setSelectionStart(0);
+ pwd.setSelectionEnd(pwd.getPassword().length);
+ pwd.requestFocusInWindow();
+ }
+ else if (!handleCertificateException)
+ {
+ Utilities.getParentDialog(
+ LocalOrRemotePanel.this).setVisible(false);
+ }
+
+ if (!handleCertificateException)
+ {
+ startPooling();
+ }
+ }
+ };
+ worker.startBackgroundTask();
+ }
+ else
+ {
+ displayErrorDialog(errors);
+ if (dnInvalid)
+ {
+ dn.setSelectionStart(0);
+ dn.setSelectionEnd(dn.getText().length());
+ dn.requestFocusInWindow();
+ }
+ if (pwdInvalid)
+ {
+ pwd.setSelectionStart(0);
+ pwd.setSelectionEnd(pwd.getPassword().length);
+ pwd.requestFocusInWindow();
+ }
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void cancelClicked()
+ {
+ setPrimaryValid(dnLabel);
+ setPrimaryValid(pwdLabel);
+ setPrimaryValid(portLabel);
+ pwd.setText(null);
+ super.cancelClicked();
+ }
+
+ /**
+ * Displays a dialog asking the user to accept a certificate if the user
+ * accepts it, we update the trust manager and simulate a click on "OK" to
+ * re-check the authentication.
+ * This method assumes that we are being called from the event thread.
+ */
+ private void handleCertificateException(UserDataCertificateException ce)
+ {
+ CertificateDialog dlg = new CertificateDialog(null, ce);
+ dlg.pack();
+ Utilities.centerGoldenMean(dlg, Utilities.getParentDialog(this));
+ dlg.setVisible(true);
+ if (dlg.getUserAnswer() !=
+ CertificateDialog.ReturnType.NOT_ACCEPTED)
+ {
+ X509Certificate[] chain = ce.getChain();
+ String authType = ce.getAuthType();
+ String host = ce.getHost();
+
+ if ((chain != null) && (authType != null) && (host != null))
+ {
+ LOG.log(Level.INFO, "Accepting certificate presented by host "+host);
+ getInfo().getTrustManager().acceptCertificate(chain, authType, host);
+ /* Simulate a click on the OK by calling in the okClicked method. */
+ SwingUtilities.invokeLater(new Runnable()
+ {
+ public void run()
+ {
+ okClicked();
+ }
+ });
+ }
+ else
+ {
+ if (chain == null)
+ {
+ LOG.log(Level.WARNING,
+ "The chain is null for the UserDataCertificateException");
+ }
+ if (authType == null)
+ {
+ LOG.log(Level.WARNING,
+ "The auth type is null for the UserDataCertificateException");
+ }
+ if (host == null)
+ {
+ LOG.log(Level.WARNING,
+ "The host is null for the UserDataCertificateException");
+ }
+ }
+ }
+ if (dlg.getUserAnswer() ==
+ CertificateDialog.ReturnType.ACCEPTED_PERMANENTLY)
+ {
+ X509Certificate[] chain = ce.getChain();
+ if (chain != null)
+ {
+ try
+ {
+ UIKeyStore.acceptCertificate(chain);
+ }
+ catch (Throwable t)
+ {
+ LOG.log(Level.WARNING, "Error accepting certificate: "+t, t);
+ }
+ }
+ }
+ }
+
+ private void updateComponentState()
+ {
+ boolean isLocal = combo.getSelectedIndex() == 0;
+ hostName.setVisible(!isLocal);
+ port.setVisible(!isLocal);
+ portLabel.setVisible(!isLocal);
+ localInstall.setVisible(isLocal);
+ localInstallLabel.setVisible(isLocal);
+
+ boolean displayAuthentication = !isLocal || isLocalServerRunning;
+ dn.setVisible(displayAuthentication);
+ dnLabel.setVisible(displayAuthentication);
+ pwd.setVisible(displayAuthentication);
+ pwdLabel.setVisible(displayAuthentication);
+
+ localNotRunning.setVisible(isLocal && !isLocalServerRunning);
+ }
+
+ private void startPooling()
+ {
+ // The server descriptor has been already retrieved.
+ // startPooling tries to retrieve immediately the server descriptor, so
+ // sleep the pooling period before calling it.
+ Thread t = new Thread(new Runnable()
+ {
+ public void run()
+ {
+ try
+ {
+ Thread.sleep(getInfo().getPoolingPeriod());
+ }
+ catch (Throwable t)
+ {
+ }
+ getInfo().startPooling();
+ }
+ });
+ t.start();
+ }
+
+ private void checkVersion(InitialLdapContext ctx) throws OpenDsException
+ {
+ Message msg = null;
+ try
+ {
+ /*
+ * Search for the version on the remote server.
+ */
+ SearchControls searchControls = new SearchControls();
+ searchControls.setCountLimit(1);
+ searchControls.setSearchScope(
+ SearchControls.OBJECT_SCOPE);
+ searchControls.setReturningAttributes(
+ new String[] {
+ VersionMonitorProvider.ATTR_PRODUCT_NAME,
+ VersionMonitorProvider.ATTR_MAJOR_VERSION,
+ VersionMonitorProvider.ATTR_POINT_VERSION,
+ VersionMonitorProvider.ATTR_MINOR_VERSION
+ });
+ NamingEnumeration<SearchResult> en =
+ ctx.search("cn=Version,cn=monitor", "objectclass=*",
+ searchControls);
+ SearchResult sr = en.next();
+ CustomSearchResult csr =
+ new CustomSearchResult(sr, "cn=Version,cn=monitor");
+
+ String hostName = ConnectionUtils.getHostName(ctx);
+
+ String productName = String.valueOf(Utilities.getFirstMonitoringValue(csr,
+ VersionMonitorProvider.ATTR_PRODUCT_NAME));
+ String major = String.valueOf(Utilities.getFirstMonitoringValue(csr,
+ VersionMonitorProvider.ATTR_MAJOR_VERSION));
+ String point = String.valueOf(Utilities.getFirstMonitoringValue(csr,
+ VersionMonitorProvider.ATTR_POINT_VERSION));
+ String minor = String.valueOf(Utilities.getFirstMonitoringValue(csr,
+ VersionMonitorProvider.ATTR_MINOR_VERSION));
+ // Be strict, control panel is only compatible with exactly the same
+ // version.
+ if (!productName.equalsIgnoreCase(DynamicConstants.PRODUCT_NAME))
+ {
+ msg = ERR_NOT_SAME_PRODUCT_IN_REMOTE_SERVER_NOT_FOUND.get(hostName,
+ productName, DynamicConstants.PRODUCT_NAME);
+ }
+ else
+ {
+ if (!String.valueOf(DynamicConstants.MAJOR_VERSION).equals(major) ||
+ !String.valueOf(DynamicConstants.MINOR_VERSION).equals(minor) ||
+ !String.valueOf(DynamicConstants.POINT_VERSION).equals(point))
+ {
+ msg = ERR_INCOMPATIBLE_VERSION_IN_REMOTE_SERVER.get(hostName,
+ major, minor, point, DynamicConstants.MAJOR_VERSION,
+ DynamicConstants.MINOR_VERSION, DynamicConstants.POINT_VERSION);
+ }
+ }
+ }
+ catch (Throwable t)
+ {
+ msg = ERR_VERSION_IN_REMOTE_SERVER_NOT_FOUND.get();
+ }
+ if (msg != null)
+ {
+ throw new OnlineUpdateException(msg, null);
+ }
+ }
+
+ private boolean isVersionException(Throwable t)
+ {
+ boolean isVersionException = false;
+ if (t instanceof OpenDsException)
+ {
+ OpenDsException oe = (OpenDsException)t;
+ if (oe.getMessageObject() != null)
+ {
+ if (oe.getMessageObject().getDescriptor().equals
+ (ERR_INCOMPATIBLE_VERSION_IN_REMOTE_SERVER) ||
+ oe.getMessageObject().getDescriptor().equals
+ (ERR_VERSION_IN_REMOTE_SERVER_NOT_FOUND) ||
+ oe.getMessageObject().getDescriptor().equals
+ (ERR_NOT_SAME_PRODUCT_IN_REMOTE_SERVER_NOT_FOUND))
+ {
+ isVersionException = true;
+ }
+ }
+ }
+ return isVersionException;
+ }
+
+ private void closeInfoConnections()
+ {
+ if (getInfo().getDirContext() != null)
+ {
+ try
+ {
+ getInfo().getDirContext().close();
+ }
+ catch (Throwable t)
+ {
+ }
+ }
+ if (getInfo().getUserDataDirContext() != null)
+ {
+ try
+ {
+ getInfo().getUserDataDirContext().close();
+ }
+ catch (Throwable t)
+ {
+ }
+ }
+ }
+}
diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/ui/MainMenuBar.java b/opends/src/guitools/org/opends/guitools/controlpanel/ui/MainMenuBar.java
index 70ad84c..57757e0 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/ui/MainMenuBar.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/ui/MainMenuBar.java
@@ -79,29 +79,7 @@
*/
protected void addMenus()
{
- JMenu menu;
- JMenuItem menuItem;
-
- if (!Utilities.isMacOS())
- {
- menu = Utilities.createMenu(INFO_CTRL_PANEL_FILE_MENU.get(),
- INFO_CTRL_PANEL_FILE_MENU_DESCRIPTION.get());
- menu.setMnemonic(KeyEvent.VK_F);
- menuItem = Utilities.createMenuItem(INFO_CTRL_PANEL_EXIT_MENU.get());
- menuItem.addActionListener(new ActionListener()
- {
- /**
- * {@inheritDoc}
- */
- public void actionPerformed(ActionEvent ev)
- {
- quitClicked();
- }
- });
- menu.add(menuItem);
-
- add(menu);
- }
+ add(createFileMenuBar());
add(createViewMenuBar());
add(createHelpMenuBar());
}
@@ -138,7 +116,44 @@
}
}
-
+ /**
+ * Creates the File menu bar.
+ * @return the File menu bar.
+ */
+ protected JMenu createFileMenuBar()
+ {
+ JMenu menu = Utilities.createMenu(INFO_CTRL_PANEL_FILE_MENU.get(),
+ INFO_CTRL_PANEL_FILE_MENU_DESCRIPTION.get());
+ menu.setMnemonic(KeyEvent.VK_F);
+ if (!Utilities.isMacOS())
+ {
+ JMenuItem menuItem =
+ Utilities.createMenuItem(INFO_CTRL_PANEL_EXIT_MENU.get());
+ menuItem.addActionListener(new ActionListener()
+ {
+ /**
+ * {@inheritDoc}
+ */
+ public void actionPerformed(ActionEvent ev)
+ {
+ quitClicked();
+ }
+ });
+ menu.add(menuItem);
+ }
+ JMenuItem menuItem = Utilities.createMenuItem(
+ INFO_CTRL_PANEL_CONNECT_TO_SERVER_MENU.get());
+ menu.setMnemonic(KeyEvent.VK_R);
+ menuItem.addActionListener(new ActionListener()
+ {
+ public void actionPerformed(ActionEvent ev)
+ {
+ connectToServerClicked();
+ }
+ });
+ menu.add(menuItem);
+ return menu;
+ }
/**
* Creates the View menu bar.
@@ -231,4 +246,38 @@
getInfo().startPooling();
}
}
+
+ /**
+ * The method called when the user clicks on 'Connect to Server...'.
+ */
+ protected void connectToServerClicked()
+ {
+ Set<String> runningTasks = new HashSet<String>();
+ for (Task task : getInfo().getTasks())
+ {
+ if (task.getState() == Task.State.RUNNING)
+ {
+ runningTasks.add(task.getTaskDescription().toString());
+ }
+ }
+ boolean confirmed = true;
+ if (runningTasks.size() > 0)
+ {
+ String allTasks = Utilities.getStringFromCollection(runningTasks, "<br>");
+ Message title = INFO_CTRL_PANEL_CONFIRMATION_REQUIRED_SUMMARY.get();
+ Message msg =
+ INFO_CTRL_PANEL_RUNNING_TASKS_CHANGE_SERVER_CONFIRMATION_DETAILS.get(
+ allTasks);
+ confirmed = Utilities.displayConfirmationDialog(
+ Utilities.getParentDialog(this), title, msg);
+ }
+ if (confirmed)
+ {
+ GenericDialog dlg =
+ ControlCenterMainPane.getLocalOrRemoteDialog(getInfo());
+ Utilities.centerGoldenMean(dlg,
+ Utilities.getFrame(MainMenuBar.this));
+ dlg.setVisible(true);
+ }
+ }
}
diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/ui/NewAttributePanel.java b/opends/src/guitools/org/opends/guitools/controlpanel/ui/NewAttributePanel.java
index bdd4925..5a5b63b 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/ui/NewAttributePanel.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/ui/NewAttributePanel.java
@@ -22,7 +22,7 @@
* CDDL HEADER END
*
*
- * Copyright 2008 Sun Microsystems, Inc.
+ * Copyright 2008-2009 Sun Microsystems, Inc.
*/
package org.opends.guitools.controlpanel.ui;
@@ -361,7 +361,9 @@
if (!error[0])
{
updateErrorPaneAndOKButtonIfAuthRequired(desc,
- INFO_CTRL_PANEL_AUTHENTICATION_REQUIRED_TO_CREATE_ATTRIBUTE_SUMMARY.get());
+ isLocal() ?
+ INFO_CTRL_PANEL_AUTHENTICATION_REQUIRED_TO_CREATE_ATTRIBUTE_SUMMARY.get() :
+ INFO_CTRL_PANEL_CANNOT_CONNECT_TO_REMOTE_DETAILS.get(desc.getHostname()));
}
}
diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/ui/NewBaseDNPanel.java b/opends/src/guitools/org/opends/guitools/controlpanel/ui/NewBaseDNPanel.java
index ad6158d..115150d 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/ui/NewBaseDNPanel.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/ui/NewBaseDNPanel.java
@@ -84,6 +84,7 @@
import org.opends.guitools.controlpanel.util.ConfigReader;
import org.opends.guitools.controlpanel.util.Utilities;
import org.opends.messages.Message;
+import org.opends.quicksetup.Installation;
import org.opends.quicksetup.installer.InstallerHelper;
import org.opends.quicksetup.util.Utils;
import org.opends.server.admin.client.ManagementContext;
@@ -98,6 +99,8 @@
import org.opends.server.config.DNConfigAttribute;
import org.opends.server.core.DirectoryServer;
import org.opends.server.tools.ImportLDIF;
+import org.opends.server.tools.LDAPModify;
+import org.opends.server.tools.makeldif.MakeLDIF;
import org.opends.server.types.AttributeValue;
import org.opends.server.types.DN;
import org.opends.server.types.Entry;
@@ -123,6 +126,7 @@
private JRadioButton importAutomaticallyGenerated;
private JTextField path;
private JTextField numberOfEntries;
+ private JLabel lRemoteFileHelp;
private JButton browseImportPath;
private JLabel lBackend;
@@ -342,6 +346,7 @@
{
browseImportPath.setEnabled(importDataFromLDIF.isSelected());
lPath.setEnabled(importDataFromLDIF.isSelected());
+ lRemoteFileHelp.setEnabled(importDataFromLDIF.isSelected());
numberOfEntries.setEnabled(importAutomaticallyGenerated.isSelected());
lNumberOfEntries.setEnabled(importAutomaticallyGenerated.isSelected());
}
@@ -380,8 +385,18 @@
newElements.add(NEW_BACKEND);
super.updateComboBoxModel(newElements,
((DefaultComboBoxModel)backends.getModel()));
- updateErrorPaneAndOKButtonIfAuthRequired(getInfo().getServerDescriptor(),
- INFO_CTRL_PANEL_AUTHENTICATION_REQUIRED_FOR_CREATE_BASE_DN.get());
+ updateErrorPaneAndOKButtonIfAuthRequired(desc,
+ isLocal() ?
+ INFO_CTRL_PANEL_AUTHENTICATION_REQUIRED_FOR_CREATE_BASE_DN.get() :
+ INFO_CTRL_PANEL_CANNOT_CONNECT_TO_REMOTE_DETAILS.get(desc.getHostname()));
+ SwingUtilities.invokeLater(new Runnable()
+ {
+ public void run()
+ {
+ lRemoteFileHelp.setVisible(!isLocal());
+ browseImportPath.setVisible(isLocal());
+ }
+ });
}
private JPanel createPathPanel()
@@ -390,6 +405,8 @@
panel.setOpaque(false);
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridwidth = 1;
+ gbc.gridy = 0;
+ gbc.gridx = 0;
lPath = Utilities.createDefaultLabel(
INFO_CTRL_PANEL_IMPORT_LDIF_PATH_LABEL.get());
panel.add(lPath, gbc);
@@ -409,6 +426,14 @@
gbc.weightx = 0.0;
panel.add(browseImportPath, gbc);
+ gbc.gridy ++;
+ gbc.gridx = 1;
+ lRemoteFileHelp = Utilities.createInlineHelpLabel(
+ INFO_CTRL_PANEL_REMOTE_SERVER_PATH.get());
+ gbc.insets.top = 3;
+ gbc.insets.left = 10;
+ panel.add(lRemoteFileHelp, gbc);
+
return panel;
}
@@ -573,7 +598,7 @@
{
errors.add(INFO_NO_LDIF_PATH.get());
setSecondaryInvalid(lPath);
- } else if (!Utils.fileExists(ldifPath))
+ } else if (isLocal() && !Utils.fileExists(ldifPath))
{
errors.add(INFO_LDIF_FILE_DOES_NOT_EXIST.get());
setSecondaryInvalid(lPath);
@@ -584,7 +609,7 @@
{
String nEntries = numberOfEntries.getText();
int minValue = 1;
- int maxValue = 20000;
+ int maxValue = isLocal() ? 20000 : 1000;
Message errMsg = ERR_NUMBER_OF_ENTRIES_INVALID.get(minValue, maxValue);
checkIntValue(errors, nEntries, minValue, maxValue, errMsg);
}
@@ -714,7 +739,7 @@
Collection<Message> incompatibilityReasons)
{
boolean canLaunch = true;
- if (state == State.RUNNING)
+ if (state == State.RUNNING && runningOnSameServer(taskToBeLaunched))
{
// All the operations are incompatible if they apply to this
// backend.
@@ -758,7 +783,14 @@
String cmdLineName;
if (!leaveDatabaseEmpty.isSelected())
{
- cmdLineName = getCommandLinePath("import-ldif");
+ if (isLocal())
+ {
+ cmdLineName = getCommandLinePath("import-ldif");
+ }
+ else
+ {
+ cmdLineName = getCommandLinePath("ldapmodify");
+ }
}
else
{
@@ -781,25 +813,33 @@
ArrayList<String> args = new ArrayList<String>();
if (!leaveDatabaseEmpty.isSelected())
{
- if (!useTemplate)
+ if (isLocal())
{
- args.add("--ldifFile");
- args.add(ldifFile);
+ if (!useTemplate)
+ {
+ args.add("--ldifFile");
+ args.add(ldifFile);
+ }
+ else
+ {
+ args.add("--templateFile");
+ args.add(ldifFile);
+ args.add("--randomSeed");
+ args.add("0");
+ }
+ args.add("--backendID");
+ args.add(getBackendName());
+ args.add("--append");
}
else
{
- args.add("--templateFile");
+ args.add("-a");
+ args.add("-f");
args.add(ldifFile);
- args.add("--randomSeed");
- args.add("0");
}
- args.add("--backendID");
- args.add(getBackendName());
- args.add("--append");
+ args.addAll(getConnectionCommandLineArguments(true, !isLocal()));
- args.addAll(getConnectionCommandLineArguments());
-
- if (isServerRunning())
+ if (isServerRunning() && isLocal())
{
args.addAll(getConfigCommandLineArguments());
}
@@ -816,7 +856,6 @@
{
if (!isServerRunning())
{
- configHandlerUpdated = true;
getInfo().stopPooling();
if (getInfo().mustDeregisterConfig())
{
@@ -826,6 +865,7 @@
org.opends.server.extensions.ConfigFileHandler.class.getName(),
ConfigReader.configFile);
getInfo().setMustDeregisterConfig(true);
+ configHandlerUpdated = true;
}
else
{
@@ -1009,14 +1049,60 @@
{
public void run()
{
- progressDialog.appendProgressHtml(Utilities.applyFont(
- INFO_PROGRESS_IMPORT_AUTOMATICALLY_GENERATED.get(nEntries).
- toString(), ColorAndFontConstants.progressFont)+"<br>");
+ if (isLocal())
+ {
+ progressDialog.appendProgressHtml(Utilities.applyFont(
+ INFO_PROGRESS_IMPORT_AUTOMATICALLY_GENERATED.get(nEntries).
+ toString(), ColorAndFontConstants.progressFont)+"<br>");
+ }
+ else
+ {
+ getProgressDialog().appendProgressHtml(
+ Utilities.getProgressWithPoints(
+ INFO_PROGRESS_IMPORT_AUTOMATICALLY_GENERATED_REMOTE.get(nEntries),
+ ColorAndFontConstants.progressFont));
+ }
}
});
File f = SetupUtils.createTemplateFile(newBaseDN,
Integer.parseInt(nEntries));
- ldifFile = f.getAbsolutePath();
+ if (!isLocal())
+ {
+ File tempFile = File.createTempFile("opends-control-panel",
+ ".ldif");
+ tempFile.deleteOnExit();
+ ldifFile = tempFile.getAbsolutePath();
+ // Create the LDIF file locally using make-ldif
+ ArrayList<String> makeLDIFArgs = new ArrayList<String>();
+ makeLDIFArgs.add("--templateFile");
+ makeLDIFArgs.add(f.getAbsolutePath());
+ makeLDIFArgs.add("--ldifFile");
+ makeLDIFArgs.add(ldifFile);
+ makeLDIFArgs.add("--randomSeed");
+ makeLDIFArgs.add("0");
+ makeLDIFArgs.add("--resourcePath");
+ File makeLDIFPath =
+ new File(Installation.getLocal().getConfigurationDirectory(),
+ "MakeLDIF");
+ makeLDIFArgs.add(makeLDIFPath.getAbsolutePath());
+ makeLDIFArgs.addAll(getConfigCommandLineArguments());
+ MakeLDIF makeLDIF = new MakeLDIF();
+ String[] array = new String[makeLDIFArgs.size()];
+ makeLDIFArgs.toArray(array);
+ returnCode = makeLDIF.makeLDIFMain(array, false, false,
+ outPrintStream, errorPrintStream);
+ f.delete();
+ if (returnCode != 0)
+ {
+ throw new OnlineUpdateException(
+ ERR_CTRL_PANEL_ERROR_CREATING_NEW_DATA_LDIF.get(returnCode),
+ null);
+ }
+ }
+ else
+ {
+ ldifFile = f.getAbsolutePath();
+ }
}
ArrayList<String> arguments = getDataCommandLineArguments(ldifFile,
generateData);
@@ -1024,7 +1110,7 @@
String[] args = new String[arguments.size()];
arguments.toArray(args);
- if (createBaseEntry)
+ if (createBaseEntry || !isLocal())
{
outPrintStream.setNotifyListeners(false);
errorPrintStream.setNotifyListeners(false);
@@ -1033,8 +1119,18 @@
{
if (isServerRunning())
{
- returnCode = ImportLDIF.mainImportLDIF(args, false, outPrintStream,
+ if (isLocal() || importLDIF)
+ {
+ returnCode = ImportLDIF.mainImportLDIF(args, false,
+ outPrintStream,
errorPrintStream);
+ }
+ else
+ {
+ returnCode = LDAPModify.mainModify(args, false,
+ outPrintStream,
+ errorPrintStream);
+ }
}
else
{
@@ -1043,7 +1139,6 @@
}
finally
{
- if (createBaseEntry)
{
outPrintStream.setNotifyListeners(true);
errorPrintStream.setNotifyListeners(true);
@@ -1056,7 +1151,7 @@
}
else
{
- if (createBaseEntry)
+ if (createBaseEntry || (!isLocal() && generateData))
{
SwingUtilities.invokeLater(new Runnable()
{
diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/ui/NewIndexPanel.java b/opends/src/guitools/org/opends/guitools/controlpanel/ui/NewIndexPanel.java
index 5bc8f33..7a0749d 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/ui/NewIndexPanel.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/ui/NewIndexPanel.java
@@ -269,7 +269,8 @@
if (!error[0])
{
updateErrorPaneAndOKButtonIfAuthRequired(desc,
- INFO_CTRL_PANEL_AUTHENTICATION_REQUIRED_FOR_NEW_INDEX.get());
+ isLocal() ? INFO_CTRL_PANEL_AUTHENTICATION_REQUIRED_FOR_NEW_INDEX.get() :
+ INFO_CTRL_PANEL_CANNOT_CONNECT_TO_REMOTE_DETAILS.get(desc.getHostname()));
}
}
@@ -448,7 +449,7 @@
Collection<Message> incompatibilityReasons)
{
boolean canLaunch = true;
- if (state == State.RUNNING)
+ if (state == State.RUNNING && runningOnSameServer(taskToBeLaunched))
{
// All the operations are incompatible if they apply to this
// backend for safety. This is a short operation so the limitation
diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/ui/NewObjectClassPanel.java b/opends/src/guitools/org/opends/guitools/controlpanel/ui/NewObjectClassPanel.java
index d62e30d..41cd46b 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/ui/NewObjectClassPanel.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/ui/NewObjectClassPanel.java
@@ -22,7 +22,7 @@
* CDDL HEADER END
*
*
- * Copyright 2008 Sun Microsystems, Inc.
+ * Copyright 2008-2009 Sun Microsystems, Inc.
*/
package org.opends.guitools.controlpanel.ui;
@@ -247,7 +247,9 @@
if (!error[0])
{
updateErrorPaneAndOKButtonIfAuthRequired(desc,
- INFO_CTRL_PANEL_AUTHENTICATION_REQUIRED_TO_CREATE_OBJECTCLASS_SUMMARY.get());
+ isLocal() ?
+ INFO_CTRL_PANEL_AUTHENTICATION_REQUIRED_TO_CREATE_OBJECTCLASS_SUMMARY.get() :
+ INFO_CTRL_PANEL_CANNOT_CONNECT_TO_REMOTE_DETAILS.get(desc.getHostname()));
}
}
diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/ui/NewVLVIndexPanel.java b/opends/src/guitools/org/opends/guitools/controlpanel/ui/NewVLVIndexPanel.java
index a44f57f..86ff4bf 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/ui/NewVLVIndexPanel.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/ui/NewVLVIndexPanel.java
@@ -44,6 +44,7 @@
import org.opends.guitools.controlpanel.datamodel.BackendDescriptor;
import org.opends.guitools.controlpanel.datamodel.ControlPanelInfo;
+import org.opends.guitools.controlpanel.datamodel.ServerDescriptor;
import org.opends.guitools.controlpanel.datamodel.VLVIndexDescriptor;
import org.opends.guitools.controlpanel.datamodel.VLVSortOrder;
import org.opends.guitools.controlpanel.event.ConfigurationChangeEvent;
@@ -91,7 +92,6 @@
/**
* {@inheritDoc}
*/
- @Override
public Message getTitle()
{
return INFO_CTRL_PANEL_NEW_VLV_INDEX_TITLE.get();
@@ -100,7 +100,6 @@
/**
* {@inheritDoc}
*/
- @Override
public Component getPreferredFocusComponent()
{
return name;
@@ -111,10 +110,12 @@
*/
public void configurationChanged(ConfigurationChangeEvent ev)
{
- if (updateLayout(ev.getNewDescriptor()))
+ ServerDescriptor desc = ev.getNewDescriptor();
+ if (updateLayout(desc))
{
- updateErrorPaneAndOKButtonIfAuthRequired(ev.getNewDescriptor(),
- INFO_CTRL_PANEL_AUTHENTICATION_REQUIRED_FOR_NEW_VLV.get());
+ updateErrorPaneAndOKButtonIfAuthRequired(desc,
+ isLocal() ? INFO_CTRL_PANEL_AUTHENTICATION_REQUIRED_FOR_NEW_VLV.get() :
+ INFO_CTRL_PANEL_CANNOT_CONNECT_TO_REMOTE_DETAILS.get(desc.getHostname()));
}
}
@@ -131,7 +132,6 @@
/**
* {@inheritDoc}
*/
- @Override
public void okClicked()
{
List<Message> errors = checkErrors(true);
@@ -214,7 +214,6 @@
/**
* {@inheritDoc}
*/
- @Override
public Type getType()
{
return Type.NEW_INDEX;
@@ -223,7 +222,6 @@
/**
* {@inheritDoc}
*/
- @Override
public Set<String> getBackends()
{
return backendSet;
@@ -232,7 +230,6 @@
/**
* {@inheritDoc}
*/
- @Override
public Message getTaskDescription()
{
return INFO_CTRL_PANEL_NEW_VLV_INDEX_TASK_DESCRIPTION.get(
@@ -242,12 +239,11 @@
/**
* {@inheritDoc}
*/
- @Override
public boolean canLaunch(Task taskToBeLaunched,
Collection<Message> incompatibilityReasons)
{
boolean canLaunch = true;
- if (state == State.RUNNING)
+ if (state == State.RUNNING && runningOnSameServer(taskToBeLaunched))
{
// All the operations are incompatible if they apply to this
// backend for safety. This is a short operation so the limitation
diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/ui/RebuildIndexPanel.java b/opends/src/guitools/org/opends/guitools/controlpanel/ui/RebuildIndexPanel.java
index 5771488..302a566 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/ui/RebuildIndexPanel.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/ui/RebuildIndexPanel.java
@@ -228,7 +228,7 @@
* Refresh the contents of the panel with the provided server descriptor.
* @param desc the server descriptor.
*/
- private void refreshContents(ServerDescriptor desc)
+ private void refreshContents(final ServerDescriptor desc)
{
updateIndexMap(desc, hmIndexes);
updateBaseDNComboBoxModel((DefaultComboBoxModel)baseDNs.getModel(), desc);
@@ -249,7 +249,9 @@
if (!allDisabled)
{
updateErrorPaneAndOKButtonIfAuthRequired(desc,
- INFO_CTRL_PANEL_AUTHENTICATION_REQUIRED_FOR_DISABLE_BACKEND.get());
+ isLocal() ?
+ INFO_CTRL_PANEL_AUTHENTICATION_REQUIRED_FOR_DISABLE_BACKEND.get() :
+ INFO_CTRL_PANEL_CANNOT_CONNECT_TO_REMOTE_DETAILS.get(desc.getHostname()));
}
SwingUtilities.invokeLater(new Runnable()
{
@@ -277,6 +279,17 @@
addRemove.getSelectedList().repaint();
Utilities.updateViewPositions(pos);
+ if (!desc.isLocal() && false)
+ {
+ displayErrorMessage(INFO_CTRL_PANEL_SERVER_REMOTE_SUMMARY.get(),
+ INFO_CTRL_PANEL_SERVER_MUST_BE_LOCAL_REBUILD_INDEX_SUMMARY.get());
+ setEnabledOK(false);
+ }
+ else
+ {
+ displayMainPanel();
+ setEnabledOK(true);
+ }
}
});
}
diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/ui/RestorePanel.java b/opends/src/guitools/org/opends/guitools/controlpanel/ui/RestorePanel.java
index 7b712ae..ff55574 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/ui/RestorePanel.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/ui/RestorePanel.java
@@ -38,6 +38,8 @@
import java.util.Set;
import java.util.TreeSet;
+import javax.swing.JLabel;
+import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
@@ -45,6 +47,7 @@
import org.opends.guitools.controlpanel.datamodel.BackendDescriptor;
import org.opends.guitools.controlpanel.datamodel.BackupDescriptor;
import org.opends.guitools.controlpanel.datamodel.ControlPanelInfo;
+import org.opends.guitools.controlpanel.datamodel.ServerDescriptor;
import org.opends.guitools.controlpanel.event.BackupCreatedEvent;
import org.opends.guitools.controlpanel.event.BackupCreatedListener;
import org.opends.guitools.controlpanel.event.ConfigurationChangeEvent;
@@ -62,6 +65,8 @@
{
private static final long serialVersionUID = -205585323128518051L;
private ListSelectionListener listener;
+ private JLabel lBackupID;
+ private JTextField backupID;
/**
* Constructor of the panel.
@@ -140,9 +145,22 @@
*/
public void configurationChanged(ConfigurationChangeEvent ev)
{
+ final ServerDescriptor desc = ev.getNewDescriptor();
+ SwingUtilities.invokeLater(new Runnable()
+ {
+ /**
+ * {@inheritDoc}
+ */
+ public void run()
+ {
+ lBackupID.setVisible(!desc.isLocal());
+ backupID.setVisible(!desc.isLocal());
+ }
+ });
super.configurationChanged(ev);
- updateErrorPaneAndOKButtonIfAuthRequired(getInfo().getServerDescriptor(),
- INFO_CTRL_PANEL_AUTHENTICATION_REQUIRED_FOR_RESTORE.get());
+ updateErrorPaneAndOKButtonIfAuthRequired(desc,
+ isLocal() ? INFO_CTRL_PANEL_AUTHENTICATION_REQUIRED_FOR_RESTORE.get() :
+ INFO_CTRL_PANEL_CANNOT_CONNECT_TO_REMOTE_DETAILS.get(desc.getHostname()));
}
/**
@@ -194,6 +212,24 @@
super.createLayout(gbc);
+ gbc.insets.top = 10;
+ gbc.gridx = 0;
+ gbc.gridy ++;
+ gbc.insets.left = 0;
+ gbc.gridwidth = 1;
+ lBackupID = Utilities.createPrimaryLabel(
+ INFO_CTRL_PANEL_BACKUP_ID_LABEL.get());
+ add(lBackupID, gbc);
+ backupID = Utilities.createMediumTextField();
+ gbc.weightx = 0.0;
+ gbc.gridx = 1;
+ gbc.insets.left = 10;
+ gbc.insets.right = 40;
+ gbc.fill = GridBagConstraints.HORIZONTAL;
+ gbc.anchor = GridBagConstraints.WEST;
+ gbc.gridwidth = 2;
+ add(backupID, gbc);
+
listener = new ListSelectionListener()
{
public void valueChanged(ListSelectionEvent ev)
@@ -203,6 +239,8 @@
}
};
backupList.getSelectionModel().addListSelectionListener(listener);
+
+ addBottomGlue(gbc);
}
/**
@@ -220,24 +258,44 @@
{
setPrimaryValid(lPath);
setPrimaryValid(lAvailableBackups);
+ setPrimaryValid(lBackupID);
final LinkedHashSet<Message> errors = new LinkedHashSet<Message>();
BackupDescriptor backup = getSelectedBackup();
- boolean selected = backupList.isVisible() && (backup != null);
- if (!selected)
+ if (isLocal())
{
- if (backupList.getRowCount() == 0)
+ boolean selected = backupList.isVisible() && (backup != null);
+ if (!selected)
{
+ if (backupList.getRowCount() == 0)
+ {
+ setPrimaryInvalid(lPath);
+ errors.add(ERR_CTRL_PANEL_NO_PARENT_BACKUP_TO_VERIFY.get());
+ }
+ else
+ {
+ errors.add(ERR_CTRL_PANEL_REQUIRED_BACKUP_TO_VERIFY.get());
+ }
+ setPrimaryInvalid(lAvailableBackups);
+ }
+ }
+ else
+ {
+ String parentPath = parentDirectory.getText();
+ if ((parentPath == null) || (parentPath.trim().equals("")))
+ {
+ errors.add(ERR_CTRL_PANEL_NO_BACKUP_PATH_PROVIDED.get());
setPrimaryInvalid(lPath);
- errors.add(ERR_CTRL_PANEL_NO_PARENT_BACKUP_TO_VERIFY.get());
}
- else
+
+ String id = backupID.getText();
+ if ((id == null) || (id.trim().equals("")))
{
- errors.add(ERR_CTRL_PANEL_REQUIRED_BACKUP_TO_VERIFY.get());
+ errors.add(ERR_CTRL_PANEL_NO_BACKUP_ID_PROVIDED.get());
+ setPrimaryInvalid(lBackupID);
}
- setPrimaryInvalid(lAvailableBackups);
}
if (errors.isEmpty())
@@ -312,9 +370,17 @@
{
super(info, dlg);
this.verify = verify;
- BackupDescriptor backup = getSelectedBackup();
- dir = backup.getPath().getAbsolutePath();
- backupID = backup.getID();
+ if (isLocal())
+ {
+ BackupDescriptor backup = getSelectedBackup();
+ dir = backup.getPath().getAbsolutePath();
+ backupID = backup.getID();
+ }
+ else
+ {
+ dir = parentDirectory.getText();
+ backupID = RestorePanel.this.backupID.getText();
+ }
backendSet = new HashSet<String>();
for (BackendDescriptor backend : info.getServerDescriptor().getBackends())
{
@@ -355,7 +421,7 @@
Collection<Message> incompatibilityReasons)
{
boolean canLaunch = true;
- if (state == State.RUNNING)
+ if (state == State.RUNNING && runningOnSameServer(taskToBeLaunched))
{
// All the operations are incompatible if they apply to this
// backend.
diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/ui/SimplifiedViewEntryPanel.java b/opends/src/guitools/org/opends/guitools/controlpanel/ui/SimplifiedViewEntryPanel.java
index dac07c2..e27537c 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/ui/SimplifiedViewEntryPanel.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/ui/SimplifiedViewEntryPanel.java
@@ -2024,7 +2024,7 @@
}
values.addAll(ocDesc.getAuxiliary());
Schema schema = getInfo().getServerDescriptor().getSchema();
- if (schema != null)
+ if ((schema != null) && (structural != null))
{
ObjectClass oc = schema.getObjectClass(structural.toLowerCase());
if (oc != null)
diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/ui/StandardAttributePanel.java b/opends/src/guitools/org/opends/guitools/controlpanel/ui/StandardAttributePanel.java
index 2e64477..25b7ca4 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/ui/StandardAttributePanel.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/ui/StandardAttributePanel.java
@@ -149,13 +149,14 @@
INFO_CTRL_PANEL_ATTRIBUTE_DESCRIPTION_LABEL.get(),
INFO_CTRL_PANEL_ATTRIBUTE_USAGE_LABEL.get(),
INFO_CTRL_PANEL_ATTRIBUTE_SYNTAX_LABEL.get(),
+ INFO_CTRL_PANEL_ATTRIBUTE_TYPE_LABEL.get(),
INFO_CTRL_PANEL_ATTRIBUTE_APPROXIMATE_MATCHING_RULE_LABEL.get(),
INFO_CTRL_PANEL_ATTRIBUTE_EQUALITY_MATCHING_RULE_LABEL.get(),
INFO_CTRL_PANEL_ATTRIBUTE_ORDERING_MATCHING_RULE_LABEL.get(),
INFO_CTRL_PANEL_ATTRIBUTE_SUBSTRING_MATCHING_RULE_LABEL.get()
};
JLabel[] values = {name, parent, oid, aliases, origin, description, usage,
- syntax, approximate, equality, ordering, substring, type};
+ syntax, type, approximate, equality, ordering, substring};
gbc.gridy = 0;
gbc.gridwidth = 2;
addErrorPane(c, gbc);
diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/ui/StandardObjectClassPanel.java b/opends/src/guitools/org/opends/guitools/controlpanel/ui/StandardObjectClassPanel.java
index 7bb6650..4836d0a 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/ui/StandardObjectClassPanel.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/ui/StandardObjectClassPanel.java
@@ -40,7 +40,6 @@
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
-import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.SortedSet;
@@ -60,7 +59,6 @@
import org.opends.server.types.CommonSchemaElements;
import org.opends.server.types.ObjectClass;
import org.opends.server.types.Schema;
-import org.opends.server.util.ServerConstants;
/**
* The panel that displays a standard object class definition.
@@ -269,17 +267,7 @@
{
MessageBuilder returnValue = new MessageBuilder();
String fileName = element.getSchemaFile();
- String xOrigin = null;
- Iterable<String> it =
- element.getExtraProperty(ServerConstants.SCHEMA_PROPERTY_ORIGIN);
- if (it != null)
- {
- Iterator<String> iterator = it.iterator();
- if (iterator.hasNext())
- {
- xOrigin = iterator.next();
- }
- }
+ String xOrigin = Utilities.getOrigin(element);
if (xOrigin != null)
{
returnValue.append(xOrigin);
diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/ui/StatusGenericPanel.java b/opends/src/guitools/org/opends/guitools/controlpanel/ui/StatusGenericPanel.java
index 06aec31..e763fb3 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/ui/StatusGenericPanel.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/ui/StatusGenericPanel.java
@@ -91,6 +91,7 @@
import org.opends.messages.MessageBuilder;
import org.opends.messages.MessageDescriptor;
import org.opends.quicksetup.ui.CustomHTMLEditorKit;
+import org.opends.server.types.OpenDsException;
import org.opends.server.util.ServerConstants;
/**
@@ -128,9 +129,7 @@
private boolean disposeOnClose = false;
private JPanel mainPanel;
- private JLabel message;
-
- private GenericDialog loginDialog;
+ private JEditorPane message;
/**
* The error pane.
@@ -238,7 +237,7 @@
mainPanel = new JPanel(new GridBagLayout());
mainPanel.setOpaque(false);
- message = Utilities.createDefaultLabel();
+ message = Utilities.makeHtmlPane("", ColorAndFontConstants.progressFont);
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
@@ -627,10 +626,21 @@
}
else
{
- rebuildIndexes = Utilities.displayConfirmationDialog(progressDialog,
- INFO_CTRL_PANEL_INDEX_REBUILD_REQUIRED_SUMMARY.get(),
- INFO_CTRL_PANEL_INDEX_REBUILD_REQUIRED_ONLINE_DETAILS.get(
- index.getName(), backendName, backendName));
+ if (isLocal() || true)
+ {
+ rebuildIndexes = Utilities.displayConfirmationDialog(progressDialog,
+ INFO_CTRL_PANEL_INDEX_REBUILD_REQUIRED_SUMMARY.get(),
+ INFO_CTRL_PANEL_INDEX_REBUILD_REQUIRED_ONLINE_DETAILS.get(
+ index.getName(), backendName, backendName));
+ }
+ else
+ {
+ Utilities.displayWarningDialog(progressDialog,
+ INFO_CTRL_PANEL_INDEX_REBUILD_REQUIRED_SUMMARY.get(),
+ INFO_CTRL_PANEL_INDEX_REBUILD_REQUIRED_REMOTE_DETAILS.get(
+ index.getName(), backendName));
+ rebuildIndexes = false;
+ }
}
if (rebuildIndexes)
{
@@ -824,8 +834,9 @@
{
boolean returnValue;
ServerDescriptor.ServerStatus status = desc.getStatus();
- if ((status == ServerDescriptor.ServerStatus.STARTED) &&
- !desc.isAuthenticated())
+ if (((status == ServerDescriptor.ServerStatus.STARTED) &&
+ !desc.isAuthenticated()) ||
+ (status == ServerDescriptor.ServerStatus.NOT_CONNECTED_TO_REMOTE))
{
returnValue = true;
}
@@ -896,7 +907,8 @@
Message authRequired)
{
ServerDescriptor.ServerStatus status = desc.getStatus();
- if (status != ServerDescriptor.ServerStatus.STARTED)
+ if ((status != ServerDescriptor.ServerStatus.STARTED) &&
+ (status != ServerDescriptor.ServerStatus.NOT_CONNECTED_TO_REMOTE))
{
Message title = INFO_CTRL_PANEL_SERVER_NOT_RUNNING_SUMMARY.get();
MessageBuilder mb = new MessageBuilder();
@@ -1051,7 +1063,7 @@
displayMessage(INFO_CTRL_PANEL_LOADING_PANEL_SUMMARY.get());
worker.startBackgroundTask();
}
- else
+ else if (info.getServerDescriptor() != null)
{
configurationChanged(new ConfigurationChangeEvent(
this.info, this.info.getServerDescriptor()));
@@ -1070,17 +1082,49 @@
}
/**
+ * Returns whether the main panel is visible or not.
+ * @return whether the main panel is visible or not.
+ */
+ protected boolean isMainPanelVisible()
+ {
+ return mainPanel.isVisible();
+ }
+
+ /**
* Displays a message and hides the main panel.
* @param msg the message to be displayed.
*/
protected void displayMessage(Message msg)
{
- message.setText(msg.toString());
+ message.setText(Utilities.applyFont(msg.toString(),
+ ColorAndFontConstants.progressFont));
mainPanel.setVisible(false);
message.setVisible(true);
}
/**
+ * Displays an error message and hides the main panel.
+ * @param title the title of the message to be displayed.
+ * @param msg the message to be displayed.
+ */
+ protected void displayErrorMessage(Message title, Message msg)
+ {
+ updateErrorPane(message, title, ColorAndFontConstants.errorTitleFont,
+ msg, ColorAndFontConstants.defaultFont);
+ mainPanel.setVisible(false);
+ message.setVisible(true);
+ }
+
+ /**
+ * Returns whether the message is visible or not.
+ * @return whether the message is visible or not.
+ */
+ protected boolean isMessageVisible()
+ {
+ return message.isVisible();
+ }
+
+ /**
* Updates the contents of an editor pane using the error format.
* @param pane the editor pane to be updated.
* @param title the title.
@@ -1156,7 +1200,7 @@
* @param detailsFont the font to be used for the details.
* @param type the type of panel.
*/
- private void updatePane(JEditorPane pane, Message title,
+ private void updatePane(final JEditorPane pane, Message title,
Font titleFont, Message details, Font detailsFont, PanelType type)
{
String text;
@@ -1202,11 +1246,11 @@
ServerConstants.EOL);
Utilities.updatePreferredSize(pane2, 100, plainText, detailsFont, true);
Dimension d2 = pane2.getPreferredSize();
+ pane.setText(text);
pane.setPreferredSize(new Dimension(Math.max(d1.width, d2.width),
d1.height + d2.height));
lastDisplayedError = text;
- pane.setText(text);
}
final Window window =
Utilities.getParentDialog(StatusGenericPanel.this);
@@ -1219,6 +1263,7 @@
*/
public void run()
{
+ pane.invalidate();
window.validate();
}
});
@@ -1563,6 +1608,17 @@
}
/**
+ * Returns <CODE>true</CODE> if the managed server is the local installation
+ * (where the control panel is installed) <CODE>false</CODE> otherwise.
+ * @return <CODE>true</CODE> if the managed server is the local installation
+ * (where the control panel is installed) <CODE>false</CODE> otherwise.
+ */
+ protected boolean isLocal()
+ {
+ return getInfo().getServerDescriptor().isLocal();
+ }
+
+ /**
* Launch an task.
* @param task the task to be launched.
* @param initialSummary the initial summary to be displayed in the progress
@@ -1715,10 +1771,26 @@
if ((task.getReturnCode() != null) &&
(errorDetailCode != null))
{
+ String sThrowable;
+ if (t instanceof OpenDsException)
+ {
+ sThrowable = ((OpenDsException)t).getMessageObject().toString();
+ }
+ else
+ {
+ if (t.getMessage() != null)
+ {
+ sThrowable = t.getMessage();
+ }
+ else
+ {
+ sThrowable = t.toString();
+ }
+ }
MessageBuilder mb = new MessageBuilder();
mb.append(errorDetailCode.get(task.getReturnCode()));
mb.append(
- " "+INFO_CTRL_PANEL_DETAILS_THROWABLE.get(t.toString()));
+ " "+INFO_CTRL_PANEL_DETAILS_THROWABLE.get(sThrowable));
summaryMsg = Utilities.getFormattedError(errorSummary,
ColorAndFontConstants.errorTitleFont,
mb.toMessage(), ColorAndFontConstants.defaultFont);
@@ -1943,15 +2015,22 @@
*/
protected GenericDialog getLoginDialog()
{
- if (loginDialog == null)
+ if (isLocal())
{
- LoginPanel loginPanel = new LoginPanel();
- loginDialog = new GenericDialog(Utilities.getFrame(this), loginPanel);
- loginPanel.setInfo(getInfo());
+ GenericDialog loginDialog =
+ ControlCenterMainPane.getLocalServerLoginDialog(getInfo());
Utilities.centerGoldenMean(loginDialog, Utilities.getFrame(this));
loginDialog.setModal(true);
+ return loginDialog;
}
- return loginDialog;
+ else
+ {
+ GenericDialog localOrRemoteDialog =
+ ControlCenterMainPane.getLocalOrRemoteDialog(getInfo());
+ Utilities.centerGoldenMean(localOrRemoteDialog, Utilities.getFrame(this));
+ localOrRemoteDialog.setModal(true);
+ return localOrRemoteDialog;
+ }
}
/**
diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/ui/StatusPanel.java b/opends/src/guitools/org/opends/guitools/controlpanel/ui/StatusPanel.java
index cc8f23c..09e1ea8 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/ui/StatusPanel.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/ui/StatusPanel.java
@@ -266,6 +266,20 @@
mb.toMessage(), ColorAndFontConstants.defaultFont);
}
}
+ else if (desc.getStatus() ==
+ ServerDescriptor.ServerStatus.NOT_CONNECTED_TO_REMOTE)
+ {
+ errorPaneVisible = true;
+ MessageBuilder mb = new MessageBuilder();
+ mb.append(INFO_CTRL_PANEL_CANNOT_CONNECT_TO_REMOTE_DETAILS.get(
+ desc.getHostname()));
+ mb.append("<br><br>"+getAuthenticateHTML());
+ Message title =
+ INFO_CTRL_PANEL_CANNOT_CONNECT_TO_REMOTE_SUMMARY.get();
+ updateErrorPane(errorPane, title,
+ ColorAndFontConstants.errorTitleFont,
+ mb.toMessage(), ColorAndFontConstants.defaultFont);
+ }
if (errorPane.isVisible() != errorPaneVisible)
{
errorPane.setVisible(errorPaneVisible);
@@ -292,12 +306,20 @@
{
if (!desc.isAuthenticated())
{
+ mb.append("<br>");
mb.append(
INFO_CTRL_PANEL_AUTH_REQUIRED_TO_BROWSE_MONITORING_SUMMARY.
get());
mb.append("<br><br>"+getAuthenticateHTML());
}
}
+ else if (desc.getStatus() == ServerDescriptor.ServerStatus.STARTED)
+ {
+ mb.append("<br>");
+ mb.append(INFO_CTRL_PANEL_CANNOT_CONNECT_TO_REMOTE_DETAILS.get(
+ desc.getHostname()));
+ mb.append("<br><br>"+getAuthenticateHTML());
+ }
updateErrorPane(errorPane, title, ColorAndFontConstants.errorTitleFont,
mb.toMessage(), ColorAndFontConstants.defaultFont);
@@ -307,20 +329,29 @@
}
}
- serverStatus.setText(desc.getStatus().toString().toLowerCase());
+ serverStatus.setText(getStatusLabel(desc));
boolean isRunning = desc.getStatus() ==
ServerDescriptor.ServerStatus.STARTED;
boolean isAuthenticated = desc.isAuthenticated();
+ boolean isLocal = desc.isLocal();
startButton.setVisible(desc.getStatus() ==
- ServerDescriptor.ServerStatus.STOPPED);
- restartButton.setVisible(isRunning);
- stopButton.setVisible(isRunning);
+ ServerDescriptor.ServerStatus.STOPPED && isLocal);
+ restartButton.setVisible(isRunning && isLocal);
+ stopButton.setVisible(isRunning && isLocal);
if (!isRunning)
{
- Utilities.setNotAvailableBecauseServerIsDown(currentConnections);
+ if (isLocal)
+ {
+ Utilities.setNotAvailableBecauseServerIsDown(currentConnections);
+ }
+ else
+ {
+ Utilities.setTextValue(currentConnections,
+ INFO_NOT_AVAILABLE_SHORT_LABEL.get().toString());
+ }
}
else if (!isAuthenticated)
{
@@ -358,22 +389,50 @@
}
}
- String htmlString = "<html>"+Utilities.applyFont(
- Utilities.getStringFromCollection(sortedRootUsers, "<br>"),
- administrativeUsers.getFont());
- administrativeUsers.setText(htmlString);
-
+ if (rootUsers.size() > 0)
+ {
+ String htmlString = "<html>"+Utilities.applyFont(
+ Utilities.getStringFromCollection(sortedRootUsers, "<br>"),
+ administrativeUsers.getFont());
+ administrativeUsers.setText(htmlString);
+ }
+ else
+ {
+ administrativeUsers.setText(
+ INFO_NOT_AVAILABLE_SHORT_LABEL.get().toString());
+ }
File install = desc.getInstallPath();
- installPath.setText(install.getAbsolutePath());
+ if (install != null)
+ {
+ installPath.setText(install.getAbsolutePath());
+ }
+ else
+ {
+ installPath.setText(INFO_NOT_AVAILABLE_SHORT_LABEL.get().toString());
+ }
File instance = desc.getInstancePath();
- instancePath.setText(instance.getAbsolutePath());
+ if (instance != null)
+ {
+ instancePath.setText(instance.getAbsolutePath());
+ }
+ else
+ {
+ instancePath.setText(INFO_NOT_AVAILABLE_SHORT_LABEL.get().toString());
+ }
boolean sameInstallAndInstance;
try
{
- sameInstallAndInstance = instance.getCanonicalFile().equals(install);
+ if (instance != null)
+ {
+ sameInstallAndInstance = instance.getCanonicalFile().equals(install);
+ }
+ else
+ {
+ sameInstallAndInstance = install == null;
+ }
}
catch (IOException ioe)
{
@@ -383,11 +442,26 @@
instancePath.setVisible(!sameInstallAndInstance);
lInstancePath.setVisible(!sameInstallAndInstance);
- opendsVersion.setText(desc.getOpenDSVersion());
+ if (desc.getOpenDSVersion() != null)
+ {
+ opendsVersion.setText(desc.getOpenDSVersion());
+ }
+ else
+ {
+ opendsVersion.setText(INFO_NOT_AVAILABLE_SHORT_LABEL.get().toString());
+ }
if (!isRunning)
{
- Utilities.setNotAvailableBecauseServerIsDown(javaVersion);
+ if (isLocal)
+ {
+ Utilities.setNotAvailableBecauseServerIsDown(javaVersion);
+ }
+ else
+ {
+ Utilities.setTextValue(javaVersion,
+ INFO_NOT_AVAILABLE_SHORT_LABEL.get().toString());
+ }
}
else if (!isAuthenticated)
{
@@ -642,7 +716,7 @@
gbc.insets.left = 0;
if (i != 0)
{
- gbc.insets.top = 5;
+ gbc.insets.top = 10;
}
gbc.gridwidth = GridBagConstraints.RELATIVE;
auxPanel.add(leftLabels[i], gbc);
@@ -772,5 +846,40 @@
return INFO_NOT_AVAILABLE_SHORT_LABEL.get().toString();
}
}
+
+ private String getStatusLabel(ServerDescriptor desc)
+ {
+ Message status;
+ switch (desc.getStatus())
+ {
+ case STARTED:
+ status = INFO_SERVER_STARTED_LABEL.get();
+ break;
+
+ case STOPPED:
+ status = INFO_SERVER_STOPPED_LABEL.get();
+ break;
+
+ case STARTING:
+ status = INFO_SERVER_STARTING_LABEL.get();
+ break;
+
+ case STOPPING:
+ status = INFO_SERVER_STOPPING_LABEL.get();
+ break;
+
+ case NOT_CONNECTED_TO_REMOTE:
+ status = INFO_SERVER_NOT_CONNECTED_TO_REMOTE_STATUS_LABEL.get();
+ break;
+
+ case UNKNOWN:
+ status = INFO_SERVER_UNKNOWN_STATUS_LABEL.get();
+ break;
+
+ default:
+ throw new IllegalStateException("Unknown status: "+desc.getStatus());
+ }
+ return status.toString();
+ }
}
diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/ui/VLVIndexPanel.java b/opends/src/guitools/org/opends/guitools/controlpanel/ui/VLVIndexPanel.java
index 87bccfc..c6f1776 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/ui/VLVIndexPanel.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/ui/VLVIndexPanel.java
@@ -62,6 +62,7 @@
import org.opends.guitools.controlpanel.datamodel.AbstractIndexDescriptor;
import org.opends.guitools.controlpanel.datamodel.CategorizedComboBoxElement;
import org.opends.guitools.controlpanel.datamodel.ControlPanelInfo;
+import org.opends.guitools.controlpanel.datamodel.ServerDescriptor;
import org.opends.guitools.controlpanel.datamodel.VLVIndexDescriptor;
import org.opends.guitools.controlpanel.datamodel.VLVSortOrder;
import org.opends.guitools.controlpanel.event.ConfigurationChangeEvent;
@@ -142,12 +143,15 @@
/**
* {@inheritDoc}
*/
- public void configurationChanged(final ConfigurationChangeEvent ev)
+ public void configurationChanged(ConfigurationChangeEvent ev)
{
- if (updateLayout(ev.getNewDescriptor()))
+ final ServerDescriptor desc = ev.getNewDescriptor();
+ if (updateLayout(desc))
{
- updateErrorPaneIfAuthRequired(ev.getNewDescriptor(),
- INFO_CTRL_PANEL_AUTHENTICATION_REQUIRED_FOR_VLV_INDEX_EDITING.get());
+ updateErrorPaneIfAuthRequired(desc,
+ isLocal() ?
+ INFO_CTRL_PANEL_AUTHENTICATION_REQUIRED_FOR_VLV_INDEX_EDITING.get() :
+ INFO_CTRL_PANEL_CANNOT_CONNECT_TO_REMOTE_DETAILS.get(desc.getHostname()));
SwingUtilities.invokeLater(new Runnable()
{
/**
@@ -157,7 +161,7 @@
{
checkSaveButton();
deleteIndex.setEnabled(
- !authenticationRequired(ev.getNewDescriptor()));
+ !authenticationRequired(desc));
}
});
}
@@ -668,7 +672,7 @@
Collection<Message> incompatibilityReasons)
{
boolean canLaunch = true;
- if (state == State.RUNNING)
+ if (state == State.RUNNING && runningOnSameServer(taskToBeLaunched))
{
// All the operations are incompatible if they apply to this
// backend for safety. This is a short operation so the limitation
diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/ui/VerifyIndexPanel.java b/opends/src/guitools/org/opends/guitools/controlpanel/ui/VerifyIndexPanel.java
index 8b4fcb1..7e29d64 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/ui/VerifyIndexPanel.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/ui/VerifyIndexPanel.java
@@ -295,7 +295,7 @@
refreshContents(ev.getNewDescriptor());
}
- private void refreshContents(ServerDescriptor desc)
+ private void refreshContents(final ServerDescriptor desc)
{
updateIndexMap(desc, hmIndexes);
updateBaseDNComboBoxModel((DefaultComboBoxModel)baseDNs.getModel(), desc);
@@ -327,6 +327,19 @@
baseDNs.setVisible(comboVisible);
lNoBaseDNsFound.setVisible(!comboVisible);
Utilities.updateViewPositions(pos);
+
+
+ if (!desc.isLocal())
+ {
+ displayErrorMessage(INFO_CTRL_PANEL_SERVER_REMOTE_SUMMARY.get(),
+ INFO_CTRL_PANEL_SERVER_MUST_BE_LOCAL_VERIFY_INDEX_SUMMARY.get());
+ setEnabledOK(false);
+ }
+ else
+ {
+ displayMainPanel();
+ setEnabledOK(true);
+ }
}
});
}
@@ -572,7 +585,7 @@
Collection<Message> incompatibilityReasons)
{
boolean canLaunch = true;
- if (state == State.RUNNING)
+ if (state == State.RUNNING && runningOnSameServer(taskToBeLaunched))
{
// All the operations are incompatible if they apply to this
// backend.
diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/ui/ViewEntryPanel.java b/opends/src/guitools/org/opends/guitools/controlpanel/ui/ViewEntryPanel.java
index 60ba960..4478668 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/ui/ViewEntryPanel.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/ui/ViewEntryPanel.java
@@ -22,7 +22,7 @@
* CDDL HEADER END
*
*
- * Copyright 2008 Sun Microsystems, Inc.
+ * Copyright 2008-2009 Sun Microsystems, Inc.
*/
package org.opends.guitools.controlpanel.ui;
@@ -647,10 +647,13 @@
{
boolean isOperational = false;
attrName = Utilities.getAttributeNameWithoutOptions(attrName);
- AttributeType attrType = schema.getAttributeType(attrName.toLowerCase());
- if (attrType != null)
+ if (schema != null)
{
- isOperational = attrType.isOperational();
+ AttributeType attrType = schema.getAttributeType(attrName.toLowerCase());
+ if (attrType != null)
+ {
+ isOperational = attrType.isOperational();
+ }
}
return !isOperational || isEditableOperationalAttribute(attrName);
}
diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/ui/WindowsServicePanel.java b/opends/src/guitools/org/opends/guitools/controlpanel/ui/WindowsServicePanel.java
index 9bd1032..57c655e 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/ui/WindowsServicePanel.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/ui/WindowsServicePanel.java
@@ -22,7 +22,7 @@
* CDDL HEADER END
*
*
- * Copyright 2008 Sun Microsystems, Inc.
+ * Copyright 2008-2009 Sun Microsystems, Inc.
*/
package org.opends.guitools.controlpanel.ui;
@@ -44,6 +44,7 @@
import javax.swing.JButton;
import javax.swing.JEditorPane;
import javax.swing.JLabel;
+import javax.swing.SwingUtilities;
import org.opends.guitools.controlpanel.datamodel.ControlPanelInfo;
import org.opends.guitools.controlpanel.event.ConfigurationChangeEvent;
@@ -64,6 +65,8 @@
private JButton bEnable;
private JButton bDisable;
+ private boolean previousLocal = true;
+
private boolean isWindowsServiceEnabled;
/**
@@ -193,13 +196,37 @@
{
boolean previousValue = isWindowsServiceEnabled;
isWindowsServiceEnabled = ev.getNewDescriptor().isWindowsServiceEnabled();
- if (isWindowsServiceEnabled != previousValue)
+
+ final boolean isLocal = ev.getNewDescriptor().isLocal();
+ if ((isLocal != previousLocal) ||
+ (isWindowsServiceEnabled != previousValue))
{
- lState.setText(isWindowsServiceEnabled ?
- INFO_ENABLED_LABEL.get().toString() :
- INFO_DISABLED_LABEL.get().toString());
- bEnable.setVisible(!isWindowsServiceEnabled);
- bDisable.setVisible(isWindowsServiceEnabled);
+ previousLocal = isLocal;
+ SwingUtilities.invokeLater(new Runnable()
+ {
+ /**
+ * {@inheritDoc}
+ */
+ public void run()
+ {
+ lState.setText(isWindowsServiceEnabled ?
+ INFO_ENABLED_LABEL.get().toString() :
+ INFO_DISABLED_LABEL.get().toString());
+ bEnable.setVisible(!isWindowsServiceEnabled);
+ bDisable.setVisible(isWindowsServiceEnabled);
+
+ if (!isLocal)
+ {
+ displayErrorMessage(INFO_CTRL_PANEL_SERVER_REMOTE_SUMMARY.get(),
+ INFO_CTRL_PANEL_SERVER_MUST_BE_LOCAL_WINDOWS_SERVICE_SUMMARY.get());
+ packParentDialog();
+ }
+ else
+ {
+ displayMainPanel();
+ }
+ }
+ });
}
}
@@ -314,7 +341,7 @@
Collection<Message> incompatibilityReasons)
{
boolean canLaunch = true;
- if (state == State.RUNNING)
+ if (state == State.RUNNING && runningOnSameServer(taskToBeLaunched))
{
if ((taskToBeLaunched.getType() == Type.ENABLE_WINDOWS_SERVICE) ||
(taskToBeLaunched.getType() == Type.DISABLE_WINDOWS_SERVICE))
diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/util/ConfigFromDirContext.java b/opends/src/guitools/org/opends/guitools/controlpanel/util/ConfigFromDirContext.java
index 86f1513..7f6e720 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/util/ConfigFromDirContext.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/util/ConfigFromDirContext.java
@@ -67,6 +67,7 @@
import org.opends.server.admin.client.ldap.LDAPManagementContext;
import org.opends.server.admin.std.client.*;
import org.opends.server.admin.std.meta.LocalDBIndexCfgDefn.IndexType;
+import org.opends.server.core.DirectoryServer;
import org.opends.server.types.DN;
import org.opends.server.types.OpenDsException;
import org.opends.server.util.ServerConstants;
@@ -88,6 +89,9 @@
private CustomSearchResult systemInformation;
private CustomSearchResult entryCaches;
private CustomSearchResult workQueue;
+ private CustomSearchResult versionMonitor;
+
+ private boolean isLocal = true;
private Map<String, CustomSearchResult> hmConnectionHandlersMonitor =
new HashMap<String, CustomSearchResult>();
@@ -112,6 +116,10 @@
* The work queue monitoring entry DN.
*/
protected DN workQueueDN = DN.nullDN();
+ /**
+ * The version monitoring entry DN.
+ */
+ protected DN versionDN = DN.nullDN();
{
try
@@ -121,6 +129,7 @@
systemInformationDN = DN.decode("cn=System Information,cn=monitor");
entryCachesDN = DN.decode("cn=Entry Caches,cn=monitor");
workQueueDN = DN.decode("cn=Work Queue,cn=monitor");
+ versionDN = DN.decode("cn=Version,cn=monitor");
}
catch (Throwable t)
{
@@ -169,6 +178,15 @@
}
/**
+ * Returns the version entry of the monitoring tree.
+ * @return the version entry of the monitoring tree.
+ */
+ public CustomSearchResult getVersionMonitor()
+ {
+ return versionMonitor;
+ }
+
+ /**
* Returns the monitoring entry for the system information.
* @return the monitoring entry for the system information.
*/
@@ -187,6 +205,28 @@
}
/**
+ * Sets whether this server represents the local instance or a remote server.
+ * @param isLocal whether this server represents the local instance or a
+ * remote server (in another machine or in another installation on the same
+ * machine).
+ */
+ public void setIsLocal(boolean isLocal)
+ {
+ this.isLocal = isLocal;
+ }
+
+ /**
+ * Returns <CODE>true</CODE> if we are trying to manage the local host and
+ * <CODE>false</CODE> otherwise.
+ * @return <CODE>true</CODE> if we are trying to manage the local host and
+ * <CODE>false</CODE> otherwise.
+ */
+ public boolean isLocal()
+ {
+ return isLocal;
+ }
+
+ /**
* Reads configuration and monitoring information using the provided
* connection.
* @param ctx the connection to be used to read the information.
@@ -204,9 +244,28 @@
systemInformation = null;
entryCaches = null;
workQueue = null;
+ versionMonitor = null;
hmConnectionHandlersMonitor.clear();
+ if (mustReadSchema())
+ {
+ try
+ {
+ readSchema(ctx);
+ if (getSchema() != null)
+ {
+ // Update the schema: so that when we call the server code the
+ // latest schema read on the server we are managing is used.
+ DirectoryServer.setSchema(getSchema());
+ }
+ }
+ catch (OpenDsException oe)
+ {
+ ex.add(oe);
+ }
+ }
+
try
{
// Get the Directory Server configuration handler and use it.
@@ -449,15 +508,6 @@
{
ex.add(oe);
}
-
- try
- {
- readSchema();
- }
- catch (OpenDsException oe)
- {
- ex.add(oe);
- }
}
catch (final Throwable t)
{
@@ -506,6 +556,33 @@
}
/**
+ * Reads the schema from the files.
+ * @param ctx the connection to be used to load the schema.
+ * @throws OpenDsException if an error occurs reading the schema.
+ */
+ private void readSchema(InitialLdapContext ctx) throws OpenDsException
+ {
+ if (isLocal)
+ {
+ super.readSchema();
+ }
+ else
+ {
+ RemoteSchemaLoader loader = new RemoteSchemaLoader();
+ try
+ {
+ loader.readSchema(ctx);
+ }
+ catch (NamingException ne)
+ {
+ throw new OnlineUpdateException(
+ ERR_READING_SCHEMA_LDAP.get(ne.toString()), ne);
+ }
+ schema = loader.getSchema();
+ }
+ }
+
+ /**
* Takes the provided search result and updates the monitoring information
* accordingly.
* @param sr the search result.
@@ -662,6 +739,10 @@
{
systemInformation = csr;
}
+ else if ((versionMonitor == null) && isVersionMonitor(csr))
+ {
+ versionMonitor = csr;
+ }
else if (isConnectionHandler(csr))
{
String statistics = " Statistics";
@@ -829,6 +910,12 @@
return monitorDN.equals(DN.decode(csr.getDN()));
}
+ private boolean isVersionMonitor(CustomSearchResult csr)
+ throws OpenDsException
+ {
+ return versionDN.equals(DN.decode(csr.getDN()));
+ }
+
private boolean isSystemInformation(CustomSearchResult csr)
throws OpenDsException
{
diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/util/ConfigFromFile.java b/opends/src/guitools/org/opends/guitools/controlpanel/util/ConfigFromFile.java
index a26bbaf..c4aefb3 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/util/ConfigFromFile.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/util/ConfigFromFile.java
@@ -110,6 +110,25 @@
try
{
DirectoryServer.getInstance().initializeConfiguration();
+
+ if (mustReadSchema())
+ {
+ try
+ {
+ readSchema();
+ if (getSchema() != null)
+ {
+ // Update the schema: so that when we call the server code the
+ // latest schema read on the server we are managing is used.
+ DirectoryServer.setSchema(getSchema());
+ }
+ }
+ catch (OpenDsException oe)
+ {
+ ex.add(oe);
+ }
+ }
+
// Get the Directory Server configuration handler and use it.
RootCfg root =
ServerManagementContext.getInstance().getRootConfiguration();
@@ -343,18 +362,6 @@
{
ex.add(oe);
}
-
- if (mustReadSchema())
- {
- try
- {
- readSchema();
- }
- catch (OpenDsException oe)
- {
- ex.add(oe);
- }
- }
}
catch (OpenDsException oe)
{
diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/util/ConfigReader.java b/opends/src/guitools/org/opends/guitools/controlpanel/util/ConfigReader.java
index b961f62..cd7c495 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/util/ConfigReader.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/util/ConfigReader.java
@@ -36,6 +36,8 @@
import java.util.Comparator;
import java.util.List;
import java.util.Set;
+import java.util.logging.Level;
+import java.util.logging.Logger;
import org.opends.guitools.controlpanel.datamodel.BackendDescriptor;
import org.opends.guitools.controlpanel.datamodel.ConnectionHandlerDescriptor;
@@ -58,14 +60,18 @@
*/
public abstract class ConfigReader
{
+ private static final Logger LOG =
+ Logger.getLogger(ConfigReader.class.getName());
/**
* The class used to read the configuration from a file.
*/
public static String configClassName;
/**
* The configuration file full path (-INSTANCE_ROOT-/config/config.ldif).
+ * of the installation of the control panel.
*/
public static String configFile;
+
/**
* The error that occurred when setting the environment (null if no error
* occurred).
@@ -89,9 +95,9 @@
{
DirectoryEnvironmentConfig env = DirectoryServer.getEnvironmentConfig();
env.setServerRoot(new File(installRoot));
+ DirectoryServer instance = DirectoryServer.getInstance();
DirectoryServer.bootstrapClient();
DirectoryServer.initializeJMX();
- DirectoryServer instance = DirectoryServer.getInstance();
instance.initializeConfiguration(configClassName, configFile);
instance.initializeSchema();
}
@@ -100,6 +106,7 @@
environmentSettingException = new OfflineUpdateException(
ERR_CTRL_PANEL_SETTING_ENVIRONMENT.get(t.getMessage().toString()), t);
}
+ LOG.log(Level.INFO, "Environment initialized.");
}
/**
@@ -275,8 +282,8 @@
/**
* Reads the schema from the files.
* @throws ConfigException if an error occurs reading the schema.
- * @throws InitializationException if an error occurs trying to find out
- * the schema files.
+ * @throws InitializationException if an error occurs initializing
+ * configuration to read schema.
* @throws DirectoryException if there is an error registering the minimal
* objectclasses.
*/
@@ -285,7 +292,7 @@
{
SchemaLoader loader = new SchemaLoader();
loader.readSchema();
- schema = loader.getSchema().duplicate();
+ schema = loader.getSchema();
}
/**
diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/util/RemoteSchemaLoader.java b/opends/src/guitools/org/opends/guitools/controlpanel/util/RemoteSchemaLoader.java
new file mode 100644
index 0000000..b607643
--- /dev/null
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/util/RemoteSchemaLoader.java
@@ -0,0 +1,185 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE
+ * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
+ * add the following below this CDDL HEADER, with the fields enclosed
+ * by brackets "[]" replaced with your own identifying information:
+ * Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ * Copyright 2009 Sun Microsystems, Inc.
+ */
+
+package org.opends.guitools.controlpanel.util;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import javax.naming.NamingEnumeration;
+import javax.naming.NamingException;
+import javax.naming.directory.SearchControls;
+import javax.naming.directory.SearchResult;
+import javax.naming.ldap.InitialLdapContext;
+
+import org.opends.guitools.controlpanel.browser.BrowserController;
+import org.opends.guitools.controlpanel.datamodel.CustomSearchResult;
+import org.opends.server.config.ConfigConstants;
+import org.opends.server.config.ConfigException;
+import org.opends.server.schema.AttributeTypeSyntax;
+import org.opends.server.schema.ObjectClassSyntax;
+import org.opends.server.types.AttributeType;
+import org.opends.server.types.ByteStringBuilder;
+import org.opends.server.types.DirectoryException;
+import org.opends.server.types.InitializationException;
+import org.opends.server.types.ObjectClass;
+import org.opends.server.types.Schema;
+
+/**
+ * Class used to retrieve the schema from the schema files.
+ *
+ */
+public class RemoteSchemaLoader extends SchemaLoader
+{
+ private Schema schema;
+
+ /**
+ * Constructor.
+ *
+ */
+ public RemoteSchemaLoader()
+ {
+ super();
+ }
+
+ /**
+ * Reads the schema.
+ * @param ctx the connection to be used to load the schema.
+ * @throws NamingException if an error occurs reading the schema.
+ * @throws DirectoryException if an error occurs parsing the schema.
+ * @throws InitializationException if an error occurs finding the base
+ * schema.
+ * @throws ConfigException if an error occurs loading the configuration
+ * required to use the schema classes.
+ */
+ public void readSchema(InitialLdapContext ctx) throws NamingException,
+ DirectoryException, InitializationException, ConfigException
+ {
+ SearchControls searchControls = new SearchControls();
+ searchControls.setSearchScope(SearchControls.OBJECT_SCOPE);
+ String[] schemaAttrs =
+ {
+ ConfigConstants.ATTR_OBJECTCLASSES_LC,
+ ConfigConstants.ATTR_ATTRIBUTE_TYPES_LC
+ };
+ searchControls.setReturningAttributes(schemaAttrs);
+ String filter = BrowserController.ALL_OBJECTS_FILTER;
+ NamingEnumeration<SearchResult> srs =
+ ctx.search(ConfigConstants.DN_DEFAULT_SCHEMA_ROOT,
+ filter,
+ searchControls);
+ SearchResult sr = srs.next();
+ CustomSearchResult csr = new CustomSearchResult(sr,
+ ConfigConstants.DN_DEFAULT_SCHEMA_ROOT);
+
+ schema = getBaseSchema();
+
+ Set<Object> attrs =
+ csr.getAttributeValues(ConfigConstants.ATTR_ATTRIBUTE_TYPES_LC);
+ Set<String> remainingAttrs = new HashSet<String>();
+ for (Object o : attrs)
+ {
+ remainingAttrs.add((String)o);
+ }
+
+ while (!remainingAttrs.isEmpty())
+ {
+ DirectoryException lastException = null;
+ boolean oneRegistered = false;
+ Set<String> registeredAttrs = new HashSet<String>();
+ for (String attrDefinition : remainingAttrs)
+ {
+ ByteStringBuilder sb = new ByteStringBuilder();
+ sb.append(attrDefinition);
+ try
+ {
+ AttributeType attrType =
+ AttributeTypeSyntax.decodeAttributeType(sb, schema, false);
+ schema.registerAttributeType(attrType, true);
+ oneRegistered = true;
+ registeredAttrs.add(attrDefinition);
+ }
+ catch (DirectoryException de)
+ {
+ lastException = de;
+ }
+ }
+ if (!oneRegistered)
+ {
+ throw lastException;
+ }
+ remainingAttrs.removeAll(registeredAttrs);
+ }
+
+ Set<Object> objectClasses =
+ csr.getAttributeValues(ConfigConstants.ATTR_OBJECTCLASSES_LC);
+
+ Set<String> remainingOcs = new HashSet<String>();
+ for (Object o : objectClasses)
+ {
+ remainingOcs.add((String)o);
+ }
+
+ while (!remainingOcs.isEmpty())
+ {
+ DirectoryException lastException = null;
+ boolean oneRegistered = false;
+ Set<String> registeredOcs = new HashSet<String>();
+ for (String ocDefinition : remainingOcs)
+ {
+ ByteStringBuilder sb = new ByteStringBuilder();
+ sb.append(ocDefinition);
+ try
+ {
+ ObjectClass oc =
+ ObjectClassSyntax.decodeObjectClass(sb, schema, false);
+ schema.registerObjectClass(oc, true);
+ oneRegistered = true;
+ registeredOcs.add(ocDefinition);
+ }
+ catch (DirectoryException de)
+ {
+ lastException = de;
+ }
+ }
+ if (!oneRegistered)
+ {
+ throw lastException;
+ }
+ remainingOcs.removeAll(registeredOcs);
+ }
+ }
+
+ /**
+ * Returns the schema that was read.
+ * @return the schema that was read.
+ */
+ public Schema getSchema()
+ {
+ return schema;
+ }
+}
diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/util/SchemaLoader.java b/opends/src/guitools/org/opends/guitools/controlpanel/util/SchemaLoader.java
index f176f60..675ed6d 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/util/SchemaLoader.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/util/SchemaLoader.java
@@ -128,23 +128,7 @@
public void readSchema() throws DirectoryException,
ConfigException, InitializationException
{
- schema = new Schema();
- for (MatchingRule mr : matchingRulesToKeep)
- {
- schema.registerMatchingRule(mr, true);
- }
- for (AttributeSyntax syntax : syntaxesToKeep)
- {
- schema.registerSyntax(syntax, true);
- }
- for (AttributeType attr : attributesToKeep)
- {
- schema.registerAttributeType(attr, true);
- }
- for (ObjectClass oc : objectclassesToKeep)
- {
- schema.registerObjectClass(oc, true);
- }
+ schema = getBaseSchema();
String[] fileNames = null;
try
@@ -263,6 +247,35 @@
}
/**
+ * Returns a basic version of the schema. The schema is created and contains
+ * enough definitions for the schema to be loaded.
+ * @return a basic version of the schema.
+ * @throws DirectoryException if there is an error registering the minimal
+ * objectclasses.
+ */
+ protected Schema getBaseSchema() throws DirectoryException
+ {
+ Schema schema = new Schema();
+ for (MatchingRule mr : matchingRulesToKeep)
+ {
+ schema.registerMatchingRule(mr, true);
+ }
+ for (AttributeSyntax syntax : syntaxesToKeep)
+ {
+ schema.registerSyntax(syntax, true);
+ }
+ for (AttributeType attr : attributesToKeep)
+ {
+ schema.registerAttributeType(attr, true);
+ }
+ for (ObjectClass oc : objectclassesToKeep)
+ {
+ schema.registerObjectClass(oc, true);
+ }
+ return schema;
+ }
+
+ /**
* Returns the schema that was read.
* @return the schema that was read.
*/
diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/util/Utilities.java b/opends/src/guitools/org/opends/guitools/controlpanel/util/Utilities.java
index 929e555..4ad5131 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/util/Utilities.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/util/Utilities.java
@@ -48,6 +48,7 @@
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
+import java.util.Iterator;
import java.util.Set;
import javax.naming.CompositeName;
@@ -292,6 +293,25 @@
null); // default button title
}
+ /**
+ * Displays a warning dialog.
+ * @param parentComponent the parent component relative to which the dialog
+ * will be displayed.
+ * @param title the title of the dialog.
+ * @param msg the message to be displayed.
+ */
+ public static void displayWarningDialog(Component parentComponent,
+ Message title, Message msg)
+ {
+ String plainText = msg.toString().replaceAll("<br>", ServerConstants.EOL);
+ String wrappedText = StaticUtils.wrapText(plainText, 70);
+ wrappedText = wrappedText.replaceAll(ServerConstants.EOL, "<br>");
+ JOptionPane.showMessageDialog(
+ parentComponent, "<html>"+wrappedText,
+ title.toString(),
+ JOptionPane.WARNING_MESSAGE);
+ }
+
/**
* Creates a JEditorPane that displays a message.
@@ -1734,6 +1754,16 @@
"03-uddiv3.ldif", "05-solaris.ldif"
};
+ private final static String[] configurationSchemaOrigins =
+ {
+ "OpenDS Directory Server", "Sun Directory Server"
+ };
+
+ private final static String[] standardSchemaOrigins =
+ {
+ "Sun Java System Directory Server", "Solaris Specific", "X.501"
+ };
+
private final static String[] configurationSchemaFileNames =
{
"02-config.ldif", "06-compat.ldif"
@@ -1765,6 +1795,27 @@
isStandard = fileName.toLowerCase().indexOf("-rfc") != -1;
}
}
+ else if (fileElement instanceof CommonSchemaElements)
+ {
+ CommonSchemaElements element = (CommonSchemaElements)fileElement;
+ String xOrigin = getOrigin(element);
+ if (xOrigin != null)
+ {
+ for (String name : standardSchemaOrigins)
+ {
+ isStandard = xOrigin.equals(name);
+ if (isStandard)
+ {
+ break;
+ }
+ }
+ if (!isStandard)
+ {
+ isStandard = xOrigin.startsWith("RFC ") ||
+ xOrigin.startsWith("draft-");
+ }
+ }
+ }
return isStandard;
}
@@ -1790,10 +1841,47 @@
}
}
}
+ else if (fileElement instanceof CommonSchemaElements)
+ {
+ CommonSchemaElements element = (CommonSchemaElements)fileElement;
+ String xOrigin = getOrigin(element);
+ if (xOrigin != null)
+ {
+ for (String name : configurationSchemaOrigins)
+ {
+ isConfiguration = xOrigin.equals(name);
+ if (isConfiguration)
+ {
+ break;
+ }
+ }
+ }
+ }
return isConfiguration;
}
/**
+ * Returns the origin of the provided schema element.
+ * @param element the schema element.
+ * @return the origin of the provided schema element.
+ */
+ public static String getOrigin(CommonSchemaElements element)
+ {
+ String xOrigin = null;
+ Iterable<String> it =
+ element.getExtraProperty(ServerConstants.SCHEMA_PROPERTY_ORIGIN);
+ if (it != null)
+ {
+ Iterator<String> iterator = it.iterator();
+ if (iterator.hasNext())
+ {
+ xOrigin = iterator.next();
+ }
+ }
+ return xOrigin;
+ }
+
+ /**
* Returns the string representation of an attribute syntax.
* @param syntax the attribute syntax.
* @return the string representation of an attribute syntax.
@@ -1976,13 +2064,7 @@
/*
* Search for the config to check that it is the directory manager.
*/
- SearchControls searchControls = new SearchControls();
- searchControls.setCountLimit(1);
- searchControls.setSearchScope(
- SearchControls. OBJECT_SCOPE);
- searchControls.setReturningAttributes(
- new String[] {"dn"});
- ctx.search("cn=config", "objectclass=*", searchControls);
+ checkCanReadConfig(ctx);
return ctx;
}
@@ -2042,6 +2124,18 @@
bindDN, pwd, Utils.getDefaultLDAPTimeout(), null);
}
+ checkCanReadConfig(ctx);
+ return ctx;
+ }
+
+ /**
+ * Checks that the provided connection can read cn=config.
+ * @param ctx the connection to be tested.
+ * @throws NamingException if an error occurs while reading cn=config.
+ */
+ public static void checkCanReadConfig(InitialLdapContext ctx)
+ throws NamingException
+ {
/*
* Search for the config to check that it is the directory manager.
*/
@@ -2052,7 +2146,6 @@
searchControls.setReturningAttributes(
new String[] {"dn"});
ctx.search("cn=config", "objectclass=*", searchControls);
- return ctx;
}
/**
diff --git a/opends/src/messages/messages/admin_tool.properties b/opends/src/messages/messages/admin_tool.properties
index 59feb12..85abcc2 100644
--- a/opends/src/messages/messages/admin_tool.properties
+++ b/opends/src/messages/messages/admin_tool.properties
@@ -199,6 +199,8 @@
MILD_ERR_READING_CONFIG_FILE=Error reading the configuration file.
MILD_ERR_READING_CONFIG_LDAP=Error reading data from server. Verify the \
authentication information provided.%nDetails: %s
+MILD_ERR_READING_SCHEMA_LDAP=Error reading schema from the remote server.\
+ %nDetails: %s
SEVERE_ERR_STARTING_SERVER_GENERIC=Could not Start server.
INFO_FINISH_BUTTON_UNINSTALL_LABEL=Uninstall
INFO_FINISH_BUTTON_UNINSTALL_TOOLTIP=Finish Uninstall
@@ -279,6 +281,7 @@
INFO_SERVER_STOPPED_LABEL=Stopped
INFO_SERVER_STOPPING_LABEL=Stopping
INFO_SERVER_UNKNOWN_STATUS_LABEL=Unknown
+INFO_SERVER_NOT_CONNECTED_TO_REMOTE_STATUS_LABEL=Not Connected to Remote
INFO_START_BUTTON_LABEL=Start
INFO_START_BUTTON_TOOLTIP=Starts the Directory Server
INFO_STATE_COLUMN=State
@@ -1814,6 +1817,27 @@
INFO_CTRL_OBJECTCLASS_DESCRIPTOR=Objectclass: %s
INFO_CTRL_AUXILIARY_OBJECTCLASS_DESCRIPTOR=Auxiliary objectclasses: %s
+INFO_CTRL_PANEL_LOCAL_OR_REMOTE_LABEL=Choose the server to be administered:
+INFO_CTRL_PANEL_REMOTE_SERVER=Remote Server:
+INFO_CTRL_PANEL_LOCAL_SERVER=Local Server
+INFO_CTRL_PANEL_ADMINISTRATION_PORT=Administration Port:
+INFO_CTRL_PANEL_LOCAL_SERVER_NOT_RUNNING=Not Running
+INFO_EMPTY_REMOTE_HOST_NAME=You must provide the name of the remote host name.
+INFO_INVALID_REMOTE_SERVER_PORT=The value of the remote server administrative \
+ port must be an integer value between %d and %d.
+INFO_CTRL_PANEL_LOCAL_OR_REMOTE_PANEL_TITLE=Server to Administer
+#
+# Note that the following two properties contain line breaks in HTML format
+# (<br>)
+#
+INFO_CTRL_PANEL_ERROR_CONNECTING_TO_LOCAL=The following errors occurred \
+ connecting to the local server:<br>%s<br>If you continue without providing \
+ authentication no monitoring information will be displayed.<br><br>Do you \
+ want to continue?
+MILD_ERR_CANNOT_CONNECT_TO_REMOTE=Could not connect to server '%s' on port \
+ '%s'. Verify that the provided information is valid and that the server is \
+ running. Details: %s
+
INFO_CTRL_PANEL_LOGIN_PANEL_TITLE=Authentication Required
INFO_CTRL_PANEL_BIND_DN_LABEL=Bind DN:
INFO_CTRL_PANEL_BIND_PASSWORD_LABEL=Password:
@@ -1824,8 +1848,12 @@
#
INFO_CTRL_PANEL_RUNNING_TASKS_CONFIRMATION_DETAILS=The following tasks are \
running:<br>%s<br><br>If you exit the tasks will continue but you will have \
- to check the error logs to see if they complete successfully.<br><br>Do you \
+ to check the log files to see if they complete successfully.<br><br>Do you \
want to continue?
+INFO_CTRL_PANEL_RUNNING_TASKS_CHANGE_SERVER_CONFIRMATION_DETAILS=The following \
+ tasks are running:<br>%s<br><br>If you connect to another server the tasks \
+ will continue but you will have to check the log files to see if they \
+ complete successfully.<br><br>Do you want to continue?
INFO_CTRL_PANEL_MATCHING_RULE_PANEL_TITLE=Matching Rule
INFO_CTRL_PANEL_MATCHING_RULE_DETAILS=Matching Rule Details
@@ -1895,6 +1923,7 @@
INFO_CTRL_PANEL_ATTRIBUTE_DESCRIPTION_LABEL=Description:
INFO_CTRL_PANEL_ATTRIBUTE_USAGE_LABEL=Usage:
INFO_CTRL_PANEL_ATTRIBUTE_SYNTAX_LABEL=Syntax:
+INFO_CTRL_PANEL_ATTRIBUTE_TYPE_LABEL=Type:
INFO_CTRL_PANEL_ATTRIBUTE_APPROXIMATE_MATCHING_RULE_LABEL=Approximate \
Matching Rule:
INFO_CTRL_PANEL_ATTRIBUTE_EQUALITY_MATCHING_RULE_LABEL=Equality \
@@ -2476,6 +2505,49 @@
INFO_CTRL_PANEL_AVERAGE_HEADER=%s Avg per second
INFO_CTRL_PANEL_AUTHENTICATED_AS=Authenticated as '%s'
INFO_CTRL_PANEL_NOT_AUTHENTICATED=User Not Authenticated
-INFO_CTRL_PANEL_NOT_AUTHENTICATED_SERVER_NOT_RUNNING=User Not Authenticated \
- (Server not Running)
-
+INFO_CTRL_PANEL_NOT_AUTHENTICATED_SERVER_NOT_RUNNING=User not authenticated \
+ (server not running)
+INFO_CTRL_PANEL_NOT_AUTHENTICATED_SERVER_REMOTE=User not authenticated \
+ (could not connect to server '%s')
+INFO_CTRL_PANEL_LOCAL_OR_REMOTE=Select the server that you want to administer:
+INFO_CTRL_PANEL_SERVER_REMOTE_SUMMARY=Server is Remote
+INFO_CTRL_PANEL_SERVER_MUST_BE_LOCAL_JAVA_PROPERTIES_SUMMARY=The Java Settings \
+ can only be updated when the managed server is the local server.
+INFO_CTRL_PANEL_SERVER_MUST_BE_LOCAL_VERIFY_INDEX_SUMMARY=The indexes can only \
+ be verified when the managed server is the local server.
+INFO_CTRL_PANEL_SERVER_MUST_BE_LOCAL_REBUILD_INDEX_SUMMARY=The indexes can \
+ only be rebuilt when the managed server is the local server.
+INFO_CTRL_PANEL_REMOTE_SERVER_PATH=The path must be accessible by the remote \
+ server.
+INFO_CTRL_PANEL_SERVER_MUST_BE_LOCAL_WINDOWS_SERVICE_SUMMARY=The Windows \
+ Service configuration can only be viewed and updated when the managed server \
+ is the local server.
+SEVERE_ERR_CTRL_PANEL_ERROR_CREATING_NEW_DATA_LDIF=Could not created local \
+ LDIF to populate new base DN with automatically generated data. Error code: \
+ %d.
+INFO_CTRL_PANEL_PARENT_BACKUP_ID_LABEL=Parent Backup ID:
+INFO_CTRL_PANEL_PARENT_BACKUP_PATH_LABEL=Parent Backup Path:
+MILD_ERR_CTRL_PANEL_NO_PARENT_BACKUP_ID_PROVIDED=No parent backup ID provided.
+INFO_CTRL_PANEL_CANNOT_CONNECT_TO_REMOTE_SUMMARY=Could not connect to remote \
+ server
+INFO_CTRL_PANEL_CANNOT_CONNECT_TO_REMOTE_DETAILS=The remote server '%s' might \
+ be down or the provided authentication is no longer valid. To be able to \
+ manage a server remotely it must be running and you must provide \
+ authentication.
+INFO_CTRL_PANEL_CONNECT_TO_SERVER_MENU=Server to Administer...
+INFO_CTRL_PANEL_INDEX_REBUILD_REQUIRED_REMOTE_DETAILS=The index configuration \
+ for '%s' was successfully modified. For the configuration to be taken into \
+ account the database index files must be regenerated. This can be done by \
+ using the 'rebuild-index' command-line on the remote server or re-importing \
+ the contents of the backend '%s'.
+INFO_PROGRESS_IMPORT_AUTOMATICALLY_GENERATED_REMOTE=Importing \
+ Automatically-Generated Data (%s Entries)
+SEVERE_ERR_NOT_SAME_PRODUCT_IN_REMOTE_SERVER_NOT_FOUND=The remote server in \
+ '%s' is cannot be managed by this control panel. The remote server product \
+ name is '%s' and the control panel product name is '%s'.
+SEVERE_ERR_INCOMPATIBLE_VERSION_IN_REMOTE_SERVER=The remote server in '%s' has \
+ not the same version as the control panel. The remote server version is \
+ '%s.%s.%s' and the control panel version is '%d.%d.%d'.
+SEVERE_ERR_VERSION_IN_REMOTE_SERVER_NOT_FOUND=Could not find version \
+ information in the remote server. The remote LDAP server does not seem to be \
+ manageable remotely by the control panel.
diff --git a/opends/src/server/org/opends/server/monitors/SystemInfoMonitorProvider.java b/opends/src/server/org/opends/server/monitors/SystemInfoMonitorProvider.java
index daec30c..c1b2568 100644
--- a/opends/src/server/org/opends/server/monitors/SystemInfoMonitorProvider.java
+++ b/opends/src/server/org/opends/server/monitors/SystemInfoMonitorProvider.java
@@ -22,7 +22,7 @@
* CDDL HEADER END
*
*
- * Copyright 2006-2008 Sun Microsystems, Inc.
+ * Copyright 2006-2009 Sun Microsystems, Inc.
*/
package org.opends.server.monitors;
@@ -196,7 +196,16 @@
String.valueOf(runtime.totalMemory())));
attrs.add(createAttribute("freeUsedMemory",
String.valueOf(runtime.freeMemory())));
-
+ String installPath = DirectoryServer.getServerRoot();
+ if (installPath != null)
+ {
+ attrs.add(createAttribute("installPath", installPath));
+ }
+ String instancePath = DirectoryServer.getInstanceRoot();
+ if (instancePath != null)
+ {
+ attrs.add(createAttribute("instancePath", instancePath));
+ }
// Get the JVM input arguments.
RuntimeMXBean rtBean = ManagementFactory.getRuntimeMXBean();
diff --git a/opends/src/server/org/opends/server/tasks/RebuildTask.java b/opends/src/server/org/opends/server/tasks/RebuildTask.java
index 6fa8eb4..a8fa88a 100644
--- a/opends/src/server/org/opends/server/tasks/RebuildTask.java
+++ b/opends/src/server/org/opends/server/tasks/RebuildTask.java
@@ -22,7 +22,7 @@
* CDDL HEADER END
*
*
- * Copyright 2006-2008 Sun Microsystems, Inc.
+ * Copyright 2006-2009 Sun Microsystems, Inc.
*/
package org.opends.server.tasks;
import org.opends.messages.Message;
@@ -65,8 +65,6 @@
import static org.opends.messages.ToolMessages.
ERR_REBUILDINDEX_CANNOT_EXCLUSIVE_LOCK_BACKEND;
import static org.opends.messages.ToolMessages.
- ERR_REBUILDINDEX_CANNOT_SHARED_LOCK_BACKEND;
-import static org.opends.messages.ToolMessages.
WARN_REBUILDINDEX_CANNOT_UNLOCK_BACKEND;
import static org.opends.server.config.ConfigConstants.
ATTR_REBUILD_BASE_DN;
@@ -195,65 +193,43 @@
// to aquire exclusive lock.
String lockFile = LockFileManager.getBackendLockFileName(backend);
StringBuilder failureReason = new StringBuilder();
- if(rebuildConfig.includesSystemIndex())
+
+ // Disable the backend.
+ try
{
- // Disable the backend.
- try
+ TaskUtils.disableBackend(backend.getBackendID());
+ }
+ catch (DirectoryException e)
+ {
+ if (debugEnabled())
{
- TaskUtils.disableBackend(backend.getBackendID());
- }
- catch (DirectoryException e)
- {
- if (debugEnabled())
- {
- TRACER.debugCaught(DebugLogLevel.ERROR, e);
- }
-
- logError(e.getMessageObject());
- return TaskState.STOPPED_BY_ERROR;
+ TRACER.debugCaught(DebugLogLevel.ERROR, e);
}
- try
- {
- if(! LockFileManager.acquireExclusiveLock(lockFile, failureReason))
- {
- Message message = ERR_REBUILDINDEX_CANNOT_EXCLUSIVE_LOCK_BACKEND.get(
- backend.getBackendID(), String.valueOf(failureReason));
- logError(message);
- return TaskState.STOPPED_BY_ERROR;
- }
- }
- catch (Exception e)
+ logError(e.getMessageObject());
+ return TaskState.STOPPED_BY_ERROR;
+ }
+
+ try
+ {
+ if(! LockFileManager.acquireExclusiveLock(lockFile, failureReason))
{
Message message = ERR_REBUILDINDEX_CANNOT_EXCLUSIVE_LOCK_BACKEND.get(
- backend.getBackendID(), getExceptionMessage(e));
+ backend.getBackendID(), String.valueOf(failureReason));
logError(message);
return TaskState.STOPPED_BY_ERROR;
}
}
- else
+ catch (Exception e)
{
- try
- {
- if(! LockFileManager.acquireSharedLock(lockFile, failureReason))
- {
- Message message = ERR_REBUILDINDEX_CANNOT_SHARED_LOCK_BACKEND.get(
- backend.getBackendID(), String.valueOf(failureReason));
- logError(message);
- return TaskState.STOPPED_BY_ERROR;
- }
- }
- catch (Exception e)
- {
- Message message = ERR_REBUILDINDEX_CANNOT_SHARED_LOCK_BACKEND.get(
- backend.getBackendID(), getExceptionMessage(e));
- logError(message);
- return TaskState.STOPPED_BY_ERROR;
- }
-
+ Message message = ERR_REBUILDINDEX_CANNOT_EXCLUSIVE_LOCK_BACKEND.get(
+ backend.getBackendID(), getExceptionMessage(e));
+ logError(message);
+ return TaskState.STOPPED_BY_ERROR;
}
+ TaskState returnCode = TaskState.COMPLETED_SUCCESSFULLY;
// Launch the rebuild process.
try
{
@@ -270,31 +246,33 @@
Message message =
ERR_REBUILDINDEX_ERROR_DURING_REBUILD.get(e.getMessage());
logError(message);
- return TaskState.STOPPED_BY_ERROR;
+ returnCode = TaskState.STOPPED_BY_ERROR;
}
-
// Release the lock on the backend.
- try
+ finally
{
- lockFile = LockFileManager.getBackendLockFileName(backend);
- failureReason = new StringBuilder();
- if (! LockFileManager.releaseLock(lockFile, failureReason))
+ try
+ {
+ lockFile = LockFileManager.getBackendLockFileName(backend);
+ failureReason = new StringBuilder();
+ if (! LockFileManager.releaseLock(lockFile, failureReason))
+ {
+ Message message = WARN_REBUILDINDEX_CANNOT_UNLOCK_BACKEND.get(
+ backend.getBackendID(), String.valueOf(failureReason));
+ logError(message);
+ returnCode = TaskState.COMPLETED_WITH_ERRORS;
+ }
+ }
+ catch (Throwable t)
{
Message message = WARN_REBUILDINDEX_CANNOT_UNLOCK_BACKEND.get(
- backend.getBackendID(), String.valueOf(failureReason));
+ backend.getBackendID(), getExceptionMessage(t));
logError(message);
- return TaskState.COMPLETED_WITH_ERRORS;
+ returnCode = TaskState.COMPLETED_WITH_ERRORS;
}
}
- catch (Exception e)
- {
- Message message = WARN_REBUILDINDEX_CANNOT_UNLOCK_BACKEND.get(
- backend.getBackendID(), getExceptionMessage(e));
- logError(message);
- return TaskState.COMPLETED_WITH_ERRORS;
- }
- if(rebuildConfig.includesSystemIndex())
+ if(returnCode == TaskState.COMPLETED_SUCCESSFULLY)
{
// Enable the backend.
try
@@ -309,10 +287,10 @@
}
logError(e.getMessageObject());
- return TaskState.STOPPED_BY_ERROR;
+ returnCode = TaskState.STOPPED_BY_ERROR;
}
}
- return TaskState.COMPLETED_SUCCESSFULLY;
+ return returnCode;
}
}
diff --git a/opends/src/server/org/opends/server/tools/RebuildIndex.java b/opends/src/server/org/opends/server/tools/RebuildIndex.java
index 7390896..a408db0 100644
--- a/opends/src/server/org/opends/server/tools/RebuildIndex.java
+++ b/opends/src/server/org/opends/server/tools/RebuildIndex.java
@@ -22,31 +22,38 @@
* CDDL HEADER END
*
*
- * Copyright 2006-2008 Sun Microsystems, Inc.
+ * Copyright 2006-2009 Sun Microsystems, Inc.
*/
package org.opends.server.tools;
import org.opends.messages.Message;
import static org.opends.server.util.StaticUtils.wrapText;
import org.opends.server.util.args.ArgumentException;
-import org.opends.server.util.args.ArgumentParser;
import org.opends.server.util.args.BooleanArgument;
+import org.opends.server.util.args.LDAPConnectionArgumentParser;
import org.opends.server.util.args.StringArgument;
import org.opends.server.extensions.ConfigFileHandler;
+
import static org.opends.messages.ToolMessages.*;
import org.opends.server.config.ConfigException;
+
+import static org.opends.server.config.ConfigConstants.*;
import static org.opends.server.loggers.ErrorLogger.logError;
import org.opends.server.loggers.TextWriter;
import org.opends.server.loggers.ErrorLogger;
import org.opends.server.loggers.TextErrorLogPublisher;
import org.opends.server.loggers.debug.TextDebugLogPublisher;
import org.opends.server.loggers.debug.DebugLogger;
+import org.opends.server.protocols.ldap.LDAPAttribute;
+
import static org.opends.server.util.ServerConstants.*;
import static org.opends.server.util.StaticUtils.*;
import org.opends.server.core.DirectoryServer;
import org.opends.server.core.CoreConfigManager;
import org.opends.server.core.LockFileManager;
+import org.opends.server.tasks.RebuildTask;
+import org.opends.server.tools.tasks.TaskTool;
import org.opends.server.types.*;
import org.opends.server.api.Backend;
import org.opends.server.api.ErrorLogPublisher;
@@ -67,8 +74,12 @@
* intended to run separate from Directory Server and not internally within the
* server process (e.g., via the tasks interface).
*/
-public class RebuildIndex
+public class RebuildIndex extends TaskTool
{
+ private StringArgument configClass = null;
+ private StringArgument configFile = null;
+ private StringArgument baseDNString = null;
+ private StringArgument indexList = null;
/**
* Processes the command-line arguments and invokes the rebuild process.
@@ -102,6 +113,12 @@
OutputStream outStream,
OutputStream errStream)
{
+ RebuildIndex tool = new RebuildIndex();
+ return tool.process(args, initializeServer, outStream, errStream);
+ }
+
+ private int process(String[] args, boolean initializeServer,
+ OutputStream outStream, OutputStream errStream) {
PrintStream out;
if (outStream == null)
{
@@ -123,18 +140,14 @@
}
// Define the command-line arguments that may be used with this program.
- StringArgument configClass = null;
- StringArgument configFile = null;
- StringArgument baseDNString = null;
- StringArgument indexList = null;
BooleanArgument displayUsage = null;
// Create the command-line argument parser for use with this program.
Message toolDescription = INFO_REBUILDINDEX_TOOL_DESCRIPTION.get();
- ArgumentParser argParser =
- new ArgumentParser("org.opends.server.tools.RebuildIndex",
- toolDescription, false);
+ LDAPConnectionArgumentParser argParser =
+ createArgParser("org.opends.server.tools.RebuildIndex",
+ toolDescription);
// Initialize all the command-line argument types and register them with the
@@ -232,6 +245,17 @@
return 1;
}
+ return process(argParser, initializeServer, out, err);
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ protected int processLocal(boolean initializeServer,
+ PrintStream out,
+ PrintStream err) {
// Perform the initial bootstrap of the Directory Server and process the
// configuration.
DirectoryServer directoryServer = DirectoryServer.getInstance();
@@ -512,4 +536,50 @@
return returnCode;
}
+
+ /**
+ * {@inheritDoc}
+ */
+ public String getTaskId() {
+ // NYI.
+ return null;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void addTaskAttributes(List<RawAttribute> attributes)
+ {
+ //
+ // Required attributes
+ //
+ ArrayList<ByteString> values;
+
+ String baseDN = baseDNString.getValue();
+ values = new ArrayList<ByteString>(1);
+ values.add(ByteString.valueOf(baseDN));
+ attributes.add(new LDAPAttribute(ATTR_REBUILD_BASE_DN, values));
+
+ List<String> indexes = indexList.getValues();
+ values = new ArrayList<ByteString>(indexes.size());
+ for (String s : indexes)
+ {
+ values.add(ByteString.valueOf(s));
+ }
+ attributes.add(new LDAPAttribute(ATTR_REBUILD_INDEX, values));
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public String getTaskObjectclass() {
+ return "ds-task-rebuild";
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public Class getTaskClass() {
+ return RebuildTask.class;
+ }
}
diff --git a/opends/src/server/org/opends/server/tools/status/StatusCli.java b/opends/src/server/org/opends/server/tools/status/StatusCli.java
index bf44d85..68ae613 100644
--- a/opends/src/server/org/opends/server/tools/status/StatusCli.java
+++ b/opends/src/server/org/opends/server/tools/status/StatusCli.java
@@ -575,6 +575,10 @@
status = INFO_SERVER_STOPPING_LABEL.get();
break;
+ case NOT_CONNECTED_TO_REMOTE:
+ status = INFO_SERVER_NOT_CONNECTED_TO_REMOTE_STATUS_LABEL.get();
+ break;
+
case UNKNOWN:
status = INFO_SERVER_UNKNOWN_STATUS_LABEL.get();
break;
--
Gitblit v1.10.0