From 9b5052233376c10b3623782e473cfbbf7f8f17a8 Mon Sep 17 00:00:00 2001
From: kenneth_suter <kenneth_suter@localhost>
Date: Fri, 11 May 2007 13:26:06 +0000
Subject: [PATCH] - Corrected prefetching of build ID information which was broken and consolidated in the Installation class.
---
opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/Upgrader.java | 50 ++++++---
opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/ui/ChooseVersionPanel.java | 101 ++++++++++++++++---
opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/ui/UpgraderReviewPanel.java | 34 +-----
opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/Utils.java | 32 ++++++
opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/resources/Resources.properties | 2
opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/Installation.java | 36 ++++++
6 files changed, 190 insertions(+), 65 deletions(-)
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/Installation.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/Installation.java
index b78276a..88b89c0 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/Installation.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/Installation.java
@@ -29,6 +29,11 @@
import java.io.*;
import java.util.*;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.concurrent.FutureTask;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutionException;
import org.opends.quicksetup.util.Utils;
@@ -236,6 +241,9 @@
}
}
+ static private final Logger LOG =
+ Logger.getLogger(Installation.class.getName());
+
private File rootDirectory;
private Status status;
@@ -284,8 +292,19 @@
// Hold off on doing validation of rootDirectory since
// some applications (like the Installer) create an Installation
// before the actual bits have been laid down on the filesyste.
-
this.rootDirectory = rootDirectory;
+
+ // Obtaining build information is a fairly time consuming operation.
+ // Try to get a head start if possible.
+ if (isValid()) {
+ try {
+ BuildInformation bi = getBuildInformation();
+ LOG.log(Level.INFO, "build info for " + rootDirectory.getName() +
+ ": " + bi);
+ } catch (ApplicationException e) {
+ LOG.log(Level.INFO, "error determining build information", e);
+ }
+ }
}
/**
@@ -682,7 +701,20 @@
*/
public BuildInformation getBuildInformation() throws ApplicationException {
if (buildInformation == null) {
- buildInformation = BuildInformation.create(this);
+ FutureTask<BuildInformation> ft = new FutureTask<BuildInformation>(
+ new Callable<BuildInformation>() {
+ public BuildInformation call() throws ApplicationException {
+ return BuildInformation.create(Installation.this);
+ }
+ });
+ new Thread(ft).start();
+ try {
+ buildInformation = ft.get();
+ } catch (InterruptedException e) {
+ LOG.log(Level.INFO, "interrupted trying to get build information", e);
+ } catch (ExecutionException e) {
+ throw (ApplicationException)e.getCause();
+ }
}
return buildInformation;
}
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/resources/Resources.properties b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/resources/Resources.properties
index 1d8a199..bb77fe0 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/resources/Resources.properties
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/resources/Resources.properties
@@ -1016,7 +1016,7 @@
are correct.
upgrade-review-panel-server-label=Server to Upgrade:
upgrade-review-panel-server-tooltip=File system location of the build that will be upgraded
-upgrade-review-panel-old-version-label=Old Version:
+upgrade-review-panel-old-version-label=Current Version:
upgrade-review-panel-old-version-tooltip=The current version of the server
upgrade-review-panel-new-version-label=New Version:
upgrade-review-panel-new-version-tooltip=The target version of the server
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/Upgrader.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/Upgrader.java
index d232f54..75c1576 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/Upgrader.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/Upgrader.java
@@ -186,6 +186,14 @@
static private final Logger LOG = Logger.getLogger(Upgrader.class.getName());
/**
+ * Passed in from the shell script if the root is known at the time
+ * of invocation.
+ */
+ static private final String SYS_PROP_INSTALL_ROOT =
+ "org.opends.quicksetup.upgrader.Root";
+
+
+ /**
* If set to true, an error is introduced during the
* upgrade process for testing.
*/
@@ -265,6 +273,8 @@
* Creates a default instance.
*/
public Upgrader() {
+
+ // Initialize the logs if necessary
try {
if (!QuickSetupLog.isInitialized())
QuickSetupLog.initLogFileHandler(
@@ -274,9 +284,18 @@
} catch (IOException e) {
System.err.println("Failed to initialize log");
}
+
+ // Get started on downloading the web start jars
if (Utils.isWebStart()) {
initLoader();
}
+
+ final String instanceRootFromSystem =
+ System.getProperty(SYS_PROP_INSTALL_ROOT);
+ if (instanceRootFromSystem != null) {
+ setInstallation(new Installation(instanceRootFromSystem));
+ }
+
}
/**
@@ -587,22 +606,20 @@
File serverLocation = new File(serverLocationString);
Installation.validateRootDirectory(serverLocation);
- // If we get here the value is acceptable
- final Installation installation = new Installation(serverLocation);
- setInstallation(installation);
+ // If we get here the value is acceptable and not null
- // The build ID is needed on the review panel and it is
- // fairly time consuming to get. So prime this cached
- // value in a separate thread.
- new Thread(new Runnable() {
- public void run() {
- try {
- installation.getBuildInformation().getBuildId();
- } catch (ApplicationException e) {
- LOG.log(Level.INFO, "error", e);
- }
- }
- }).start();
+ Installation currentInstallation = getInstallation();
+ if (currentInstallation == null ||
+ !serverLocation.equals(getInstallation().getRootDirectory())) {
+ LOG.log(Level.INFO,
+ "user changed server root from " +
+ (currentInstallation == null ?
+ "'null'" :
+ currentInstallation.getRootDirectory()) +
+ " to " + serverLocation);
+ Installation installation = new Installation(serverLocation);
+ setInstallation(installation);
+ }
uud.setServerLocation(serverLocationString);
@@ -1640,8 +1657,7 @@
*/
public UserData createUserData() {
UpgradeUserData uud = new UpgradeUserData();
- String instanceRootFromSystem =
- System.getProperty("org.opends.quicksetup.upgrader.Root");
+ String instanceRootFromSystem = System.getProperty(SYS_PROP_INSTALL_ROOT);
if (instanceRootFromSystem != null) {
uud.setServerLocation(instanceRootFromSystem);
}
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/ui/ChooseVersionPanel.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/ui/ChooseVersionPanel.java
index b122c00..4a5c210 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/ui/ChooseVersionPanel.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/ui/ChooseVersionPanel.java
@@ -34,11 +34,12 @@
import org.opends.quicksetup.upgrader.RemoteBuildManager;
import org.opends.quicksetup.upgrader.Upgrader;
import org.opends.quicksetup.util.BackgroundTask;
+import org.opends.quicksetup.util.Utils;
import javax.swing.*;
import java.awt.*;
-import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
@@ -55,6 +56,7 @@
static private final long serialVersionUID = -6941309163077121917L;
+ private JLabel lblCurrentVersion = null;
private JRadioButton rbRemote = null;
private JRadioButton rbLocal = null;
private ButtonGroup grpRemoteLocal = null;
@@ -78,8 +80,7 @@
/**
* {@inheritDoc}
*/
- public boolean blockingBeginDisplay()
- {
+ public boolean blockingBeginDisplay() {
return true;
}
@@ -88,6 +89,7 @@
*/
public void beginDisplay(UserData data) {
super.beginDisplay(data);
+
if (!loadBuildListAttempted) {
// Begin display is called outside the UI
@@ -116,6 +118,10 @@
t.setRepeats(false);
t.start();
}
+
+ lblCurrentVersion.setText(
+ Utils.getBuildString(getApplication().getInstallation()));
+
}
/**
@@ -144,6 +150,18 @@
JPanel p = UIFactory.makeJPanel();
+ LabelFieldDescriptor currentVersionDescriptor = new LabelFieldDescriptor(
+ getMsg("upgrade-review-panel-old-version-label"),
+ getMsg("upgrade-review-panel-old-version-tooltip"),
+ LabelFieldDescriptor.FieldType.READ_ONLY,
+ LabelFieldDescriptor.LabelType.PRIMARY,
+ 0
+ );
+
+ lblCurrentVersion = UIFactory.makeJLabel(
+ UIFactory.IconType.NO_ICON,
+ "", UIFactory.TextStyle.SECONDARY_FIELD_VALID);
+
rbRemote = UIFactory.makeJRadioButton(
getMsg("upgrade-choose-version-remote-label"),
getMsg("upgrade-choose-version-remote-tooltip"),
@@ -197,50 +215,72 @@
p.setLayout(new GridBagLayout());
// p.setBorder(BorderFactory.createLineBorder(Color.RED));
GridBagConstraints gbc = new GridBagConstraints();
+
gbc.gridx = 0;
gbc.gridy = 0;
+ gbc.anchor = GridBagConstraints.FIRST_LINE_START;
+ gbc.insets.left = UIFactory.LEFT_INSET_PRIMARY_FIELD;
+ gbc.insets.top = UIFactory.TOP_INSET_PRIMARY_FIELD;
+ p.add(UIFactory.makeJLabel(currentVersionDescriptor), gbc);
+
+ gbc.gridx = 1;
gbc.gridwidth = GridBagConstraints.REMAINDER;
- gbc.insets = UIFactory.getEmptyInsets();
gbc.weightx = 1.0;
gbc.fill = GridBagConstraints.HORIZONTAL;
- gbc.insets = UIFactory.getEmptyInsets();
- gbc.insets.top = 15; // non-standard but looks better
+ gbc.anchor = GridBagConstraints.FIRST_LINE_START;
+ gbc.insets.left = UIFactory.LEFT_INSET_PRIMARY_FIELD;
+ gbc.insets.top = UIFactory.TOP_INSET_PRIMARY_FIELD;
+ p.add(lblCurrentVersion, gbc);
+
+ gbc.gridx = 0;
+ gbc.gridy++;
+ gbc.gridwidth = GridBagConstraints.REMAINDER;
+ gbc.weightx = 1.0;
+ gbc.fill = GridBagConstraints.HORIZONTAL;
+ gbc.insets.top = UIFactory.TOP_INSET_RADIOBUTTON + 15;
+ gbc.insets.left = UIFactory.LEFT_INSET_PRIMARY_FIELD;
gbc.anchor = GridBagConstraints.FIRST_LINE_START;
p.add(rbRemote, gbc);
- gbc.gridy = 1;
- gbc.gridwidth = 1;
- gbc.insets = UIFactory.getEmptyInsets();
+ gbc.gridy++;
+ gbc.gridwidth = 2;
gbc.insets.top = UIFactory.TOP_INSET_RADIO_SUBORDINATE;
- gbc.insets.left = UIFactory.LEFT_INSET_RADIO_SUBORDINATE;
+ gbc.insets.left = UIFactory.LEFT_INSET_RADIO_SUBORDINATE +
+ UIFactory.LEFT_INSET_PRIMARY_FIELD;
gbc.anchor = GridBagConstraints.LINE_START;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.weightx = 2;
p.add(cboBuild, gbc);
- gbc.gridy = 1;
gbc.gridx = 1;
gbc.weightx = 1.5;
- gbc.anchor = GridBagConstraints.CENTER;
+ gbc.anchor = GridBagConstraints.LINE_START;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.insets = UIFactory.getEmptyInsets();
JPanel fill = UIFactory.makeJPanel();
// fill.setBorder(BorderFactory.createLineBorder(Color.BLUE));
p.add(fill, gbc);
- gbc.gridy = 2;
+ gbc.gridy++;
gbc.gridx = 0;
- gbc.insets = UIFactory.getEmptyInsets();
- gbc.insets.top = 15; // UIFactory.TOP_INSET_RADIOBUTTON;
+ gbc.gridwidth = GridBagConstraints.REMAINDER;
+ gbc.fill = GridBagConstraints.HORIZONTAL;
+ gbc.insets.top = UIFactory.TOP_INSET_PRIMARY_FIELD;
+ gbc.insets.left = UIFactory.LEFT_INSET_PRIMARY_FIELD;
p.add(rbLocal, gbc);
- gbc.gridy = 3;
+ gbc.gridy++;
gbc.insets = UIFactory.getEmptyInsets();
gbc.insets.top = UIFactory.TOP_INSET_RADIO_SUBORDINATE;
- gbc.insets.left = UIFactory.LEFT_INSET_RADIO_SUBORDINATE;
+ gbc.insets.left = UIFactory.LEFT_INSET_RADIO_SUBORDINATE +
+ UIFactory.LEFT_INSET_PRIMARY_FIELD;
+ gbc.gridwidth = GridBagConstraints.REMAINDER;
+ gbc.weightx = 2;
+ gbc.fill = GridBagConstraints.BOTH;
+ // pnlBrowse.setBorder(BorderFactory.createLineBorder(Color.BLUE));
p.add(pnlBrowse, gbc);
- gbc.gridy = 4;
+ gbc.gridy++;
gbc.weighty = 1.0;
gbc.weightx = 1.0;
gbc.fill = GridBagConstraints.BOTH;
@@ -473,4 +513,29 @@
tfFile.setEnabled(rbLocal.isSelected());
butBrowse.setEnabled((rbLocal.isSelected()));
}
+
+// public static void main(String[] args) {
+// final UserData ud = new UpgradeUserData();
+// ud.setServerLocation("XXX/XXXXX/XX/XXXXXXXXXXXX/XXXX");
+// Upgrader app = new Upgrader();
+// app.setUserData(ud);
+// final ChooseVersionPanel p = new ChooseVersionPanel(app);
+// p.initialize();
+// JFrame frame = new JFrame();
+// frame.getContentPane().add(p);
+// frame.addComponentListener(new ComponentAdapter() {
+// public void componentHidden(ComponentEvent componentEvent) {
+// System.exit(0);
+// }
+// });
+// frame.pack();
+// frame.setVisible(true);
+// new Thread(new Runnable() {
+// public void run() {
+// p.beginDisplay(ud);
+// }
+// }).start();
+//
+// }
+
}
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/ui/UpgraderReviewPanel.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/ui/UpgraderReviewPanel.java
index c3e356c..439fdd1 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/ui/UpgraderReviewPanel.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/ui/UpgraderReviewPanel.java
@@ -27,20 +27,18 @@
package org.opends.quicksetup.upgrader.ui;
+import org.opends.quicksetup.UserData;
+import org.opends.quicksetup.ui.FieldName;
+import org.opends.quicksetup.ui.LabelFieldDescriptor;
import org.opends.quicksetup.ui.ReviewPanel;
import org.opends.quicksetup.ui.UIFactory;
-import org.opends.quicksetup.ui.LabelFieldDescriptor;
-import org.opends.quicksetup.ui.FieldName;
-import org.opends.quicksetup.upgrader.Upgrader;
-import org.opends.quicksetup.upgrader.UpgradeUserData;
import org.opends.quicksetup.upgrader.Build;
-import org.opends.quicksetup.ApplicationException;
-import org.opends.quicksetup.UserData;
-import org.opends.quicksetup.BuildInformation;
+import org.opends.quicksetup.upgrader.UpgradeUserData;
+import org.opends.quicksetup.upgrader.Upgrader;
+import org.opends.quicksetup.util.Utils;
import javax.swing.*;
import java.awt.*;
-import java.util.logging.Level;
import java.util.logging.Logger;
/**
@@ -73,9 +71,8 @@
public void beginDisplay(UserData data) {
tcServerLocation.setText(getServerToUpgrade());
- // Unfortunately these string are different. The
- // old build string is the build ID (14 digit number)
- // and the new build is the build display name that
+ // Unfortunately these string are different.
+ // The new build is the build display name that
// appears in the available builds information page.
// It is currently not feasible to correlate these.
tcOldBuild.setText(getOldBuildString());
@@ -203,20 +200,7 @@
}
private String getOldBuildString() {
- String oldVersion = null;
- try {
- BuildInformation bi = getApplication().getInstallation().
- getBuildInformation();
- if (bi != null) {
- oldVersion = bi.toString();
- }
- } catch (ApplicationException e) {
- LOG.log(Level.INFO, "error", e);
- }
- if (oldVersion == null) {
- oldVersion = getMsg("upgrade-build-id-unknown");
- }
- return oldVersion;
+ return Utils.getBuildString(getApplication().getInstallation());
}
/**
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/Utils.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/Utils.java
index 2f35537..8fb9171 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/Utils.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/Utils.java
@@ -40,6 +40,8 @@
import java.io.RandomAccessFile;
import java.net.ConnectException;
import java.util.*;
+import java.util.logging.Level;
+import java.util.logging.Logger;
import javax.naming.CommunicationException;
import javax.naming.Context;
@@ -50,8 +52,7 @@
import javax.swing.JFrame;
import javax.swing.JOptionPane;
-import org.opends.quicksetup.CurrentInstallStatus;
-import org.opends.quicksetup.Installation;
+import org.opends.quicksetup.*;
import org.opends.quicksetup.webstart.JnlpProperties;
import org.opends.quicksetup.i18n.ResourceProvider;
import org.opends.server.util.SetupUtils;
@@ -63,6 +64,9 @@
*/
public class Utils
{
+ private static final Logger LOG =
+ Logger.getLogger(Utils.class.getName());
+
private static final int DEFAULT_LDAP_CONNECT_TIMEOUT = 3000;
private static final int BUFFER_SIZE = 1024;
@@ -1337,4 +1341,28 @@
return perm;
}
+ /**
+ * Returns a string representing the installation's current build information
+ * useful for presenting to the user. If the build string could not be
+ * determined for any reason a localized String 'unknown' is returned.
+ * @param installation whose build information is sought
+ * @return String representing the application's build.
+ */
+ static public String getBuildString(Installation installation) {
+ String b = null;
+ try {
+ BuildInformation bi = installation.getBuildInformation();
+ if (bi != null) {
+ b = bi.toString();
+ }
+ } catch (ApplicationException e) {
+ LOG.log(Level.INFO, "error trying to determine current build string", e);
+ }
+ if (b == null) {
+ b = ResourceProvider.getInstance().
+ getMsg("upgrade-build-id-unknown");
+ }
+ return b;
+ }
+
}
--
Gitblit v1.10.0