#!/bin/bash
|
#
|
# Copyright (c) 2006, 2011, Oracle and/or its affiliates. All rights reserved.
|
# ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
|
#
|
# Shell Script to run the Java Plug-in control panel.
|
#
|
# Parse the command-line options
|
# -r means make associate with the container (i.e browser)
|
# -u means remove the association with the container
|
# -c provides the location of the container install
|
# -j provides the location of the jre install
|
# if neither -r or -u are specified, run the ControlPanel UI
|
|
USAGE='usage: ControlPanel [ (-u scheme | -r scheme) -c cpath -j jrepath ]'
|
JLERROR='ControlPanel: Error: Invalid JRE location: '
|
CLERROR='ControlPanel: Error: Invalid container location: '
|
IPERROR='ControlPanel: Error: Insufficient permission'
|
ISERROR='ControlPanel: Error: Invalid scheme: '
|
XLERROR='ControlPanel: Error: Invalid link or copy: '
|
|
check_container_dir() {
|
|
if [ ! -d ${1} ]; then
|
echo "${CLERROR}${2}"
|
exit 1
|
fi
|
if [ ! -w ${1} ]; then
|
echo "${IPERROR}"
|
exit 1
|
fi
|
}
|
|
link_logic() {
|
if [ ${mode} = "reg" ]; then
|
ln -s ${1} ${2}
|
else
|
rm -f ${2}
|
fi
|
}
|
|
#
|
# Get the absolute path to a symbolic link's reference.
|
#
|
# Parameters:
|
# $* : path - the path to the file (link) to dereference (can have spaces in
|
# the path).
|
#
|
# Output:
|
# This function writes the path to the link reference to stdout.
|
#
|
#
|
dereference() {
|
path="$*"
|
result=
|
|
#
|
# Make sure the path is absolute
|
#
|
parent="`cd \`dirname \"${path}\"\`; pwd -P`"
|
child="`basename \"${path}\"`"
|
|
#
|
# if parent == child, then path == /, and is already absolute
|
#
|
if [ "${parent}" != "${child}" ]; then
|
path="${parent}/${child}"
|
fi
|
|
if [ -h "${path}" ]; then
|
path=`ls -l "${path}" | sed -e "s#^.*${path} -> ##"`
|
|
# make sure the path is still absolute (starts with '/')
|
if expr "${path}" : '[^/]' > /dev/null; then
|
path="${parent}/${path}"
|
fi
|
fi
|
|
echo ${path}
|
}
|
|
#
|
# Check for all the parts required to launch the control panel relative to the
|
# given path.
|
#
|
#
|
# Parameters:
|
# $* : path - the path to examine, presumably the resolved path to this
|
# script (can have spaces in the path).
|
#
|
# Output:
|
# If successful, this function outputs the absolute path to a directory
|
# containing the Java binary, and ../lib/deploy.jar; otherwise it outputs
|
# an empty string. (Output is to stdout.)
|
#
|
# Note: the assumption is that this function returns either:
|
#
|
# <jdk-root>/jre/bin, or
|
# <jre-root>/bin
|
#
|
# However, as long as the directory pointed by the path returned by this
|
# function contains:
|
#
|
# ./java
|
# ../lib/deploy.jar
|
#
|
# it should be possible to successfully launch the JCP from the given
|
# information.
|
#
|
check_parts() {
|
result="`cd \`dirname \"$*\"\`; pwd -P`"
|
|
# if this is a JDK, we need the JRE subdir
|
if [ -d "${result}/../jre/bin" ]; then
|
result="`cd \`dirname \"$*\"\`/../jre/bin; pwd -P`"
|
fi
|
|
if [ ! -x "${result}/java" ] || [ ! -f "${result}/../lib/deploy.jar" ]; then
|
result=
|
fi
|
|
echo ${result}
|
}
|
|
#
|
# Launch the Java Control Panel.
|
#
|
# Parameters:
|
# $* : path - the path of this script (can have spaces in the path).
|
#
|
launch_jcp() {
|
path="$*"
|
while [ -h ${path} ]; do
|
path="`dereference ${path}`"
|
done
|
|
java_home="`check_parts ${path}`"
|
if [ -n "${java_home}" ]; then
|
# launch the JCP using paths relative to
|
${java_home}/java -Djavaplugin.user.profile=${USER_JPI_PROFILE} \
|
-Xbootclasspath/a:${java_home}/../lib/deploy.jar \
|
${_JAVA_VM_OPTIONS} \
|
com.sun.deploy.panel.ControlPanel
|
else
|
echo "${XLERROR}${java_home}"
|
exit 1
|
fi
|
}
|
|
#
|
# Manage the process of registering/unregistering the Java Plug-in with a given
|
# container (browser).
|
#
|
manage_container() {
|
# Do the "right" thing based on the provided scheme.
|
plugin_stem=${java_home}/plugin/${proc}
|
if [ ! -d ${plugin_stem} ]; then
|
echo "${JLERROR}${java_home}"
|
exit 1
|
fi
|
|
case ${scheme} in
|
ns4 | ns4E )
|
plugin_location="${plugin_stem}/ns4"
|
if [ ${mode} = "reg" ]; then
|
echo "${plugin_location}"
|
fi
|
;;
|
ns4L )
|
plugin_location="${plugin_stem}/ns4"
|
filename=`ls ${plugin_location}`
|
container_target="${container_home}/plugins"
|
check_container_dir ${container_target} ${container_home}
|
link_logic ${plugin_location}/${filename} ${container_target}/${filename}
|
;;
|
ns610 | ns610L )
|
plugin_location="${plugin_stem}/ns610"
|
filename=`ls ${plugin_location}`
|
container_target="${container_home}/plugins"
|
check_container_dir ${container_target} ${container_home}
|
link_logic ${plugin_location}/${filename} ${container_target}/${filename}
|
;;
|
* )
|
echo ${ISERROR}${scheme}
|
exit 1
|
esac
|
}
|
|
while getopts ":r:u:c:j:" opt; do
|
case $opt in
|
r ) mode="reg";scheme=${OPTARG}
|
;;
|
u ) mode="unreg";scheme=${OPTARG}
|
;;
|
c ) container_home=${OPTARG}
|
;;
|
j ) java_home=${OPTARG}
|
;;
|
: ) echo ${USAGE}
|
exit 1
|
;;
|
\? ) echo ${USAGE}
|
exit 1
|
;;
|
esac
|
done
|
|
os=`uname -s`
|
if [ "${os}" = "Linux" ]; then
|
case "`uname -m`" in
|
i[3-9]86 | ia32 | ia64 | x86_64)
|
proc=i386
|
;;
|
sparc*)
|
proc=sparc
|
;;
|
arm*)
|
proc=arm
|
;;
|
ppc*)
|
proc=ppc
|
;;
|
*)
|
proc="`uname -m`"
|
;;
|
esac
|
else
|
proc=`uname -p`
|
fi
|
|
if [ -z "${scheme}" ] &&
|
[ -z "${java_home}" ] && [ -z "${container_home}" ]
|
then
|
# just run the control panel
|
launch_jcp $0
|
elif [ -n "${scheme}" ] &&
|
[ -n "${java_home}" ] && [ -n "${container_home}" ]
|
then
|
# try to register/unregister the plugin
|
manage_container
|
else
|
# one or more missing args
|
echo ${USAGE}
|
exit 1
|
fi
|