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 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; } 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; } } 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. */ 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 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 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. 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 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 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 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; } 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 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)); 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); } 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(); 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()); } }); } /** 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()); } } 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; } 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(); 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; } } 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)); } }); } 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)); } }); } 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())); } /** 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())); } /** 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. 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. 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 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 opends/src/guitools/org/opends/guitools/controlpanel/ui/LocalOrRemotePanel.java
New file @@ -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) { } } } } 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); } } } 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())); } } 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() { 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 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())); } } 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 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); } } }); } 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. 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) 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); 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); 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; } } /** 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(); } } 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 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. 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); } 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)) 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 { 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) { 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(); } /** opends/src/guitools/org/opends/guitools/controlpanel/util/RemoteSchemaLoader.java
New file @@ -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; } } 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. */ 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; } /** 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. 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(); 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; } } 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; } } 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;