From fef8fc7d514743391fd93aae74e2b9db20e59baf Mon Sep 17 00:00:00 2001
From: lutoff <lutoff@localhost>
Date: Wed, 29 Apr 2009 07:38:46 +0000
Subject: [PATCH] Fix for issue #3944 : upgrade tool should support the click-through license Fix for issue #3945 : Need to way to determine if a license had already been accepted

---
 opends/src/server/org/opends/server/tools/InstallDS.java                            |    1 
 opends/src/quicksetup/org/opends/quicksetup/installer/offline/OfflineInstaller.java |    8 +
 opends/src/quicksetup/org/opends/quicksetup/LicenseFile.java                        |  121 +++++++++++++++++++++++------
 opends/src/quicksetup/org/opends/quicksetup/upgrader/Upgrader.java                  |   62 +++++++++++++++
 4 files changed, 164 insertions(+), 28 deletions(-)

diff --git a/opends/src/quicksetup/org/opends/quicksetup/LicenseFile.java b/opends/src/quicksetup/org/opends/quicksetup/LicenseFile.java
index 8aa955d..723819d 100644
--- a/opends/src/quicksetup/org/opends/quicksetup/LicenseFile.java
+++ b/opends/src/quicksetup/org/opends/quicksetup/LicenseFile.java
@@ -38,6 +38,68 @@
  */
 public class LicenseFile {
 
+  /**
+   * Get the directory in which legal files are stored.
+   */
+  private static String getLegalDirectory()
+  {
+    if (Utils.isWebStart())
+    {
+      return File.separatorChar + "Legal";
+    }
+    else
+    {
+      String installRootFromSystem = System.getProperty("INSTALL_ROOT");
+
+      if (installRootFromSystem == null)
+      {
+        installRootFromSystem = System.getenv("INSTALL_ROOT");
+      }
+
+      if (installRootFromSystem == null)
+      {
+        installRootFromSystem = "";
+      }
+
+      return installRootFromSystem + File.separatorChar + "Legal";
+    }
+  }
+
+  /**
+   * Get the directory in which legal files are stored.
+   */
+  private static String getInstanceLegalDirectory()
+  {
+    String instanceLegalDirName;
+    if (Utils.isWebStart())
+    {
+      instanceLegalDirName = File.separatorChar + "Legal";
+    }
+    else
+    {
+      String installDirName = System.getProperty("INSTALL_ROOT");
+
+      if (installDirName == null)
+      {
+        installDirName = System.getenv("INSTALL_ROOT");
+      }
+
+      if (installDirName == null)
+      {
+        installDirName = ".";
+      }
+
+      String instanceDirname = Utils
+          .getInstancePathFromClasspath(installDirName);
+      instanceLegalDirName = instanceDirname + File.separator + "Legal";
+      File instanceLegalDir = new File(instanceLegalDirName);
+      if (!instanceLegalDir.exists())
+      {
+        instanceLegalDir.mkdir();
+      }
+    }
+    return instanceLegalDirName ;
+  }
 
   /**
    * The File object related to the license file.
@@ -54,33 +116,7 @@
    */
   static private String getName()
   {
-    if (Utils.isWebStart())
-    {
-      return
-      File.separatorChar +
-      "Legal" +
-      File.separatorChar +
-      "license_to_accept.txt";
-    }
-    else
-    {
-
-      String installRootFromSystem = System.getProperty("INSTALL_ROOT");
-
-      if (installRootFromSystem == null) {
-        installRootFromSystem = System.getenv("INSTALL_ROOT");
-      }
-
-      if (installRootFromSystem == null) {
-        installRootFromSystem = "";
-      }
-
-      return installRootFromSystem +
-      File.separatorChar +
-      "Legal" +
-      File.separatorChar +
-      "license_to_accept.txt";
-    }
+    return getLegalDirectory() + File.separatorChar + "license_to_accept.txt";
   }
 
   /**
@@ -162,4 +198,35 @@
   {
     approved = p_approved;
   }
+
+  /**
+   * Create a file which indicates that the license has been approved.
+   */
+  static public void createFileLicenseApproved()
+  {
+    if ( getApproval() )
+    {
+      try
+      {
+        new File(getInstanceLegalDirectory() + File.separatorChar
+            + "licenseAccepted").createNewFile();
+      }
+      catch (IOException e)
+      {
+      }
+    }
+  }
+
+  /**
+   * Indicate if the license had already been approved..
+   * @return <CODE>true</CODE> if the license had already been approved
+   * by the user <CODE>false</CODE> otherwise.
+   */
+  static public boolean isAlreadyApproved()
+  {
+    File f = new File(getInstanceLegalDirectory() + File.separatorChar
+        + "licenseAccepted");
+    return f.exists();
+  }
+
 }
