com.izforge.izpack.util.os.Shortcut Maven / Gradle / Ivy
The newest version!
/*
* IzPack - Copyright 2001-2008 Julien Ponge, All Rights Reserved.
*
* http://izpack.org/
* http://izpack.codehaus.org/
*
* Copyright 2002 Elmar Grom
*
* 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.util.os;
import com.izforge.izpack.installer.data.UninstallData;
import java.io.UnsupportedEncodingException;
import java.util.List;
/*---------------------------------------------------------------------------*/
/**
* This class represents a shortcut in a operating system independent way. OS specific subclasses
* are used to implement the necessary mapping from this generic API to the classes that reflect the
* system dependent AIP.
*
* @author Elmar Grom
* @version 0.0.1 / 3/4/02
* @see com.izforge.izpack.util.TargetFactory
*/
public abstract class Shortcut
{
// ------------------------------------------------------------------------
// Constant Definitions
// ------------------------------------------------------------------------
/**
* APPLICATIONS = 1
*/
public static final int APPLICATIONS = 1;
/**
* START_MENU = 2
*/
public static final int START_MENU = 2;
/**
* DESKTOP = 3
*/
public static final int DESKTOP = 3;
/**
* START_UP = 4
*/
public static final int START_UP = 4;
/**
* HIDE = 0 (Hide the window when starting.)
*/
public static final int HIDE = 0;
/**
* NORMAL = 1 Show the window 'normal' when starting. Usually restores the window properties at
* the last shut-down.
*/
public static final int NORMAL = 1;
/**
* MINIMIZED = 2
*/
public static final int MINIMIZED = 2;
/**
* MAXIMIZED = 3 (Show the window maximized when starting.)
*/
public static final int MAXIMIZED = 3;
/**
* CURRENT_USER = 1 (identifies the user type as the current user)
*/
public static final int CURRENT_USER = 1;
/**
* ALL_USERS = 2 (identifies the user type as valid for all users)
*/
public static final int ALL_USERS = 2;
/**
* indicates that this shortcut should be created for all users or only me *
*/
private Boolean createForAll;
/**
* internal field UninstallData uninstaller
*/
protected UninstallData uninstaller;
/*--------------------------------------------------------------------------*/
/**
* This method initializes the object. It is used as a replacement for the contructor because of
* the way it is instantiated through the TargetFactory
.
*
* @param type the type or classification of the program group in which the link should exist.
* @param name the name of the shortcut.
*/
public abstract void initialize(int type, String name) throws Exception;
/*--------------------------------------------------------------------------*/
/**
* Returns the base path of the shortcut depending on type. The base path is the directory that
* the short cut, (or its program group) will be created in. For instance, on Windows NT, a
* shortcut with user-type ALL_USERS, and link-type DESKTOP might have the base path
* "C:\Program Files\All Users\Desktop"
*
* @see #setLinkType(int)
* @see #setUserType(int)
*/
public String getBasePath() throws Exception
{
return ("");
}
/*--------------------------------------------------------------------------*/
/**
* Returns a list of currently existing program groups, based on the requested type. For example
* if the type is APPLICATIONS
then all the names of the program groups in the
* Start Menu\Programs menu would be returned.
*
* @param userType the type of user for the program group set.
* @return a Vector
of String
objects that represent the names of the
* existing program groups. It is theoretically possible that this list is empty.
* @see #APPLICATIONS
* @see #START_MENU
*/
public abstract List getProgramGroups(int userType);
/*--------------------------------------------------------------------------*/
/**
* Subclass implementations return the fully qualified file name under which the link is saved
* on disk. Note: this method returns valid results only if the instance was created from
* a file on disk or after a successful save operation. An instance of this class returns an
* empty string.
*
* @return an empty String
*/
public abstract String getFileName();
/*--------------------------------------------------------------------------*/
/**
* Returns true
if the target OS supports current user and all users.
*
* @return true
if the target OS supports current and all users.
*/
public abstract boolean multipleUsers();
/*--------------------------------------------------------------------------*/
/**
* Determines if a specific instance of this class supports the creation of shortcuts. The use
* of this method might seem odd, since one would not implement a flavor of this class that does
* not actually support the creation of shortcuts. In other words all flavors will in all
* probability return true. The only version that can be expected to return false is this class
* itself, since it has no actual implementation for shortcut creation. This is left to OS
* specific flavors. If the installer is launched on a unsupported OS there will be no
* appropriate flavor of this class, which will cause this class itself to be instantiated. The
* client code can now determine by calling this method if the active OS is supported and take
* appropriate action.
*
* @return true
if the creation of shortcuts is supported, false
if
* this is not supported.
*/
public abstract boolean supported();
/*--------------------------------------------------------------------------*/
/**
* Sets the command line arguments that will be passed to the target when the link is activated.
*
* @param arguments the command line arguments
*/
public abstract void setArguments(String arguments);
/*--------------------------------------------------------------------------*/
/**
* Sets the description string that is used to identify the link in a menu or on the desktop.
*
* @param description the descriptiojn string
*/
public abstract void setDescription(String description);
/*--------------------------------------------------------------------------*/
/**
* Sets the path of the shortcut icon that will be shown on the desktop.
*
* @param path a fully qualified file name of a file that contains the icon.
* @param index the index of the specific icon to use in the file. If there is only one icon in
* the file, use an index of 0.
*/
public abstract void setIconLocation(String path, int index);
/*--------------------------------------------------------------------------*/
/**
* Returns the path of the shortcut icon that will be shown on the desktop.
*
* @return icon path
*/
public abstract String getIconLocation();
/*--------------------------------------------------------------------------*/
/**
* Sets the name of the program group this ShellLinbk should be placed in.
*
* @param groupName the name of the program group
*/
public abstract void setProgramGroup(String groupName);
/*--------------------------------------------------------------------------*/
/**
* Sets the show command that is passed to the target application when the link is activated.
* The show command determines if the the window will be restored to the previous size,
* minimized, maximized or visible at all.
*
* Note:
* Using HIDE
will cause the target window not to show at all. There is not even a
* button on the taskbar. This is a very useful setting when batch files are used to launch a
* Java application as it will then appear to run just like any native Windows application.
*
* @param show the show command. Valid settings are:
*
* - {@link com.izforge.izpack.util.os.Shortcut#HIDE}
*
- {@link com.izforge.izpack.util.os.Shortcut#NORMAL}
*
- {@link com.izforge.izpack.util.os.Shortcut#MINIMIZED}
*
- {@link com.izforge.izpack.util.os.Shortcut#MAXIMIZED}
*
* @see #getShowCommand
*/
public abstract void setShowCommand(int show);
/*
* retrieves showCommand from the OS. Translates it into Shortcut.XXX terms.
*/
public int getShowCommand()
{
return Shortcut.NORMAL;
}
/*--------------------------------------------------------------------------*/
/**
* Sets the absolute path to the shortcut target.
*
* @param path the fully qualified file name of the target
*/
public abstract void setTargetPath(String path);
/*--------------------------------------------------------------------------*/
/**
* Sets the working directory for the link target.
*
* @param dir the working directory
*/
public abstract void setWorkingDirectory(String dir);
/*--------------------------------------------------------------------------*/
/**
* Gets the working directory for the link target.
*
* @return the working directory.
*/
public String getWorkingDirectory()
{
return "";
}
/*--------------------------------------------------------------------------*/
/**
* Sets the name shown in a menu or on the desktop for the link.
*
* @param name The name that the link should display on a menu or on the desktop. Do not include
* a file extension.
*/
public abstract void setLinkName(String name);
/*--------------------------------------------------------------------------*/
/**
* Gets the type of link types are:
*
* - {@link com.izforge.izpack.util.os.Shortcut#DESKTOP}
*
- {@link com.izforge.izpack.util.os.Shortcut#APPLICATIONS}
*
- {@link com.izforge.izpack.util.os.Shortcut#START_MENU}
*
- {@link com.izforge.izpack.util.os.Shortcut#START_UP}
*
*/
public abstract int getLinkType();
/*--------------------------------------------------------------------------*/
/**
* Sets the type of link
*
* @param type The type of link desired. The following values can be set:
*
* - {@link com.izforge.izpack.util.os.Shortcut#DESKTOP}
*
- {@link com.izforge.izpack.util.os.Shortcut#APPLICATIONS}
*
- {@link com.izforge.izpack.util.os.Shortcut#START_MENU}
*
- {@link com.izforge.izpack.util.os.Shortcut#START_UP}
*
* @throws IllegalArgumentException if an an invalid type is passed
* @throws UnsupportedEncodingException
*/
public abstract void setLinkType(int type)
throws IllegalArgumentException, UnsupportedEncodingException;
/*--------------------------------------------------------------------------*/
/**
* Sets the user type for the link
*
* @param type the type of user for the link.
* @see #CURRENT_USER
* @see #ALL_USERS
*/
public abstract void setUserType(int type);
/*--------------------------------------------------------------------------*/
/**
* Gets the user type for the link
*
* @return userType
* @see #CURRENT_USER
* @see #ALL_USERS
*/
public abstract int getUserType();
/**
* Determines if the shortcut target should be run with administrator privileges.
*
* @param runAsAdministrator if {@code true}, run the target with administrator privileges.
*/
public void setRunAsAdministrator(boolean runAsAdministrator)
{
}
/**
* Determines if the shortcut target should be run with administrator privileges.
*
* @return {@code true}, if the target will run with administrator privileges
*/
public boolean getRunAsAdministrator()
{
return false;
}
/*--------------------------------------------------------------------------*/
/**
* Saves this link.
*
* @throws Exception if problems are encountered
*/
public abstract void save() throws Exception;
/*--------------------------------------------------------------------------*/
/**
* Gets the link hotKey
*
* @return int hotKey
*/
public int getHotkey()
{
return 0;
}
/*--------------------------------------------------------------------------*/
/**
* Sets the link hotKey
*
* @param hotkey
*/
public void setHotkey(int hotkey)
{
}
/**
* Sets the Encoding
*
* @param string
*/
public void setEncoding(String string)
{
}
/**
* This sets the Mimetype
*
* @param string
*/
public void setMimetype(String string)
{
}
/**
* Sets the terminal
*
* @param string
*/
public void setTerminal(String string)
{
}
/**
* This sets the terminals-options
*
* @param string
*/
public void setTerminalOptions(String string)
{
}
/**
* This sets the shortcut type
*
* @param string
*/
public void setType(String string)
{
}
/**
* This sets the KdeUserName
*
* @param string The UserName
*/
public void setKdeUserName(String string)
{
}
/**
* This sets the setKdeSubstUID
*
* @param string exactly "true" or "false" or nothing
*/
public void setKdeSubstUID(String string)
{
}
/**
* This sets the URL
*
* @param string
*/
public void setURL(String string)
{
}
/**
* Gets the Programs Folder for the given User. This is where to create subfolders or to place
* or create shortcuts.
*
* @param current_user one of current or all
* @return The Foldername or null on unsupported platforms.
*/
public abstract String getProgramsFolder(int current_user);
/**
* Sets the flag which indicates, that this should created for all.
*
* @param aCreateForAll A Flag - Set to true, if to create for All.
*/
public void setCreateForAll(Boolean aCreateForAll)
{
this.createForAll = aCreateForAll;
}
/**
* Gets the create for All Flag
*
* @return Returns True if this should be for all.
*/
public Boolean getCreateForAll()
{
return createForAll;
}
/**
* Sets the Categories Field On Unixes
*
* @param theCategories the categories
*/
public void setCategories(String theCategories)
{
}
/**
* Sets the TryExecField on Unixes.
*
* @param aTryExec the try exec command
*/
public void setTryExec(String aTryExec)
{
}
/**
* Sets the Uninstaller field with the unique Uninstaller Instance.
*
* @param theUninstaller the unique instance
*/
public void setUninstaller(UninstallData theUninstaller)
{
uninstaller = theUninstaller;
}
/**
* Dummy Method especially for the Unix Root User.
*/
public void execPostAction()
{
// Debug.log("Call of unused execPostAction Method in " + this.getClass().getName() );
}
/**
* Clean Up Method to do some cleanups after Shortcut Creation.
* currently unused.
*/
public void cleanUp()
{
// Debug.log("Call of unused cleanUp Method in " + this.getClass().getName() );
}
}
/*---------------------------------------------------------------------------*/