/*
* ConsoleInstall.java
*
* Originally written by Slava Pestov for the jEdit installer project. This work
* has been placed into the public domain. You may use this work in any way and
* for any purpose you wish.
*
* THIS SOFTWARE IS PROVIDED AS-IS WITHOUT WARRANTY OF ANY KIND, NOT EVEN THE
* IMPLIED WARRANTY OF MERCHANTABILITY. THE AUTHOR OF THIS SOFTWARE, ASSUMES
* _NO_ RESPONSIBILITY FOR ANY CONSEQUENCE RESULTING FROM THE USE, MODIFICATION,
* OR REDISTRIBUTION OF THIS SOFTWARE.
*/
package installer;
import java.io.*;
import java.util.Vector;
/*
* Performs text-only installation.
*/
public class ConsoleInstall
{
public ConsoleInstall()
{
installer = new Install();
String appName = installer.getProperty("app.name");
String appVersion = installer.getProperty("app.version");
BufferedReader in = new BufferedReader(new InputStreamReader(
System.in));
System.out.println("*** " + appName + " " + appVersion + " installer");
OperatingSystem os = OperatingSystem.getOperatingSystem();
String installDir = os.getInstallDirectory(appName,appVersion);
System.out.print("Installation directory: [" + installDir + "] ");
System.out.flush();
String _installDir = readLine(in);
if(_installDir.length() != 0)
installDir = _installDir;
else
System.out.println("Will use default");
OperatingSystem.OSTask[] osTasks = os.getOSTasks(installer);
for(int i = 0; i < osTasks.length; i++)
{
OperatingSystem.OSTask osTask = osTasks[i];
String label = osTask.getLabel();
// label == null means no configurable options
if(label != null)
{
String dir = osTask.getDirectory();
System.out.print(label + " [" + dir + "] ");
System.out.flush();
dir = readLine(in);
osTask.setEnabled(true);
if(dir.length() != 0)
{
if(dir.equals("off"))
osTask.setEnabled(false);
else
osTask.setDirectory(dir);
}
else
System.out.println("will use default");
}
}
int compCount = installer.getIntegerProperty("comp.count");
Vector components = new Vector(compCount);
System.out.println("*** Program components to install");
for(int i = 0; i < compCount; i++)
{
String fileset = installer.getProperty("comp." + i + ".fileset");
String osDep = installer.getProperty("comp." + i + ".os");
if(osDep != null)
{
if(!os.getClass().getName().endsWith(osDep))
{
continue;
}
}
System.out.print("Install "
+ installer.getProperty("comp." + i + ".name")
+ " ("
+ installer.getProperty("comp." + i + ".disk-size")
+ "Kb) [Y/n]? ");
String line = readLine(in);
if(line.length() == 0 || line.charAt(0) == 'y'
|| line.charAt(0) == 'Y')
components.addElement(fileset);
}
System.out.println("*** Starting installation...");
ConsoleProgress progress = new ConsoleProgress();
InstallThread thread = new InstallThread(
installer,progress,installDir,osTasks,
0 /* XXX */,components);
thread.start();
}
// private members
private Install installer;
private String readLine(BufferedReader in)
{
try
{
String line = in.readLine();
if(line == null)
{
System.err.println("\nEOF in input!");
System.exit(1);
// can't happen
throw new InternalError();
}
return line;
}
catch(IOException io)
{
System.err.println("\nI/O error: " + io);
System.exit(1);
// can't happen
throw new InternalError();
}
}
}