| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| |
| package org.openoffice.setup.Controller; |
| |
| import java.awt.Dimension; |
| import org.openoffice.setup.InstallData; |
| import org.openoffice.setup.Installer.Installer; |
| import org.openoffice.setup.Installer.InstallerFactory; |
| import org.openoffice.setup.PanelController; |
| import org.openoffice.setup.Panel.ChooseDirectory; |
| import org.openoffice.setup.ResourceManager; |
| import org.openoffice.setup.SetupData.SetupDataProvider; |
| import org.openoffice.setup.Util.InstallChangeCtrl; |
| import org.openoffice.setup.Util.LogManager; |
| import org.openoffice.setup.Util.SystemManager; |
| import java.io.File; |
| import java.util.Vector; |
| import javax.swing.JDialog; |
| import javax.swing.JOptionPane; |
| import org.openoffice.setup.Dialogs.DatabaseDialog; |
| import org.openoffice.setup.SetupData.PackageDescription; |
| import org.openoffice.setup.Util.Controller; |
| import org.openoffice.setup.Util.Dumper; |
| import org.openoffice.setup.Util.Informer; |
| import org.openoffice.setup.Util.ModuleCtrl; |
| import org.openoffice.setup.Util.PackageCollector; |
| |
| public class ChooseDirectoryCtrl extends PanelController { |
| |
| private String helpFile; |
| |
| public ChooseDirectoryCtrl() { |
| super("ChooseDirectory", new ChooseDirectory()); |
| helpFile = "String_Helpfile_ChooseDirectory"; |
| } |
| |
| public String getNext() { |
| |
| InstallData data = InstallData.getInstance(); |
| |
| if ( data.olderVersionExists() ) { |
| return new String("InstallationImminent"); |
| } else if ( data.sameVersionExists() ) { |
| return new String("ChooseComponents"); |
| } else { |
| return new String("ChooseInstallationType"); |
| } |
| } |
| |
| public String getPrevious() { |
| InstallData data = InstallData.getInstance(); |
| |
| if ( data.hideEula() ) { |
| return new String("Prologue"); |
| } else { |
| return new String("AcceptLicense"); |
| } |
| } |
| |
| public final String getHelpFileName () { |
| return this.helpFile; |
| } |
| |
| private String removeEndingDelimiter(String s) { |
| s.trim(); |
| if (( s.endsWith("/")) || ( s.endsWith("\\"))) { |
| // removing the last character |
| s = s.substring(0, s.length() - 1); |
| } |
| // mask spaces |
| // s.replaceAll(" ", "\\ "); |
| |
| return s; |
| } |
| |
| public void beforeShow() { |
| ChooseDirectory panel = (ChooseDirectory)getPanel(); |
| InstallData data = InstallData.getInstance(); |
| |
| if ( data.getInstallDir() == null ) { |
| String installDir = data.getDefaultDir(); |
| |
| if ( data.isUserInstallation() ) { |
| // System.getenv only supported in Java 1.5, property set in shell script |
| // if (( System.getenv("HOME") != null ) && ( ! System.getenv("HOME").equals(""))) { |
| // rootDir = System.getenv("HOME"); |
| // } |
| if (( System.getProperty("HOME") != null ) && ( ! System.getProperty("HOME").equals("") )) { |
| installDir = System.getProperty("user.home"); |
| } |
| } |
| data.setInstallDir(installDir); |
| } |
| |
| panel.setDirectory(data.getInstallDir()); |
| } |
| |
| public boolean afterShow(boolean nextButtonPressed) { |
| boolean repeatDialog = false; |
| ChooseDirectory panel = (ChooseDirectory)getPanel(); |
| String dir = panel.getDirectory(); |
| dir = removeEndingDelimiter(dir); |
| InstallData data = InstallData.getInstance(); |
| data.setInstallDir(dir); |
| |
| File installDefaultDir = new File(dir, data.getDefaultDir()); |
| data.setInstallDefaultDir(installDefaultDir.getPath()); |
| |
| SetupDataProvider.setNewMacro("DIR", installDefaultDir.getPath()); // important for string replacement |
| // SetupDataProvider.dumpMacros(); |
| |
| // Check existence of directory. Try to create, if it does not exist. |
| // If successufully created, calculate available disc space |
| |
| if ( nextButtonPressed ) { |
| |
| // If the directory exists, is has to be tested, whether the user has write access |
| |
| if ( SystemManager.exists_directory(dir) ) { |
| if ( ! Controller.createdSubDirectory(dir) ) { |
| repeatDialog= true; |
| } |
| } |
| |
| // If the directory does not exist, is has to be tested, whether the user can create it |
| |
| if ( ! SystemManager.exists_directory(dir)) { |
| String title = ResourceManager.getString("String_ChooseDirectory4_Question_Title"); |
| String message = null; |
| message = ResourceManager.getString("String_ChooseDirectory5_Question_Message"); |
| |
| int returnValue = JOptionPane.showConfirmDialog(null, message, title, JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); |
| |
| if ( returnValue == JOptionPane.YES_OPTION ) { |
| if ( ! Controller.createdDirectory(dir) ) { |
| repeatDialog= true; |
| } |
| } |
| else if (returnValue == JOptionPane.NO_OPTION) { |
| repeatDialog = true; |
| } |
| } |
| |
| // Additional tasks, if the directory is okay |
| |
| if ( ! repeatDialog ) { |
| // Calculate available disc space |
| int discSpace = SystemManager.calculateDiscSpace(dir); |
| data.setAvailableDiscSpace(discSpace); |
| |
| Installer installer = InstallerFactory.getInstance(); |
| |
| // Is this a new directory, or one that was already set before. |
| // In this case, the database does not need to be evaluated again. |
| // -> Testing, whether the database path has changed. This can |
| // only happen in user installations. |
| if ( data.isUserInstallation() ) { |
| String oldDatabasePath = data.getDatabasePath(); |
| // Setting the database path |
| installer.defineDatabasePath(); |
| |
| if (( oldDatabasePath == null ) || ( ! oldDatabasePath.equals(data.getDatabasePath()))) { |
| data.setDatabaseAnalyzed(false); |
| data.setDatabaseQueried(false); |
| } else { |
| data.setDatabaseAnalyzed(true); |
| } |
| } |
| |
| // In installations with user privileges, now it can be controlled, |
| // if there are products installed in the selected directory. |
| // Therefore the directory selection dialog has to be shown before. |
| // In installations with root privileges, this can only be checked, |
| // before the destination directory can be set, because it is fix. |
| if ( data.isUserInstallation() ) { |
| LogManager.setCommandsHeaderLine("Checking change installation"); |
| InstallChangeCtrl.checkInstallChange(data); |
| // InstallChangeCtrl.checkInstallChange(data, panel); |
| } |
| |
| // At this point it is clear, whether the update-Package is installed or not. |
| // If it is installed, it is also clear, in which version it is installed. |
| // Therefore the following dialog is also defined. |
| |
| if ( data.newerVersionExists() ) { |
| // This can happen only in installation with user privileges. |
| // Installations with root privileges have cancelled installation |
| // already at first dialog. |
| // Possibility to select a new directory, in which no |
| // newer product exists |
| String message = ResourceManager.getString("String_Newer_Version_Installed_Found") + "\n" + data.getInstallDir() + "\n" + |
| ResourceManager.getString("String_Newer_Version_Database") + ": " + data.getDatabasePath() + "\n" + |
| ResourceManager.getString("String_Newer_Version_Tip"); |
| String title = ResourceManager.getString("String_Error"); |
| Informer.showErrorMessage(message, title); |
| |
| repeatDialog = true; |
| } |
| |
| // If an older version is found, and the update is forbidden, the user |
| // can select another installation directory. |
| |
| if ( data.olderVersionExists() && data.dontUpdate() ) { |
| // This can happen only in installation with user privileges. |
| // Installations with root privileges have cancelled installation |
| // already at first dialog (InstallChangeCtrl.java). |
| // Possibility to select a new directory, in which no |
| // older product exists |
| String message = ResourceManager.getString("String_Older_Version_Installed_Found") + "\n" + data.getInstallDir() + "\n" + |
| ResourceManager.getString("String_Newer_Version_Database") + ": " + data.getDatabasePath() + "\n" + |
| ResourceManager.getString("String_Newer_Version_Tip"); |
| String title = ResourceManager.getString("String_Error"); |
| Informer.showErrorMessage(message, title); |
| |
| repeatDialog = true; |
| } |
| |
| if ( ! repeatDialog ) { |
| |
| if ( ! data.databaseAnalyzed()) { |
| ModuleCtrl.defaultDatabaseAnalysis(data); |
| data.setDatabaseAnalyzed(true); |
| } |
| } |
| } |
| } |
| |
| return repeatDialog; |
| } |
| |
| } |