All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.izforge.izpack.installer.multiunpacker.MultiVolumeInstaller Maven / Gradle / Ivy

There is a newer version: 5.2.3
Show newest version
/*
 * IzPack - Copyright 2001-2008 Julien Ponge, All Rights Reserved.
 *
 * http://izpack.org/ http://izpack.codehaus.org/
 *
 * Copyright 2007 Dennis Reil
 *
 * Licensed 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 com.izforge.izpack.installer.multiunpacker;

import java.awt.HeadlessException;
import java.io.File;
import java.lang.reflect.Method;
import java.util.logging.Level;
import java.util.logging.Logger;

import com.izforge.izpack.installer.bootstrap.Installer;
import com.izforge.izpack.util.SelfModifier;

/**
 * Main class, for starting the installer if it was build to support more than one volume.
 *
 * @author Dennis Reil, 
 * @deprecated see {@link Installer}
 */
@Deprecated
public class MultiVolumeInstaller
{
    private static final Logger logger = Logger.getLogger(MultiVolumeInstaller.class.getName());

    // where is the installer looking for media files
    protected static String mediadirectory;

    /**
     * @param args
     */
    public static void main(String[] args)
    {
        ProgressDialog progressDialog = null;

        try
        {
            progressDialog = new ProgressDialog();
            progressDialog.startProgress();
        }
        catch (HeadlessException ex)
        {
            // this exception is expected if we're running in console or
            // auto installation mode
            logger.warning("Progress will not be shown. No display found.");
        }
        // default is to look in the current directory
        MultiVolumeInstaller.setMediadirectory(new File(".").getParent());
        if ((args.length > 0) && ("-direct".equals(args[0])))
        {
            String[] newargs;
            if (args.length > 1)
            {
                // cut out the direct parameter
                newargs = new String[args.length - 1];
                System.arraycopy(args, 1, newargs, 0, args.length - 1);
            }
            else
            {
                // set arguments to empty string array
                newargs = new String[0];
            }
            MultiVolumeInstaller.install(newargs);
        }
        else
        {
            try
            {
                long maxmem = Runtime.getRuntime().maxMemory() / (1024 * 1024);
                logger.fine("Currently using maximum memory of " + maxmem + "m");
                // just use a static fraction of memory for perm gen size.
                long maxpermgensize = maxmem / 4;

                Class clazz = MultiVolumeInstaller.class;
                Method target = clazz.getMethod("install", new Class[]{String[].class});
                String[] newargs = new String[args.length + 2];
                System.arraycopy(args, 0, newargs, 2, args.length);

                // try to find the directory, where the jar file is located, this class was loaded
                // from
//                newargs[0] = "-Xmx" + maxmem + "m";
//                newargs[1] = "-XX:MaxPermSize=" + maxpermgensize + "m";
                newargs[0] = "-mediadir";
                newargs[1] = SelfModifier.findJarFile(clazz).getParent();
                System.out.println("Setting mediadir: " + newargs[1]);
                MultiVolumeInstaller.setMediadirectory(newargs[1]);
                new SelfModifier(target, maxmem, maxpermgensize).invoke(newargs);

            }
            catch (Exception e)
            {
                logger.log(Level.WARNING, e.getMessage(), e);
            }
        }
        if (progressDialog != null)
        {
            progressDialog.stopProgress();
        }
    }

    public static String getMediadirectory()
    {
        return MultiVolumeInstaller.mediadirectory;
    }

    public static void setMediadirectory(String mediadirectory)
    {
        MultiVolumeInstaller.mediadirectory = mediadirectory;
    }

    public static void install(String[] args)
    {
        if ((args.length >= 2) && ("-mediadir".equals(args[0])))
        {
            // mediadir option given
            MultiVolumeInstaller.setMediadirectory(args[1]);
            if (args.length > 2)
            {
                // cut out this option
                String[] newargs = new String[args.length - 2];
                System.arraycopy(args, 2, newargs, 0, args.length - 2);
                args = newargs;
            }
            else
            {
                // put in an empty string array
                args = new String[0];
            }
        }
        // just call the izpack installer
        Installer.main(args);
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy