#
# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#

# @test
# @summary Test of JNDI factories using classes exported by third-party modules.

# Demonstrates Java object storage/retrieval, LDAP control and URL context
# usage using an LDAP directory. The objects and their associated object
# factories, state factories, control factories and URL context factories
# are exported from third-party modules.
#
# Seven types of object are used:
#   - an AWT object (Serializable) from the 'java.desktop' JDK module
#   - a Person object (DirContext) from the 'person' third-party module
#   - a Fruit object (Referenceable) from the 'fruit' third-party module
#   - an RMI object (Remote) from the 'hello' third-party module
#   - an LDAP request control (Control) from the 'foo' third-party module
#   - an LDAP response control (Control) from the 'authz' third-party module
#   - an ldapv4 URL (DirContext) from the 'ldapv4' third-party module
#

set -e

if [ -z "$TESTJAVA" ]; then
  if [ $# -lt 1 ]; then exit 1; fi
  TESTJAVA="$1"; shift
  COMPILEJAVA="${TESTJAVA}"
  TESTSRC="`pwd`"
  TESTCLASSES="`pwd`"
fi

JAVAC="$COMPILEJAVA/bin/javac"
JAVA="$TESTJAVA/bin/java"

echo "\nPreparing the 'person' module..."
mkdir -p mods/person
$JAVAC -d mods/person `find $TESTSRC/src/person -name "*.java"`

echo "\nPreparing the 'fruit' module..."
mkdir -p mods/fruit
$JAVAC -d mods/fruit `find $TESTSRC/src/fruit -name "*.java"`

echo "\nPreparing the 'hello' module..."
mkdir -p mods/hello
$JAVAC -d mods/hello `find $TESTSRC/src/hello -name "*.java"`

echo "\nPreparing the 'foo' module..."
mkdir -p mods/foo
$JAVAC -d mods/foo `find $TESTSRC/src/foo -name "*.java"`

echo "\nPreparing the 'authz' module..."
mkdir -p mods/authz
$JAVAC -d mods/authz `find $TESTSRC/src/authz -name "*.java"`

echo "\nPreparing the 'ldapv4' module..."
mkdir -p mods/ldapv4
$JAVAC -d mods/ldapv4 `find $TESTSRC/src/ldapv4 -name "*.java"`

echo "\nPreparing the 'test' module..."
mkdir -p mods/test
$JAVAC -d mods --module-source-path $TESTSRC/src `find $TESTSRC/src/test -name "*.java"`


echo "\nRunning with the 'java.desktop' module..."
$JAVA -Dtest.src=${TESTSRC} -p mods -m test/test.StoreObject ldap://localhost/dc=ie,dc=oracle,dc=com

echo "\nRunning with the 'person' module..."
$JAVA -Dtest.src=${TESTSRC} -p mods -m test/test.StorePerson ldap://localhost/dc=ie,dc=oracle,dc=com

echo "\nRunning with the 'fruit' module..."
$JAVA -Dtest.src=${TESTSRC} -p mods -m test/test.StoreFruit ldap://localhost/dc=ie,dc=oracle,dc=com

echo "\nRunning with the 'hello' module..."
$JAVA -Dtest.src=${TESTSRC} -p mods -m test/test.StoreRemote ldap://localhost/dc=ie,dc=oracle,dc=com

echo "\nRunning with the 'foo' module..."
$JAVA -Dtest.src=${TESTSRC} -p mods -m test/test.ConnectWithFoo ldap://localhost/dc=ie,dc=oracle,dc=com

echo "\nRunning with the 'authz' module..."
$JAVA -Dtest.src=${TESTSRC} -p mods -m test/test.ConnectWithAuthzId ldap://localhost/dc=ie,dc=oracle,dc=com

echo "\nRunning with the 'ldapv4' module..."
$JAVA -Dtest.src=${TESTSRC} -p mods -m test/test.ReadByUrl ldap://localhost/dc=ie,dc=oracle,dc=com