diff --git a/opends/src/quicksetup/org/opends/quicksetup/installer/offline/OfflineInstaller.java b/opends/src/quicksetup/org/opends/quicksetup/installer/offline/OfflineInstaller.java
index bb0275d..41a822e 100644
--- a/opends/src/quicksetup/org/opends/quicksetup/installer/offline/OfflineInstaller.java
+++ b/opends/src/quicksetup/org/opends/quicksetup/installer/offline/OfflineInstaller.java
@@ -22,7 +22,7 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Copyright 2006-2009 Sun Microsystems, Inc.
  */
 
 package org.opends.quicksetup.installer.offline;
@@ -40,6 +40,7 @@
 import java.security.KeyStoreException;
 
 import org.opends.quicksetup.ApplicationException;
+import org.opends.quicksetup.LicenseFile;
 import org.opends.quicksetup.ReturnCode;
 import org.opends.quicksetup.ProgressStep;
 import org.opends.quicksetup.Installation;
@@ -102,6 +103,11 @@
 
       checkAbort();
 
+      // create license accepted file
+      LicenseFile.createFileLicenseApproved();
+
+      checkAbort() ;
+
       createData();
 
       checkAbort();
diff --git a/opends/src/quicksetup/org/opends/quicksetup/upgrader/Upgrader.java b/opends/src/quicksetup/org/opends/quicksetup/upgrader/Upgrader.java
index dfa5665..9464040 100644
--- a/opends/src/quicksetup/org/opends/quicksetup/upgrader/Upgrader.java
+++ b/opends/src/quicksetup/org/opends/quicksetup/upgrader/Upgrader.java
@@ -28,6 +28,8 @@
 package org.opends.quicksetup.upgrader;
 
 import org.opends.quicksetup.CliApplication;
+
+import org.opends.quicksetup.LicenseFile;
 import static org.opends.quicksetup.Installation.*;
 import static org.opends.messages.QuickSetupMessages.*;
 
@@ -72,12 +74,14 @@
 import org.opends.server.tools.JavaPropertiesTool;
 
 import java.awt.event.WindowEvent;
+import java.io.BufferedReader;
 import java.io.BufferedWriter;
 import java.io.File;
 import java.io.FileFilter;
 import java.io.FileWriter;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.InputStreamReader;
 import java.net.InetSocketAddress;
 import java.net.MalformedURLException;
 import java.net.Proxy;
@@ -814,6 +818,64 @@
 
       checkAbort();
 
+      // Check license
+      if (!LicenseFile.isAlreadyApproved())
+      {
+        String installRootFromSystem = System.getProperty("INSTALL_ROOT");
+        System.setProperty("INSTALL_ROOT", installRootFromSystem
+            + File.separator + "tmp" + File.separator + "upgrade");
+        if (LicenseFile.exists())
+        {
+          String licenseString = LicenseFile.getText();
+          System.out.println(licenseString);
+          if (getUserData().isInteractive())
+          {
+            // If the user asks for no-prompt. We just display the license text.
+            // User doesn't asks for no-prompt. We just display the license text
+            // and force to accept it.
+            String yes = INFO_LICENSE_CLI_ACCEPT_YES.get().toString();
+            String no = INFO_LICENSE_CLI_ACCEPT_NO.get().toString();
+            System.out.println(INFO_LICENSE_DETAILS_LABEL.get().toString());
+
+            BufferedReader in = new BufferedReader(new InputStreamReader(
+                System.in));
+            while (true)
+            {
+              System.out.print(INFO_LICENSE_CLI_ACCEPT_QUESTION
+                  .get(yes, no, no).toString());
+              try
+              {
+                String response = in.readLine();
+                if ((response == null)
+                    || (response.toLowerCase().equals(no.toLowerCase()))
+                    || (response.length() == 0))
+                {
+                  System.exit(ReturnCode.CANCELLED.getReturnCode());
+                }
+                else if (response.toLowerCase().equals(yes.toLowerCase()))
+                {
+                  // create the file
+                  LicenseFile.setApproval(true);
+                  LicenseFile.createFileLicenseApproved();
+                  break;
+                }
+                else
+                {
+                  System.out.println(INFO_LICENSE_CLI_ACCEPT_INVALID_RESPONSE
+                      .get().toString());
+                }
+              }
+              catch (IOException e)
+              {
+                System.out.println(INFO_LICENSE_CLI_ACCEPT_INVALID_RESPONSE
+                    .get().toString());
+              }
+            }
+          }
+        }
+        System.setProperty("INSTALL_ROOT", installRootFromSystem);
+      }
+
       if (!Utils.isWebStart())
       {
         // The command-line upgrade has not the option of leaving the server
diff --git a/opends/src/server/org/opends/server/tools/InstallDS.java b/opends/src/server/org/opends/server/tools/InstallDS.java
index 287ee96..75cf580 100644
--- a/opends/src/server/org/opends/server/tools/InstallDS.java
+++ b/opends/src/server/org/opends/server/tools/InstallDS.java
@@ -441,6 +441,7 @@
             else
             if (response.toLowerCase().equals(yes.toLowerCase()))
             {
+              LicenseFile.setApproval(true);
               break ;
             }
             else

--
Gitblit v1.10.0