#!/bin/sh
#
# init script for XmlRpcFileManager
#
# chkconfig: 345 88 22
# description: CAS File Manager Browser
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE.txt 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.    
#
# $Id$

[ -f /etc/sysconfig/java ] && . /etc/sysconfig/java
#[ -f /etc/sysconfig/cas-filemgr] && . /etc/sysconfig/cas-filemgr

JAVA_HOME=/path/to/java/home
export JAVA_HOME
FILEMGR_BROWSER_HOME=..
export FILEMGR_BROWSER_HOME

PATH=${JAVA_HOME}/bin:${FILEMGR_BROWSER_HOME}/bin:/usr/bin:/bin:/usr/sbin:/sbin
export PATH

$JAVA_HOME/bin/java -Djava.ext.dirs=${FILEMGR_BROWSER_HOME}/lib \
  org.apache.oodt.cas.filemgr.browser.system.XmlRpcFilemgrBrowser &
