diff --git a/sbin/configure_dm_webapp.sh b/sbin/configure_dm_webapp.sh
new file mode 100755
index 0000000000000000000000000000000000000000..f896ed299e58dc994e25ec37a44ed949e5ace5fe
--- /dev/null
+++ b/sbin/configure_dm_webapp.sh
@@ -0,0 +1,75 @@
+#!/bin/sh
+
+#
+# Script used for configuring DM webapp
+# Deployment configuration can be set in etc/$DM_DB_NAME.deploy.conf file
+#
+# Usage:
+#
+# $0 [DM_DB_NAME]
+#
+
+MY_DIR=`dirname $0` && cd $MY_DIR && MY_DIR=`pwd`
+if [ -z "${DM_ROOT_DIR}" ]; then
+    DM_ROOT_DIR=$MY_DIR/..
+fi
+DM_ENV_FILE=${DM_ROOT_DIR}/setup.sh
+if [ ! -f ${DM_ENV_FILE} ]; then
+    echo "Environment file ${DM_ENV_FILE} does not exist." 
+    exit 2
+fi
+. ${DM_ENV_FILE} > /dev/null
+
+# Use first argument as db name, if provided
+DM_DB_NAME=${DM_DB_NAME:=dm}
+if [ ! -z "$1" ]; then
+    DM_DB_NAME=$1
+fi
+echo "Using DB name: $DM_DB_NAME"
+
+# Look for deployment file in etc directory, and use it to override
+# default entries
+deployConfigFile=$DM_ROOT_DIR/etc/${DM_DB_NAME}.deploy.conf
+if [ -f $deployConfigFile ]; then
+    echo "Using deployment config file: $deployConfigFile"
+    . $deployConfigFile
+else
+    echo "Deployment config file $deployConfigFile not found, using defaults"
+fi
+
+DM_HOST_ARCH=`uname | tr [A-Z] [a-z]`-`uname -m`
+GLASSFISH_DIR=$DM_SUPPORT/glassfish/$DM_HOST_ARCH
+JAVA_HOME=$DM_SUPPORT/java/$DM_HOST_ARCH
+
+export AS_JAVA=$JAVA_HOME
+ASADMIN_CMD=$GLASSFISH_DIR/bin/asadmin 
+
+DM_DB_HOST=${DM_DB_HOST:=localhost}
+DM_DB_PORT=${DM_DB_PORT:=11136}
+DM_DB_USER=${DM_DB_USER:=dm}
+DM_DB_PASSWORD=${DM_DB_PASSWORD:=dm}
+DM_DB_POOL=mysql_${DM_DB_NAME}_DbPool
+DM_DATA_SOURCE=${DM_DB_NAME}_DataSource
+DM_DOMAIN=domain1
+
+# copy mysql driver
+echo "Copying mysql driver"
+rsync -ar $DM_ROOT_DIR/src/java/DmWebPortal/lib/mysql-connector-java-5.1.23-bin.jar $GLASSFISH_DIR/glassfish/domains/${DM_DOMAIN}/lib/ext
+
+# restart server
+echo "Restarting glassfish"
+$ASADMIN_CMD stop-domain ${DM_DOMAIN}
+$ASADMIN_CMD start-domain ${DM_DOMAIN}
+
+# create JDBC connection pool
+echo "Creating JDBC connection pool $DM_DB_POOL"
+$ASADMIN_CMD create-jdbc-connection-pool --datasourceclassname com.mysql.jdbc.jdbc2.optional.MysqlDataSource --restype javax.sql.DataSource --property user=${DM_DB_USER}:password=${DM_DB_PASSWORD}:driverClass="com.mysql.jdbc.Driver":portNumber=${DM_DB_PORT}:databaseName=${DM_DB_NAME}:serverName=${DM_DB_HOST}:url="jdbc\:mysql\://${DM_DB_HOST}\:${DM_DB_PORT}/${DM_DB_NAME}?zeroDateTimeBehavior\=convertToNull" ${DM_DB_POOL}
+
+# create JDBC resource associated with this connection pool
+echo "Creating JDBC resource $DM_DATA_SOURCE"
+$ASADMIN_CMD create-jdbc-resource --connectionpoolid ${DM_DB_POOL} ${DM_DATA_SOURCE}
+
+# test the connection settings 
+echo "Testing connection"
+$ASADMIN_CMD ping-connection-pool $DM_DB_POOL || exit 1
+
diff --git a/sbin/deploy_dm_webapp.sh b/sbin/deploy_dm_webapp.sh
new file mode 100755
index 0000000000000000000000000000000000000000..3759b237379be8d5f5f6787f84482423f7007447
--- /dev/null
+++ b/sbin/deploy_dm_webapp.sh
@@ -0,0 +1,96 @@
+#!/bin/sh
+
+#
+# Script used for deploying CMS webapp
+# Deployment configuration can be set in etc/$CMS_DB_NAME.deploy.conf file
+#
+# Usage:
+#
+# $0 [CMS_DB_NAME]
+#
+
+MY_DIR=`dirname $0` && cd $MY_DIR && MY_DIR=`pwd`
+if [ -z "${CMS_ROOT_DIR}" ]; then
+    CMS_ROOT_DIR=$MY_DIR/..
+fi
+CMS_ENV_FILE=${CMS_ROOT_DIR}/setup.sh
+if [ ! -f ${CMS_ENV_FILE} ]; then
+    echo "Environment file ${CMS_ENV_FILE} does not exist." 
+    exit 2
+fi
+. ${CMS_ENV_FILE} > /dev/null
+
+# Use first argument as db name, if provided
+CMS_DB_NAME=${CMS_DB_NAME:=cms}
+if [ ! -z "$1" ]; then
+    CMS_DB_NAME=$1
+fi
+echo "Using DB name: $CMS_DB_NAME"
+
+# Look for deployment file in etc directory, and use it to override
+# default entries
+deployConfigFile=$CMS_ROOT_DIR/etc/${CMS_DB_NAME}.deploy.conf
+if [ -f $deployConfigFile ]; then
+    echo "Using deployment config file: $deployConfigFile"
+    . $deployConfigFile
+else
+    echo "Deployment config file $deployConfigFile not found, using defaults"
+fi
+
+CMS_HOST_ARCH=`uname | tr [A-Z] [a-z]`-`uname -m`
+CMS_CONTEXT_ROOT=${CMS_CONTEXT_ROOT:=cms}
+GLASSFISH_DIR=$CMS_SUPPORT/glassfish/$CMS_HOST_ARCH
+CMS_DEPLOY_DIR=$GLASSFISH_DIR/glassfish/domains/domain1/autodeploy
+CMS_DIST_DIR=$CMS_ROOT_DIR/src/java/CmsWebPortal/dist
+CMS_BUILD_WAR_FILE=CmsWebPortal.war
+CMS_WAR_FILE=$CMS_CONTEXT_ROOT.war
+JAVA_HOME=$CMS_SUPPORT/java/$CMS_HOST_ARCH
+
+if [ ! -f $CMS_DIST_DIR/$CMS_BUILD_WAR_FILE ]; then
+    echo "$CMS_BUILD_WAR_FILE not found in $CMS_DIST_DIR."
+    exit 1
+fi
+
+# Modify war file for proper context/persistence settings and
+# repackage it into new war 
+echo "Repackaging war file for context root $CMS_CONTEXT_ROOT"
+cd $CMS_DIST_DIR
+rm -rf $CMS_CONTEXT_ROOT
+mkdir -p $CMS_CONTEXT_ROOT
+cd $CMS_CONTEXT_ROOT
+jar xf ../$CMS_BUILD_WAR_FILE
+
+configFile=WEB-INF/glassfish-web.xml
+cmd="cat $configFile | sed 's?<context-root.*?<context-root>${CMS_CONTEXT_ROOT}</context-root>?g' > $configFile.2 && mv $configFile.2 $configFile"
+eval $cmd
+
+configFile=WEB-INF/classes/META-INF/persistence.xml
+cmd="cat $configFile | sed 's?<jta-data-source.*?<jta-data-source>${CMS_DB_NAME}_DataSource</jta-data-source>?g' > $configFile.2 && mv $configFile.2 $configFile"
+eval $cmd
+
+jar cf ../$CMS_WAR_FILE *
+
+export AS_JAVA=$JAVA_HOME
+ASADMIN_CMD=$GLASSFISH_DIR/bin/asadmin
+
+# copy war file
+echo "Copying war file $CMS_DIST_DIR/$CMS_WAR_FILE to $CMS_DEPLOY_DIR"
+rm -f $CMS_DEPLOY_DIR/${CMS_WAR_FILE}_*
+cp $CMS_DIST_DIR/$CMS_WAR_FILE $CMS_DEPLOY_DIR
+
+# wait on deployment
+echo "Waiting on war deployment..."
+WAIT_TIME=30
+cd $CMS_DEPLOY_DIR
+t=0
+while [ $t -lt $WAIT_TIME ]; do
+    sleep 1
+    deploymentStatus=`ls -c1 ${CMS_WAR_FILE}_* 2> /dev/null | sed 's?.*war_??g'`
+    if [ ! -z "$deploymentStatus" ]; then
+        break
+    fi
+    t=`expr $t + 1`
+done
+echo "Deployment Status: $deploymentStatus"
+
+
diff --git a/sbin/destroy_dm_db.sh b/sbin/destroy_dm_db.sh
new file mode 100755
index 0000000000000000000000000000000000000000..ce927579bf58f237f02c43974cb554e775d61fd5
--- /dev/null
+++ b/sbin/destroy_dm_db.sh
@@ -0,0 +1,185 @@
+#!/bin/sh
+
+#
+# Script used for destroying all DM databases
+# Deployment configuration can be set in etc/$DM_DB_NAME.deploy.conf file
+#
+# Usage:
+#
+# $0 [DM_DB_NAME [DM_DB_SCRIPTS_DIR]]
+#
+
+DM_DB_NAME=dm
+DM_DB_USER=dm
+DM_DB_PASSWORD=dm
+DM_DB_HOST=127.0.0.1
+DM_DB_PORT=11136
+DM_DB_ADMIN_USER=postgres
+DM_DB_ADMIN_HOSTS="127.0.0.1 bluegill1.aps.anl.gov visa%.aps.anl.gov"
+DM_DB_ADMIN_PASSWORD=
+DM_DB_CHARACTER_SET=utf8
+
+
+CURRENT_DIR=`pwd`
+MY_DIR=`dirname $0` && cd $MY_DIR && MY_DIR=`pwd`
+cd $CURRENT_DIR
+
+if [ -z "${DM_ROOT_DIR}" ]; then
+    DM_ROOT_DIR=$MY_DIR/..
+fi
+DM_SQL_DIR=$DM_ROOT_DIR/db
+DM_RUN_DIR=$DM_ROOT_DIR/var/run
+DM_ENV_FILE=${DM_ROOT_DIR}/setup.sh
+if [ ! -f ${DM_ENV_FILE} ]; then
+    echo "Environment file ${DM_ENV_FILE} does not exist." 
+    exit 1
+fi
+. ${DM_ENV_FILE} > /dev/null 
+
+# DM_SUPPORT_DIR should now be defined.
+if [ -z "$DM_SUPPORT_DIR" ]; then
+    echo "Invalid environment file ${DM_ENV_FILE}: DM_SUPPORT_DIR is not defined."
+    exit 1
+fi
+PG_DIR=$DM_SUPPORT_DIR/postgresql/$DM_HOST_ARCH
+PG_CONTROL_SCRIPT=$DM_ROOT_DIR/etc/init.d/dm-postgresql
+PG_DATA_DIR=$PG_DIR/data
+PG_HBA_CONF=$PG_DATA_DIR/pg_hba.conf
+DB_LOCK_FILE=${DB_RUN_DIR}/${_db_name}.db.lock
+DB_CREATE_SCRIPT=${DM_ROOT_DIR}/db/create_${DM_DB_NAME}_db.sql
+
+# Use first argument as db name, if provided
+if [ ! -z "$1" ]; then
+    DM_DB_NAME=$1
+fi
+echo "Using DB name: $DM_DB_NAME"
+
+# Look for deployment file in etc directory, and use it to override
+# default entries
+deployConfigFile=$DM_ROOT_DIR/etc/${DM_DB_NAME}.deploy.conf
+if [ -f $deployConfigFile ]; then
+    echo "Using deployment config file: $deployConfigFile"
+    . $deployConfigFile
+else
+    echo "Deployment config file $deployConfigFile not found, using defaults"
+fi
+
+# Second argument overrides directory with db population scripts
+DM_DB_SCRIPTS_DIR=${DM_DB_SCRIPTS_DIR:=$DM_SQL_DIR}
+if [ ! -z "$2" ]; then
+    DM_DB_SCRIPTS_DIR=$2
+fi
+if [ ! -d $DM_DB_SCRIPTS_DIR ]; then
+    echo "DB Scripts directory $DM_DB_SCRIPTS_DIR does not exist."
+    exit 1
+fi
+
+echo "Using DB scripts directory: $DM_DB_SCRIPTS_DIR"
+
+execute() {
+    msg="$@"
+    if [ ! -z "$DM_DB_ADMIN_PASSWORD" ]; then
+        sedCmd="s?$DM_DB_ADMIN_PASSWORD?\\*\\*\\*\\*\\*\\*?g"
+        echo "Executing: $@" | sed -e $sedCmd
+    else
+        echo "Executing: $@"
+    fi
+    eval "$@"
+}
+
+createDb() {
+    if [ -f $DB_LOCK_FILE ]; then
+        echo "Database lock file $DB_LOCK_FILE already exists, will not proceed."
+        return 1
+    fi
+    execute ${PG_DIR}/bin/createdb -U $DM_DB_USER -h $DM_DB_HOST -p $DM_DB_PORT $DM_DB_NAME || return 1
+    execute ${PG_DIR}/bin/psql -U $DM_DB_USER -h $DM_DB_HOST -p $DM_DB_PORT -d $DM_DB_NAME -f $DM_DB_SCRIPT || return 1
+    touch $DB_LOCK_FILE
+}
+
+createDbUser() {
+    _dbUser=$1
+    _dbPassword=$2
+    shift 2
+    _dbFlags=$@
+
+    # create user
+    execute ${PG_DIR}/bin/createuser -h $DM_DB_HOST -p $DM_DB_PORT -E $_dbFlags $_dbUser || return 1
+
+    # modify password
+    _tmpFile=/tmp/$$.sql
+    echo "alter user $_dbUser with password '$_$dbPassword';" > $_tmpFile
+    $PG_DIR/bin/psql -h $DB_HOST -p $DB_PORT -d postgres -f $_tmpFile
+    rm -f $_tmpFile
+}
+
+# Check for failed earlier attempt
+if [ -f $PG_HBA_CONF.orig ]; then
+    echo "File $PG_HBA_CONF.orig exists, refusing to proceed."
+    exit 1
+fi
+
+# create db tables
+
+# Initialize db if needed
+dbAction=restart
+createDbUsers=false
+if [ ! -f $PG_HBA_CONF ]; then
+    echo "PG_HBA_CONF: $PG_HBA_CONF"
+    echo "Initializing database"
+    $PG_CONTROL_SCRIPT initdb || exit 1
+    dbAction=start
+    createDbUsers=true
+fi
+
+# Modify db permissions, restart db.
+echo "Modifying db access permissions"
+mv $PG_HBA_CONF $PG_HBA_CONF.orig
+cat $PG_HBA_CONF.orig | sed 's?host.*all.*all.*127.*?host all all 127.0.0.1/32 trust?g' | sed 's?host.*all.*all.*::1/128.*?host all all ::1/128 trust?g' > $PG_HBA_CONF || exit 1
+echo "Restarting database server"
+$PG_CONTROL_SCRIPT $dbAction
+
+# Create db users if needed
+if [ $createDbUsers = "true" ]; then
+    # Read db passwords 
+    if [ -z "$DM_DB_ADMIN_PASSWORD" ]; then
+        sttyOrig=`stty -g`
+        stty -echo
+        read -p "Enter DB password for the $DM_DB_ADMIN_USER (DB root) user: " DM_DB_ADMIN_PASSWORD
+        read -p "Enter DB password for the $DM_DB_USER user:" DM_DB_PASSWORD
+        stty $sttyOrig
+    fi
+
+    # Add superuser flag for the DB root user
+    echo "Creating $DM_DB_ADMIN_USER"
+    createDbUser $DM_DB_ADMIN_USER $DB_DB_ADMIN_PASSWORD -s || exit 1
+
+    # Allow database creation for the DM user
+    echo "Creating $DM_DB_USER"
+    createDbUser $DM_DB_ADMIN_USER $DB_DB_ADMIN_PASSWORD -d || exit 1
+fi
+
+
+# Create db
+echo "Creating database: $DM_DB_NAME"
+createDb || exit 1
+
+# populate db
+cd $CURRENT_DIR && cd $DM_DB_SCRIPTS_DIR
+DM_DB_TABLES="\
+"
+#for dbTable in $DM_DB_TABLES; do
+#    dbFile=populate_$dbTable.sql
+#    if [ -f $dbFile ]; then
+#        echo "Populating $dbTable using $dbFile script"
+#        execute $mysqlCmd $dbFile
+#    else
+#        echo "$dbFile not found, skipping $dbTable update"
+#    fi
+#done
+
+# cleanup
+echo "Restoring db access permissions"
+mv $PG_HBA_CONF.orig $PG_HBA_CONF
+
+
diff --git a/sbin/install_support.sh b/sbin/install_support.sh
new file mode 100755
index 0000000000000000000000000000000000000000..209c1e562d617971053ed91ed2864878bf7552f0
--- /dev/null
+++ b/sbin/install_support.sh
@@ -0,0 +1,27 @@
+#!/bin/sh
+
+DM_SVN_URL=https://subversion.xray.aps.anl.gov/DataManagement
+
+MY_DIR=`dirname $0` && cd $MY_DIR && MY_DIR=`pwd`
+if [ -z "${DM_ROOT_DIR}" ]; then
+    DM_ROOT_DIR=$MY_DIR/..
+fi
+DM_SUPPORT=$DM_ROOT_DIR/../support
+
+execute() {
+    echo "Executing: $@"
+    eval "$@"
+}
+
+if [ ! -d $DM_SUPPORT ]; then
+    echo "Creating new DM support directory $DM_SUPPORT."
+    cd `dirname $DM_SUPPORT`
+    execute svn co $DM_SVN_URL/support support
+fi
+cd $DM_SUPPORT
+execute svn update
+execute $DM_SUPPORT/bin/clean_all.sh
+execute $DM_SUPPORT/bin/install_all.sh
+
+
+
diff --git a/sbin/list_dm_releases.sh b/sbin/list_dm_releases.sh
new file mode 100755
index 0000000000000000000000000000000000000000..9fd16e2b25284c627f8106ece37e6c35333ffc60
--- /dev/null
+++ b/sbin/list_dm_releases.sh
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+SVN_ROOT=https://subversion.xray.aps.anl.gov/DataManagement
+svn ls $SVN_ROOT/tags
+      
diff --git a/sbin/make_dm_release.sh b/sbin/make_dm_release.sh
new file mode 100755
index 0000000000000000000000000000000000000000..15663959638a9742ea01c84c5a186ee2595b6e4c
--- /dev/null
+++ b/sbin/make_dm_release.sh
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+SVN_ROOT=https://subversion.xray.aps.anl.gov/DataManagement
+version=$1
+if [ -z $version ]; then
+    echo "Usage: $0 <version>"
+    exit 1
+fi
+svn copy $SVN_ROOT/trunk $SVN_ROOT/tags/$version -m "Creating tag $version"
+      
diff --git a/sbin/unconfigure_dm_webapp.sh b/sbin/unconfigure_dm_webapp.sh
new file mode 100755
index 0000000000000000000000000000000000000000..ec8f5d3ce0c1b08f643fe31d45c270d2158f4565
--- /dev/null
+++ b/sbin/unconfigure_dm_webapp.sh
@@ -0,0 +1,64 @@
+#!/bin/sh
+
+#
+# Script used for un-configuring CMS webapp
+# Deployment configuration can be set in etc/$CMS_DB_NAME.deploy.conf file
+#
+# Usage:
+#
+# $0 [CMS_DB_NAME]
+#
+
+MY_DIR=`dirname $0` && cd $MY_DIR && MY_DIR=`pwd`
+if [ -z "${CMS_ROOT_DIR}" ]; then
+    CMS_ROOT_DIR=$MY_DIR/..
+fi
+CMS_ENV_FILE=${CMS_ROOT_DIR}/setup.sh
+if [ ! -f ${CMS_ENV_FILE} ]; then
+    echo "Environment file ${CMS_ENV_FILE} does not exist." 
+    exit 2
+fi
+. ${CMS_ENV_FILE} > /dev/null
+
+# Use first argument as db name, if provided
+CMS_DB_NAME=${CMS_DB_NAME:=cms}
+if [ ! -z "$1" ]; then
+    CMS_DB_NAME=$1
+fi
+echo "Using DB name: $CMS_DB_NAME"
+
+# Look for deployment file in etc directory, and use it to override
+# default entries
+deployConfigFile=$CMS_ROOT_DIR/etc/${CMS_DB_NAME}.deploy.conf
+if [ -f $deployConfigFile ]; then
+    echo "Using deployment config file: $deployConfigFile"
+    . $deployConfigFile
+else
+    echo "Deployment config file $deployConfigFile not found, using defaults"
+fi
+
+CMS_HOST_ARCH=`uname | tr [A-Z] [a-z]`-`uname -m`
+GLASSFISH_DIR=$CMS_SUPPORT/glassfish/$CMS_HOST_ARCH
+JAVA_HOME=$CMS_SUPPORT/java/$CMS_HOST_ARCH
+
+export AS_JAVA=$JAVA_HOME
+ASADMIN_CMD=$GLASSFISH_DIR/bin/asadmin 
+
+CMS_DB_POOL=mysql_${CMS_DB_NAME}_DbPool
+CMS_DATA_SOURCE=${CMS_DB_NAME}_DataSource
+CMS_DOMAIN=domain1
+
+# restart server
+echo "Restarting glassfish"
+$ASADMIN_CMD stop-domain ${CMS_DOMAIN}
+$ASADMIN_CMD start-domain ${CMS_DOMAIN}
+
+# delete JDBC resource associated with this connection pool
+echo "Deleting JDBC resource $CMS_DATA_SOURCE"
+$ASADMIN_CMD delete-jdbc-resource ${CMS_DATA_SOURCE}
+
+# delete JDBC connection pool
+echo "Deleting JDBC connection pool $CMS_DB_POOL"
+$ASADMIN_CMD delete-jdbc-connection-pool ${CMS_DB_POOL}
+
+
diff --git a/sbin/undeploy_dm_webapp.sh b/sbin/undeploy_dm_webapp.sh
new file mode 100755
index 0000000000000000000000000000000000000000..6860ac1d2ad3c36b2f55e70c55d440d79f52e767
--- /dev/null
+++ b/sbin/undeploy_dm_webapp.sh
@@ -0,0 +1,71 @@
+#!/bin/sh
+
+#
+# Script used for undeploying CMS webapp
+# Deployment configuration can be set in etc/$CMS_DB_NAME.deploy.conf file
+#
+# Usage:
+#
+# $0 [CMS_DB_NAME]
+#
+
+MY_DIR=`dirname $0` && cd $MY_DIR && MY_DIR=`pwd`
+if [ -z "${CMS_ROOT_DIR}" ]; then
+    CMS_ROOT_DIR=$MY_DIR/..
+fi
+CMS_ENV_FILE=${CMS_ROOT_DIR}/setup.sh
+if [ ! -f ${CMS_ENV_FILE} ]; then
+    echo "Environment file ${CMS_ENV_FILE} does not exist." 
+    exit 2
+fi
+. ${CMS_ENV_FILE} > /dev/null
+
+# Use first argument as db name, if provided
+CMS_DB_NAME=${CMS_DB_NAME:=cms}
+if [ ! -z "$1" ]; then
+    CMS_DB_NAME=$1
+fi
+echo "Using DB name: $CMS_DB_NAME"
+
+# Look for deployment file in etc directory, and use it to override
+# default entries
+deployConfigFile=$CMS_ROOT_DIR/etc/${CMS_DB_NAME}.deploy.conf
+if [ -f $deployConfigFile ]; then
+    echo "Using deployment config file: $deployConfigFile"
+    . $deployConfigFile
+else
+    echo "Deployment config file $deployConfigFile not found, using defaults"
+fi
+
+CMS_HOST_ARCH=`uname | tr [A-Z] [a-z]`-`uname -m`
+CMS_CONTEXT_ROOT=${CMS_CONTEXT_ROOT:=CmsWebPortal}
+GLASSFISH_DIR=$CMS_SUPPORT/glassfish/$CMS_HOST_ARCH
+CMS_DEPLOY_DIR=$GLASSFISH_DIR/glassfish/domains/domain1/autodeploy
+CMS_APP_DIR=$GLASSFISH_DIR/glassfish/domains/domain1/applications/$CMS_CONTEXT_ROOT
+CMS_DIST_DIR=$CMS_ROOT_DIR/src/java/CmsWebPortal/dist
+CMS_WAR_FILE=$CMS_CONTEXT_ROOT.war
+JAVA_HOME=$CMS_SUPPORT/java/$CMS_HOST_ARCH
+
+export AS_JAVA=$JAVA_HOME
+ASADMIN_CMD=$GLASSFISH_DIR/bin/asadmin
+
+# remove war file from autodeploy directory
+echo "Removing war file $CMS_DEPLOY_DIR/$CMS_WAR_FILE"
+rm -f $CMS_DEPLOY_DIR/${CMS_WAR_FILE}*
+
+# remove war file from autodeploy directory
+if [ -d $CMS_APP_DIR ]; then
+    echo "Removing application directory $CMS_APP_DIR"
+    rm -rf $CMS_APP_DIR
+else
+    echo "Application directory $CMS_APP_DIR not found"
+fi
+
+# restart server
+echo "Restarting glassfish"
+$ASADMIN_CMD stop-domain ${CMS_DOMAIN}
+$ASADMIN_CMD start-domain ${CMS_DOMAIN}
+
+
+
+
diff --git a/src/Makefile b/src/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..6d9c7bda8578741337bb6f0d434b6f0d9c95e0c5
--- /dev/null
+++ b/src/Makefile
@@ -0,0 +1,6 @@
+
+TOP = ../..
+SUBDIRS = DmWebPortal
+
+include $(TOP)/tools/make/RULES_DM
+
diff --git a/src/java/DmWebPortal/Makefile b/src/java/DmWebPortal/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..5d28dc150fc9c004c7a659461d05dd3df938a21f
--- /dev/null
+++ b/src/java/DmWebPortal/Makefile
@@ -0,0 +1,23 @@
+TOP=../../..
+ANT=dm-ant
+ANT_ARGS=-Dlibs.CopyLibs.classpath=lib/org-netbeans-modules-java-j2seproject-copylibstask.jar 
+BUILD_PROPERTIES_FILE=nbproject/private/private.properties
+GENERIC_BUILD_PROPERTIES_FILE=$(BUILD_PROPERTIES_FILE).generic.build
+
+all install: dist
+
+clean clean-all clean-install distclean: ant-clean
+
+.PHONY: ant-clean
+ant-clean:
+	$(ANT) $(ANT_ARGS)  clean
+
+# For compiling from command line, we have to use generic build properties file
+.PHONY: dist
+dist: 
+	mv $(BUILD_PROPERTIES_FILE) $(BUILD_PROPERTIES_FILE).orig
+	cmd="cat $(GENERIC_BUILD_PROPERTIES_FILE) | sed 's?DM_GLASSFISH_DIR?$${DM_GLASSFISH_DIR}?g' > $(BUILD_PROPERTIES_FILE)" && eval $$cmd
+	$(ANT) $(ANT_ARGS) dist 
+	mv $(BUILD_PROPERTIES_FILE).orig $(BUILD_PROPERTIES_FILE)
+
+
diff --git a/src/java/DmWebPortal/build.xml b/src/java/DmWebPortal/build.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b34cfa82c5d34de3710a4eb92fa4c2340a958ecc
--- /dev/null
+++ b/src/java/DmWebPortal/build.xml
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- You may freely edit this file. See commented blocks below for -->
+<!-- some examples of how to customize the build. -->
+<!-- (If you delete it and reopen the project it will be recreated.) -->
+<!-- By default, only the Clean and Build commands use this build script. -->
+<!-- Commands such as Run, Debug, and Test only use this build script if -->
+<!-- the Compile on Save feature is turned off for the project. -->
+<!-- You can turn off the Compile on Save (or Deploy on Save) setting -->
+<!-- in the project's Project Properties dialog box.-->
+<project name="DmWebPortal" default="default" basedir=".">
+    <description>Builds, tests, and runs the project DmWebPortal.</description>
+    <import file="nbproject/build-impl.xml"/>
+    <!--
+
+    There exist several targets which are by default empty and which can be 
+    used for execution of your tasks. These targets are usually executed 
+    before and after some main targets. They are: 
+
+      -pre-init:                 called before initialization of project properties 
+      -post-init:                called after initialization of project properties 
+      -pre-compile:              called before javac compilation 
+      -post-compile:             called after javac compilation 
+      -pre-compile-single:       called before javac compilation of single file
+      -post-compile-single:      called after javac compilation of single file
+      -pre-compile-test:         called before javac compilation of JUnit tests
+      -post-compile-test:        called after javac compilation of JUnit tests
+      -pre-compile-test-single:  called before javac compilation of single JUnit test
+      -post-compile-test-single: called after javac compilation of single JUunit test
+      -pre-dist:                 called before archive building 
+      -post-dist:                called after archive building 
+      -post-clean:               called after cleaning build products 
+      -pre-run-deploy:           called before deploying
+      -post-run-deploy:          called after deploying
+
+    Example of pluging an obfuscator after the compilation could look like 
+
+        <target name="-post-compile">
+            <obfuscate>
+                <fileset dir="${build.classes.dir}"/>
+            </obfuscate>
+        </target>
+
+    For list of available properties check the imported 
+    nbproject/build-impl.xml file. 
+
+
+    Other way how to customize the build is by overriding existing main targets.
+    The target of interest are: 
+
+      init-macrodef-javac:    defines macro for javac compilation
+      init-macrodef-junit:   defines macro for junit execution
+      init-macrodef-debug:    defines macro for class debugging
+      do-dist:                archive building
+      run:                    execution of project 
+      javadoc-build:          javadoc generation 
+
+    Example of overriding the target for project execution could look like 
+
+        <target name="run" depends="<PROJNAME>-impl.jar">
+            <exec dir="bin" executable="launcher.exe">
+                <arg file="${dist.jar}"/>
+            </exec>
+        </target>
+
+    Notice that overridden target depends on jar target and not only on 
+    compile target as regular run target does. Again, for list of available 
+    properties which you can use check the target you are overriding in 
+    nbproject/build-impl.xml file. 
+
+    -->
+</project>
diff --git a/src/java/DmWebPortal/lib/CopyLibs/org-netbeans-modules-java-j2seproject-copylibstask.jar b/src/java/DmWebPortal/lib/CopyLibs/org-netbeans-modules-java-j2seproject-copylibstask.jar
new file mode 100644
index 0000000000000000000000000000000000000000..14c3bbbf50780fcdd7e29a43c3b6b416f7850744
Binary files /dev/null and b/src/java/DmWebPortal/lib/CopyLibs/org-netbeans-modules-java-j2seproject-copylibstask.jar differ
diff --git a/src/java/DmWebPortal/lib/eclipselink/eclipselink.jar b/src/java/DmWebPortal/lib/eclipselink/eclipselink.jar
new file mode 100644
index 0000000000000000000000000000000000000000..db8a43c6e625c58eb47587d2d7fca58a2e55fb7c
Binary files /dev/null and b/src/java/DmWebPortal/lib/eclipselink/eclipselink.jar differ
diff --git a/src/java/DmWebPortal/lib/eclipselink/javax.persistence_2.1.0.v201304241213.jar b/src/java/DmWebPortal/lib/eclipselink/javax.persistence_2.1.0.v201304241213.jar
new file mode 100644
index 0000000000000000000000000000000000000000..a4dd3861ffbcac7bd189bff7c397bc51a40fcadc
Binary files /dev/null and b/src/java/DmWebPortal/lib/eclipselink/javax.persistence_2.1.0.v201304241213.jar differ
diff --git a/src/java/DmWebPortal/lib/eclipselink/org.eclipse.persistence.jpa.jpql_2.5.1.v20130918-f2b9fc5.jar b/src/java/DmWebPortal/lib/eclipselink/org.eclipse.persistence.jpa.jpql_2.5.1.v20130918-f2b9fc5.jar
new file mode 100644
index 0000000000000000000000000000000000000000..9de35be66e4ef75e9fe555e1b7271abd129f0656
Binary files /dev/null and b/src/java/DmWebPortal/lib/eclipselink/org.eclipse.persistence.jpa.jpql_2.5.1.v20130918-f2b9fc5.jar differ
diff --git a/src/java/DmWebPortal/lib/eclipselinkmodelgen/org.eclipse.persistence.jpa.modelgen_2.5.1.v20130918-f2b9fc5.jar b/src/java/DmWebPortal/lib/eclipselinkmodelgen/org.eclipse.persistence.jpa.modelgen_2.5.1.v20130918-f2b9fc5.jar
new file mode 100644
index 0000000000000000000000000000000000000000..a1007dfc8829b9987018399c8deb4e65a954274e
Binary files /dev/null and b/src/java/DmWebPortal/lib/eclipselinkmodelgen/org.eclipse.persistence.jpa.modelgen_2.5.1.v20130918-f2b9fc5.jar differ
diff --git a/src/java/DmWebPortal/lib/itext-2.1.7.jar b/src/java/DmWebPortal/lib/itext-2.1.7.jar
new file mode 100644
index 0000000000000000000000000000000000000000..3f2c188223481f69e6c0aff835aed8f6e1d8b1c2
Binary files /dev/null and b/src/java/DmWebPortal/lib/itext-2.1.7.jar differ
diff --git a/src/java/DmWebPortal/lib/javaee-endorsed-api-6.0/javaee-doc-api.jar b/src/java/DmWebPortal/lib/javaee-endorsed-api-6.0/javaee-doc-api.jar
new file mode 100644
index 0000000000000000000000000000000000000000..bdebe91cc2781a0135d24e6dbe6c0f9e16e551c4
Binary files /dev/null and b/src/java/DmWebPortal/lib/javaee-endorsed-api-6.0/javaee-doc-api.jar differ
diff --git a/src/java/DmWebPortal/lib/javaee-endorsed-api-6.0/javax.annotation.jar b/src/java/DmWebPortal/lib/javaee-endorsed-api-6.0/javax.annotation.jar
new file mode 100644
index 0000000000000000000000000000000000000000..ec4b372325dc33ea9e38064516000786929f07bb
Binary files /dev/null and b/src/java/DmWebPortal/lib/javaee-endorsed-api-6.0/javax.annotation.jar differ
diff --git a/src/java/DmWebPortal/lib/javaee-endorsed-api-6.0/jaxb-api-osgi.jar b/src/java/DmWebPortal/lib/javaee-endorsed-api-6.0/jaxb-api-osgi.jar
new file mode 100644
index 0000000000000000000000000000000000000000..d167e2f62b1b5cd79df1f0fa7ffad7182eb1985a
Binary files /dev/null and b/src/java/DmWebPortal/lib/javaee-endorsed-api-6.0/jaxb-api-osgi.jar differ
diff --git a/src/java/DmWebPortal/lib/javaee-endorsed-api-6.0/webservices-api-osgi.jar b/src/java/DmWebPortal/lib/javaee-endorsed-api-6.0/webservices-api-osgi.jar
new file mode 100644
index 0000000000000000000000000000000000000000..217424dac47f3cfd863e53d400b7bc35e73ad67c
Binary files /dev/null and b/src/java/DmWebPortal/lib/javaee-endorsed-api-6.0/webservices-api-osgi.jar differ
diff --git a/src/java/DmWebPortal/lib/log4j-1.2.17.jar b/src/java/DmWebPortal/lib/log4j-1.2.17.jar
new file mode 100644
index 0000000000000000000000000000000000000000..068867ebfd231db09a7775794eea8127420380ed
Binary files /dev/null and b/src/java/DmWebPortal/lib/log4j-1.2.17.jar differ
diff --git a/src/java/DmWebPortal/lib/nblibraries.properties b/src/java/DmWebPortal/lib/nblibraries.properties
new file mode 100644
index 0000000000000000000000000000000000000000..74ba782defa0688dfaa4e612eb9f55b366462cb5
--- /dev/null
+++ b/src/java/DmWebPortal/lib/nblibraries.properties
@@ -0,0 +1,27 @@
+libs.CopyLibs.classpath=\
+    ${base}/CopyLibs/org-netbeans-modules-java-j2seproject-copylibstask.jar
+libs.CopyLibs.displayName=CopyLibs Task
+libs.CopyLibs.prop-version=2.0
+libs.eclipselink.classpath=\
+    ${base}/eclipselink/eclipselink.jar:\
+    ${base}/eclipselink/javax.persistence_2.1.0.v201304241213.jar:\
+    ${base}/eclipselink/org.eclipse.persistence.jpa.jpql_2.5.1.v20130918-f2b9fc5.jar
+libs.eclipselink.displayName=EclipseLink (JPA 2.1)
+libs.eclipselink.prop-maven-dependencies=\n                org.eclipse.persistence:eclipselink:2.5.1:jar\n            
+libs.eclipselinkmodelgen.classpath=\
+    ${base}/eclipselinkmodelgen/org.eclipse.persistence.jpa.modelgen_2.5.1.v20130918-f2b9fc5.jar
+libs.eclipselinkmodelgen.displayName=EclipseLink-ModelGen (JPA 2.1)
+libs.eclipselinkmodelgen.prop-maven-dependencies=org.eclipse.persistence:org.eclipse.persistence.jpa.modelgen.processor:2.5.1:jar
+libs.javaee-endorsed-api-6.0.classpath=\
+    ${base}/javaee-endorsed-api-6.0/javax.annotation.jar:\
+    ${base}/javaee-endorsed-api-6.0/jaxb-api-osgi.jar:\
+    ${base}/javaee-endorsed-api-6.0/webservices-api-osgi.jar
+libs.javaee-endorsed-api-6.0.displayName=Java EE 6 Endorsed API Library
+libs.javaee-endorsed-api-6.0.javadoc=\
+    ${base}/javaee-endorsed-api-6.0/javaee-doc-api.jar
+libs.primefaces.classpath=\
+    ${base}/primefaces/primefaces-3.5.jar:\
+    ${base}/primefaces/commons-fileupload-1.3.jar
+libs.primefaces.displayName=PrimeFaces 3.5
+libs.primefaces.prop-maven-dependencies=\n                org.primefaces:primefaces:3.5:jar\n                commons-fileupload:commons-fileupload:1.3:jar\n            
+libs.primefaces.prop-maven-repositories=default:http://repository.primefaces.org/
diff --git a/src/java/DmWebPortal/lib/org-netbeans-modules-java-j2seproject-copylibstask.jar b/src/java/DmWebPortal/lib/org-netbeans-modules-java-j2seproject-copylibstask.jar
new file mode 100644
index 0000000000000000000000000000000000000000..14c3bbbf50780fcdd7e29a43c3b6b416f7850744
Binary files /dev/null and b/src/java/DmWebPortal/lib/org-netbeans-modules-java-j2seproject-copylibstask.jar differ
diff --git a/src/java/DmWebPortal/lib/poi-3.10.jar b/src/java/DmWebPortal/lib/poi-3.10.jar
new file mode 100644
index 0000000000000000000000000000000000000000..8862e217587e06a41c2a5dd8703e683428df8a54
Binary files /dev/null and b/src/java/DmWebPortal/lib/poi-3.10.jar differ
diff --git a/src/java/DmWebPortal/lib/primefaces-4.0.jar b/src/java/DmWebPortal/lib/primefaces-4.0.jar
new file mode 100644
index 0000000000000000000000000000000000000000..1bff6658be3e0a972502e943236fb19069e6c82b
Binary files /dev/null and b/src/java/DmWebPortal/lib/primefaces-4.0.jar differ
diff --git a/src/java/DmWebPortal/lib/primefaces/commons-fileupload-1.3.jar b/src/java/DmWebPortal/lib/primefaces/commons-fileupload-1.3.jar
new file mode 100644
index 0000000000000000000000000000000000000000..76a175c15b3ce49124a504170b1abe073e75e932
Binary files /dev/null and b/src/java/DmWebPortal/lib/primefaces/commons-fileupload-1.3.jar differ
diff --git a/src/java/DmWebPortal/lib/primefaces/primefaces-3.5.jar b/src/java/DmWebPortal/lib/primefaces/primefaces-3.5.jar
new file mode 100644
index 0000000000000000000000000000000000000000..e5c0eba4ccb062bd0205d7ed7c164fc2f3c6551f
Binary files /dev/null and b/src/java/DmWebPortal/lib/primefaces/primefaces-3.5.jar differ
diff --git a/src/java/DmWebPortal/nbproject/ant-deploy.xml b/src/java/DmWebPortal/nbproject/ant-deploy.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2d5f8778d18757ea5ded4eea4da13ca1adc51093
--- /dev/null
+++ b/src/java/DmWebPortal/nbproject/ant-deploy.xml
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project default="-deploy-ant" basedir=".">
+    <target name="-init-cl-deployment-env" if="deploy.ant.enabled">
+        <property file="${deploy.ant.properties.file}" />
+        <available file="${deploy.ant.docbase.dir}/WEB-INF/sun-web.xml" property="sun.web.present"/>
+        <available file="${deploy.ant.docbase.dir}/WEB-INF/glassfish-web.xml" property="glassfish.web.present"/>
+        <available file="${deploy.ant.resource.dir}" property="has.setup"/>
+        <tempfile prefix="gfv3" property="gfv3.password.file" destdir="${java.io.tmpdir}"/>  <!-- do not forget to delete this! -->
+        <echo message="AS_ADMIN_PASSWORD=${gfv3.password}" file="${gfv3.password.file}"/>
+    </target>
+    
+    <target name="-parse-sun-web" depends="-init-cl-deployment-env" if="sun.web.present">
+        <tempfile prefix="gfv3" property="temp.sun.web" destdir="${java.io.tmpdir}"/>
+        <copy file="${deploy.ant.docbase.dir}/WEB-INF/sun-web.xml" tofile="${temp.sun.web}"/>
+        <!-- The doctype triggers resolution which can fail -->
+        <replace file="${temp.sun.web}">
+            <replacetoken><![CDATA[<!DOCTYPE]]></replacetoken>
+            <replacevalue><![CDATA[<!-- <!DOCTYPE]]></replacevalue>
+        </replace>
+        <replace file="${temp.sun.web}">
+            <replacetoken><![CDATA[<sun-web-app]]></replacetoken>
+            <replacevalue><![CDATA[--> <sun-web-app]]></replacevalue>
+        </replace>
+        <xmlproperty file="${temp.sun.web}" validate="false">
+        </xmlproperty>    
+        <delete file="${temp.sun.web}"/>
+        <condition property="deploy.ant.client.url" value="${gfv3.url}${sun-web-app.context-root}" else="${gfv3.url}/${ant.project.name}">
+            <isset property="sun-web-app.context-root"/>
+        </condition>
+        <condition property="deploy.context.root.argument" value="&amp;contextroot=${sun-web-app.context-root}" else="/${ant.project.name}">
+            <isset property="sun-web-app.context-root"/>
+        </condition>
+    </target>
+    <target name="-parse-glassfish-web" depends="-init-cl-deployment-env" if="glassfish.web.present">
+        <tempfile prefix="gfv3" property="temp.gf.web" destdir="${java.io.tmpdir}"/>
+        <copy file="${deploy.ant.docbase.dir}/WEB-INF/glassfish-web.xml" tofile="${temp.gf.web}"/>
+        <!-- The doctype triggers resolution which can fail -->
+        <replace file="${temp.gf.web}">
+            <replacetoken><![CDATA[<!DOCTYPE]]></replacetoken>
+            <replacevalue><![CDATA[<!-- <!DOCTYPE]]></replacevalue>
+        </replace>
+        <replace file="${temp.gf.web}">
+            <replacetoken><![CDATA[<glassfish-web-app]]></replacetoken>
+            <replacevalue><![CDATA[--> <glassfish-web-app]]></replacevalue>
+        </replace>
+        <xmlproperty file="${temp.gf.web}" validate="false">
+        </xmlproperty>
+        <delete file="${temp.gf.web}"/>
+        <condition property="deploy.ant.client.url" value="${gfv3.url}${glassfish-web-app.context-root}" else="${gfv3.url}/${ant.project.name}">
+            <isset property="glassfish-web-app.context-root"/>
+        </condition>
+        <condition property="deploy.context.root.argument" value="&amp;contextroot=${glassfish-web-app.context-root}" else="/${ant.project.name}">
+            <isset property="glassfish-web-app.context-root"/>
+        </condition>
+    </target>
+    <target name="-no-parse-sun-web" depends="-init-cl-deployment-env" unless="sun.web.present">
+        <property name="deploy.context.root.argument" value=""/>
+    </target>
+    <target name="-add-resources" depends="-init-cl-deployment-env" if="has.setup">
+        <tempfile prefix="gfv3" property="gfv3.resources.dir" destdir="${java.io.tmpdir}"/>
+        <mkdir dir="${gfv3.resources.dir}"/>
+        <mkdir dir="${gfv3.resources.dir}/META-INF"/>
+        <copy todir="${gfv3.resources.dir}/META-INF">
+            <fileset dir="${deploy.ant.resource.dir}"/>
+        </copy>
+        <jar destfile="${deploy.ant.archive}" update="true">
+            <fileset dir="${gfv3.resources.dir}"/>
+        </jar>
+        <delete dir="${gfv3.resources.dir}"/>
+    </target>
+    <target name="-deploy-ant" depends="-parse-glassfish-web, -parse-sun-web, -no-parse-sun-web,-add-resources" if="deploy.ant.enabled">
+        <antcall target="-deploy-without-pw"/>
+        <antcall target="-deploy-with-pw"/>
+    </target>
+
+    <target name="-deploy-without-pw" unless="gfv3.password">
+        <echo message="Deploying ${deploy.ant.archive}"/>
+        <tempfile prefix="gfv3" property="gfv3.results.file" destdir="${java.io.tmpdir}"/>  <!-- do not forget to delete this! -->
+        <property name="full.deploy.ant.archive" location="${deploy.ant.archive}"/>
+        <get src="${gfv3.admin.url}/__asadmin/deploy?path=${full.deploy.ant.archive}${deploy.context.root.argument}&amp;force=true&amp;name=${ant.project.name}"
+            dest="${gfv3.results.file}"/>
+        <delete file="${gfv3.results.file}"/>    
+    </target>
+    <target name="-deploy-with-pw" if="gfv3.password">
+        <echo message="Deploying ${deploy.ant.archive}"/>
+        <tempfile prefix="gfv3" property="gfv3.results.file" destdir="${java.io.tmpdir}"/>  <!-- do not forget to delete this! -->
+        <property name="full.deploy.ant.archive" location="${deploy.ant.archive}"/>
+        <get username="${gfv3.username}" password="${gfv3.password}" src="${gfv3.admin.url}/__asadmin/deploy?path=${full.deploy.ant.archive}${deploy.context.root.argument}&amp;force=true&amp;name=${ant.project.name}"
+            dest="${gfv3.results.file}"/>
+        <delete file="${gfv3.results.file}"/>
+    </target>
+    <target name="-undeploy-ant" depends="-init-cl-deployment-env" if="deploy.ant.enabled">
+        <antcall target="-undeploy-without-pw"/>
+        <antcall target="-undeploy-with-pw"/>
+    </target>
+
+    <target name="-undeploy-without-pw" unless="gfv3.password">
+        <echo message="Undeploying ${deploy.ant.archive}"/>
+        <tempfile prefix="gfv3" property="gfv3.results.file" destdir="${java.io.tmpdir}"/>  <!-- do not forget to delete this! -->
+        <get src="${gfv3.admin.url}/__asadmin/undeploy?name=${ant.project.name}"
+            dest="${gfv3.results.file}"/>
+        <delete file="${gfv3.results.file}"/>    
+    </target>
+    <target name="-undeploy-with-pw" if="gfv3.password">
+        <echo message="Undeploying ${deploy.ant.archive}"/>
+        <tempfile prefix="gfv3" property="gfv3.results.file" destdir="${java.io.tmpdir}"/>  <!-- do not forget to delete this! -->
+        <get username="${gfv3.username}" password="${gfv3.password}" src="${gfv3.admin.url}/__asadmin/undeploy?name=${ant.project.name}"
+            dest="${gfv3.results.file}"/>
+        <delete file="${gfv3.results.file}"/>
+    </target>
+</project>
diff --git a/src/java/DmWebPortal/nbproject/build-impl.xml b/src/java/DmWebPortal/nbproject/build-impl.xml
new file mode 100644
index 0000000000000000000000000000000000000000..077acaf0dd061fbdc9820582602df96cf79dfd9d
--- /dev/null
+++ b/src/java/DmWebPortal/nbproject/build-impl.xml
@@ -0,0 +1,1477 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+        *** GENERATED FROM project.xml - DO NOT EDIT  ***
+        ***         EDIT ../build.xml INSTEAD         ***
+
+        For the purpose of easier reading the script
+        is divided into following sections:
+        - initialization
+        - compilation
+        - dist
+        - execution
+        - debugging
+        - javadoc
+        - test compilation
+        - test execution
+        - test debugging
+        - cleanup
+
+        -->
+<project xmlns:webproject1="http://www.netbeans.org/ns/web-project/1" xmlns:webproject2="http://www.netbeans.org/ns/web-project/2" xmlns:webproject3="http://www.netbeans.org/ns/web-project/3" basedir=".." default="default" name="DmWebPortal-impl">
+    <import file="ant-deploy.xml"/>
+    <fail message="Please build using Ant 1.7.1 or higher.">
+        <condition>
+            <not>
+                <antversion atleast="1.7.1"/>
+            </not>
+        </condition>
+    </fail>
+    <target depends="dist,javadoc" description="Build whole project." name="default"/>
+    <!--
+                INITIALIZATION SECTION
+            -->
+    <target name="-pre-init">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="-pre-init" name="-init-private">
+        <property file="nbproject/private/private.properties"/>
+    </target>
+    <target name="-pre-init-libraries">
+        <property location="./lib/nblibraries.properties" name="libraries.path"/>
+        <dirname file="${libraries.path}" property="libraries.dir.nativedirsep"/>
+        <pathconvert dirsep="/" property="libraries.dir">
+            <path path="${libraries.dir.nativedirsep}"/>
+        </pathconvert>
+        <basename file="${libraries.path}" property="libraries.basename" suffix=".properties"/>
+        <available file="${libraries.dir}/${libraries.basename}-private.properties" property="private.properties.available"/>
+    </target>
+    <target depends="-pre-init-libraries" if="private.properties.available" name="-init-private-libraries">
+        <loadproperties encoding="ISO-8859-1" srcfile="${libraries.dir}/${libraries.basename}-private.properties">
+            <filterchain>
+                <replacestring from="$${base}" to="${libraries.dir}"/>
+                <escapeunicode/>
+            </filterchain>
+        </loadproperties>
+    </target>
+    <target depends="-pre-init,-init-private,-init-private-libraries" name="-init-libraries">
+        <loadproperties encoding="ISO-8859-1" srcfile="${libraries.path}">
+            <filterchain>
+                <replacestring from="$${base}" to="${libraries.dir}"/>
+                <escapeunicode/>
+            </filterchain>
+        </loadproperties>
+    </target>
+    <target depends="-pre-init,-init-private,-init-libraries" name="-init-user">
+        <property file="${user.properties.file}"/>
+        <!-- The two properties below are usually overridden -->
+        <!-- by the active platform. Just a fallback. -->
+        <property name="default.javac.source" value="1.4"/>
+        <property name="default.javac.target" value="1.4"/>
+    </target>
+    <target depends="-pre-init,-init-private,-init-libraries,-init-user" name="-init-project">
+        <property file="nbproject/project.properties"/>
+    </target>
+    <target depends="-pre-init,-init-private,-init-user,-init-project,-init-macrodef-property" if="dist.ear.dir" name="-do-ear-init"/>
+    <target depends="-pre-init,-init-private,-init-libraries,-init-user,-init-project,-init-macrodef-property" name="-do-init">
+        <condition property="have.tests">
+            <or>
+                <available file="${test.src.dir}"/>
+            </or>
+        </condition>
+        <condition property="have.sources">
+            <or>
+                <available file="${src.dir}"/>
+            </or>
+        </condition>
+        <condition property="netbeans.home+have.tests">
+            <and>
+                <isset property="netbeans.home"/>
+                <isset property="have.tests"/>
+            </and>
+        </condition>
+        <condition property="no.javadoc.preview">
+            <isfalse value="${javadoc.preview}"/>
+        </condition>
+        <property name="javac.compilerargs" value=""/>
+        <condition property="no.deps">
+            <and>
+                <istrue value="${no.dependencies}"/>
+            </and>
+        </condition>
+        <condition property="no.dist.ear.dir">
+            <not>
+                <isset property="dist.ear.dir"/>
+            </not>
+        </condition>
+        <property name="build.web.excludes" value="${build.classes.excludes}"/>
+        <condition property="do.compile.jsps">
+            <istrue value="${compile.jsps}"/>
+        </condition>
+        <condition property="do.debug.server">
+            <or>
+                <not>
+                    <isset property="debug.server"/>
+                </not>
+                <istrue value="${debug.server}"/>
+                <and>
+                    <not>
+                        <istrue value="${debug.server}"/>
+                    </not>
+                    <not>
+                        <istrue value="${debug.client}"/>
+                    </not>
+                </and>
+            </or>
+        </condition>
+        <condition property="do.debug.client">
+            <istrue value="${debug.client}"/>
+        </condition>
+        <condition property="do.display.browser">
+            <istrue value="${display.browser}"/>
+        </condition>
+        <condition property="do.display.browser.debug.old">
+            <and>
+                <isset property="do.display.browser"/>
+                <not>
+                    <isset property="do.debug.client"/>
+                </not>
+                <not>
+                    <isset property="browser.context"/>
+                </not>
+            </and>
+        </condition>
+        <condition property="do.display.browser.debug">
+            <and>
+                <isset property="do.display.browser"/>
+                <not>
+                    <isset property="do.debug.client"/>
+                </not>
+                <isset property="browser.context"/>
+            </and>
+        </condition>
+        <available file="${conf.dir}/MANIFEST.MF" property="has.custom.manifest"/>
+        <available file="${persistence.xml.dir}/persistence.xml" property="has.persistence.xml"/>
+        <condition property="do.war.package.with.custom.manifest">
+            <isset property="has.custom.manifest"/>
+        </condition>
+        <condition property="do.war.package.without.custom.manifest">
+            <not>
+                <isset property="has.custom.manifest"/>
+            </not>
+        </condition>
+        <condition property="do.tmp.war.package.with.custom.manifest">
+            <and>
+                <isset property="has.custom.manifest"/>
+                <or>
+                    <isfalse value="${directory.deployment.supported}"/>
+                    <isset property="dist.ear.dir"/>
+                </or>
+            </and>
+        </condition>
+        <condition property="do.tmp.war.package.without.custom.manifest">
+            <and>
+                <not>
+                    <isset property="has.custom.manifest"/>
+                </not>
+                <or>
+                    <isfalse value="${directory.deployment.supported}"/>
+                    <isset property="dist.ear.dir"/>
+                </or>
+            </and>
+        </condition>
+        <condition property="do.tmp.war.package">
+            <or>
+                <isfalse value="${directory.deployment.supported}"/>
+                <isset property="dist.ear.dir"/>
+            </or>
+        </condition>
+        <property name="build.meta.inf.dir" value="${build.web.dir}/META-INF"/>
+        <condition else="" property="application.args.param" value="${application.args}">
+            <and>
+                <isset property="application.args"/>
+                <not>
+                    <equals arg1="${application.args}" arg2="" trim="true"/>
+                </not>
+            </and>
+        </condition>
+        <property name="source.encoding" value="${file.encoding}"/>
+        <condition property="javadoc.encoding.used" value="${javadoc.encoding}">
+            <and>
+                <isset property="javadoc.encoding"/>
+                <not>
+                    <equals arg1="${javadoc.encoding}" arg2=""/>
+                </not>
+            </and>
+        </condition>
+        <property name="javadoc.encoding.used" value="${source.encoding}"/>
+        <property name="includes" value="**"/>
+        <property name="excludes" value=""/>
+        <property name="runmain.jvmargs" value=""/>
+        <path id="endorsed.classpath.path" path="${endorsed.classpath}"/>
+        <condition else="" property="endorsed.classpath.cmd.line.arg" value="-Xbootclasspath/p:'${toString:endorsed.classpath.path}'">
+            <and>
+                <isset property="endorsed.classpath"/>
+                <length length="0" string="${endorsed.classpath}" when="greater"/>
+            </and>
+        </condition>
+        <condition else="false" property="jdkBug6558476">
+            <and>
+                <matches pattern="1\.[56]" string="${java.specification.version}"/>
+                <not>
+                    <os family="unix"/>
+                </not>
+            </and>
+        </condition>
+        <property name="javac.fork" value="${jdkBug6558476}"/>
+        <condition property="junit.available">
+            <or>
+                <available classname="org.junit.Test" classpath="${run.test.classpath}"/>
+                <available classname="junit.framework.Test" classpath="${run.test.classpath}"/>
+            </or>
+        </condition>
+        <condition property="testng.available">
+            <available classname="org.testng.annotations.Test" classpath="${run.test.classpath}"/>
+        </condition>
+        <condition property="junit+testng.available">
+            <and>
+                <istrue value="${junit.available}"/>
+                <istrue value="${testng.available}"/>
+            </and>
+        </condition>
+        <condition else="testng" property="testng.mode" value="mixed">
+            <istrue value="${junit+testng.available}"/>
+        </condition>
+        <condition else="" property="testng.debug.mode" value="-mixed">
+            <istrue value="${junit+testng.available}"/>
+        </condition>
+    </target>
+    <target depends="init" name="-init-cos" unless="deploy.on.save">
+        <condition property="deploy.on.save" value="true">
+            <or>
+                <istrue value="${j2ee.deploy.on.save}"/>
+                <istrue value="${j2ee.compile.on.save}"/>
+            </or>
+        </condition>
+    </target>
+    <target name="-post-init">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="-pre-init,-init-private,-init-libraries,-init-user,-init-project,-do-init" name="-init-check">
+        <fail unless="src.dir">Must set src.dir</fail>
+        <fail unless="test.src.dir">Must set test.src.dir</fail>
+        <fail unless="build.dir">Must set build.dir</fail>
+        <fail unless="build.web.dir">Must set build.web.dir</fail>
+        <fail unless="build.generated.dir">Must set build.generated.dir</fail>
+        <fail unless="dist.dir">Must set dist.dir</fail>
+        <fail unless="build.classes.dir">Must set build.classes.dir</fail>
+        <fail unless="dist.javadoc.dir">Must set dist.javadoc.dir</fail>
+        <fail unless="build.test.classes.dir">Must set build.test.classes.dir</fail>
+        <fail unless="build.test.results.dir">Must set build.test.results.dir</fail>
+        <fail unless="build.classes.excludes">Must set build.classes.excludes</fail>
+        <fail unless="dist.war">Must set dist.war</fail>
+        <condition property="missing.j2ee.server.home">
+            <and>
+                <matches pattern="j2ee.server.home" string="${j2ee.platform.classpath}"/>
+                <not>
+                    <isset property="j2ee.server.home"/>
+                </not>
+            </and>
+        </condition>
+        <fail if="missing.j2ee.server.home">
+The Java EE server classpath is not correctly set up - server home directory is missing.
+Either open the project in the IDE and assign the server or setup the server classpath manually.
+For example like this:
+   ant -Dj2ee.server.home=&lt;app_server_installation_directory&gt;
+                </fail>
+        <fail unless="j2ee.platform.classpath">
+The Java EE server classpath is not correctly set up. Your active server type is ${j2ee.server.type}.
+Either open the project in the IDE and assign the server or setup the server classpath manually.
+For example like this:
+   ant -Duser.properties.file=&lt;path_to_property_file&gt; (where you put the property "j2ee.platform.classpath" in a .properties file)
+or ant -Dj2ee.platform.classpath=&lt;server_classpath&gt; (where no properties file is used)
+                </fail>
+    </target>
+    <target name="-init-macrodef-property">
+        <macrodef name="property" uri="http://www.netbeans.org/ns/web-project/1">
+            <attribute name="name"/>
+            <attribute name="value"/>
+            <sequential>
+                <property name="@{name}" value="${@{value}}"/>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-ap-cmdline-properties" if="ap.supported.internal" name="-init-macrodef-javac-with-processors">
+        <macrodef name="javac" uri="http://www.netbeans.org/ns/web-project/2">
+            <attribute default="${src.dir}" name="srcdir"/>
+            <attribute default="${build.classes.dir}" name="destdir"/>
+            <attribute default="${javac.classpath}:${j2ee.platform.classpath}" name="classpath"/>
+            <attribute default="${javac.processorpath}" name="processorpath"/>
+            <attribute default="${build.generated.sources.dir}/ap-source-output" name="apgeneratedsrcdir"/>
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="${javac.debug}" name="debug"/>
+            <attribute default="${empty.dir}" name="gensrcdir"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <property location="${build.dir}/empty" name="empty.dir"/>
+                <mkdir dir="${empty.dir}"/>
+                <mkdir dir="@{apgeneratedsrcdir}"/>
+                <javac debug="@{debug}" deprecation="${javac.deprecation}" destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" fork="${javac.fork}" includeantruntime="false" includes="@{includes}" source="${javac.source}" srcdir="@{srcdir}" target="${javac.target}">
+                    <src>
+                        <dirset dir="@{gensrcdir}" erroronmissingdir="false">
+                            <include name="*"/>
+                        </dirset>
+                    </src>
+                    <classpath>
+                        <path path="@{classpath}"/>
+                    </classpath>
+                    <compilerarg line="${endorsed.classpath.cmd.line.arg}"/>
+                    <compilerarg line="${javac.compilerargs}"/>
+                    <compilerarg value="-processorpath"/>
+                    <compilerarg path="@{processorpath}:${empty.dir}"/>
+                    <compilerarg line="${ap.processors.internal}"/>
+                    <compilerarg value="-s"/>
+                    <compilerarg path="@{apgeneratedsrcdir}"/>
+                    <compilerarg line="${ap.proc.none.internal}"/>
+                    <customize/>
+                </javac>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-ap-cmdline-properties" name="-init-macrodef-javac-without-processors" unless="ap.supported.internal">
+        <macrodef name="javac" uri="http://www.netbeans.org/ns/web-project/2">
+            <attribute default="${src.dir}" name="srcdir"/>
+            <attribute default="${build.classes.dir}" name="destdir"/>
+            <attribute default="${javac.classpath}:${j2ee.platform.classpath}" name="classpath"/>
+            <attribute default="${javac.processorpath}" name="processorpath"/>
+            <attribute default="${build.generated.sources.dir}/ap-source-output" name="apgeneratedsrcdir"/>
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="${javac.debug}" name="debug"/>
+            <attribute default="${empty.dir}" name="gensrcdir"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <property location="${build.dir}/empty" name="empty.dir"/>
+                <mkdir dir="${empty.dir}"/>
+                <javac debug="@{debug}" deprecation="${javac.deprecation}" destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" includeantruntime="false" includes="@{includes}" source="${javac.source}" srcdir="@{srcdir}" target="${javac.target}">
+                    <src>
+                        <dirset dir="@{gensrcdir}" erroronmissingdir="false">
+                            <include name="*"/>
+                        </dirset>
+                    </src>
+                    <classpath>
+                        <path path="@{classpath}"/>
+                    </classpath>
+                    <compilerarg line="${endorsed.classpath.cmd.line.arg}"/>
+                    <compilerarg line="${javac.compilerargs}"/>
+                    <customize/>
+                </javac>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-macrodef-javac-with-processors,-init-macrodef-javac-without-processors" name="-init-macrodef-javac">
+        <macrodef name="depend" uri="http://www.netbeans.org/ns/web-project/2">
+            <attribute default="${src.dir}" name="srcdir"/>
+            <attribute default="${build.classes.dir}" name="destdir"/>
+            <attribute default="${javac.classpath}:${j2ee.platform.classpath}" name="classpath"/>
+            <sequential>
+                <depend cache="${build.dir}/depcache" destdir="@{destdir}" excludes="${excludes}" includes="${includes}" srcdir="@{srcdir}">
+                    <classpath>
+                        <path path="@{classpath}"/>
+                    </classpath>
+                </depend>
+            </sequential>
+        </macrodef>
+        <macrodef name="force-recompile" uri="http://www.netbeans.org/ns/web-project/2">
+            <attribute default="${build.classes.dir}" name="destdir"/>
+            <sequential>
+                <fail unless="javac.includes">Must set javac.includes</fail>
+                <pathconvert pathsep="${line.separator}" property="javac.includes.binary">
+                    <path>
+                        <filelist dir="@{destdir}" files="${javac.includes}"/>
+                    </path>
+                    <globmapper from="*.java" to="*.class"/>
+                </pathconvert>
+                <tempfile deleteonexit="true" property="javac.includesfile.binary"/>
+                <echo file="${javac.includesfile.binary}" message="${javac.includes.binary}"/>
+                <delete>
+                    <files includesfile="${javac.includesfile.binary}"/>
+                </delete>
+                <delete file="${javac.includesfile.binary}"/>
+            </sequential>
+        </macrodef>
+    </target>
+    <target if="${junit.available}" name="-init-macrodef-junit-init">
+        <condition else="false" property="nb.junit.batch" value="true">
+            <and>
+                <istrue value="${junit.available}"/>
+                <not>
+                    <isset property="test.method"/>
+                </not>
+            </and>
+        </condition>
+        <condition else="false" property="nb.junit.single" value="true">
+            <and>
+                <istrue value="${junit.available}"/>
+                <isset property="test.method"/>
+            </and>
+        </condition>
+    </target>
+    <target name="-init-test-properties">
+        <property name="test.binaryincludes" value="&lt;nothing&gt;"/>
+        <property name="test.binarytestincludes" value=""/>
+        <property name="test.binaryexcludes" value=""/>
+    </target>
+    <target if="${nb.junit.single}" name="-init-macrodef-junit-single" unless="${nb.junit.batch}">
+        <macrodef name="junit" uri="http://www.netbeans.org/ns/web-project/2">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <junit dir="${basedir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" showoutput="true" tempdir="${java.io.tmpdir}">
+                    <test methods="@{testmethods}" name="@{testincludes}" todir="${build.test.results.dir}"/>
+                    <syspropertyset>
+                        <propertyref prefix="test-sys-prop."/>
+                        <mapper from="test-sys-prop.*" to="*" type="glob"/>
+                    </syspropertyset>
+                    <formatter type="brief" usefile="false"/>
+                    <formatter type="xml"/>
+                    <jvmarg value="-ea"/>
+                    <customize/>
+                </junit>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-test-properties" if="${nb.junit.batch}" name="-init-macrodef-junit-batch" unless="${nb.junit.single}">
+        <macrodef name="junit" uri="http://www.netbeans.org/ns/web-project/2">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <property name="run.jvmargs.ide" value=""/>
+                <junit dir="${basedir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" showoutput="true" tempdir="${build.dir}">
+                    <batchtest todir="${build.test.results.dir}">
+                        <fileset dir="${test.src.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
+                            <filename name="@{testincludes}"/>
+                        </fileset>
+                        <fileset dir="${build.test.classes.dir}" excludes="@{excludes},${excludes},${test.binaryexcludes}" includes="${test.binaryincludes}">
+                            <filename name="${test.binarytestincludes}"/>
+                        </fileset>
+                    </batchtest>
+                    <syspropertyset>
+                        <propertyref prefix="test-sys-prop."/>
+                        <mapper from="test-sys-prop.*" to="*" type="glob"/>
+                    </syspropertyset>
+                    <formatter type="brief" usefile="false"/>
+                    <formatter type="xml"/>
+                    <jvmarg value="-ea"/>
+                    <jvmarg line="${run.jvmargs.ide}"/>
+                    <customize/>
+                </junit>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-macrodef-junit-init,-init-macrodef-junit-single, -init-macrodef-junit-batch" if="${junit.available}" name="-init-macrodef-junit"/>
+    <target if="${testng.available}" name="-init-macrodef-testng">
+        <macrodef name="testng" uri="http://www.netbeans.org/ns/web-project/2">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <condition else="" property="testng.methods.arg" value="@{testincludes}.@{testmethods}">
+                    <isset property="test.method"/>
+                </condition>
+                <union id="test.set">
+                    <fileset dir="${test.src.dir}" excludes="@{excludes},**/*.xml,${excludes}" includes="@{includes}">
+                        <filename name="@{testincludes}"/>
+                    </fileset>
+                </union>
+                <taskdef classname="org.testng.TestNGAntTask" classpath="${run.test.classpath}" name="testng"/>
+                <testng classfilesetref="test.set" failureProperty="tests.failed" listeners="org.testng.reporters.VerboseReporter" methods="${testng.methods.arg}" mode="${testng.mode}" outputdir="${build.test.results.dir}" suitename="DmWebPortal" testname="TestNG tests" workingDir="${basedir}">
+                    <xmlfileset dir="${build.test.classes.dir}" includes="@{testincludes}"/>
+                    <propertyset>
+                        <propertyref prefix="test-sys-prop."/>
+                        <mapper from="test-sys-prop.*" to="*" type="glob"/>
+                    </propertyset>
+                    <customize/>
+                </testng>
+            </sequential>
+        </macrodef>
+    </target>
+    <target name="-init-macrodef-test-impl">
+        <macrodef name="test-impl" uri="http://www.netbeans.org/ns/web-project/2">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <element implicit="true" name="customize" optional="true"/>
+            <sequential>
+                <echo>No tests executed.</echo>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-macrodef-junit" if="${junit.available}" name="-init-macrodef-junit-impl">
+        <macrodef name="test-impl" uri="http://www.netbeans.org/ns/web-project/2">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <element implicit="true" name="customize" optional="true"/>
+            <sequential>
+                <webproject2:junit excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">
+                    <customize/>
+                </webproject2:junit>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-macrodef-testng" if="${testng.available}" name="-init-macrodef-testng-impl">
+        <macrodef name="test-impl" uri="http://www.netbeans.org/ns/web-project/2">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <element implicit="true" name="customize" optional="true"/>
+            <sequential>
+                <webproject2:testng excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">
+                    <customize/>
+                </webproject2:testng>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-macrodef-test-impl,-init-macrodef-junit-impl,-init-macrodef-testng-impl" name="-init-macrodef-test">
+        <macrodef name="test" uri="http://www.netbeans.org/ns/web-project/2">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <sequential>
+                <webproject2:test-impl excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">
+                    <customize>
+                        <classpath>
+                            <path path="${run.test.classpath}:${j2ee.platform.classpath}:${j2ee.platform.embeddableejb.classpath}"/>
+                        </classpath>
+                        <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
+                        <jvmarg line="${runmain.jvmargs}"/>
+                    </customize>
+                </webproject2:test-impl>
+            </sequential>
+        </macrodef>
+    </target>
+    <target if="${junit.available}" name="-init-macrodef-junit-debug" unless="${nb.junit.batch}">
+        <macrodef name="junit-debug" uri="http://www.netbeans.org/ns/web-project/2">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <junit dir="${basedir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" showoutput="true" tempdir="${java.io.tmpdir}">
+                    <test methods="@{testmethods}" name="@{testincludes}" todir="${build.test.results.dir}"/>
+                    <syspropertyset>
+                        <propertyref prefix="test-sys-prop."/>
+                        <mapper from="test-sys-prop.*" to="*" type="glob"/>
+                    </syspropertyset>
+                    <formatter type="brief" usefile="false"/>
+                    <formatter type="xml"/>
+                    <jvmarg value="-ea"/>
+                    <jvmarg line="${debug-args-line}"/>
+                    <jvmarg value="-Xrunjdwp:transport=${debug-transport},address=${jpda.address}"/>
+                    <customize/>
+                </junit>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-test-properties" if="${nb.junit.batch}" name="-init-macrodef-junit-debug-batch">
+        <macrodef name="junit-debug" uri="http://www.netbeans.org/ns/web-project/2">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <property name="run.jvmargs.ide" value=""/>
+                <junit dir="${basedir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" showoutput="true" tempdir="${build.dir}">
+                    <batchtest todir="${build.test.results.dir}">
+                        <fileset dir="${test.src.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
+                            <filename name="@{testincludes}"/>
+                        </fileset>
+                        <fileset dir="${build.test.classes.dir}" excludes="@{excludes},${excludes},${test.binaryexcludes}" includes="${test.binaryincludes}">
+                            <filename name="${test.binarytestincludes}"/>
+                        </fileset>
+                    </batchtest>
+                    <syspropertyset>
+                        <propertyref prefix="test-sys-prop."/>
+                        <mapper from="test-sys-prop.*" to="*" type="glob"/>
+                    </syspropertyset>
+                    <formatter type="brief" usefile="false"/>
+                    <formatter type="xml"/>
+                    <jvmarg value="-ea"/>
+                    <jvmarg line="${run.jvmargs.ide}"/>
+                    <jvmarg line="${debug-args-line}"/>
+                    <jvmarg value="-Xrunjdwp:transport=${debug-transport},address=${jpda.address}"/>
+                    <customize/>
+                </junit>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-macrodef-junit-debug,-init-macrodef-junit-debug-batch" if="${junit.available}" name="-init-macrodef-junit-debug-impl">
+        <macrodef name="test-debug-impl" uri="http://www.netbeans.org/ns/web-project/2">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <element implicit="true" name="customize" optional="true"/>
+            <sequential>
+                <webproject2:junit-debug excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">
+                    <customize/>
+                </webproject2:junit-debug>
+            </sequential>
+        </macrodef>
+    </target>
+    <target if="${testng.available}" name="-init-macrodef-testng-debug">
+        <macrodef name="testng-debug" uri="http://www.netbeans.org/ns/web-project/2">
+            <attribute default="${main.class}" name="testClass"/>
+            <attribute default="" name="testMethod"/>
+            <element name="customize2" optional="true"/>
+            <sequential>
+                <condition else="-testclass @{testClass}" property="test.class.or.method" value="-methods @{testClass}.@{testMethod}">
+                    <isset property="test.method"/>
+                </condition>
+                <condition else="-suitename DmWebPortal -testname @{testClass} ${test.class.or.method}" property="testng.cmd.args" value="@{testClass}">
+                    <matches pattern=".*\.xml" string="@{testClass}"/>
+                </condition>
+                <delete dir="${build.test.results.dir}" quiet="true"/>
+                <mkdir dir="${build.test.results.dir}"/>
+                <webproject1:debug args="${testng.cmd.args}" classname="org.testng.TestNG" classpath="${debug.test.classpath}:${j2ee.platform.embeddableejb.classpath}">
+                    <customize>
+                        <customize2/>
+                        <jvmarg value="-ea"/>
+                        <arg line="${testng.debug.mode}"/>
+                        <arg line="-d ${build.test.results.dir}"/>
+                        <arg line="-listener org.testng.reporters.VerboseReporter"/>
+                    </customize>
+                </webproject1:debug>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-macrodef-testng-debug" if="${testng.available}" name="-init-macrodef-testng-debug-impl">
+        <macrodef name="testng-debug-impl" uri="http://www.netbeans.org/ns/web-project/2">
+            <attribute default="${main.class}" name="testClass"/>
+            <attribute default="" name="testMethod"/>
+            <element implicit="true" name="customize2" optional="true"/>
+            <sequential>
+                <webproject2:testng-debug testClass="@{testClass}" testMethod="@{testMethod}">
+                    <customize2/>
+                </webproject2:testng-debug>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-macrodef-junit-debug-impl" if="${junit.available}" name="-init-macrodef-test-debug-junit">
+        <macrodef name="test-debug" uri="http://www.netbeans.org/ns/web-project/2">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <attribute default="${main.class}" name="testClass"/>
+            <attribute default="" name="testMethod"/>
+            <sequential>
+                <webproject2:test-debug-impl excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">
+                    <customize>
+                        <classpath>
+                            <path path="${run.test.classpath}:${j2ee.platform.classpath}:${j2ee.platform.embeddableejb.classpath}"/>
+                        </classpath>
+                        <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
+                        <jvmarg line="${runmain.jvmargs}"/>
+                    </customize>
+                </webproject2:test-debug-impl>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-macrodef-testng-debug-impl" if="${testng.available}" name="-init-macrodef-test-debug-testng">
+        <macrodef name="test-debug" uri="http://www.netbeans.org/ns/web-project/2">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <attribute default="" name="testmethods"/>
+            <attribute default="${main.class}" name="testClass"/>
+            <attribute default="" name="testMethod"/>
+            <sequential>
+                <webproject2:testng-debug-impl testClass="@{testClass}" testMethod="@{testMethod}">
+                    <customize2>
+                        <syspropertyset>
+                            <propertyref prefix="test-sys-prop."/>
+                            <mapper from="test-sys-prop.*" to="*" type="glob"/>
+                        </syspropertyset>
+                    </customize2>
+                </webproject2:testng-debug-impl>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-macrodef-test-debug-junit,-init-macrodef-test-debug-testng" name="-init-macrodef-test-debug"/>
+    <target name="-init-macrodef-java">
+        <macrodef name="java" uri="http://www.netbeans.org/ns/web-project/1">
+            <attribute default="${main.class}" name="classname"/>
+            <attribute default="${debug.classpath}" name="classpath"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <java classname="@{classname}" fork="true">
+                    <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
+                    <jvmarg line="${runmain.jvmargs}"/>
+                    <classpath>
+                        <path path="@{classpath}:${j2ee.platform.classpath}"/>
+                    </classpath>
+                    <syspropertyset>
+                        <propertyref prefix="run-sys-prop."/>
+                        <mapper from="run-sys-prop.*" to="*" type="glob"/>
+                    </syspropertyset>
+                    <customize/>
+                </java>
+            </sequential>
+        </macrodef>
+    </target>
+    <target name="-init-macrodef-nbjsdebug">
+        <macrodef name="nbjsdebugstart" uri="http://www.netbeans.org/ns/web-project/1">
+            <attribute default="${client.url}" name="webUrl"/>
+            <sequential>
+                <nbjsdebugstart urlPart="${client.urlPart}" webUrl="@{webUrl}"/>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-debug-args" name="-init-macrodef-nbjpda">
+        <macrodef name="nbjpdastart" uri="http://www.netbeans.org/ns/web-project/1">
+            <attribute default="${main.class}" name="name"/>
+            <attribute default="${debug.classpath}:${j2ee.platform.classpath}" name="classpath"/>
+            <sequential>
+                <nbjpdastart addressproperty="jpda.address" name="@{name}" transport="${debug-transport}">
+                    <classpath>
+                        <path path="@{classpath}"/>
+                    </classpath>
+                </nbjpdastart>
+            </sequential>
+        </macrodef>
+        <macrodef name="nbjpdareload" uri="http://www.netbeans.org/ns/web-project/1">
+            <attribute default="${build.classes.dir}" name="dir"/>
+            <sequential>
+                <nbjpdareload>
+                    <fileset dir="@{dir}" includes="${fix.classes}">
+                        <include name="${fix.includes}*.class"/>
+                    </fileset>
+                </nbjpdareload>
+            </sequential>
+        </macrodef>
+        <macrodef name="nbjpdaappreloaded" uri="http://www.netbeans.org/ns/web-project/1">
+            <sequential>
+                <nbjpdaappreloaded/>
+            </sequential>
+        </macrodef>
+    </target>
+    <target name="-init-debug-args">
+        <property name="version-output" value="java version &quot;${ant.java.version}"/>
+        <condition property="have-jdk-older-than-1.4">
+            <or>
+                <contains string="${version-output}" substring="java version &quot;1.0"/>
+                <contains string="${version-output}" substring="java version &quot;1.1"/>
+                <contains string="${version-output}" substring="java version &quot;1.2"/>
+                <contains string="${version-output}" substring="java version &quot;1.3"/>
+            </or>
+        </condition>
+        <condition else="-Xdebug" property="debug-args-line" value="-Xdebug -Xnoagent -Djava.compiler=none">
+            <istrue value="${have-jdk-older-than-1.4}"/>
+        </condition>
+        <condition else="dt_socket" property="debug-transport-by-os" value="dt_shmem">
+            <os family="windows"/>
+        </condition>
+        <condition else="${debug-transport-by-os}" property="debug-transport" value="${debug.transport}">
+            <isset property="debug.transport"/>
+        </condition>
+    </target>
+    <target depends="-init-debug-args" name="-init-macrodef-debug">
+        <macrodef name="debug" uri="http://www.netbeans.org/ns/web-project/1">
+            <attribute default="${main.class}" name="classname"/>
+            <attribute default="${debug.classpath}:${j2ee.platform.classpath}" name="classpath"/>
+            <attribute default="${application.args.param}" name="args"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <java classname="@{classname}" fork="true">
+                    <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
+                    <jvmarg line="${debug-args-line}"/>
+                    <jvmarg value="-Xrunjdwp:transport=${debug-transport},address=${jpda.address}"/>
+                    <jvmarg line="${runmain.jvmargs}"/>
+                    <classpath>
+                        <path path="@{classpath}"/>
+                    </classpath>
+                    <syspropertyset>
+                        <propertyref prefix="run-sys-prop."/>
+                        <mapper from="run-sys-prop.*" to="*" type="glob"/>
+                    </syspropertyset>
+                    <arg line="@{args}"/>
+                    <customize/>
+                </java>
+            </sequential>
+        </macrodef>
+    </target>
+    <target name="-init-taskdefs">
+        <fail unless="libs.CopyLibs.classpath">
+The libs.CopyLibs.classpath property is not set up.
+This property must point to 
+org-netbeans-modules-java-j2seproject-copylibstask.jar file which is part
+of NetBeans IDE installation and is usually located at 
+&lt;netbeans_installation&gt;/java&lt;version&gt;/ant/extra folder.
+Either open the project in the IDE and make sure CopyLibs library
+exists or setup the property manually. For example like this:
+ ant -Dlibs.CopyLibs.classpath=a/path/to/org-netbeans-modules-java-j2seproject-copylibstask.jar
+                </fail>
+        <taskdef classpath="${libs.CopyLibs.classpath}" resource="org/netbeans/modules/java/j2seproject/copylibstask/antlib.xml"/>
+    </target>
+    <target name="-init-ap-cmdline-properties">
+        <property name="annotation.processing.enabled" value="true"/>
+        <property name="annotation.processing.processors.list" value=""/>
+        <property name="annotation.processing.run.all.processors" value="true"/>
+        <property name="javac.processorpath" value="${javac.classpath}"/>
+        <property name="javac.test.processorpath" value="${javac.test.classpath}"/>
+        <condition property="ap.supported.internal" value="true">
+            <not>
+                <matches pattern="1\.[0-5](\..*)?" string="${javac.source}"/>
+            </not>
+        </condition>
+    </target>
+    <target depends="-init-ap-cmdline-properties" if="ap.supported.internal" name="-init-ap-cmdline-supported">
+        <condition else="" property="ap.processors.internal" value="-processor ${annotation.processing.processors.list}">
+            <isfalse value="${annotation.processing.run.all.processors}"/>
+        </condition>
+        <condition else="" property="ap.proc.none.internal" value="-proc:none">
+            <isfalse value="${annotation.processing.enabled}"/>
+        </condition>
+    </target>
+    <target depends="-init-ap-cmdline-properties,-init-ap-cmdline-supported" name="-init-ap-cmdline">
+        <property name="ap.cmd.line.internal" value=""/>
+    </target>
+    <!--
+                pre NB7.2 profiling section; consider it deprecated
+            -->
+    <target depends="-profile-pre-init, init, -profile-post-init, -profile-init-check" if="profiler.info.jvmargs.agent" name="profile-init"/>
+    <target if="profiler.info.jvmargs.agent" name="-profile-pre-init">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target if="profiler.info.jvmargs.agent" name="-profile-post-init">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="-profile-pre-init, init, -profile-post-init" if="profiler.info.jvmargs.agent" name="-profile-init-check">
+        <fail unless="profiler.info.jvm">Must set JVM to use for profiling in profiler.info.jvm</fail>
+        <fail unless="profiler.info.jvmargs.agent">Must set profiler agent JVM arguments in profiler.info.jvmargs.agent</fail>
+    </target>
+    <!--
+                end of pre NB7.2 profiling section
+            -->
+    <target depends="-pre-init,-init-private,-init-libraries,-init-user,-init-project,-do-init,-post-init,-init-check,-init-macrodef-property,-init-macrodef-javac,-init-macrodef-test,-init-macrodef-test-debug,-init-macrodef-java,-init-macrodef-nbjpda,-init-macrodef-nbjsdebug,-init-macrodef-debug,-init-taskdefs,-init-ap-cmdline" name="init"/>
+    <!--
+                COMPILATION SECTION
+            -->
+    <target depends="init" if="no.dist.ear.dir" name="deps-module-jar" unless="no.deps"/>
+    <target depends="init" if="dist.ear.dir" name="deps-ear-jar" unless="no.deps"/>
+    <target depends="init, deps-module-jar, deps-ear-jar" name="deps-jar" unless="no.deps"/>
+    <target depends="init,deps-jar" name="-pre-pre-compile">
+        <mkdir dir="${build.classes.dir}"/>
+    </target>
+    <target name="-pre-compile">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target name="-copy-webdir">
+        <copy todir="${build.web.dir}">
+            <fileset dir="${web.docbase.dir}" excludes="${build.web.excludes},${excludes}" includes="${includes}"/>
+        </copy>
+        <copy todir="${build.web.dir}/WEB-INF">
+            <fileset dir="${webinf.dir}" excludes="${build.web.excludes}"/>
+        </copy>
+    </target>
+    <target depends="init, deps-jar, -pre-pre-compile, -pre-compile, -copy-manifest, -copy-persistence-xml, -copy-webdir, library-inclusion-in-archive,library-inclusion-in-manifest" if="have.sources" name="-do-compile">
+        <webproject2:javac destdir="${build.classes.dir}" gensrcdir="${build.generated.sources.dir}"/>
+        <copy todir="${build.classes.dir}">
+            <fileset dir="${src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+        </copy>
+    </target>
+    <target if="has.custom.manifest" name="-copy-manifest">
+        <mkdir dir="${build.meta.inf.dir}"/>
+        <copy todir="${build.meta.inf.dir}">
+            <fileset dir="${conf.dir}" includes="MANIFEST.MF"/>
+        </copy>
+    </target>
+    <target if="has.persistence.xml" name="-copy-persistence-xml">
+        <mkdir dir="${build.web.dir}/WEB-INF/classes/META-INF"/>
+        <copy todir="${build.web.dir}/WEB-INF/classes/META-INF">
+            <fileset dir="${persistence.xml.dir}" includes="persistence.xml orm.xml"/>
+        </copy>
+    </target>
+    <target name="-post-compile">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,deps-jar,-pre-pre-compile,-pre-compile,-do-compile,-post-compile" description="Compile project." name="compile"/>
+    <target name="-pre-compile-single">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,deps-jar,-pre-pre-compile" name="-do-compile-single">
+        <fail unless="javac.includes">Must select some files in the IDE or set javac.includes</fail>
+        <webproject2:javac excludes="" gensrcdir="${build.generated.sources.dir}" includes="${javac.includes}"/>
+        <copy todir="${build.classes.dir}">
+            <fileset dir="${src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+        </copy>
+    </target>
+    <target name="-post-compile-single">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,deps-jar,-pre-pre-compile,-pre-compile-single,-do-compile-single,-post-compile-single" name="compile-single"/>
+    <property name="jspc.schemas" value="/resources/schemas/"/>
+    <property name="jspc.dtds" value="/resources/dtds/"/>
+    <target depends="compile" description="Test compile JSP pages to expose compilation errors." if="do.compile.jsps" name="compile-jsps">
+        <mkdir dir="${build.generated.dir}/src"/>
+        <java classname="org.netbeans.modules.web.project.ant.JspC" failonerror="true" fork="true">
+            <arg value="-uriroot"/>
+            <arg file="${basedir}/${build.web.dir}"/>
+            <arg value="-d"/>
+            <arg file="${basedir}/${build.generated.dir}/src"/>
+            <arg value="-die1"/>
+            <arg value="-schemas ${jspc.schemas}"/>
+            <arg value="-dtds ${jspc.dtds}"/>
+            <arg value="-compilerSourceVM ${javac.source}"/>
+            <arg value="-compilerTargetVM ${javac.target}"/>
+            <arg value="-javaEncoding ${source.encoding}"/>
+            <arg value="-sysClasspath ${libs.jsp-compilation-syscp.classpath}"/>
+            <classpath path="${java.home}/../lib/tools.jar:${libs.jsp-compiler.classpath}:${libs.jsp-compilation.classpath}"/>
+        </java>
+        <mkdir dir="${build.generated.dir}/classes"/>
+        <webproject2:javac classpath="${build.classes.dir}:${libs.jsp-compilation.classpath}:${javac.classpath}:${j2ee.platform.classpath}" destdir="${build.generated.dir}/classes" srcdir="${build.generated.dir}/src"/>
+    </target>
+    <target depends="compile" if="jsp.includes" name="-do-compile-single-jsp">
+        <fail unless="javac.jsp.includes">Must select some files in the IDE or set javac.jsp.includes</fail>
+        <mkdir dir="${build.generated.dir}/src"/>
+        <java classname="org.netbeans.modules.web.project.ant.JspCSingle" failonerror="true" fork="true">
+            <arg value="-uriroot"/>
+            <arg file="${basedir}/${build.web.dir}"/>
+            <arg value="-d"/>
+            <arg file="${basedir}/${build.generated.dir}/src"/>
+            <arg value="-die1"/>
+            <arg value="-schemas ${jspc.schemas}"/>
+            <arg value="-dtds ${jspc.dtds}"/>
+            <arg value="-sysClasspath ${libs.jsp-compilation-syscp.classpath}"/>
+            <arg value="-jspc.files"/>
+            <arg path="${jsp.includes}"/>
+            <arg value="-compilerSourceVM ${javac.source}"/>
+            <arg value="-compilerTargetVM ${javac.target}"/>
+            <arg value="-javaEncoding ${source.encoding}"/>
+            <classpath path="${java.home}/../lib/tools.jar:${libs.jsp-compiler.classpath}:${libs.jsp-compilation.classpath}"/>
+        </java>
+        <mkdir dir="${build.generated.dir}/classes"/>
+        <webproject2:javac classpath="${build.classes.dir}:${libs.jsp-compilation.classpath}:${javac.classpath}:${j2ee.platform.classpath}" destdir="${build.generated.dir}/classes" srcdir="${build.generated.dir}/src">
+            <customize>
+                <patternset includes="${javac.jsp.includes}"/>
+            </customize>
+        </webproject2:javac>
+    </target>
+    <target name="compile-single-jsp">
+        <fail unless="jsp.includes">Must select a file in the IDE or set jsp.includes</fail>
+        <antcall target="-do-compile-single-jsp"/>
+    </target>
+    <!--
+                DIST BUILDING SECTION
+            -->
+    <target name="-pre-dist">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,compile,compile-jsps,-pre-dist" if="do.war.package.without.custom.manifest" name="-do-dist-without-manifest">
+        <dirname file="${dist.war}" property="dist.jar.dir"/>
+        <mkdir dir="${dist.jar.dir}"/>
+        <jar compress="${jar.compress}" jarfile="${dist.war}">
+            <fileset dir="${build.web.dir}" excludes="WEB-INF/classes/.netbeans_*,${dist.archive.excludes}"/>
+        </jar>
+    </target>
+    <target depends="init,compile,compile-jsps,-pre-dist" if="do.war.package.with.custom.manifest" name="-do-dist-with-manifest">
+        <dirname file="${dist.war}" property="dist.jar.dir"/>
+        <mkdir dir="${dist.jar.dir}"/>
+        <jar compress="${jar.compress}" jarfile="${dist.war}" manifest="${build.meta.inf.dir}/MANIFEST.MF">
+            <fileset dir="${build.web.dir}" excludes="WEB-INF/classes/.netbeans_*,${dist.archive.excludes}"/>
+        </jar>
+    </target>
+    <target depends="init,compile,compile-jsps,-pre-dist" if="do.tmp.war.package.without.custom.manifest" name="-do-tmp-dist-without-manifest">
+        <dirname file="${dist.war}" property="dist.jar.dir"/>
+        <mkdir dir="${dist.jar.dir}"/>
+        <jar compress="${jar.compress}" jarfile="${dist.war}">
+            <fileset dir="${build.web.dir}" excludes="WEB-INF/classes/.netbeans_*,${dist.archive.excludes}"/>
+        </jar>
+    </target>
+    <target depends="init,compile,compile-jsps,-pre-dist" if="do.tmp.war.package.with.custom.manifest" name="-do-tmp-dist-with-manifest">
+        <dirname file="${dist.war}" property="dist.jar.dir"/>
+        <mkdir dir="${dist.jar.dir}"/>
+        <jar compress="${jar.compress}" jarfile="${dist.war}" manifest="${build.meta.inf.dir}/MANIFEST.MF">
+            <fileset dir="${build.web.dir}" excludes="WEB-INF/classes/.netbeans_*,${dist.archive.excludes}"/>
+        </jar>
+    </target>
+    <target depends="init,compile,compile-jsps,-pre-dist,-do-dist-with-manifest,-do-dist-without-manifest" name="do-dist"/>
+    <target depends="init" if="dist.ear.dir" name="library-inclusion-in-manifest">
+        <copyfiles files="${file.reference.itext-2.1.7.jar}" iftldtodir="${build.web.dir}/WEB-INF" todir="${dist.ear.dir}/lib"/>
+        <copyfiles files="${file.reference.log4j-1.2.17.jar}" iftldtodir="${build.web.dir}/WEB-INF" todir="${dist.ear.dir}/lib"/>
+        <copyfiles files="${file.reference.org-netbeans-modules-java-j2seproject-copylibstask.jar}" iftldtodir="${build.web.dir}/WEB-INF" todir="${dist.ear.dir}/lib"/>
+        <copyfiles files="${file.reference.poi-3.10.jar}" iftldtodir="${build.web.dir}/WEB-INF" todir="${dist.ear.dir}/lib"/>
+        <copyfiles files="${file.reference.primefaces-4.0.jar}" iftldtodir="${build.web.dir}/WEB-INF" todir="${dist.ear.dir}/lib"/>
+        <mkdir dir="${build.web.dir}/META-INF"/>
+        <manifest file="${build.web.dir}/META-INF/MANIFEST.MF" mode="update"/>
+    </target>
+    <target depends="init" name="library-inclusion-in-archive" unless="dist.ear.dir">
+        <copyfiles files="${file.reference.itext-2.1.7.jar}" todir="${build.web.dir}/WEB-INF/lib"/>
+        <copyfiles files="${file.reference.log4j-1.2.17.jar}" todir="${build.web.dir}/WEB-INF/lib"/>
+        <copyfiles files="${file.reference.org-netbeans-modules-java-j2seproject-copylibstask.jar}" todir="${build.web.dir}/WEB-INF/lib"/>
+        <copyfiles files="${file.reference.poi-3.10.jar}" todir="${build.web.dir}/WEB-INF/lib"/>
+        <copyfiles files="${file.reference.primefaces-4.0.jar}" todir="${build.web.dir}/WEB-INF/lib"/>
+    </target>
+    <target depends="init" if="dist.ear.dir" name="-clean-webinf-lib">
+        <delete dir="${build.web.dir}/WEB-INF/lib"/>
+    </target>
+    <target depends="init,-clean-webinf-lib,compile,compile-jsps,-pre-dist,library-inclusion-in-manifest" if="do.tmp.war.package" name="do-ear-dist">
+        <dirname file="${dist.ear.war}" property="dist.jar.dir"/>
+        <mkdir dir="${dist.jar.dir}"/>
+        <jar compress="${jar.compress}" jarfile="${dist.ear.war}" manifest="${build.web.dir}/META-INF/MANIFEST.MF">
+            <fileset dir="${build.web.dir}" excludes="WEB-INF/classes/.netbeans_*,${dist.archive.excludes}"/>
+        </jar>
+    </target>
+    <target name="-post-dist">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,compile,-pre-dist,do-dist,-post-dist" description="Build distribution (WAR)." name="dist"/>
+    <target depends="init,-clean-webinf-lib,-init-cos,compile,-pre-dist,do-ear-dist,-post-dist" description="Build distribution (WAR) to be packaged into an EAR." name="dist-ear"/>
+    <!--
+                EXECUTION SECTION
+            -->
+    <target depends="run-deploy,run-display-browser" description="Deploy to server and show in browser." name="run"/>
+    <target name="-pre-run-deploy">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target name="-post-run-deploy">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target name="-pre-nbmodule-run-deploy">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- This target can be overriden by NetBeans modules. Don't override it directly, use -pre-run-deploy task instead. -->
+    </target>
+    <target name="-post-nbmodule-run-deploy">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- This target can be overriden by NetBeans modules. Don't override it directly, use -post-run-deploy task instead. -->
+    </target>
+    <target name="-run-deploy-am">
+        <!-- Task to deploy to the Access Manager runtime. -->
+    </target>
+    <target depends="init,-init-cos,compile,compile-jsps,-do-compile-single-jsp,-pre-dist,-do-tmp-dist-with-manifest,-do-tmp-dist-without-manifest,-pre-run-deploy,-pre-nbmodule-run-deploy,-run-deploy-nb,-init-deploy-ant,-deploy-ant,-run-deploy-am,-post-nbmodule-run-deploy,-post-run-deploy,-do-update-breakpoints" name="run-deploy"/>
+    <target if="netbeans.home" name="-run-deploy-nb">
+        <nbdeploy clientUrlPart="${client.urlPart}" debugmode="false" forceRedeploy="${forceRedeploy}"/>
+    </target>
+    <target name="-init-deploy-ant" unless="netbeans.home">
+        <property name="deploy.ant.archive" value="${dist.war}"/>
+        <property name="deploy.ant.docbase.dir" value="${web.docbase.dir}"/>
+        <property name="deploy.ant.resource.dir" value="${resource.dir}"/>
+        <property name="deploy.ant.enabled" value="true"/>
+    </target>
+    <target depends="dist,-run-undeploy-nb,-init-deploy-ant,-undeploy-ant" name="run-undeploy"/>
+    <target if="netbeans.home" name="-run-undeploy-nb">
+        <fail message="Undeploy is not supported from within the IDE"/>
+    </target>
+    <target depends="init,-pre-dist,dist,-post-dist" name="verify">
+        <nbverify file="${dist.war}"/>
+    </target>
+    <target depends="run-deploy,-init-display-browser,-display-browser-nb-old,-display-browser-nb,-display-browser-cl" name="run-display-browser"/>
+    <target if="do.display.browser" name="-init-display-browser">
+        <condition property="do.display.browser.nb.old">
+            <and>
+                <isset property="netbeans.home"/>
+                <not>
+                    <isset property="browser.context"/>
+                </not>
+            </and>
+        </condition>
+        <condition property="do.display.browser.nb">
+            <and>
+                <isset property="netbeans.home"/>
+                <isset property="browser.context"/>
+            </and>
+        </condition>
+        <condition property="do.display.browser.cl">
+            <isset property="deploy.ant.enabled"/>
+        </condition>
+    </target>
+    <target if="do.display.browser.nb.old" name="-display-browser-nb-old">
+        <nbbrowse url="${client.url}"/>
+    </target>
+    <target if="do.display.browser.nb" name="-display-browser-nb">
+        <nbbrowse context="${browser.context}" url="${client.url}" urlPath="${client.urlPart}"/>
+    </target>
+    <target if="do.display.browser.cl" name="-get-browser" unless="browser">
+        <condition property="browser" value="rundll32">
+            <os family="windows"/>
+        </condition>
+        <condition else="" property="browser.args" value="url.dll,FileProtocolHandler">
+            <os family="windows"/>
+        </condition>
+        <condition property="browser" value="/usr/bin/open">
+            <os family="mac"/>
+        </condition>
+        <property environment="env"/>
+        <condition property="browser" value="${env.BROWSER}">
+            <isset property="env.BROWSER"/>
+        </condition>
+        <condition property="browser" value="/usr/bin/firefox">
+            <available file="/usr/bin/firefox"/>
+        </condition>
+        <condition property="browser" value="/usr/local/firefox/firefox">
+            <available file="/usr/local/firefox/firefox"/>
+        </condition>
+        <condition property="browser" value="/usr/bin/mozilla">
+            <available file="/usr/bin/mozilla"/>
+        </condition>
+        <condition property="browser" value="/usr/local/mozilla/mozilla">
+            <available file="/usr/local/mozilla/mozilla"/>
+        </condition>
+        <condition property="browser" value="/usr/sfw/lib/firefox/firefox">
+            <available file="/usr/sfw/lib/firefox/firefox"/>
+        </condition>
+        <condition property="browser" value="/opt/csw/bin/firefox">
+            <available file="/opt/csw/bin/firefox"/>
+        </condition>
+        <condition property="browser" value="/usr/sfw/lib/mozilla/mozilla">
+            <available file="/usr/sfw/lib/mozilla/mozilla"/>
+        </condition>
+        <condition property="browser" value="/opt/csw/bin/mozilla">
+            <available file="/opt/csw/bin/mozilla"/>
+        </condition>
+    </target>
+    <target depends="-get-browser" if="do.display.browser.cl" name="-display-browser-cl">
+        <fail unless="browser">
+                    Browser not found, cannot launch the deployed application. Try to set the BROWSER environment variable.
+                </fail>
+        <property name="browse.url" value="${deploy.ant.client.url}${client.urlPart}"/>
+        <echo>Launching ${browse.url}</echo>
+        <exec executable="${browser}" spawn="true">
+            <arg line="${browser.args} ${browse.url}"/>
+        </exec>
+    </target>
+    <target depends="init,-init-cos,compile-single" name="run-main">
+        <fail unless="run.class">Must select one file in the IDE or set run.class</fail>
+        <webproject1:java classname="${run.class}"/>
+    </target>
+    <target depends="init,compile-test-single,-pre-test-run-single" name="run-test-with-main">
+        <fail unless="run.class">Must select one file in the IDE or set run.class</fail>
+        <webproject1:java classname="${run.class}" classpath="${run.test.classpath}"/>
+    </target>
+    <target depends="init" if="netbeans.home" name="-do-update-breakpoints">
+        <webproject1:nbjpdaappreloaded/>
+    </target>
+    <!--
+                DEBUGGING SECTION
+            -->
+    <target depends="init,-init-cos,compile,compile-jsps,-do-compile-single-jsp,-pre-dist,-do-tmp-dist-with-manifest,-do-tmp-dist-without-manifest" description="Debug project in IDE." if="netbeans.home" name="debug">
+        <nbstartserver debugmode="true"/>
+        <antcall target="connect-debugger"/>
+        <nbdeploy clientUrlPart="${client.urlPart}" debugmode="true" forceRedeploy="true"/>
+        <antcall target="debug-display-browser-old"/>
+        <antcall target="debug-display-browser"/>
+        <antcall target="connect-client-debugger"/>
+    </target>
+    <target if="do.debug.server" name="connect-debugger" unless="is.debugged">
+        <condition property="listeningcp" value="sourcepath">
+            <istrue value="${j2ee.compile.on.save}"/>
+        </condition>
+        <nbjpdaconnect address="${jpda.address}" host="${jpda.host}" listeningcp="${listeningcp}" name="${name}" transport="${jpda.transport}">
+            <classpath>
+                <path path="${debug.classpath}:${j2ee.platform.classpath}"/>
+            </classpath>
+            <sourcepath>
+                <path path="${web.docbase.dir}"/>
+            </sourcepath>
+        </nbjpdaconnect>
+    </target>
+    <target if="do.display.browser.debug.old" name="debug-display-browser-old">
+        <nbbrowse url="${client.url}"/>
+    </target>
+    <target if="do.display.browser.debug" name="debug-display-browser">
+        <nbbrowse context="${browser.context}" url="${client.url}" urlPath="${client.urlPart}"/>
+    </target>
+    <target if="do.debug.client" name="connect-client-debugger">
+        <webproject1:nbjsdebugstart webUrl="${client.url}"/>
+    </target>
+    <target depends="init,compile-test-single" if="netbeans.home" name="-debug-start-debuggee-main-test">
+        <fail unless="debug.class">Must select one file in the IDE or set debug.class</fail>
+        <webproject1:debug classname="${debug.class}" classpath="${debug.test.classpath}"/>
+    </target>
+    <target depends="init,compile-test-single,-debug-start-debugger-main-test,-debug-start-debuggee-main-test" if="netbeans.home" name="debug-test-with-main"/>
+    <target depends="init,compile,compile-jsps,-do-compile-single-jsp,debug" if="netbeans.home" name="debug-single"/>
+    <target depends="init" if="netbeans.home" name="-debug-start-debugger-main-test">
+        <webproject1:nbjpdastart classpath="${debug.test.classpath}" name="${debug.class}"/>
+    </target>
+    <target depends="init" if="netbeans.home" name="-debug-start-debugger">
+        <webproject1:nbjpdastart name="${debug.class}"/>
+    </target>
+    <target depends="init,compile-single" if="netbeans.home" name="-debug-start-debuggee-single">
+        <fail unless="debug.class">Must select one file in the IDE or set debug.class</fail>
+        <webproject1:debug classname="${debug.class}"/>
+    </target>
+    <target depends="init,compile-single,-debug-start-debugger,-debug-start-debuggee-single" if="netbeans.home" name="debug-single-main"/>
+    <target depends="init" name="-pre-debug-fix">
+        <fail unless="fix.includes">Must set fix.includes</fail>
+        <property name="javac.includes" value="${fix.includes}.java"/>
+    </target>
+    <target depends="init,-pre-debug-fix,compile-single" if="netbeans.home" name="-do-debug-fix">
+        <webproject1:nbjpdareload/>
+    </target>
+    <target depends="init,-pre-debug-fix,-do-debug-fix" if="netbeans.home" name="debug-fix"/>
+    <!--
+            =================
+            PROFILING SECTION
+            =================
+            -->
+    <!--
+                pre NB7.2 profiling section; consider it deprecated
+            -->
+    <target description="Profile a J2EE project in the IDE." if="profiler.info.jvmargs.agent" name="-profile-pre72">
+        <condition else="start-profiled-server" property="profiler.startserver.target" value="start-profiled-server-extraargs">
+            <isset property="profiler.info.jvmargs.extra"/>
+        </condition>
+        <antcall target="${profiler.startserver.target}"/>
+        <antcall target="run"/>
+        <antcall target="-profile-start-loadgen"/>
+    </target>
+    <target if="profiler.info.jvmargs.agent" name="start-profiled-server">
+        <nbstartprofiledserver forceRestart="${profiler.j2ee.serverForceRestart}" javaPlatform="${profiler.info.javaPlatform}" startupTimeout="${profiler.j2ee.serverStartupTimeout}">
+            <jvmarg value="${profiler.info.jvmargs.agent}"/>
+            <jvmarg value="${profiler.j2ee.agentID}"/>
+        </nbstartprofiledserver>
+    </target>
+    <target if="profiler.info.jvmargs.agent" name="start-profiled-server-extraargs">
+        <nbstartprofiledserver forceRestart="${profiler.j2ee.serverForceRestart}" javaPlatform="${profiler.info.javaPlatform}" startupTimeout="${profiler.j2ee.serverStartupTimeout}">
+            <jvmarg value="${profiler.info.jvmargs.extra}"/>
+            <jvmarg value="${profiler.info.jvmargs.agent}"/>
+            <jvmarg value="${profiler.j2ee.agentID}"/>
+        </nbstartprofiledserver>
+    </target>
+    <target depends="profile-init,compile-test-single" if="profiler.info.jvmargs.agent" name="-profile-test-single-pre72">
+        <fail unless="netbeans.home">This target only works when run from inside the NetBeans IDE.</fail>
+        <nbprofiledirect>
+            <classpath>
+                <path path="${run.test.classpath}"/>
+                <path path="${j2ee.platform.classpath}"/>
+            </classpath>
+        </nbprofiledirect>
+        <junit dir="${profiler.info.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" jvm="${profiler.info.jvm}" showoutput="true">
+            <env key="${profiler.info.pathvar}" path="${profiler.info.agentpath}:${profiler.current.path}"/>
+            <jvmarg value="${profiler.info.jvmargs.agent}"/>
+            <jvmarg line="${profiler.info.jvmargs}"/>
+            <test name="${profile.class}"/>
+            <classpath>
+                <path path="${run.test.classpath}"/>
+                <path path="${j2ee.platform.classpath}"/>
+            </classpath>
+            <syspropertyset>
+                <propertyref prefix="test-sys-prop."/>
+                <mapper from="test-sys-prop.*" to="*" type="glob"/>
+            </syspropertyset>
+            <formatter type="brief" usefile="false"/>
+            <formatter type="xml"/>
+        </junit>
+    </target>
+    <target if="netbeans.home" name="-profile-check">
+        <condition property="profiler.configured">
+            <or>
+                <contains casesensitive="true" string="${run.jvmargs.ide}" substring="-agentpath:"/>
+                <contains casesensitive="true" string="${run.jvmargs.ide}" substring="-javaagent:"/>
+            </or>
+        </condition>
+    </target>
+    <target depends="init,-init-cos,compile,compile-jsps,-do-compile-single-jsp,-pre-dist,-do-tmp-dist-with-manifest,-do-tmp-dist-without-manifest" name="-do-profile">
+        <startprofiler/>
+        <nbstartserver profilemode="true"/>
+        <nbdeploy clientUrlPart="${client.urlPart}" forceRedeploy="true" profilemode="true"/>
+        <antcall target="debug-display-browser-old"/>
+        <antcall target="debug-display-browser"/>
+        <antcall target="-profile-start-loadgen"/>
+    </target>
+    <target depends="-profile-check,-profile-pre72" description="Profile a J2EE project in the IDE." if="profiler.configured" name="profile" unless="profiler.info.jvmargs.agent">
+        <antcall target="-do-profile"/>
+    </target>
+    <target depends="-profile-test-single-pre72" name="profile-test-single"/>
+    <target depends="-profile-check" if="profiler.configured" name="profile-test" unless="profiler.info.jvmargs.agent">
+        <startprofiler/>
+        <antcall target="test-single"/>
+    </target>
+    <target if="profiler.loadgen.path" name="-profile-start-loadgen">
+        <loadgenstart path="${profiler.loadgen.path}"/>
+    </target>
+    <!--
+                JAVADOC SECTION
+            -->
+    <target depends="init" if="have.sources" name="javadoc-build">
+        <mkdir dir="${dist.javadoc.dir}"/>
+        <javadoc additionalparam="${javadoc.additionalparam}" author="${javadoc.author}" charset="UTF-8" destdir="${dist.javadoc.dir}" docencoding="UTF-8" encoding="${javadoc.encoding.used}" failonerror="true" noindex="${javadoc.noindex}" nonavbar="${javadoc.nonavbar}" notree="${javadoc.notree}" private="${javadoc.private}" source="${javac.source}" splitindex="${javadoc.splitindex}" use="${javadoc.use}" useexternalfile="true" version="${javadoc.version}" windowtitle="${javadoc.windowtitle}">
+            <classpath>
+                <path path="${javac.classpath}:${j2ee.platform.classpath}"/>
+            </classpath>
+            <fileset dir="${src.dir}" excludes="${excludes}" includes="${includes}">
+                <filename name="**/*.java"/>
+            </fileset>
+            <fileset dir="${build.generated.sources.dir}" erroronmissingdir="false">
+                <include name="**/*.java"/>
+            </fileset>
+        </javadoc>
+        <copy todir="${dist.javadoc.dir}">
+            <fileset dir="${src.dir}" excludes="${excludes}" includes="${includes}">
+                <filename name="**/doc-files/**"/>
+            </fileset>
+            <fileset dir="${build.generated.sources.dir}" erroronmissingdir="false">
+                <include name="**/doc-files/**"/>
+            </fileset>
+        </copy>
+    </target>
+    <target depends="init,javadoc-build" if="netbeans.home" name="javadoc-browse" unless="no.javadoc.preview">
+        <nbbrowse file="${dist.javadoc.dir}/index.html"/>
+    </target>
+    <target depends="init,javadoc-build,javadoc-browse" description="Build Javadoc." name="javadoc"/>
+    <!--
+                
+                TEST COMPILATION SECTION
+            -->
+    <target depends="init,compile" if="have.tests" name="-pre-pre-compile-test">
+        <mkdir dir="${build.test.classes.dir}"/>
+        <property name="j2ee.platform.embeddableejb.classpath" value=""/>
+    </target>
+    <target name="-pre-compile-test">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test" if="have.tests" name="-do-compile-test">
+        <webproject2:javac classpath="${javac.test.classpath}:${j2ee.platform.classpath}:${j2ee.platform.embeddableejb.classpath}" debug="true" destdir="${build.test.classes.dir}" srcdir="${test.src.dir}"/>
+        <copy todir="${build.test.classes.dir}">
+            <fileset dir="${test.src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+        </copy>
+    </target>
+    <target name="-post-compile-test">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test,-do-compile-test,-post-compile-test" name="compile-test"/>
+    <target name="-pre-compile-test-single">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test-single" if="have.tests" name="-do-compile-test-single">
+        <fail unless="javac.includes">Must select some files in the IDE or set javac.includes</fail>
+        <webproject2:javac classpath="${javac.test.classpath}:${j2ee.platform.classpath}:${j2ee.platform.embeddableejb.classpath}" debug="true" destdir="${build.test.classes.dir}" excludes="" includes="${javac.includes}" srcdir="${test.src.dir}"/>
+        <copy todir="${build.test.classes.dir}">
+            <fileset dir="${test.src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+        </copy>
+    </target>
+    <target name="-post-compile-test-single">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test-single,-do-compile-test-single,-post-compile-test-single" name="compile-test-single"/>
+    <!--
+                
+                TEST EXECUTION SECTION
+            -->
+    <target depends="init" if="have.tests" name="-pre-test-run">
+        <mkdir dir="${build.test.results.dir}"/>
+    </target>
+    <target depends="init,compile-test,-pre-test-run" if="have.tests" name="-do-test-run">
+        <webproject2:test testincludes="**/*Test.java"/>
+    </target>
+    <target depends="init,compile-test,-pre-test-run,-do-test-run" if="have.tests" name="-post-test-run">
+        <fail if="tests.failed" unless="ignore.failing.tests">Some tests failed; see details above.</fail>
+    </target>
+    <target depends="init" if="have.tests" name="test-report"/>
+    <target depends="init" if="netbeans.home+have.tests" name="-test-browse"/>
+    <target depends="init,compile-test,-pre-test-run,-do-test-run,test-report,-post-test-run,-test-browse" description="Run unit tests." name="test"/>
+    <target depends="init" if="have.tests" name="-pre-test-run-single">
+        <mkdir dir="${build.test.results.dir}"/>
+    </target>
+    <target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-do-test-run-single">
+        <fail unless="test.includes">Must select some files in the IDE or set test.includes</fail>
+        <webproject2:test excludes="" includes="${test.includes}" testincludes="${test.includes}"/>
+    </target>
+    <target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single" if="have.tests" name="-post-test-run-single">
+        <fail if="tests.failed" unless="ignore.failing.tests">Some tests failed; see details above.</fail>
+    </target>
+    <target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single,-post-test-run-single" description="Run single unit test." name="test-single"/>
+    <target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-do-test-run-single-method">
+        <fail unless="test.class">Must select some files in the IDE or set test.class</fail>
+        <fail unless="test.method">Must select some method in the IDE or set test.method</fail>
+        <webproject2:test excludes="" includes="${javac.includes}" testincludes="${test.class}" testmethods="${test.method}"/>
+    </target>
+    <target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single-method" if="have.tests" name="-post-test-run-single-method">
+        <fail if="tests.failed" unless="ignore.failing.tests">Some tests failed; see details above.</fail>
+    </target>
+    <target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single-method,-post-test-run-single-method" description="Run single unit test." name="test-single-method"/>
+    <!--
+                
+                TEST DEBUGGING SECTION
+            -->
+    <target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-debug-start-debuggee-test">
+        <fail unless="test.class">Must select one file in the IDE or set test.class</fail>
+        <webproject2:test-debug excludes="" includes="${javac.includes}" testClass="${test.class}" testincludes="${javac.includes}"/>
+    </target>
+    <target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-debug-start-debuggee-test-method">
+        <fail unless="test.class">Must select one file in the IDE or set test.class</fail>
+        <fail unless="test.method">Must select some method in the IDE or set test.method</fail>
+        <webproject2:test-debug excludes="" includes="${javac.includes}" testClass="${test.class}" testMethod="${test.method}" testincludes="${test.class}" testmethods="${test.method}"/>
+    </target>
+    <target depends="init,compile-test" if="netbeans.home+have.tests" name="-debug-start-debugger-test">
+        <webproject1:nbjpdastart classpath="${debug.test.classpath}" name="${test.class}"/>
+    </target>
+    <target depends="init,compile-test,-debug-start-debugger-test,-debug-start-debuggee-test" name="debug-test"/>
+    <target depends="init,compile-test-single,-debug-start-debugger-test,-debug-start-debuggee-test-method" name="debug-test-method"/>
+    <target depends="init,-pre-debug-fix,compile-test-single" if="netbeans.home" name="-do-debug-fix-test">
+        <webproject1:nbjpdareload dir="${build.test.classes.dir}"/>
+    </target>
+    <target depends="init,-pre-debug-fix,-do-debug-fix-test" if="netbeans.home" name="debug-fix-test"/>
+    <!--
+                
+                CLEANUP SECTION
+            -->
+    <target depends="init" name="deps-clean" unless="no.deps"/>
+    <target depends="init" name="do-clean">
+        <condition property="build.dir.to.clean" value="${build.web.dir}">
+            <isset property="dist.ear.dir"/>
+        </condition>
+        <property name="build.dir.to.clean" value="${build.web.dir}"/>
+        <delete includeEmptyDirs="true" quiet="true">
+            <fileset dir="${build.dir.to.clean}/WEB-INF/lib"/>
+        </delete>
+        <delete dir="${build.dir}"/>
+        <available file="${build.dir.to.clean}/WEB-INF/lib" property="status.clean-failed" type="dir"/>
+        <delete dir="${dist.dir}"/>
+    </target>
+    <target depends="do-clean" if="status.clean-failed" name="check-clean">
+        <echo message="Warning: unable to delete some files in ${build.web.dir}/WEB-INF/lib - they are probably locked by the J2EE server. "/>
+        <echo level="info" message="To delete all files undeploy the module from Server Registry in Runtime tab and then use Clean again."/>
+    </target>
+    <target depends="init" if="netbeans.home" name="undeploy-clean">
+        <nbundeploy failOnError="false" startServer="false"/>
+    </target>
+    <target name="-post-clean">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,undeploy-clean,deps-clean,do-clean,check-clean,-post-clean" description="Clean build products." name="clean"/>
+    <target depends="clean" description="Clean build products." name="clean-ear"/>
+</project>
diff --git a/src/java/DmWebPortal/nbproject/faces-config.NavData b/src/java/DmWebPortal/nbproject/faces-config.NavData
new file mode 100644
index 0000000000000000000000000000000000000000..298bfc50a82fc997caae5cb3a3a53656c24b7570
--- /dev/null
+++ b/src/java/DmWebPortal/nbproject/faces-config.NavData
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scene Scope="Project" version="2">
+    <Scope Scope="Faces Configuration Only"/>
+    <Scope Scope="Project"/>
+    <Scope Scope="All Faces Configurations"/>
+</Scene>
diff --git a/src/java/DmWebPortal/nbproject/genfiles.properties b/src/java/DmWebPortal/nbproject/genfiles.properties
new file mode 100644
index 0000000000000000000000000000000000000000..0656f94691ce151016e5fe407c11d9017c85d6e2
--- /dev/null
+++ b/src/java/DmWebPortal/nbproject/genfiles.properties
@@ -0,0 +1,8 @@
+build.xml.data.CRC32=1550eb77
+build.xml.script.CRC32=6f54d92a
+build.xml.stylesheet.CRC32=651128d4@1.65.1.1
+# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
+# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
+nbproject/build-impl.xml.data.CRC32=1550eb77
+nbproject/build-impl.xml.script.CRC32=4da0fbc4
+nbproject/build-impl.xml.stylesheet.CRC32=d659eb7a@1.65.1.1
diff --git a/src/java/DmWebPortal/nbproject/private/private.properties b/src/java/DmWebPortal/nbproject/private/private.properties
new file mode 100644
index 0000000000000000000000000000000000000000..6584f7f291a8ab2668cc3b4e9afbc35f3599c3ba
--- /dev/null
+++ b/src/java/DmWebPortal/nbproject/private/private.properties
@@ -0,0 +1,10 @@
+deploy.ant.properties.file=/home/sveseli/.netbeans/7.4/config/GlassFishEE6/Properties/gfv3-2021218795.properties
+j2ee.platform.is.jsr109=true
+j2ee.server.domain=/home/sveseli/Work/netbeans/glassfish-4.0/glassfish/domains/domain1
+j2ee.server.home=/home/sveseli/Work/netbeans/glassfish-4.0/glassfish
+j2ee.server.instance=[/home/sveseli/Work/netbeans/glassfish-4.0/glassfish:/home/sveseli/Work/netbeans/glassfish-4.0/glassfish/domains/domain1]deployer:gfv3ee6wc:localhost:4848
+j2ee.server.middleware=/home/sveseli/Work/netbeans/glassfish-4.0
+javac.debug=true
+javadoc.preview=true
+selected.browser=default
+user.properties.file=/home/sveseli/.netbeans/7.4/build.properties
diff --git a/src/java/DmWebPortal/nbproject/private/private.xml b/src/java/DmWebPortal/nbproject/private/private.xml
new file mode 100644
index 0000000000000000000000000000000000000000..21853164368f2c22dfaa6a66e6a5cb2f1df0725b
--- /dev/null
+++ b/src/java/DmWebPortal/nbproject/private/private.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project-private xmlns="http://www.netbeans.org/ns/project-private/1">
+    <editor-bookmarks xmlns="http://www.netbeans.org/ns/editor-bookmarks/2" lastBookmarkId="0"/>
+    <open-files xmlns="http://www.netbeans.org/ns/projectui-open-files/2">
+        <group>
+            <file>file:/home/sveseli/Work/DM/dev/src/java/DmWebPortal/web/views/experimentType/create.xhtml</file>
+            <file>file:/home/sveseli/Work/DM/dev/src/java/DmWebPortal/web/views/experimentType/experimentTypeDestroyDialog.xhtml</file>
+            <file>file:/home/sveseli/Work/DM/dev/src/java/DmWebPortal/web/resources/js/userInfo/list.filter.js</file>
+            <file>file:/home/sveseli/Work/DM/dev/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/AllowedSettingValue.java</file>
+            <file>file:/home/sveseli/Work/DM/dev/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/ExperimentTypeController.java</file>
+            <file>file:/home/sveseli/Work/DM/dev/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/UserExperimentRole.java</file>
+            <file>file:/home/sveseli/Work/DM/dev/src/java/DmWebPortal/web/views/experimentType/experimentTypeListDataTable.xhtml</file>
+            <file>file:/home/sveseli/Work/DM/dev/src/java/DmWebPortal/web/views/experimentType/list.xhtml</file>
+            <file>file:/home/sveseli/Work/DM/dev/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/UserSetting.java</file>
+            <file>file:/home/sveseli/Work/DM/dev/src/java/DmWebPortal/web/views/userInfo/userInfoDestroyDialog.xhtml</file>
+            <file>file:/home/sveseli/Work/DM/dev/src/java/DmWebPortal/web/views/experimentType/experimentTypeEditPanelGrid.xhtml</file>
+            <file>file:/home/sveseli/Work/DM/dev/src/java/DmWebPortal/web/views/userInfo/create.xhtml</file>
+            <file>file:/home/sveseli/Work/DM/dev/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/UserInfoController.java</file>
+            <file>file:/home/sveseli/Work/DM/dev/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/TemplatePolicy.java</file>
+            <file>file:/home/sveseli/Work/DM/dev/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/CrudEntityController.java</file>
+            <file>file:/home/sveseli/Work/DM/dev/src/java/DmWebPortal/web/views/userInfo/view.xhtml</file>
+            <file>file:/home/sveseli/Work/DM/dev/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/DataFolderPermission.java</file>
+            <file>file:/home/sveseli/Work/DM/dev/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/ExperimentTypeFacade.java</file>
+            <file>file:/home/sveseli/Work/DM/dev/src/java/DmWebPortal/web/views/userInfo/userInfoEditPanelGrid.xhtml</file>
+            <file>file:/home/sveseli/Work/DM/dev/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/CloneableEntity.java</file>
+            <file>file:/home/sveseli/Work/DM/dev/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/Experiment.java</file>
+            <file>file:/home/sveseli/Work/DM/dev/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/PolicyType.java</file>
+            <file>file:/home/sveseli/Work/DM/dev/src/java/DmWebPortal/web/views/experimentType/edit.xhtml</file>
+            <file>file:/home/sveseli/Work/DM/dev/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/UserInfoFacade.java</file>
+            <file>file:/home/sveseli/Work/DM/dev/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/ExperimentPolicy.java</file>
+            <file>file:/home/sveseli/Work/DM/dev/src/java/DmWebPortal/web/index.xhtml</file>
+            <file>file:/home/sveseli/Work/DM/dev/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/SettingType.java</file>
+            <file>file:/home/sveseli/Work/DM/dev/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/DataFolder.java</file>
+            <file>file:/home/sveseli/Work/DM/dev/src/java/DmWebPortal/web/views/home.xhtml</file>
+            <file>file:/home/sveseli/Work/DM/dev/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/TemplatePolicySet.java</file>
+            <file>file:/home/sveseli/Work/DM/dev/src/java/DmWebPortal/web/templates/contentViewTemplate4x3.xhtml</file>
+            <file>file:/home/sveseli/Work/DM/dev/src/java/DmWebPortal/web/views/experimentType/view.xhtml</file>
+            <file>file:/home/sveseli/Work/DM/dev/src/java/DmWebPortal/web/views/userInfo/userInfoListDataTable.xhtml</file>
+            <file>file:/home/sveseli/Work/DM/dev/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/AbstractFacade.java</file>
+            <file>file:/home/sveseli/Work/DM/dev/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/UserInfo.java</file>
+            <file>file:/home/sveseli/Work/DM/dev/src/java/DmWebPortal/web/views/userInfo/list.xhtml</file>
+            <file>file:/home/sveseli/Work/DM/dev/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/UserExperimentRolePK.java</file>
+            <file>file:/home/sveseli/Work/DM/dev/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/LoginController.java</file>
+            <file>file:/home/sveseli/Work/DM/dev/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/ExperimentType.java</file>
+            <file>file:/home/sveseli/Work/DM/dev/src/java/DmWebPortal/web/views/common/commonListActionButtons.xhtml</file>
+            <file>file:/home/sveseli/Work/DM/dev/src/java/DmWebPortal/web/views/userInfo/edit.xhtml</file>
+            <file>file:/home/sveseli/Work/DM/dev/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/RoleType.java</file>
+            <file>file:/home/sveseli/Work/DM/dev/src/java/DmWebPortal/web/views/userInfo/userInfoViewPanelGrid.xhtml</file>
+            <file>file:/home/sveseli/Work/DM/dev/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/AllowedPolicyValue.java</file>
+            <file>file:/home/sveseli/Work/DM/dev/src/java/DmWebPortal/web/views/experimentType/experimentTypeViewPanelGrid.xhtml</file>
+            <file>file:/home/sveseli/Work/DM/dev/src/java/DmWebPortal/web/views/userInfo/userInfoCreatePanelGrid.xhtml</file>
+            <file>file:/home/sveseli/Work/DM/dev/src/java/DmWebPortal/web/views/experimentType/experimentTypeCreatePanelGrid.xhtml</file>
+            <file>file:/home/sveseli/Work/DM/dev/src/java/DmWebPortal/web/resources/js/experimentType/list.filter.js</file>
+        </group>
+    </open-files>
+</project-private>
diff --git a/src/java/DmWebPortal/nbproject/project.properties b/src/java/DmWebPortal/nbproject/project.properties
new file mode 100644
index 0000000000000000000000000000000000000000..ffb1a420a381d5101a90894dc992ec85ac447471
--- /dev/null
+++ b/src/java/DmWebPortal/nbproject/project.properties
@@ -0,0 +1,102 @@
+annotation.processing.enabled=true
+annotation.processing.enabled.in.editor=true
+annotation.processing.processor.options=-Aeclipselink.canonicalmodel.use_static_factory=false
+annotation.processing.processors.list=
+annotation.processing.run.all.processors=true
+annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output
+auxiliary.org-netbeans-modules-projectapi.jsf_2e_language=Facelets
+build.classes.dir=${build.web.dir}/WEB-INF/classes
+build.classes.excludes=**/*.java,**/*.form
+build.dir=build
+build.generated.dir=${build.dir}/generated
+build.generated.sources.dir=${build.dir}/generated-sources
+build.test.classes.dir=${build.dir}/test/classes
+build.test.results.dir=${build.dir}/test/results
+build.web.dir=${build.dir}/web
+build.web.excludes=${build.classes.excludes}
+client.urlPart=
+compile.jsps=false
+conf.dir=${source.root}/conf
+debug.classpath=${build.classes.dir}:${javac.classpath}
+debug.test.classpath=\
+    ${run.test.classpath}
+display.browser=true
+# Files to be excluded from distribution war
+dist.archive.excludes=
+dist.dir=dist
+dist.ear.war=${dist.dir}/${war.ear.name}
+dist.javadoc.dir=${dist.dir}/javadoc
+dist.war=${dist.dir}/${war.name}
+endorsed.classpath=\
+    ${libs.javaee-endorsed-api-6.0.classpath}
+excludes=
+file.reference.itext-2.1.7.jar=lib/itext-2.1.7.jar
+file.reference.log4j-1.2.17.jar=lib/log4j-1.2.17.jar
+file.reference.org-netbeans-modules-java-j2seproject-copylibstask.jar=lib/org-netbeans-modules-java-j2seproject-copylibstask.jar
+file.reference.poi-3.10.jar=lib/poi-3.10.jar
+file.reference.primefaces-4.0.jar=lib/primefaces-4.0.jar
+includes=**
+j2ee.compile.on.save=true
+j2ee.copy.static.files.on.save=true
+j2ee.deploy.on.save=true
+j2ee.platform=1.7-web
+j2ee.platform.classpath=${j2ee.server.middleware}/mq/lib/jaxm-api.jar:${j2ee.server.home}/modules/endorsed/javax.annotation-api.jar:${j2ee.server.home}/modules/endorsed/jaxb-api-osgi.jar:${j2ee.server.home}/modules/endorsed/webservices-api-osgi.jar:${j2ee.server.home}/modules/javax.inject.jar:${j2ee.server.home}/modules/javax.servlet.jsp-api.jar:${j2ee.server.home}/modules/javax.batch-api.jar:${j2ee.server.home}/modules/javax.json.jar:${j2ee.server.home}/modules/javax.security.jacc-api.jar:${j2ee.server.home}/modules/javax.enterprise.concurrent-api.jar:${j2ee.server.home}/modules/bean-validator.jar:${j2ee.server.home}/modules/javax.jms-api.jar:${j2ee.server.home}/modules/javax.el.jar:${j2ee.server.home}/modules/javax.ejb-api.jar:${j2ee.server.home}/modules/javax.transaction-api.jar:${j2ee.server.home}/modules/javax.ws.rs-api.jar:${j2ee.server.home}/modules/weld-osgi-bundle.jar:${j2ee.server.home}/modules/javax.faces.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jstl-api.jar:${j2ee.server.home}/modules/javax.servlet-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jstl.jar:${j2ee.server.home}/modules/javax.resource-api.jar:${j2ee.server.home}/modules/javax.mail.jar:${j2ee.server.home}/modules/javax.enterprise.concurrent.jar:${j2ee.server.home}/modules/javax.xml.registry-api.jar:${j2ee.server.home}/modules/javax.persistence.jar:${j2ee.server.home}/modules/javax.management.j2ee-api.jar:${j2ee.server.home}/modules/javax.websocket-api.jar:${j2ee.server.home}/modules/javax.xml.rpc-api.jar:${j2ee.server.home}/modules/javax.enterprise.deploy-api.jar:${j2ee.server.home}/modules/webservices-osgi.jar:${j2ee.server.home}/modules/javax.interceptor-api.jar:${j2ee.server.home}/modules/javax.security.auth.message-api.jar:${j2ee.server.home}/modules/jaxb-osgi.jar
+j2ee.platform.embeddableejb.classpath=${j2ee.server.home}/lib/embedded/glassfish-embedded-static-shell.jar
+j2ee.platform.wscompile.classpath=${j2ee.server.home}/modules/webservices-osgi.jar
+j2ee.platform.wsgen.classpath=${j2ee.server.home}/modules/webservices-osgi.jar:${j2ee.server.home}/modules/endorsed/webservices-api-osgi.jar:${j2ee.server.home}/modules/jaxb-osgi.jar:${j2ee.server.home}/modules/endorsed/jaxb-api-osgi.jar
+j2ee.platform.wsimport.classpath=${j2ee.server.home}/modules/webservices-osgi.jar:${j2ee.server.home}/modules/endorsed/webservices-api-osgi.jar:${j2ee.server.home}/modules/jaxb-osgi.jar:${j2ee.server.home}/modules/endorsed/jaxb-api-osgi.jar
+j2ee.platform.wsit.classpath=
+j2ee.server.type=gfv3ee6
+jar.compress=false
+javac.classpath=\
+    ${file.reference.itext-2.1.7.jar}:\
+    ${file.reference.log4j-1.2.17.jar}:\
+    ${file.reference.org-netbeans-modules-java-j2seproject-copylibstask.jar}:\
+    ${file.reference.poi-3.10.jar}:\
+    ${file.reference.primefaces-4.0.jar}
+# Space-separated list of extra javac options
+javac.compilerargs=
+javac.debug=true
+javac.deprecation=false
+javac.processorpath=\
+    ${javac.classpath}:\
+    ${libs.eclipselink.classpath}:\
+    ${libs.eclipselinkmodelgen.classpath}
+javac.source=1.7
+javac.target=1.7
+javac.test.classpath=\
+    ${javac.classpath}:\
+    ${build.classes.dir}
+javac.test.processorpath=\
+    ${javac.test.classpath}
+javadoc.additionalparam=
+javadoc.author=false
+javadoc.encoding=${source.encoding}
+javadoc.noindex=false
+javadoc.nonavbar=false
+javadoc.notree=false
+javadoc.preview=true
+javadoc.private=false
+javadoc.splitindex=true
+javadoc.use=true
+javadoc.version=false
+javadoc.windowtitle=
+lib.dir=${web.docbase.dir}/WEB-INF/lib
+persistence.xml.dir=${conf.dir}
+platform.active=default_platform
+resource.dir=setup
+run.test.classpath=\
+    ${javac.test.classpath}:\
+    ${build.test.classes.dir}
+# Space-separated list of JVM arguments used when running a class with a main method or a unit test
+# (you may also define separate properties like run-sys-prop.name=value instead of -Dname=value):
+runmain.jvmargs=
+source.encoding=UTF-8
+source.root=src
+src.dir=${source.root}/java
+test.src.dir=test
+war.content.additional=
+war.ear.name=${war.name}
+war.name=DmWebPortal.war
+web.docbase.dir=web
+webinf.dir=web/WEB-INF
diff --git a/src/java/DmWebPortal/nbproject/project.xml b/src/java/DmWebPortal/nbproject/project.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1358208e3f06d11f4ca80d0835d5eb7271875dc4
--- /dev/null
+++ b/src/java/DmWebPortal/nbproject/project.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://www.netbeans.org/ns/project/1">
+    <type>org.netbeans.modules.web.project</type>
+    <configuration>
+        <data xmlns="http://www.netbeans.org/ns/web-project/3">
+            <name>DmWebPortal</name>
+            <minimum-ant-version>1.6.5</minimum-ant-version>
+            <web-module-libraries>
+                <library dirs="200">
+                    <file>${file.reference.itext-2.1.7.jar}</file>
+                    <path-in-war>WEB-INF/lib</path-in-war>
+                </library>
+                <library dirs="200">
+                    <file>${file.reference.log4j-1.2.17.jar}</file>
+                    <path-in-war>WEB-INF/lib</path-in-war>
+                </library>
+                <library dirs="200">
+                    <file>${file.reference.org-netbeans-modules-java-j2seproject-copylibstask.jar}</file>
+                    <path-in-war>WEB-INF/lib</path-in-war>
+                </library>
+                <library dirs="200">
+                    <file>${file.reference.poi-3.10.jar}</file>
+                    <path-in-war>WEB-INF/lib</path-in-war>
+                </library>
+                <library dirs="200">
+                    <file>${file.reference.primefaces-4.0.jar}</file>
+                    <path-in-war>WEB-INF/lib</path-in-war>
+                </library>
+            </web-module-libraries>
+            <web-module-additional-libraries/>
+            <source-roots>
+                <root id="src.dir"/>
+            </source-roots>
+            <test-roots>
+                <root id="test.src.dir"/>
+            </test-roots>
+        </data>
+        <libraries xmlns="http://www.netbeans.org/ns/ant-project-libraries/1">
+            <definitions>./lib/nblibraries.properties</definitions>
+        </libraries>
+    </configuration>
+</project>
diff --git a/src/java/DmWebPortal/setup/glassfish-resources.xml b/src/java/DmWebPortal/setup/glassfish-resources.xml
new file mode 100644
index 0000000000000000000000000000000000000000..df5d064108ea0c5ce4b313e4529a985725f192d3
--- /dev/null
+++ b/src/java/DmWebPortal/setup/glassfish-resources.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE resources PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Resource Definitions//EN" "http://glassfish.org/dtds/glassfish-resources_1_5.dtd">
+<resources>
+    <jdbc-connection-pool allow-non-component-callers="false" associate-with-thread="false" connection-creation-retry-attempts="0" connection-creation-retry-interval-in-seconds="10" connection-leak-reclaim="false" connection-leak-timeout-in-seconds="0" connection-validation-method="auto-commit" datasource-classname="org.postgresql.ds.PGSimpleDataSource" fail-all-connections="false" idle-timeout-in-seconds="300" is-connection-validation-required="false" is-isolation-level-guaranteed="true" lazy-connection-association="false" lazy-connection-enlistment="false" match-connections="false" max-connection-usage-count="0" max-pool-size="32" max-wait-time-in-millis="60000" name="post-gre-sql_dm_dmPool" non-transactional-connections="false" pool-resize-quantity="2" res-type="javax.sql.DataSource" statement-timeout-in-seconds="-1" steady-pool-size="8" validate-atmost-once-period-in-seconds="0" wrap-jdbc-objects="false">
+        <property name="serverName" value="localhost"/>
+        <property name="portNumber" value="11136"/>
+        <property name="databaseName" value="dm"/>
+        <property name="User" value="dm"/>
+        <property name="Password" value="dm"/>
+        <property name="URL" value="jdbc:postgresql://localhost:11136/dm"/>
+        <property name="driverClass" value="org.postgresql.Driver"/>
+    </jdbc-connection-pool>
+    <jdbc-resource enabled="true" jndi-name="DmDataSource" object-type="user" pool-name="post-gre-sql_dm_dmPool"/>
+</resources>
diff --git a/src/java/DmWebPortal/src/conf/MANIFEST.MF b/src/java/DmWebPortal/src/conf/MANIFEST.MF
new file mode 100644
index 0000000000000000000000000000000000000000..59499bce4a2bd51cba227b7c00fcf745b19c95a4
--- /dev/null
+++ b/src/java/DmWebPortal/src/conf/MANIFEST.MF
@@ -0,0 +1,2 @@
+Manifest-Version: 1.0
+
diff --git a/src/java/DmWebPortal/src/conf/persistence.xml b/src/java/DmWebPortal/src/conf/persistence.xml
new file mode 100644
index 0000000000000000000000000000000000000000..af625a33dc29aa5c8a20450956fed672b2c73846
--- /dev/null
+++ b/src/java/DmWebPortal/src/conf/persistence.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
+  <persistence-unit name="DmWebPortalPU" transaction-type="JTA">
+    <jta-data-source>DmDataSource</jta-data-source>
+    <exclude-unlisted-classes>false</exclude-unlisted-classes>
+    <properties/>
+  </persistence-unit>
+</persistence>
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/constants/DmStatus.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/constants/DmStatus.java
new file mode 100644
index 0000000000000000000000000000000000000000..5f6e205b543236df59a5027e369bec6c21ae350f
--- /dev/null
+++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/constants/DmStatus.java
@@ -0,0 +1,17 @@
+
+package gov.anl.aps.dm.portal.constants;
+
+/**
+ * Status codes.
+ */
+public class DmStatus
+{
+    public static final int DM_OK = 0;
+    public static final int DM_ERROR = 1;
+    public static final int DM_DB_ERROR = 2;
+    public static final int DM_TIMEOUT = 3;
+    public static final int DM_INVALID_ARGUMENT = 4;
+    public static final int DM_INVALID_OBJECT_STATE = 5;
+    public static final int DM_OBJECT_ALREADY_EXISTS = 6;
+    public static final int DM_OBJECT_NOT_FOUND = 7;
+}
\ No newline at end of file
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/CrudEntityController.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/CrudEntityController.java
new file mode 100644
index 0000000000000000000000000000000000000000..735273fb42d1f5d0cdb5115f1527452df49d491b
--- /dev/null
+++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/CrudEntityController.java
@@ -0,0 +1,351 @@
+package gov.anl.aps.dm.portal.controllers;
+
+import gov.anl.aps.dm.portal.exceptions.DmPortalException;
+import gov.anl.aps.dm.portal.model.beans.AbstractFacade;
+import gov.anl.aps.dm.portal.model.entities.CloneableEntity;
+import gov.anl.aps.dm.portal.utilities.CollectionUtility;
+import gov.anl.aps.dm.portal.utilities.SessionUtility;
+
+import java.io.Serializable;
+
+import java.util.List;
+import java.util.Map;
+import javax.annotation.PostConstruct;
+import javax.faces.model.DataModel;
+import javax.faces.model.ListDataModel;
+import javax.faces.model.SelectItem;
+import org.apache.log4j.Logger;
+import org.primefaces.component.datatable.DataTable;
+
+public abstract class CrudEntityController<EntityType extends CloneableEntity, FacadeType extends AbstractFacade<EntityType>> implements Serializable
+{
+
+    private static final Logger logger = Logger.getLogger(CrudEntityController.class.getName());
+
+
+    private EntityType current = null;
+
+    private DataModel listDataModel = null;
+    private DataTable listDataTable = null;
+    private boolean listDataModelReset = true;
+    private List<EntityType> filteredObjectList = null;
+
+
+    private DataModel selectDataModel = null;
+    private DataTable selectDataTable = null;
+    private boolean selectDataModelReset = false;
+    private List<EntityType> selectedObjectList = null;
+
+    
+    public CrudEntityController() {
+    }
+
+    @PostConstruct
+    public void initialize() {
+    }
+
+    protected abstract FacadeType getFacade();
+
+    protected abstract EntityType createEntityInstance();
+
+    public abstract String getEntityTypeName();
+
+    public String getDisplayEntityTypeName() {
+        return getEntityTypeName();
+    }
+
+    public abstract String getCurrentEntityInstanceName();
+
+    public EntityType getCurrent() {
+        return current;
+    }
+
+    public void setCurrent(EntityType current) {
+        this.current = current;
+    }
+
+    public void selectByRequestParams() {
+    }
+
+    public EntityType getSelected() {
+        if (current == null) {
+            current = createEntityInstance();
+        }
+        return current;
+    }
+
+
+    public String resetList() {
+        logger.debug("Resetting list");
+        resetListDataModel();
+        return prepareList();
+    }
+
+    public String prepareList() {
+        logger.debug("Preparing list");
+        current = null;
+        return "list?faces-redirect=true";
+    }
+
+
+    public DataTable getListDataTable() {
+        if (listDataTable == null) {
+            logger.debug("Recreating data table");
+            listDataTable = new DataTable();
+        }
+        return listDataTable;
+    }
+
+    public void setListDataTable(DataTable listDataTable) {
+        this.listDataTable = listDataTable;
+    }
+
+    public DataTable getSelectDataTable() {
+        return selectDataTable;
+    }
+
+    public void setSelectDataTable(DataTable selectDataTable) {
+        this.selectDataTable = selectDataTable;
+    }
+
+    public boolean isAnyListFilterSet() {
+        if (listDataTable == null) {
+            return false;
+        }
+        Map<String, String> filterMap = listDataTable.getFilters();
+        for (String filter : filterMap.values()) {
+            if (filter != null && !filter.isEmpty()) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+ 
+    public String prepareView(EntityType entity) {
+        logger.debug("Preparing view");
+        current = entity;
+        return "view?faces-redirect=true";
+    }
+
+    public String view() {
+        return "view?faces-redirect=true";
+    }
+
+    public String prepareCreate() {
+        current = createEntityInstance();
+        return "create?faces-redirect=true";
+    }
+
+    public EntityType cloneEntityInstance(EntityType entity) {
+        EntityType clonedEntity;
+        try {
+            clonedEntity = (EntityType) (entity.clone());
+        }
+        catch (CloneNotSupportedException ex) {
+            logger.error("Object cannot be cloned: " + ex);
+            clonedEntity = createEntityInstance();
+        }
+        return clonedEntity;
+    }
+
+    public String prepareClone(EntityType entity) {
+        current = cloneEntityInstance(entity);
+        return "create?faces-redirect=true";
+    }
+
+    protected void prepareEntityInsert(EntityType entity) throws DmPortalException {
+    }
+
+    public String create() {
+        try {
+            EntityType newEntity = current;
+            prepareEntityInsert(current);
+            getFacade().create(current);
+            SessionUtility.addInfoMessage("Success", "Created " + getDisplayEntityTypeName() + " " + getCurrentEntityInstanceName() + ".");
+            resetListDataModel();
+            current = newEntity;
+            return view();
+        }
+        catch (DmPortalException | RuntimeException ex) {
+            SessionUtility.addErrorMessage("Error", "Could not create " + getDisplayEntityTypeName() + ": " + ex.getMessage());
+            return null;
+        }
+    }
+
+    public String prepareEdit(EntityType entity) {
+        current = entity;
+        return edit();
+    }
+
+    public String edit() {
+        resetSelectDataModel();
+        return "edit?faces-redirect=true";
+    }
+
+    protected void prepareEntityUpdate(EntityType entity) throws DmPortalException {
+    }
+
+    public String update() {
+        try {
+            logger.debug("Updating " + getDisplayEntityTypeName() + " " + getCurrentEntityInstanceName());
+            prepareEntityUpdate(current);
+            EntityType updatedEntity = getFacade().edit(current);
+            SessionUtility.addInfoMessage("Success", "Updated " + getDisplayEntityTypeName() + " " + getCurrentEntityInstanceName() + ".");
+            resetListDataModel();
+            current = updatedEntity;
+            return view();
+        }
+        catch (DmPortalException | RuntimeException ex) {
+            SessionUtility.addErrorMessage("Error", "Could not update " + getDisplayEntityTypeName() + ": " + ex.getMessage());
+            return null;
+        }
+    }
+
+    public void destroy(EntityType entity) {
+        current = entity;
+        destroy();
+    }
+
+    public String destroy() {
+        if (current == null) {
+            logger.warn("Current item is not set");
+            // Do nothing if current item is not set.
+            return null;
+        }
+        try {
+            logger.debug("Destroying " + getCurrentEntityInstanceName());
+            getFacade().remove(current);
+            SessionUtility.addInfoMessage("Success", "Deleted " + getDisplayEntityTypeName() + " " + getCurrentEntityInstanceName() + ".");
+            resetListDataModel();
+            return prepareList();
+        }
+        catch (Exception ex) {
+            SessionUtility.addErrorMessage("Error", "Could not delete " + getDisplayEntityTypeName() + ": " + ex.getMessage());
+            return null;
+        }
+    }
+
+    public DataModel createListDataModel() {
+        return new ListDataModel(getFacade().findAll());
+    }
+
+    public DataModel getListDataModel() {
+        if (listDataModel == null) {
+            listDataModel = createListDataModel();
+        }
+        return listDataModel;
+    }
+
+    public void prepareEntityListForSelection(List<EntityType> selectEntityList) {
+    }
+
+    public DataModel createSelectDataModel() {
+        List<EntityType> selectEntityList = getFacade().findAll();
+        prepareEntityListForSelection(selectEntityList);
+        return new ListDataModel(selectEntityList);
+    }
+
+    public DataModel getSelectDataModel() {
+        if (selectDataModel == null) {
+            selectDataModel = createSelectDataModel();
+        }
+        return selectDataModel;
+    }
+
+    public DataModel getItems() {
+        return getListDataModel();
+    }
+
+    public List<EntityType> getSelectedObjectListAndResetSelectDataModel() {
+        List<EntityType> returnList = selectedObjectList;
+        resetSelectDataModel();
+        return returnList;
+    }
+
+    public List<EntityType> getSelectedObjectList() {
+        return selectedObjectList;
+    }
+
+    public List<EntityType> getFilteredObjectList() {
+        return filteredObjectList;
+    }
+
+    public List<EntityType> getFilteredItems() {
+        return filteredObjectList;
+    }
+
+    public void resetSelectedObjectList() {
+        selectedObjectList = null;
+    }
+
+    public void setSelectedObjectList(List<EntityType> selectedObjectList) {
+        this.selectedObjectList = selectedObjectList;
+    }
+
+    public void setFilteredObjectList(List<EntityType> filteredObjectList) {
+        this.filteredObjectList = filteredObjectList;
+    }
+
+    public void setFilteredItems(List<EntityType> filteredItems) {
+        this.filteredObjectList = filteredItems;
+    }
+
+    public void resetListDataModel() {
+        listDataModel = null;
+        listDataTable = null;
+        listDataModelReset = true;
+        filteredObjectList = null;
+        current = null;
+    }
+
+    public void resetSelectDataModel() {
+        selectDataModel = null;
+        selectDataTable = null;
+        selectedObjectList = null;
+        selectDataModelReset = true;
+    }
+
+    public List<EntityType> getAvailableItems() {
+        return getFacade().findAll();
+    }
+
+    public EntityType getEntity(Integer id) {
+        return getFacade().find(id);
+    }
+
+    public SelectItem[] getAvailableItemsForSelectMany() {
+        return CollectionUtility.getSelectItems(getFacade().findAll(), false);
+    }
+
+    public SelectItem[] getAvailableItemsForSelectOne() {
+        return CollectionUtility.getSelectItems(getFacade().findAll(), true);
+    }
+
+    public String getCurrentViewId() {
+        return SessionUtility.getCurrentViewId();
+    }
+
+    public static String displayEntityList(List<?> entityList) {
+        String itemDelimiter = ", ";
+        return CollectionUtility.displayItemListWithoutOutsideDelimiters(entityList, itemDelimiter);
+    }
+
+
+    public boolean isListDataModelReset() {
+        if (listDataModelReset) {
+            listDataModelReset = false;
+            return true;
+        }
+        return false;
+    }
+
+    public boolean isSelectDataModelReset() {
+        if (selectDataModelReset) {
+            selectDataModelReset = false;
+            return true;
+        }
+        return false;
+    }
+
+}
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/ExperimentTypeController.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/ExperimentTypeController.java
new file mode 100644
index 0000000000000000000000000000000000000000..0571eecc6bceaa5ed1c779a29161658859d909d7
--- /dev/null
+++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/ExperimentTypeController.java
@@ -0,0 +1,121 @@
+package gov.anl.aps.dm.portal.controllers;
+
+import gov.anl.aps.dm.portal.exceptions.DmPortalException;
+import gov.anl.aps.dm.portal.exceptions.ObjectAlreadyExists;
+import gov.anl.aps.dm.portal.model.entities.ExperimentType;
+import gov.anl.aps.dm.portal.model.beans.ExperimentTypeFacade;
+import java.util.List;
+
+import javax.ejb.EJB;
+import javax.inject.Named;
+import javax.enterprise.context.SessionScoped;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.convert.Converter;
+import javax.faces.convert.FacesConverter;
+import org.apache.log4j.Logger;
+
+@Named("experimentTypeController")
+@SessionScoped
+public class ExperimentTypeController extends CrudEntityController<ExperimentType, ExperimentTypeFacade>
+{
+
+    private static final Logger logger = Logger.getLogger(ExperimentTypeController.class.getName());
+
+    @EJB
+    private ExperimentTypeFacade experimentTypeFacade;
+
+    public ExperimentTypeController() {
+    }
+
+    @Override
+    protected ExperimentTypeFacade getFacade() {
+        return experimentTypeFacade;
+    }
+
+    @Override
+    protected ExperimentType createEntityInstance() {
+        return new ExperimentType();
+    }
+
+    @Override
+    public String getEntityTypeName() {
+        return "experimentType";
+    }
+
+    @Override
+    public String getCurrentEntityInstanceName() {
+        if (getCurrent() != null) {
+            return getCurrent().getName();
+        }
+        return "";
+    }
+
+    @Override
+    public List<ExperimentType> getAvailableItems() {
+        return super.getAvailableItems();
+    }
+
+    @Override
+    public String prepareEdit(ExperimentType experimentType) {
+        return super.prepareEdit(experimentType);
+    }
+
+    @Override
+    public void prepareEntityInsert(ExperimentType experimentType) throws ObjectAlreadyExists {
+        ExperimentType existingExperimentType = experimentTypeFacade.findByName(experimentType.getName());
+        if (existingExperimentType != null) {
+            throw new ObjectAlreadyExists("Experiment type " + experimentType.getName() + " already exists.");
+        }
+        logger.debug("Inserting new experiment type " + experimentType.getName());
+    }
+
+    @Override
+    public void prepareEntityUpdate(ExperimentType experimentType) throws DmPortalException {
+        super.prepareEntityUpdate(experimentType);
+    }
+   
+
+    @FacesConverter(forClass = ExperimentType.class)
+    public static class ExperimentTypeControllerConverter implements Converter
+    {
+
+        @Override
+        public Object getAsObject(FacesContext facesContext, UIComponent component, String value) {
+            if (value == null || value.length() == 0) {
+                return null;
+            }
+            ExperimentTypeController controller = (ExperimentTypeController) facesContext.getApplication().getELResolver().
+                    getValue(facesContext.getELContext(), null, "experimentTypeController");
+            return controller.getEntity(getKey(value));
+        }
+
+        java.lang.Integer getKey(String value) {
+            java.lang.Integer key;
+            key = Integer.valueOf(value);
+            return key;
+        }
+
+        String getStringKey(java.lang.Integer value) {
+            StringBuilder sb = new StringBuilder();
+            sb.append(value);
+            return sb.toString();
+        }
+
+        @Override
+        public String getAsString(FacesContext facesContext, UIComponent component, Object object) {
+            if (object == null) {
+                return null;
+            }
+            if (object instanceof ExperimentType) {
+                ExperimentType o = (ExperimentType) object;
+                return getStringKey(o.getId());
+            }
+            else {
+                throw new IllegalArgumentException("object " + object + " is of type " + object.getClass().getName() + "; expected type: " + ExperimentType.class.getName());
+            }
+        }
+
+    }
+
+}
\ No newline at end of file
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/LoginController.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/LoginController.java
new file mode 100644
index 0000000000000000000000000000000000000000..66b71262e997d476e394d2fa4952cf0aa6b83a82
--- /dev/null
+++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/LoginController.java
@@ -0,0 +1,178 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package gov.anl.aps.dm.portal.controllers;
+
+import gov.anl.aps.dm.portal.model.beans.UserInfoFacade;
+import gov.anl.aps.dm.portal.model.entities.UserInfo;
+import gov.anl.aps.dm.portal.utilities.LdapUtility;
+import gov.anl.aps.dm.portal.utilities.SessionUtility;
+import java.io.Serializable;
+import javax.ejb.EJB;
+import javax.enterprise.context.SessionScoped;
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
+import javax.inject.Named;
+import org.apache.log4j.Logger;
+
+/**
+ * Login controller.
+ */
+@Named("loginController")
+@SessionScoped
+public class LoginController implements Serializable
+{
+
+    @EJB
+    private UserInfoFacade userInfoFacade;
+
+    private String username = null;
+    private String password = null;
+    private boolean loggedIn = false;
+    private UserInfo user = null;
+
+    private static final Logger logger = Logger.getLogger(LoginController.class.getName());
+
+    /**
+     * Constructor.
+     */
+    public LoginController() {
+    }
+
+    /**
+     * Get password.
+     *
+     * @return login password
+     */
+    public String getPassword() {
+        return password;
+    }
+
+    /**
+     * Set password.
+     *
+     * @param password login password
+     */
+    public void setPassword(String password) {
+        this.password = password;
+    }
+
+    /**
+     * Get username.
+     *
+     * @return login username
+     */
+    public String getUsername() {
+        return username;
+    }
+
+    /**
+     * Set username.
+     *
+     * @param username login username
+     */
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    /**
+     * Check if user is logged in.
+     *
+     * @return true if admin is logged in, false otherwise
+     */
+    public boolean isLoggedIn() {
+        return loggedIn;
+    }
+
+    /**
+     * Login action.
+     *
+     * @return url to service home page if login is successful, or null in case
+     * of errors
+     */
+    public String login() {
+        loggedIn = false;
+        if (username == null || password == null || username.isEmpty() || password.isEmpty()) {
+            SessionUtility.addWarningMessage("Incomplete Input", "Please enter both username and password.");
+            return (username = password = null);
+        }
+
+        user = userInfoFacade.findByUsername(username);
+        if (user == null) {
+            SessionUtility.addErrorMessage("Unknown User", "Username " + username + " is not registered.");
+            return (username = password = null);
+        }
+
+        boolean validCredentials = false;
+        if (user.getPassword() != null && user.getPassword().equals(password)) {
+            logger.debug("User " + username + " is authorized by DM DB");
+            validCredentials = true;
+        }
+        else if (LdapUtility.validateCredentials(username, password)) {
+            logger.debug("User " + username + " is authorized by DM LDAP");
+            validCredentials = true;
+        }
+        else {
+            logger.debug("User " + username + " is not authorized");
+        }
+
+        if (validCredentials) {
+            SessionUtility.setUser(user);
+
+            loggedIn = true;
+            SessionUtility.addInfoMessage("Successful Login", "User " + username + " is logged in.");
+            return getLandingPage();
+        }
+        else {
+            SessionUtility.addErrorMessage("Invalid Credentials", "Username/password combination could not be verified.");
+            return (username = password = null);
+        }
+
+    }
+
+    public String getLandingPage() {
+        String landingPage = SessionUtility.getCurrentViewId() + "?faces-redirect=true";
+        if (landingPage.contains("login")) {
+            landingPage = "/views/home?faces-redirect=true";
+        }
+        logger.debug("Landing page: " + landingPage);
+        return landingPage;
+    }
+
+    public String displayUsername() {
+        if (isLoggedIn()) {
+            return username;
+        }
+        else {
+            return "Not Logged In";
+        }
+    }
+
+    public String displayRole() {
+        return "User";
+    }
+
+    public boolean isUserWriteable(UserInfo user) {
+        if (!isLoggedIn()) {
+            return false;
+        }
+        return isLoggedIn() || this.user.getId() == user.getId();
+    }
+
+    /**
+     * Logout action.
+     *
+     * @return url to logout page
+     */
+    public String logout() {
+        SessionUtility.clearSession();
+        ExternalContext context = FacesContext.getCurrentInstance().getExternalContext();
+        context.invalidateSession();
+        loggedIn = false;
+        user = null;
+        return "/views/login?faces-redirect=true";
+    }
+
+}
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/UserInfoController.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/UserInfoController.java
new file mode 100644
index 0000000000000000000000000000000000000000..a89a6067cf6cd29ae0c9039f8e926b7f2223fdee
--- /dev/null
+++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/UserInfoController.java
@@ -0,0 +1,145 @@
+package gov.anl.aps.dm.portal.controllers;
+
+import gov.anl.aps.dm.portal.exceptions.DmPortalException;
+import gov.anl.aps.dm.portal.exceptions.ObjectAlreadyExists;
+import gov.anl.aps.dm.portal.model.entities.UserInfo;
+import gov.anl.aps.dm.portal.model.beans.UserInfoFacade;
+import gov.anl.aps.dm.portal.utilities.SessionUtility;
+
+import java.util.List;
+import javax.ejb.EJB;
+import javax.enterprise.context.SessionScoped;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.convert.Converter;
+import javax.faces.convert.FacesConverter;
+import javax.inject.Named;
+import org.apache.log4j.Logger;
+
+@Named("userInfoController")
+@SessionScoped
+public class UserInfoController extends CrudEntityController<UserInfo, UserInfoFacade>
+{
+
+    private static final Logger logger = Logger.getLogger(UserInfoController.class.getName());
+
+    @EJB
+    private UserInfoFacade userInfoFacade;
+
+    private String passwordEntry = null;
+
+    public UserInfoController() {
+    }
+
+    @Override
+    protected UserInfoFacade getFacade() {
+        return userInfoFacade;
+    }
+
+    @Override
+    protected UserInfo createEntityInstance() {
+        return new UserInfo();
+    }
+
+    @Override
+    public String getEntityTypeName() {
+        return "userInfo";
+    }
+
+    @Override
+    public String getCurrentEntityInstanceName() {
+        if (getCurrent() != null) {
+            return getCurrent().getUsername();
+        }
+        return "";
+    }
+
+    @Override
+    public List<UserInfo> getAvailableItems() {
+        return super.getAvailableItems();
+    }
+
+    @Override
+    public String prepareEdit(UserInfo user) {
+        passwordEntry = null;
+        return super.prepareEdit(user);
+    }
+
+    @Override
+    public void prepareEntityInsert(UserInfo user) throws ObjectAlreadyExists {
+        UserInfo existingUser = userInfoFacade.findByUsername(user.getUsername());
+        if (existingUser != null) {
+            throw new ObjectAlreadyExists("User " + user.getUsername() + " already exists.");
+        }
+        logger.debug("Inserting new user " + user.getUsername());
+    }
+
+    @Override
+    public void prepareEntityUpdate(UserInfo user) throws DmPortalException {
+        if (passwordEntry != null && !passwordEntry.isEmpty()) {
+            user.setPassword(passwordEntry);
+        }
+        passwordEntry = null;
+        super.prepareEntityUpdate(user);
+    }
+
+    public String prepareSessionUserEdit(String viewPath) {
+        UserInfo sessionUser = (UserInfo) SessionUtility.getUser();
+        if (sessionUser == null) {
+            return null;
+        }
+        prepareEdit(sessionUser);
+        return viewPath + "?faces-redirect=true";
+    }
+    
+    public String getPasswordEntry() {
+        return passwordEntry;
+    }
+
+    public void setPasswordEntry(String passwordEntry) {
+        this.passwordEntry = passwordEntry;
+    }
+
+    @FacesConverter(forClass = UserInfo.class)
+    public static class UserInfoControllerConverter implements Converter
+    {
+
+        @Override
+        public Object getAsObject(FacesContext facesContext, UIComponent component, String value) {
+            if (value == null || value.length() == 0) {
+                return null;
+            }
+            UserInfoController controller = (UserInfoController) facesContext.getApplication().getELResolver().
+                    getValue(facesContext.getELContext(), null, "userInfoController");
+            return controller.getEntity(getKey(value));
+        }
+
+        java.lang.Integer getKey(String value) {
+            java.lang.Integer key;
+            key = Integer.valueOf(value);
+            return key;
+        }
+
+        String getStringKey(java.lang.Integer value) {
+            StringBuilder sb = new StringBuilder();
+            sb.append(value);
+            return sb.toString();
+        }
+
+        @Override
+        public String getAsString(FacesContext facesContext, UIComponent component, Object object) {
+            if (object == null) {
+                return null;
+            }
+            if (object instanceof UserInfo) {
+                UserInfo o = (UserInfo) object;
+                return getStringKey(o.getId());
+            }
+            else {
+                throw new IllegalArgumentException("object " + object + " is of type " + object.getClass().getName() + "; expected type: " + UserInfo.class.getName());
+            }
+        }
+
+    }
+
+}
\ No newline at end of file
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/exceptions/DmPortalException.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/exceptions/DmPortalException.java
new file mode 100644
index 0000000000000000000000000000000000000000..96540d9f2732be302f60703fffd2a9654196dfc5
--- /dev/null
+++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/exceptions/DmPortalException.java
@@ -0,0 +1,155 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package gov.anl.aps.dm.portal.exceptions;
+
+import gov.anl.aps.dm.portal.constants.DmStatus;
+
+
+/**
+ * Generic DAQ exception.
+ */
+public class DmPortalException extends Exception
+{
+
+    /**
+     * Exception signature key.
+     */
+    public static final String SignatureKey = "__dm_portal_exception__";
+
+    /**
+     * Exception type key.
+     */
+    public static final String TypeKey = "type";
+
+    /**
+     * Exception code key.
+     */
+    public static final String CodeKey = "code";
+
+    /**
+     * Exception args key.
+     */
+    public static final String ArgsKey = "args";
+
+    /**
+     * Error code.
+     */
+    private int errorCode = DmStatus.DM_ERROR;
+
+
+    /**
+     * Error message. 
+     */
+    private String error = null;
+
+    /**
+     * Constructor.
+     */
+    public DmPortalException() 
+    {
+        super();
+    }
+
+    /**
+     * Constructor.
+     *
+     * @param message Error message
+     */
+    public DmPortalException(String message) 
+    {
+        super(message);
+    }
+
+    /**
+     * Constructor.
+     *
+     * @param message Error message
+     * @param errorCode Error code
+     */
+    public DmPortalException(String message, int errorCode) 
+    {
+        super(message);
+        this.errorCode = errorCode;
+    }
+
+    /**
+     * Constructor.
+     *
+     * @param throwable Throwable object
+     */
+    public DmPortalException(Throwable throwable) 
+    {
+        super(throwable);
+    }
+
+    /**
+     * Constructor.
+     *
+     * @param message Error message
+     * @param throwable Throwable object
+     */
+    public DmPortalException(String message, Throwable throwable) 
+    {
+        super(message, throwable);
+    }
+
+    /**
+     * Set error code.
+     * 
+     * @param errorCode Error code
+     */
+    public void setErrorCode(int errorCode) 
+    {
+        this.errorCode = errorCode;
+    }
+
+    /**
+     * Get error code.
+     * 
+     * @return Error code
+     */
+    public int getErrorCode() 
+    {
+        return errorCode;
+    }
+
+    /**
+     * Set error message.
+     * 
+     * @param error Error message
+     */
+    public void setErrorMessage(String error) 
+    {
+        this.error = error;
+    }
+
+    /**
+     * Get error message.
+     * 
+     * @return Error message
+     */
+    public String getErrorMessage() 
+    {
+        return error;
+    }
+
+    /**
+     * Override string output if error message is set.
+     * 
+     * @return error message
+     */
+    @Override
+    public String toString() 
+    {
+        if(error != null) {
+            return error;
+        }
+        else {
+            return super.toString();
+        }
+    }
+}
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/exceptions/ObjectAlreadyExists.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/exceptions/ObjectAlreadyExists.java
new file mode 100644
index 0000000000000000000000000000000000000000..7f255fd1f8033a899eab97ecc4f4bfb4f3d305e3
--- /dev/null
+++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/exceptions/ObjectAlreadyExists.java
@@ -0,0 +1,61 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package gov.anl.aps.dm.portal.exceptions;
+
+
+import gov.anl.aps.dm.portal.constants.DmStatus;
+
+/**
+ * Object already exists exception class.
+ */
+public class ObjectAlreadyExists extends DmPortalException 
+{
+
+    /**
+     * Constructor.
+     */
+    public ObjectAlreadyExists() 
+    {
+        super();
+        setErrorCode(DmStatus.DM_OBJECT_ALREADY_EXISTS);
+    }
+
+    /**
+     * Constructor.
+     *
+     * @param message Error message
+     */
+    public ObjectAlreadyExists(String message) 
+    {
+        super(message);
+        setErrorCode(DmStatus.DM_OBJECT_ALREADY_EXISTS);
+    }
+
+    /**
+     * Constructor.
+     *
+     * @param throwable Throwable object
+     */
+    public ObjectAlreadyExists(Throwable throwable) 
+    {
+        super(throwable);
+        setErrorCode(DmStatus.DM_OBJECT_ALREADY_EXISTS);
+    }
+
+    /**
+     * Constructor.
+     *
+     * @param message Error message
+     * @param throwable Throwable object
+     */
+    public ObjectAlreadyExists(String message, Throwable throwable) 
+    {
+        super(message, throwable);
+        setErrorCode(DmStatus.DM_OBJECT_ALREADY_EXISTS);
+    }
+
+}
\ No newline at end of file
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/AbstractFacade.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/AbstractFacade.java
new file mode 100644
index 0000000000000000000000000000000000000000..475e760afc824e356ac5205d6bf7f63d7c0bf688
--- /dev/null
+++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/AbstractFacade.java
@@ -0,0 +1,65 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package gov.anl.aps.dm.portal.model.beans;
+
+import java.util.List;
+import javax.persistence.EntityManager;
+
+/**
+ *
+ * @author sveseli
+ */
+public abstract class AbstractFacade<T>
+{
+    private Class<T> entityClass;
+
+    public AbstractFacade(Class<T> entityClass) {
+        this.entityClass = entityClass;
+    }
+
+    protected abstract EntityManager getEntityManager();
+
+    public void create(T entity) {
+        getEntityManager().persist(entity);
+    }
+
+    public T edit(T entity) {
+        return getEntityManager().merge(entity);
+    }    
+
+    public void remove(T entity) {
+        getEntityManager().remove(getEntityManager().merge(entity));
+    }
+
+    public T find(Object id) {
+        return getEntityManager().find(entityClass, id);
+    }
+
+    public List<T> findAll() {
+        javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
+        cq.select(cq.from(entityClass));
+        return getEntityManager().createQuery(cq).getResultList();
+    }
+
+    public List<T> findRange(int[] range) {
+        javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
+        cq.select(cq.from(entityClass));
+        javax.persistence.Query q = getEntityManager().createQuery(cq);
+        q.setMaxResults(range[1] - range[0] + 1);
+        q.setFirstResult(range[0]);
+        return q.getResultList();
+    }
+
+    public int count() {
+        javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
+        javax.persistence.criteria.Root<T> rt = cq.from(entityClass);
+        cq.select(getEntityManager().getCriteriaBuilder().count(rt));
+        javax.persistence.Query q = getEntityManager().createQuery(cq);
+        return ((Long) q.getSingleResult()).intValue();
+    }
+    
+}
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/AllowedPolicyValueFacade.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/AllowedPolicyValueFacade.java
new file mode 100644
index 0000000000000000000000000000000000000000..a5b38cda46a1cee850ef40b58887daf9ff0fcf91
--- /dev/null
+++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/AllowedPolicyValueFacade.java
@@ -0,0 +1,33 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package gov.anl.aps.dm.portal.model.beans;
+
+import gov.anl.aps.dm.portal.model.entities.AllowedPolicyValue;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+/**
+ *
+ * @author sveseli
+ */
+@Stateless
+public class AllowedPolicyValueFacade extends AbstractFacade<AllowedPolicyValue>
+{
+    @PersistenceContext(unitName = "DmWebPortalPU")
+    private EntityManager em;
+
+    @Override
+    protected EntityManager getEntityManager() {
+        return em;
+    }
+
+    public AllowedPolicyValueFacade() {
+        super(AllowedPolicyValue.class);
+    }
+    
+}
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/AllowedSettingValueFacade.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/AllowedSettingValueFacade.java
new file mode 100644
index 0000000000000000000000000000000000000000..2430b80703cd4325f7c270a70d9a9909a29bcc89
--- /dev/null
+++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/AllowedSettingValueFacade.java
@@ -0,0 +1,33 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package gov.anl.aps.dm.portal.model.beans;
+
+import gov.anl.aps.dm.portal.model.entities.AllowedSettingValue;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+/**
+ *
+ * @author sveseli
+ */
+@Stateless
+public class AllowedSettingValueFacade extends AbstractFacade<AllowedSettingValue>
+{
+    @PersistenceContext(unitName = "DmWebPortalPU")
+    private EntityManager em;
+
+    @Override
+    protected EntityManager getEntityManager() {
+        return em;
+    }
+
+    public AllowedSettingValueFacade() {
+        super(AllowedSettingValue.class);
+    }
+    
+}
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/DataFolderFacade.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/DataFolderFacade.java
new file mode 100644
index 0000000000000000000000000000000000000000..76be7494f44619fabf94d8cc89379e9ce36d6f2b
--- /dev/null
+++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/DataFolderFacade.java
@@ -0,0 +1,33 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package gov.anl.aps.dm.portal.model.beans;
+
+import gov.anl.aps.dm.portal.model.entities.DataFolder;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+/**
+ *
+ * @author sveseli
+ */
+@Stateless
+public class DataFolderFacade extends AbstractFacade<DataFolder>
+{
+    @PersistenceContext(unitName = "DmWebPortalPU")
+    private EntityManager em;
+
+    @Override
+    protected EntityManager getEntityManager() {
+        return em;
+    }
+
+    public DataFolderFacade() {
+        super(DataFolder.class);
+    }
+    
+}
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/DataFolderPermissionFacade.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/DataFolderPermissionFacade.java
new file mode 100644
index 0000000000000000000000000000000000000000..bdcb44d5963ef4787a4aeaa929915dd0716def70
--- /dev/null
+++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/DataFolderPermissionFacade.java
@@ -0,0 +1,33 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package gov.anl.aps.dm.portal.model.beans;
+
+import gov.anl.aps.dm.portal.model.entities.DataFolderPermission;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+/**
+ *
+ * @author sveseli
+ */
+@Stateless
+public class DataFolderPermissionFacade extends AbstractFacade<DataFolderPermission>
+{
+    @PersistenceContext(unitName = "DmWebPortalPU")
+    private EntityManager em;
+
+    @Override
+    protected EntityManager getEntityManager() {
+        return em;
+    }
+
+    public DataFolderPermissionFacade() {
+        super(DataFolderPermission.class);
+    }
+    
+}
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/ExperimentFacade.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/ExperimentFacade.java
new file mode 100644
index 0000000000000000000000000000000000000000..d292111b6e4b733387def3799126d804dc5103e1
--- /dev/null
+++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/ExperimentFacade.java
@@ -0,0 +1,33 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package gov.anl.aps.dm.portal.model.beans;
+
+import gov.anl.aps.dm.portal.model.entities.Experiment;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+/**
+ *
+ * @author sveseli
+ */
+@Stateless
+public class ExperimentFacade extends AbstractFacade<Experiment>
+{
+    @PersistenceContext(unitName = "DmWebPortalPU")
+    private EntityManager em;
+
+    @Override
+    protected EntityManager getEntityManager() {
+        return em;
+    }
+
+    public ExperimentFacade() {
+        super(Experiment.class);
+    }
+    
+}
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/ExperimentPolicyFacade.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/ExperimentPolicyFacade.java
new file mode 100644
index 0000000000000000000000000000000000000000..5b8246e74e31a217c05f39da808459e3740ff2e7
--- /dev/null
+++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/ExperimentPolicyFacade.java
@@ -0,0 +1,33 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package gov.anl.aps.dm.portal.model.beans;
+
+import gov.anl.aps.dm.portal.model.entities.ExperimentPolicy;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+/**
+ *
+ * @author sveseli
+ */
+@Stateless
+public class ExperimentPolicyFacade extends AbstractFacade<ExperimentPolicy>
+{
+    @PersistenceContext(unitName = "DmWebPortalPU")
+    private EntityManager em;
+
+    @Override
+    protected EntityManager getEntityManager() {
+        return em;
+    }
+
+    public ExperimentPolicyFacade() {
+        super(ExperimentPolicy.class);
+    }
+    
+}
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/ExperimentTypeFacade.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/ExperimentTypeFacade.java
new file mode 100644
index 0000000000000000000000000000000000000000..e7e3bfa56c37f212f5374630621292c1a0835a76
--- /dev/null
+++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/ExperimentTypeFacade.java
@@ -0,0 +1,45 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package gov.anl.aps.dm.portal.model.beans;
+
+import gov.anl.aps.dm.portal.model.entities.ExperimentType;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.NoResultException;
+import javax.persistence.PersistenceContext;
+
+/**
+ *
+ * @author sveseli
+ */
+@Stateless
+public class ExperimentTypeFacade extends AbstractFacade<ExperimentType>
+{
+    @PersistenceContext(unitName = "DmWebPortalPU")
+    private EntityManager em;
+
+    @Override
+    protected EntityManager getEntityManager() {
+        return em;
+    }
+
+    public ExperimentTypeFacade() {
+        super(ExperimentType.class);
+    }
+
+    public ExperimentType findByName(String name) {
+        try {
+            return (ExperimentType) em.createNamedQuery("ExperimentType.findByName")
+                    .setParameter("name", name)
+                    .getSingleResult();
+        }
+        catch (NoResultException ex) {
+        }
+        return null;
+    }
+    
+}
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/PolicyTypeFacade.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/PolicyTypeFacade.java
new file mode 100644
index 0000000000000000000000000000000000000000..31d5fac4fb25ba1eba71cb8ee5796a31dfeb73c2
--- /dev/null
+++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/PolicyTypeFacade.java
@@ -0,0 +1,33 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package gov.anl.aps.dm.portal.model.beans;
+
+import gov.anl.aps.dm.portal.model.entities.PolicyType;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+/**
+ *
+ * @author sveseli
+ */
+@Stateless
+public class PolicyTypeFacade extends AbstractFacade<PolicyType>
+{
+    @PersistenceContext(unitName = "DmWebPortalPU")
+    private EntityManager em;
+
+    @Override
+    protected EntityManager getEntityManager() {
+        return em;
+    }
+
+    public PolicyTypeFacade() {
+        super(PolicyType.class);
+    }
+    
+}
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/RoleTypeFacade.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/RoleTypeFacade.java
new file mode 100644
index 0000000000000000000000000000000000000000..ea68e6247305a95c8ba0c3babc226ec0db2d8f4e
--- /dev/null
+++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/RoleTypeFacade.java
@@ -0,0 +1,33 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package gov.anl.aps.dm.portal.model.beans;
+
+import gov.anl.aps.dm.portal.model.entities.RoleType;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+/**
+ *
+ * @author sveseli
+ */
+@Stateless
+public class RoleTypeFacade extends AbstractFacade<RoleType>
+{
+    @PersistenceContext(unitName = "DmWebPortalPU")
+    private EntityManager em;
+
+    @Override
+    protected EntityManager getEntityManager() {
+        return em;
+    }
+
+    public RoleTypeFacade() {
+        super(RoleType.class);
+    }
+    
+}
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/SettingTypeFacade.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/SettingTypeFacade.java
new file mode 100644
index 0000000000000000000000000000000000000000..058668044a4986051b8908a79dd897d7bc18618f
--- /dev/null
+++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/SettingTypeFacade.java
@@ -0,0 +1,33 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package gov.anl.aps.dm.portal.model.beans;
+
+import gov.anl.aps.dm.portal.model.entities.SettingType;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+/**
+ *
+ * @author sveseli
+ */
+@Stateless
+public class SettingTypeFacade extends AbstractFacade<SettingType>
+{
+    @PersistenceContext(unitName = "DmWebPortalPU")
+    private EntityManager em;
+
+    @Override
+    protected EntityManager getEntityManager() {
+        return em;
+    }
+
+    public SettingTypeFacade() {
+        super(SettingType.class);
+    }
+    
+}
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/TemplatePolicyFacade.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/TemplatePolicyFacade.java
new file mode 100644
index 0000000000000000000000000000000000000000..c83d382971012b6e30e04845b0b67e652316ba16
--- /dev/null
+++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/TemplatePolicyFacade.java
@@ -0,0 +1,33 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package gov.anl.aps.dm.portal.model.beans;
+
+import gov.anl.aps.dm.portal.model.entities.TemplatePolicy;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+/**
+ *
+ * @author sveseli
+ */
+@Stateless
+public class TemplatePolicyFacade extends AbstractFacade<TemplatePolicy>
+{
+    @PersistenceContext(unitName = "DmWebPortalPU")
+    private EntityManager em;
+
+    @Override
+    protected EntityManager getEntityManager() {
+        return em;
+    }
+
+    public TemplatePolicyFacade() {
+        super(TemplatePolicy.class);
+    }
+    
+}
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/TemplatePolicySetFacade.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/TemplatePolicySetFacade.java
new file mode 100644
index 0000000000000000000000000000000000000000..8652d193f9c3fa9f99104c1aba244f3fda5edf75
--- /dev/null
+++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/TemplatePolicySetFacade.java
@@ -0,0 +1,33 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package gov.anl.aps.dm.portal.model.beans;
+
+import gov.anl.aps.dm.portal.model.entities.TemplatePolicySet;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+/**
+ *
+ * @author sveseli
+ */
+@Stateless
+public class TemplatePolicySetFacade extends AbstractFacade<TemplatePolicySet>
+{
+    @PersistenceContext(unitName = "DmWebPortalPU")
+    private EntityManager em;
+
+    @Override
+    protected EntityManager getEntityManager() {
+        return em;
+    }
+
+    public TemplatePolicySetFacade() {
+        super(TemplatePolicySet.class);
+    }
+    
+}
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/UserExperimentRoleFacade.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/UserExperimentRoleFacade.java
new file mode 100644
index 0000000000000000000000000000000000000000..67ea311b6898ac35da44959fa4cee0e90e503633
--- /dev/null
+++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/UserExperimentRoleFacade.java
@@ -0,0 +1,33 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package gov.anl.aps.dm.portal.model.beans;
+
+import gov.anl.aps.dm.portal.model.entities.UserExperimentRole;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+/**
+ *
+ * @author sveseli
+ */
+@Stateless
+public class UserExperimentRoleFacade extends AbstractFacade<UserExperimentRole>
+{
+    @PersistenceContext(unitName = "DmWebPortalPU")
+    private EntityManager em;
+
+    @Override
+    protected EntityManager getEntityManager() {
+        return em;
+    }
+
+    public UserExperimentRoleFacade() {
+        super(UserExperimentRole.class);
+    }
+    
+}
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/UserInfoFacade.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/UserInfoFacade.java
new file mode 100644
index 0000000000000000000000000000000000000000..770a6eff6b57beeeb957084b3f5cbb98a5595672
--- /dev/null
+++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/UserInfoFacade.java
@@ -0,0 +1,49 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package gov.anl.aps.dm.portal.model.beans;
+
+import gov.anl.aps.dm.portal.model.entities.UserInfo;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.NoResultException;
+import javax.persistence.PersistenceContext;
+
+/**
+ *
+ * @author sveseli
+ */
+@Stateless
+public class UserInfoFacade extends AbstractFacade<UserInfo>
+{
+
+    @PersistenceContext(unitName = "DmWebPortalPU")
+    private EntityManager em;
+
+    @Override
+    protected EntityManager getEntityManager() {
+        return em;
+    }
+
+    public UserInfoFacade() {
+        super(UserInfo.class);
+    }
+
+    public UserInfo findByUsername(String username) {
+        try {
+            return (UserInfo) em.createNamedQuery("UserInfo.findByUsername")
+                    .setParameter("username", username)
+                    .getSingleResult();
+        }
+        catch (NoResultException ex) {
+        }
+        return null;
+    }
+
+    public boolean checkIfUsernameExists(String username) {
+        return findByUsername(username) != null;
+    }
+
+}
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/UserSettingFacade.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/UserSettingFacade.java
new file mode 100644
index 0000000000000000000000000000000000000000..6d4a00e2a98de265e6e0fc3edecf7a9b945135cf
--- /dev/null
+++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/UserSettingFacade.java
@@ -0,0 +1,33 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package gov.anl.aps.dm.portal.model.beans;
+
+import gov.anl.aps.dm.portal.model.entities.UserSetting;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+/**
+ *
+ * @author sveseli
+ */
+@Stateless
+public class UserSettingFacade extends AbstractFacade<UserSetting>
+{
+    @PersistenceContext(unitName = "DmWebPortalPU")
+    private EntityManager em;
+
+    @Override
+    protected EntityManager getEntityManager() {
+        return em;
+    }
+
+    public UserSettingFacade() {
+        super(UserSetting.class);
+    }
+    
+}
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/AllowedPolicyValue.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/AllowedPolicyValue.java
new file mode 100644
index 0000000000000000000000000000000000000000..2a09843fa7d51a836f07b74d697ac4712253b5d8
--- /dev/null
+++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/AllowedPolicyValue.java
@@ -0,0 +1,116 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package gov.anl.aps.dm.portal.model.entities;
+
+import javax.persistence.Basic;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+import javax.validation.constraints.Size;
+import javax.xml.bind.annotation.XmlRootElement;
+
+/**
+ *
+ * @author sveseli
+ */
+@Entity
+@Table(name = "allowed_policy_value")
+@XmlRootElement
+@NamedQueries({
+    @NamedQuery(name = "AllowedPolicyValue.findAll", query = "SELECT a FROM AllowedPolicyValue a"),
+    @NamedQuery(name = "AllowedPolicyValue.findById", query = "SELECT a FROM AllowedPolicyValue a WHERE a.id = :id"),
+    @NamedQuery(name = "AllowedPolicyValue.findByPolicyValue", query = "SELECT a FROM AllowedPolicyValue a WHERE a.policyValue = :policyValue"),
+    @NamedQuery(name = "AllowedPolicyValue.findByDescription", query = "SELECT a FROM AllowedPolicyValue a WHERE a.description = :description")})
+public class AllowedPolicyValue extends CloneableEntity
+{
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Basic(optional = false)
+    @Column(name = "id")
+    private Integer id;
+    @Size(max = 2147483647)
+    @Column(name = "policy_value")
+    private String policyValue;
+    @Size(max = 2147483647)
+    @Column(name = "description")
+    private String description;
+    @JoinColumn(name = "policy_type_id", referencedColumnName = "id")
+    @ManyToOne(optional = false)
+    private PolicyType policyType;
+
+    public AllowedPolicyValue() {
+    }
+
+    public AllowedPolicyValue(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getPolicyValue() {
+        return policyValue;
+    }
+
+    public void setPolicyValue(String policyValue) {
+        this.policyValue = policyValue;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public PolicyType getPolicyType() {
+        return policyType;
+    }
+
+    public void setPolicyType(PolicyType policyType) {
+        this.policyType = policyType;
+    }
+
+    @Override
+    public int hashCode() {
+        int hash = 0;
+        hash += (id != null ? id.hashCode() : 0);
+        return hash;
+    }
+
+    @Override
+    public boolean equals(Object object) {
+        // TODO: Warning - this method won't work in the case the id fields are not set
+        if (!(object instanceof AllowedPolicyValue)) {
+            return false;
+        }
+        AllowedPolicyValue other = (AllowedPolicyValue) object;
+        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public String toString() {
+        return "gov.anl.aps.dm.portal.model.entities.AllowedPolicyValue[ id=" + id + " ]";
+    }
+    
+}
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/AllowedSettingValue.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/AllowedSettingValue.java
new file mode 100644
index 0000000000000000000000000000000000000000..fc3a840e516dbfcae9962a7efec81dbcd9a12062
--- /dev/null
+++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/AllowedSettingValue.java
@@ -0,0 +1,116 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package gov.anl.aps.dm.portal.model.entities;
+
+import javax.persistence.Basic;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+import javax.validation.constraints.Size;
+import javax.xml.bind.annotation.XmlRootElement;
+
+/**
+ *
+ * @author sveseli
+ */
+@Entity
+@Table(name = "allowed_setting_value")
+@XmlRootElement
+@NamedQueries({
+    @NamedQuery(name = "AllowedSettingValue.findAll", query = "SELECT a FROM AllowedSettingValue a"),
+    @NamedQuery(name = "AllowedSettingValue.findById", query = "SELECT a FROM AllowedSettingValue a WHERE a.id = :id"),
+    @NamedQuery(name = "AllowedSettingValue.findBySettingValue", query = "SELECT a FROM AllowedSettingValue a WHERE a.settingValue = :settingValue"),
+    @NamedQuery(name = "AllowedSettingValue.findByDescription", query = "SELECT a FROM AllowedSettingValue a WHERE a.description = :description")})
+public class AllowedSettingValue extends CloneableEntity
+{
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Basic(optional = false)
+    @Column(name = "id")
+    private Integer id;
+    @Size(max = 2147483647)
+    @Column(name = "setting_value")
+    private String settingValue;
+    @Size(max = 2147483647)
+    @Column(name = "description")
+    private String description;
+    @JoinColumn(name = "setting_type_id", referencedColumnName = "id")
+    @ManyToOne(optional = false)
+    private SettingType settingType;
+
+    public AllowedSettingValue() {
+    }
+
+    public AllowedSettingValue(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getSettingValue() {
+        return settingValue;
+    }
+
+    public void setSettingValue(String settingValue) {
+        this.settingValue = settingValue;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public SettingType getSettingType() {
+        return settingType;
+    }
+
+    public void setSettingType(SettingType settingType) {
+        this.settingType = settingType;
+    }
+
+    @Override
+    public int hashCode() {
+        int hash = 0;
+        hash += (id != null ? id.hashCode() : 0);
+        return hash;
+    }
+
+    @Override
+    public boolean equals(Object object) {
+        // TODO: Warning - this method won't work in the case the id fields are not set
+        if (!(object instanceof AllowedSettingValue)) {
+            return false;
+        }
+        AllowedSettingValue other = (AllowedSettingValue) object;
+        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public String toString() {
+        return "gov.anl.aps.dm.portal.model.entities.AllowedSettingValue[ id=" + id + " ]";
+    }
+    
+}
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/CloneableEntity.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/CloneableEntity.java
new file mode 100644
index 0000000000000000000000000000000000000000..c66ccbccf8cc7fe415aefc8696283aaa2dcc1dcf
--- /dev/null
+++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/CloneableEntity.java
@@ -0,0 +1,29 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package gov.anl.aps.dm.portal.model.entities;
+
+import gov.anl.aps.dm.portal.utilities.SearchResult;
+import java.io.Serializable;
+import java.util.regex.Pattern;
+
+/**
+ *
+ * @author sveseli
+ */
+public class CloneableEntity implements Serializable, Cloneable
+{
+    protected static final long serialVersionUID = 1L;
+    @Override
+    public Object clone() throws CloneNotSupportedException {
+        return super.clone();
+    }
+    
+    public SearchResult search(Pattern searchPattern) {
+        return null;
+    }
+    
+}
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/DataFolder.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/DataFolder.java
new file mode 100644
index 0000000000000000000000000000000000000000..e03a57fb73df53af616577d276c54f81ac802dec
--- /dev/null
+++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/DataFolder.java
@@ -0,0 +1,166 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package gov.anl.aps.dm.portal.model.entities;
+
+import java.util.List;
+import javax.persistence.Basic;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinTable;
+import javax.persistence.ManyToMany;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlTransient;
+
+/**
+ *
+ * @author sveseli
+ */
+@Entity
+@Table(name = "data_folder")
+@XmlRootElement
+@NamedQueries({
+    @NamedQuery(name = "DataFolder.findAll", query = "SELECT d FROM DataFolder d"),
+    @NamedQuery(name = "DataFolder.findById", query = "SELECT d FROM DataFolder d WHERE d.id = :id"),
+    @NamedQuery(name = "DataFolder.findByDataPath", query = "SELECT d FROM DataFolder d WHERE d.dataPath = :dataPath"),
+    @NamedQuery(name = "DataFolder.findByDescription", query = "SELECT d FROM DataFolder d WHERE d.description = :description")})
+public class DataFolder extends CloneableEntity
+{
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Basic(optional = false)
+    @Column(name = "id")
+    private Integer id;
+    @Basic(optional = false)
+    @NotNull
+    @Size(min = 1, max = 2147483647)
+    @Column(name = "data_path")
+    private String dataPath;
+    @Size(max = 2147483647)
+    @Column(name = "description")
+    private String description;
+    @JoinTable(name = "experiment_data_folder", joinColumns = {
+        @JoinColumn(name = "data_folder_id", referencedColumnName = "id")}, inverseJoinColumns = {
+        @JoinColumn(name = "experiment_id", referencedColumnName = "id")})
+    @ManyToMany
+    private List<Experiment> experimentList;
+    @OneToMany(cascade = CascadeType.ALL, mappedBy = "dataFolder")
+    private List<DataFolderPermission> dataFolderPermissionList;
+    @OneToMany(mappedBy = "parentDataFolder")
+    private List<DataFolder> dataFolderList;
+    @JoinColumn(name = "parent_data_folder_id", referencedColumnName = "id")
+    @ManyToOne
+    private DataFolder parentDataFolder;
+
+    public DataFolder() {
+    }
+
+    public DataFolder(Integer id) {
+        this.id = id;
+    }
+
+    public DataFolder(Integer id, String path) {
+        this.id = id;
+        this.dataPath = path;
+    }
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getDataPath() {
+        return dataPath;
+    }
+
+    public void setDataPath(String dataPath) {
+        this.dataPath = dataPath;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    @XmlTransient
+    public List<Experiment> getExperimentList() {
+        return experimentList;
+    }
+
+    public void setExperimentList(List<Experiment> experimentList) {
+        this.experimentList = experimentList;
+    }
+
+    @XmlTransient
+    public List<DataFolderPermission> getDataFolderPermissionList() {
+        return dataFolderPermissionList;
+    }
+
+    public void setDataFolderPermissionList(List<DataFolderPermission> dataFolderPermissionList) {
+        this.dataFolderPermissionList = dataFolderPermissionList;
+    }
+
+    @XmlTransient
+    public List<DataFolder> getDataFolderList() {
+        return dataFolderList;
+    }
+
+    public void setDataFolderList(List<DataFolder> dataFolderList) {
+        this.dataFolderList = dataFolderList;
+    }
+
+    public DataFolder getParentDataFolder() {
+        return parentDataFolder;
+    }
+
+    public void setParentDataFolder(DataFolder parentDataFolder) {
+        this.parentDataFolder = parentDataFolder;
+    }
+
+    @Override
+    public int hashCode() {
+        int hash = 0;
+        hash += (id != null ? id.hashCode() : 0);
+        return hash;
+    }
+
+    @Override
+    public boolean equals(Object object) {
+        // TODO: Warning - this method won't work in the case the id fields are not set
+        if (!(object instanceof DataFolder)) {
+            return false;
+        }
+        DataFolder other = (DataFolder) object;
+        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public String toString() {
+        return "gov.anl.aps.dm.portal.model.entities.DataFolder[ id=" + id + " ]";
+    }
+    
+}
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/DataFolderPermission.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/DataFolderPermission.java
new file mode 100644
index 0000000000000000000000000000000000000000..9fd9b0a59ac242224f264b3ebe553293638b28d8
--- /dev/null
+++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/DataFolderPermission.java
@@ -0,0 +1,124 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package gov.anl.aps.dm.portal.model.entities;
+
+import javax.persistence.Basic;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+import javax.xml.bind.annotation.XmlRootElement;
+
+/**
+ *
+ * @author sveseli
+ */
+@Entity
+@Table(name = "data_folder_permission")
+@XmlRootElement
+@NamedQueries({
+    @NamedQuery(name = "DataFolderPermission.findAll", query = "SELECT d FROM DataFolderPermission d"),
+    @NamedQuery(name = "DataFolderPermission.findById", query = "SELECT d FROM DataFolderPermission d WHERE d.id = :id"),
+    @NamedQuery(name = "DataFolderPermission.findByPermissionValue", query = "SELECT d FROM DataFolderPermission d WHERE d.permissionValue = :permissionValue"),
+    @NamedQuery(name = "DataFolderPermission.findByDescription", query = "SELECT d FROM DataFolderPermission d WHERE d.description = :description")})
+public class DataFolderPermission extends CloneableEntity
+{
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Basic(optional = false)
+    @Column(name = "id")
+    private Integer id;
+    @Basic(optional = false)
+    @NotNull
+    @Size(min = 1, max = 2147483647)
+    @Column(name = "permission_value")
+    private String permissionValue;
+    @Size(max = 2147483647)
+    @Column(name = "description")
+    private String description;
+    @JoinColumn(name = "data_folder_id", referencedColumnName = "id")
+    @ManyToOne(optional = false)
+    private DataFolder dataFolder;
+
+    public DataFolderPermission() {
+    }
+
+    public DataFolderPermission(Integer id) {
+        this.id = id;
+    }
+
+    public DataFolderPermission(Integer id, String value) {
+        this.id = id;
+        this.permissionValue = value;
+    }
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getPermissionValue() {
+        return permissionValue;
+    }
+
+    public void setPermissionValue(String permissionValue) {
+        this.permissionValue = permissionValue;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public DataFolder getDataFolder() {
+        return dataFolder;
+    }
+
+    public void setDataFolder(DataFolder dataFolder) {
+        this.dataFolder = dataFolder;
+    }
+
+    @Override
+    public int hashCode() {
+        int hash = 0;
+        hash += (id != null ? id.hashCode() : 0);
+        return hash;
+    }
+
+    @Override
+    public boolean equals(Object object) {
+        // TODO: Warning - this method won't work in the case the id fields are not set
+        if (!(object instanceof DataFolderPermission)) {
+            return false;
+        }
+        DataFolderPermission other = (DataFolderPermission) object;
+        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public String toString() {
+        return "gov.anl.aps.dm.portal.model.entities.DataFolderPermission[ id=" + id + " ]";
+    }
+    
+}
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/Experiment.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/Experiment.java
new file mode 100644
index 0000000000000000000000000000000000000000..d22df34891e8ad2cd93f9c9c3e4c780402c9fedd
--- /dev/null
+++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/Experiment.java
@@ -0,0 +1,189 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package gov.anl.aps.dm.portal.model.entities;
+
+import java.util.Date;
+import java.util.List;
+import javax.persistence.Basic;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToMany;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlTransient;
+
+/**
+ *
+ * @author sveseli
+ */
+@Entity
+@Table(name = "experiment")
+@XmlRootElement
+@NamedQueries({
+    @NamedQuery(name = "Experiment.findAll", query = "SELECT e FROM Experiment e"),
+    @NamedQuery(name = "Experiment.findById", query = "SELECT e FROM Experiment e WHERE e.id = :id"),
+    @NamedQuery(name = "Experiment.findByName", query = "SELECT e FROM Experiment e WHERE e.name = :name"),
+    @NamedQuery(name = "Experiment.findByDescription", query = "SELECT e FROM Experiment e WHERE e.description = :description"),
+    @NamedQuery(name = "Experiment.findByStartDate", query = "SELECT e FROM Experiment e WHERE e.startDate = :startDate"),
+    @NamedQuery(name = "Experiment.findByEndDate", query = "SELECT e FROM Experiment e WHERE e.endDate = :endDate")})
+public class Experiment extends CloneableEntity
+{
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Basic(optional = false)
+    @Column(name = "id")
+    private Integer id;
+    @Basic(optional = false)
+    @NotNull
+    @Size(min = 1, max = 2147483647)
+    @Column(name = "name")
+    private String name;
+    @Size(max = 2147483647)
+    @Column(name = "description")
+    private String description;
+    @Column(name = "start_date")
+    @Temporal(TemporalType.DATE)
+    private Date startDate;
+    @Column(name = "end_date")
+    @Temporal(TemporalType.DATE)
+    private Date endDate;
+    @ManyToMany(mappedBy = "experimentList")
+    private List<DataFolder> dataFolderList;
+    @OneToMany(cascade = CascadeType.ALL, mappedBy = "experiment")
+    private List<UserExperimentRole> userExperimentRoleList;
+    @OneToMany(cascade = CascadeType.ALL, mappedBy = "experiment")
+    private List<ExperimentPolicy> experimentPolicyList;
+    @JoinColumn(name = "experiment_type_id", referencedColumnName = "id")
+    @ManyToOne(optional = false)
+    private ExperimentType experimentType;
+
+    public Experiment() {
+    }
+
+    public Experiment(Integer id) {
+        this.id = id;
+    }
+
+    public Experiment(Integer id, String name) {
+        this.id = id;
+        this.name = name;
+    }
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public Date getStartDate() {
+        return startDate;
+    }
+
+    public void setStartDate(Date startDate) {
+        this.startDate = startDate;
+    }
+
+    public Date getEndDate() {
+        return endDate;
+    }
+
+    public void setEndDate(Date endDate) {
+        this.endDate = endDate;
+    }
+
+    @XmlTransient
+    public List<DataFolder> getDataFolderList() {
+        return dataFolderList;
+    }
+
+    public void setDataFolderList(List<DataFolder> dataFolderList) {
+        this.dataFolderList = dataFolderList;
+    }
+
+    @XmlTransient
+    public List<UserExperimentRole> getUserExperimentRoleList() {
+        return userExperimentRoleList;
+    }
+
+    public void setUserExperimentRoleList(List<UserExperimentRole> userExperimentRoleList) {
+        this.userExperimentRoleList = userExperimentRoleList;
+    }
+
+    @XmlTransient
+    public List<ExperimentPolicy> getExperimentPolicyList() {
+        return experimentPolicyList;
+    }
+
+    public void setExperimentPolicyList(List<ExperimentPolicy> experimentPolicyList) {
+        this.experimentPolicyList = experimentPolicyList;
+    }
+
+    public ExperimentType getExperimentType() {
+        return experimentType;
+    }
+
+    public void setExperimentType(ExperimentType experimentType) {
+        this.experimentType = experimentType;
+    }
+
+    @Override
+    public int hashCode() {
+        int hash = 0;
+        hash += (id != null ? id.hashCode() : 0);
+        return hash;
+    }
+
+    @Override
+    public boolean equals(Object object) {
+        // TODO: Warning - this method won't work in the case the id fields are not set
+        if (!(object instanceof Experiment)) {
+            return false;
+        }
+        Experiment other = (Experiment) object;
+        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public String toString() {
+        return "gov.anl.aps.dm.portal.model.entities.Experiment[ id=" + id + " ]";
+    }
+    
+}
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/ExperimentPolicy.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/ExperimentPolicy.java
new file mode 100644
index 0000000000000000000000000000000000000000..48a38100c8386e42d03400a3f83cd6f659570eb3
--- /dev/null
+++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/ExperimentPolicy.java
@@ -0,0 +1,134 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package gov.anl.aps.dm.portal.model.entities;
+
+import javax.persistence.Basic;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+import javax.xml.bind.annotation.XmlRootElement;
+
+/**
+ *
+ * @author sveseli
+ */
+@Entity
+@Table(name = "experiment_policy")
+@XmlRootElement
+@NamedQueries({
+    @NamedQuery(name = "ExperimentPolicy.findAll", query = "SELECT e FROM ExperimentPolicy e"),
+    @NamedQuery(name = "ExperimentPolicy.findById", query = "SELECT e FROM ExperimentPolicy e WHERE e.id = :id"),
+    @NamedQuery(name = "ExperimentPolicy.findByPolicyValue", query = "SELECT e FROM ExperimentPolicy e WHERE e.policyValue = :policyValue"),
+    @NamedQuery(name = "ExperimentPolicy.findByDescription", query = "SELECT e FROM ExperimentPolicy e WHERE e.description = :description")})
+public class ExperimentPolicy extends CloneableEntity
+{
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Basic(optional = false)
+    @Column(name = "id")
+    private Integer id;
+    @Basic(optional = false)
+    @Size(min = 1, max = 2147483647)
+    @Column(name = "policy_value")
+    private String policyValue;
+    @Size(max = 2147483647)
+    @Column(name = "description")
+    private String description;
+    @JoinColumn(name = "policy_type_id", referencedColumnName = "id")
+    @ManyToOne(optional = false)
+    private PolicyType policyType;
+    @JoinColumn(name = "experiment_id", referencedColumnName = "id")
+    @ManyToOne(optional = false)
+    private Experiment experiment;
+
+    public ExperimentPolicy() {
+    }
+
+    public ExperimentPolicy(Integer id) {
+        this.id = id;
+    }
+
+    public ExperimentPolicy(Integer id, String value) {
+        this.id = id;
+        this.policyValue = value;
+    }
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getPolicyValue() {
+        return policyValue;
+    }
+
+    public void setPolicyValue(String policyValue) {
+        this.policyValue = policyValue;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public PolicyType getPolicyType() {
+        return policyType;
+    }
+
+    public void setPolicyType(PolicyType policyType) {
+        this.policyType = policyType;
+    }
+
+    public Experiment getExperiment() {
+        return experiment;
+    }
+
+    public void setExperiment(Experiment experiment) {
+        this.experiment = experiment;
+    }
+
+    @Override
+    public int hashCode() {
+        int hash = 0;
+        hash += (id != null ? id.hashCode() : 0);
+        return hash;
+    }
+
+    @Override
+    public boolean equals(Object object) {
+        // TODO: Warning - this method won't work in the case the id fields are not set
+        if (!(object instanceof ExperimentPolicy)) {
+            return false;
+        }
+        ExperimentPolicy other = (ExperimentPolicy) object;
+        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public String toString() {
+        return "gov.anl.aps.dm.portal.model.entities.ExperimentPolicy[ id=" + id + " ]";
+    }
+    
+}
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/ExperimentType.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/ExperimentType.java
new file mode 100644
index 0000000000000000000000000000000000000000..4c48b52d3f92b449014a0e7bb184fb5b15ab1b7c
--- /dev/null
+++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/ExperimentType.java
@@ -0,0 +1,138 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package gov.anl.aps.dm.portal.model.entities;
+
+import java.util.List;
+import javax.persistence.Basic;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlTransient;
+
+/**
+ *
+ * @author sveseli
+ */
+@Entity
+@Table(name = "experiment_type")
+@XmlRootElement
+@NamedQueries({
+    @NamedQuery(name = "ExperimentType.findAll", query = "SELECT e FROM ExperimentType e"),
+    @NamedQuery(name = "ExperimentType.findById", query = "SELECT e FROM ExperimentType e WHERE e.id = :id"),
+    @NamedQuery(name = "ExperimentType.findByName", query = "SELECT e FROM ExperimentType e WHERE e.name = :name"),
+    @NamedQuery(name = "ExperimentType.findByDescription", query = "SELECT e FROM ExperimentType e WHERE e.description = :description"),
+    @NamedQuery(name = "ExperimentType.findByRootDataPath", query = "SELECT e FROM ExperimentType e WHERE e.rootDataPath = :rootDataPath")})
+public class ExperimentType extends CloneableEntity
+{
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Basic(optional = false)
+    @Column(name = "id")
+    private Integer id;
+    @Basic(optional = false)
+    @NotNull
+    @Size(min = 1, max = 2147483647)
+    @Column(name = "name")
+    private String name;
+    @Size(max = 2147483647)
+    @Column(name = "description")
+    private String description;
+    @Size(max = 2147483647)
+    @Column(name = "root_data_path")
+    private String rootDataPath;
+    @OneToMany(cascade = CascadeType.ALL, mappedBy = "experimentType")
+    private List<Experiment> experimentList;
+
+    public ExperimentType() {
+    }
+
+    public ExperimentType(Integer id) {
+        this.id = id;
+    }
+
+    public ExperimentType(Integer id, String name) {
+        this.id = id;
+        this.name = name;
+    }
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public String getRootDataPath() {
+        return rootDataPath;
+    }
+
+    public void setRootDataPath(String rootDataPath) {
+        this.rootDataPath = rootDataPath;
+    }
+
+    @XmlTransient
+    public List<Experiment> getExperimentList() {
+        return experimentList;
+    }
+
+    public void setExperimentList(List<Experiment> experimentList) {
+        this.experimentList = experimentList;
+    }
+
+    @Override
+    public int hashCode() {
+        int hash = 0;
+        hash += (id != null ? id.hashCode() : 0);
+        return hash;
+    }
+
+    @Override
+    public boolean equals(Object object) {
+        // TODO: Warning - this method won't work in the case the id fields are not set
+        if (!(object instanceof ExperimentType)) {
+            return false;
+        }
+        ExperimentType other = (ExperimentType) object;
+        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public String toString() {
+        return "gov.anl.aps.dm.portal.model.entities.ExperimentType[ id=" + id + " ]";
+    }
+    
+}
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/PolicyType.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/PolicyType.java
new file mode 100644
index 0000000000000000000000000000000000000000..5183030e708b11912cb432f5152b3a150cd7ff02
--- /dev/null
+++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/PolicyType.java
@@ -0,0 +1,172 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package gov.anl.aps.dm.portal.model.entities;
+
+import java.util.List;
+import javax.persistence.Basic;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlTransient;
+
+/**
+ *
+ * @author sveseli
+ */
+@Entity
+@Table(name = "policy_type")
+@XmlRootElement
+@NamedQueries({
+    @NamedQuery(name = "PolicyType.findAll", query = "SELECT p FROM PolicyType p"),
+    @NamedQuery(name = "PolicyType.findById", query = "SELECT p FROM PolicyType p WHERE p.id = :id"),
+    @NamedQuery(name = "PolicyType.findByName", query = "SELECT p FROM PolicyType p WHERE p.name = :name"),
+    @NamedQuery(name = "PolicyType.findByDescription", query = "SELECT p FROM PolicyType p WHERE p.description = :description"),
+    @NamedQuery(name = "PolicyType.findByHandlerName", query = "SELECT p FROM PolicyType p WHERE p.handlerName = :handlerName"),
+    @NamedQuery(name = "PolicyType.findByDefaultPolicyValue", query = "SELECT p FROM PolicyType p WHERE p.defaultPolicyValue = :defaultPolicyValue")})
+public class PolicyType extends CloneableEntity
+{
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Basic(optional = false)
+    @Column(name = "id")
+    private Integer id;
+    @Basic(optional = false)
+    @NotNull
+    @Size(min = 1, max = 2147483647)
+    @Column(name = "name")
+    private String name;
+    @Size(max = 2147483647)
+    @Column(name = "description")
+    private String description;
+    @Size(max = 2147483647)
+    @Column(name = "handler_name")
+    private String handlerName;
+    @Size(max = 2147483647)
+    @Column(name = "default_policy_value")
+    private String defaultPolicyValue;
+    @OneToMany(cascade = CascadeType.ALL, mappedBy = "policyType")
+    private List<ExperimentPolicy> experimentPolicyList;
+    @OneToMany(cascade = CascadeType.ALL, mappedBy = "policyType")
+    private List<TemplatePolicy> templatePolicyList;
+    @OneToMany(cascade = CascadeType.ALL, mappedBy = "policyType")
+    private List<AllowedPolicyValue> allowedPolicyValueList;
+
+    public PolicyType() {
+    }
+
+    public PolicyType(Integer id) {
+        this.id = id;
+    }
+
+    public PolicyType(Integer id, String name) {
+        this.id = id;
+        this.name = name;
+    }
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public String getHandlerName() {
+        return handlerName;
+    }
+
+    public void setHandlerName(String handlerName) {
+        this.handlerName = handlerName;
+    }
+
+    public String getDefaultPolicyValue() {
+        return defaultPolicyValue;
+    }
+
+    public void setDefaultPolicyValue(String defaultPolicyValue) {
+        this.defaultPolicyValue = defaultPolicyValue;
+    }
+
+    @XmlTransient
+    public List<ExperimentPolicy> getExperimentPolicyList() {
+        return experimentPolicyList;
+    }
+
+    public void setExperimentPolicyList(List<ExperimentPolicy> experimentPolicyList) {
+        this.experimentPolicyList = experimentPolicyList;
+    }
+
+    @XmlTransient
+    public List<TemplatePolicy> getTemplatePolicyList() {
+        return templatePolicyList;
+    }
+
+    public void setTemplatePolicyList(List<TemplatePolicy> templatePolicyList) {
+        this.templatePolicyList = templatePolicyList;
+    }
+
+    @XmlTransient
+    public List<AllowedPolicyValue> getAllowedPolicyValueList() {
+        return allowedPolicyValueList;
+    }
+
+    public void setAllowedPolicyValueList(List<AllowedPolicyValue> allowedPolicyValueList) {
+        this.allowedPolicyValueList = allowedPolicyValueList;
+    }
+
+    @Override
+    public int hashCode() {
+        int hash = 0;
+        hash += (id != null ? id.hashCode() : 0);
+        return hash;
+    }
+
+    @Override
+    public boolean equals(Object object) {
+        // TODO: Warning - this method won't work in the case the id fields are not set
+        if (!(object instanceof PolicyType)) {
+            return false;
+        }
+        PolicyType other = (PolicyType) object;
+        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public String toString() {
+        return "gov.anl.aps.dm.portal.model.entities.PolicyType[ id=" + id + " ]";
+    }
+    
+}
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/RoleType.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/RoleType.java
new file mode 100644
index 0000000000000000000000000000000000000000..3476b24c7c9529625729be9e410c633a9cd73e05
--- /dev/null
+++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/RoleType.java
@@ -0,0 +1,143 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package gov.anl.aps.dm.portal.model.entities;
+
+import java.util.List;
+import javax.persistence.Basic;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinTable;
+import javax.persistence.ManyToMany;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlTransient;
+
+/**
+ *
+ * @author sveseli
+ */
+@Entity
+@Table(name = "role_type")
+@XmlRootElement
+@NamedQueries({
+    @NamedQuery(name = "RoleType.findAll", query = "SELECT r FROM RoleType r"),
+    @NamedQuery(name = "RoleType.findById", query = "SELECT r FROM RoleType r WHERE r.id = :id"),
+    @NamedQuery(name = "RoleType.findByName", query = "SELECT r FROM RoleType r WHERE r.name = :name"),
+    @NamedQuery(name = "RoleType.findByDescription", query = "SELECT r FROM RoleType r WHERE r.description = :description")})
+public class RoleType extends CloneableEntity
+{
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Basic(optional = false)
+    @Column(name = "id")
+    private Integer id;
+    @Basic(optional = false)
+    @NotNull
+    @Size(min = 1, max = 2147483647)
+    @Column(name = "name")
+    private String name;
+    @Size(max = 2147483647)
+    @Column(name = "description")
+    private String description;
+    @JoinTable(name = "user_role", joinColumns = {
+        @JoinColumn(name = "role_type_id", referencedColumnName = "id")}, inverseJoinColumns = {
+        @JoinColumn(name = "user_id", referencedColumnName = "id")})
+    @ManyToMany
+    private List<UserInfo> userInfoList;
+    @OneToMany(cascade = CascadeType.ALL, mappedBy = "roleType")
+    private List<UserExperimentRole> userExperimentRoleList;
+
+    public RoleType() {
+    }
+
+    public RoleType(Integer id) {
+        this.id = id;
+    }
+
+    public RoleType(Integer id, String name) {
+        this.id = id;
+        this.name = name;
+    }
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    @XmlTransient
+    public List<UserInfo> getUserInfoList() {
+        return userInfoList;
+    }
+
+    public void setUserInfoList(List<UserInfo> userInfoList) {
+        this.userInfoList = userInfoList;
+    }
+
+    @XmlTransient
+    public List<UserExperimentRole> getUserExperimentRoleList() {
+        return userExperimentRoleList;
+    }
+
+    public void setUserExperimentRoleList(List<UserExperimentRole> userExperimentRoleList) {
+        this.userExperimentRoleList = userExperimentRoleList;
+    }
+
+    @Override
+    public int hashCode() {
+        int hash = 0;
+        hash += (id != null ? id.hashCode() : 0);
+        return hash;
+    }
+
+    @Override
+    public boolean equals(Object object) {
+        // TODO: Warning - this method won't work in the case the id fields are not set
+        if (!(object instanceof RoleType)) {
+            return false;
+        }
+        RoleType other = (RoleType) object;
+        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public String toString() {
+        return "gov.anl.aps.dm.portal.model.entities.RoleType[ id=" + id + " ]";
+    }
+    
+}
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/SettingType.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/SettingType.java
new file mode 100644
index 0000000000000000000000000000000000000000..4c9d8465f480c0c61c5efae238c47b408644ffd6
--- /dev/null
+++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/SettingType.java
@@ -0,0 +1,160 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package gov.anl.aps.dm.portal.model.entities;
+
+import java.util.List;
+import javax.persistence.Basic;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlTransient;
+
+/**
+ *
+ * @author sveseli
+ */
+@Entity
+@Table(name = "setting_type")
+@XmlRootElement
+@NamedQueries({
+    @NamedQuery(name = "SettingType.findAll", query = "SELECT s FROM SettingType s"),
+    @NamedQuery(name = "SettingType.findById", query = "SELECT s FROM SettingType s WHERE s.id = :id"),
+    @NamedQuery(name = "SettingType.findByName", query = "SELECT s FROM SettingType s WHERE s.name = :name"),
+    @NamedQuery(name = "SettingType.findByDescription", query = "SELECT s FROM SettingType s WHERE s.description = :description"),
+    @NamedQuery(name = "SettingType.findByDefaultValue", query = "SELECT s FROM SettingType s WHERE s.defaultValue = :defaultValue"),
+    @NamedQuery(name = "SettingType.findByIsUserModifiable", query = "SELECT s FROM SettingType s WHERE s.isUserModifiable = :isUserModifiable")})
+public class SettingType extends CloneableEntity
+{
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Basic(optional = false)
+    @Column(name = "id")
+    private Integer id;
+    @Basic(optional = false)
+    @NotNull
+    @Size(min = 1, max = 2147483647)
+    @Column(name = "name")
+    private String name;
+    @Size(max = 2147483647)
+    @Column(name = "description")
+    private String description;
+    @Size(max = 2147483647)
+    @Column(name = "default_value")
+    private String defaultValue;
+    @Column(name = "is_user_modifiable")
+    private Boolean isUserModifiable;
+    @OneToMany(cascade = CascadeType.ALL, mappedBy = "settingType")
+    private List<AllowedSettingValue> allowedSettingValueList;
+    @OneToMany(cascade = CascadeType.ALL, mappedBy = "settingType")
+    private List<UserSetting> userSettingList;
+
+    public SettingType() {
+    }
+
+    public SettingType(Integer id) {
+        this.id = id;
+    }
+
+    public SettingType(Integer id, String name) {
+        this.id = id;
+        this.name = name;
+    }
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public String getDefaultValue() {
+        return defaultValue;
+    }
+
+    public void setDefaultValue(String defaultValue) {
+        this.defaultValue = defaultValue;
+    }
+
+    public Boolean getIsUserModifiable() {
+        return isUserModifiable;
+    }
+
+    public void setIsUserModifiable(Boolean isUserModifiable) {
+        this.isUserModifiable = isUserModifiable;
+    }
+
+    @XmlTransient
+    public List<AllowedSettingValue> getAllowedSettingValueList() {
+        return allowedSettingValueList;
+    }
+
+    public void setAllowedSettingValueList(List<AllowedSettingValue> allowedSettingValueList) {
+        this.allowedSettingValueList = allowedSettingValueList;
+    }
+
+    @XmlTransient
+    public List<UserSetting> getUserSettingList() {
+        return userSettingList;
+    }
+
+    public void setUserSettingList(List<UserSetting> userSettingList) {
+        this.userSettingList = userSettingList;
+    }
+
+    @Override
+    public int hashCode() {
+        int hash = 0;
+        hash += (id != null ? id.hashCode() : 0);
+        return hash;
+    }
+
+    @Override
+    public boolean equals(Object object) {
+        // TODO: Warning - this method won't work in the case the id fields are not set
+        if (!(object instanceof SettingType)) {
+            return false;
+        }
+        SettingType other = (SettingType) object;
+        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public String toString() {
+        return "gov.anl.aps.dm.portal.model.entities.SettingType[ id=" + id + " ]";
+    }
+    
+}
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/TemplatePolicy.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/TemplatePolicy.java
new file mode 100644
index 0000000000000000000000000000000000000000..6e9757c9d40529c1910ed1b29a3ee17894b44e30
--- /dev/null
+++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/TemplatePolicy.java
@@ -0,0 +1,133 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package gov.anl.aps.dm.portal.model.entities;
+
+import javax.persistence.Basic;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+import javax.validation.constraints.Size;
+import javax.xml.bind.annotation.XmlRootElement;
+
+/**
+ *
+ * @author sveseli
+ */
+@Entity
+@Table(name = "template_policy")
+@XmlRootElement
+@NamedQueries({
+    @NamedQuery(name = "TemplatePolicy.findAll", query = "SELECT t FROM TemplatePolicy t"),
+    @NamedQuery(name = "TemplatePolicy.findById", query = "SELECT t FROM TemplatePolicy t WHERE t.id = :id"),
+    @NamedQuery(name = "TemplatePolicy.findByPolicyValue", query = "SELECT t FROM TemplatePolicy t WHERE t.policyValue = :policyValue"),
+    @NamedQuery(name = "TemplatePolicy.findByDescription", query = "SELECT t FROM TemplatePolicy t WHERE t.description = :description")})
+public class TemplatePolicy extends CloneableEntity
+{
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Basic(optional = false)
+    @Column(name = "id")
+    private Integer id;
+    @Basic(optional = false)
+    @Size(min = 1, max = 2147483647)
+    @Column(name = "policy_value")
+    private String policyValue;
+    @Size(max = 2147483647)
+    @Column(name = "description")
+    private String description;
+    @JoinColumn(name = "template_policy_set_id", referencedColumnName = "id")
+    @ManyToOne(optional = false)
+    private TemplatePolicySet templatePolicySet;
+    @JoinColumn(name = "policy_type_id", referencedColumnName = "id")
+    @ManyToOne(optional = false)
+    private PolicyType policyType;
+
+    public TemplatePolicy() {
+    }
+
+    public TemplatePolicy(Integer id) {
+        this.id = id;
+    }
+
+    public TemplatePolicy(Integer id, String value) {
+        this.id = id;
+        this.policyValue = value;
+    }
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getPolicyValue() {
+        return policyValue;
+    }
+
+    public void setPolicyValue(String policyValue) {
+        this.policyValue = policyValue;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public TemplatePolicySet getTemplatePolicySet() {
+        return templatePolicySet;
+    }
+
+    public void setTemplatePolicySet(TemplatePolicySet templatePolicySet) {
+        this.templatePolicySet = templatePolicySet;
+    }
+
+    public PolicyType getPolicyType() {
+        return policyType;
+    }
+
+    public void setPolicyType(PolicyType policyType) {
+        this.policyType = policyType;
+    }
+
+    @Override
+    public int hashCode() {
+        int hash = 0;
+        hash += (id != null ? id.hashCode() : 0);
+        return hash;
+    }
+
+    @Override
+    public boolean equals(Object object) {
+        // TODO: Warning - this method won't work in the case the id fields are not set
+        if (!(object instanceof TemplatePolicy)) {
+            return false;
+        }
+        TemplatePolicy other = (TemplatePolicy) object;
+        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public String toString() {
+        return "gov.anl.aps.dm.portal.model.entities.TemplatePolicy[ id=" + id + " ]";
+    }
+    
+}
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/TemplatePolicySet.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/TemplatePolicySet.java
new file mode 100644
index 0000000000000000000000000000000000000000..2baf67a8d9b336af5e727e72368e9b477c96856a
--- /dev/null
+++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/TemplatePolicySet.java
@@ -0,0 +1,126 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package gov.anl.aps.dm.portal.model.entities;
+
+import java.util.List;
+import javax.persistence.Basic;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlTransient;
+
+/**
+ *
+ * @author sveseli
+ */
+@Entity
+@Table(name = "template_policy_set")
+@XmlRootElement
+@NamedQueries({
+    @NamedQuery(name = "TemplatePolicySet.findAll", query = "SELECT t FROM TemplatePolicySet t"),
+    @NamedQuery(name = "TemplatePolicySet.findById", query = "SELECT t FROM TemplatePolicySet t WHERE t.id = :id"),
+    @NamedQuery(name = "TemplatePolicySet.findByName", query = "SELECT t FROM TemplatePolicySet t WHERE t.name = :name"),
+    @NamedQuery(name = "TemplatePolicySet.findByDescription", query = "SELECT t FROM TemplatePolicySet t WHERE t.description = :description")})
+public class TemplatePolicySet extends CloneableEntity
+{
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Basic(optional = false)
+    @Column(name = "id")
+    private Integer id;
+    @Basic(optional = false)
+    @NotNull
+    @Size(min = 1, max = 2147483647)
+    @Column(name = "name")
+    private String name;
+    @Size(max = 2147483647)
+    @Column(name = "description")
+    private String description;
+    @OneToMany(cascade = CascadeType.ALL, mappedBy = "templatePolicySet")
+    private List<TemplatePolicy> templatePolicyList;
+
+    public TemplatePolicySet() {
+    }
+
+    public TemplatePolicySet(Integer id) {
+        this.id = id;
+    }
+
+    public TemplatePolicySet(Integer id, String name) {
+        this.id = id;
+        this.name = name;
+    }
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    @XmlTransient
+    public List<TemplatePolicy> getTemplatePolicyList() {
+        return templatePolicyList;
+    }
+
+    public void setTemplatePolicyList(List<TemplatePolicy> templatePolicyList) {
+        this.templatePolicyList = templatePolicyList;
+    }
+
+    @Override
+    public int hashCode() {
+        int hash = 0;
+        hash += (id != null ? id.hashCode() : 0);
+        return hash;
+    }
+
+    @Override
+    public boolean equals(Object object) {
+        // TODO: Warning - this method won't work in the case the id fields are not set
+        if (!(object instanceof TemplatePolicySet)) {
+            return false;
+        }
+        TemplatePolicySet other = (TemplatePolicySet) object;
+        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public String toString() {
+        return "gov.anl.aps.dm.portal.model.entities.TemplatePolicySet[ id=" + id + " ]";
+    }
+    
+}
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/UserExperimentRole.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/UserExperimentRole.java
new file mode 100644
index 0000000000000000000000000000000000000000..eb9c815dab6027fe2e5fca58a1cdf1bf7faad132
--- /dev/null
+++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/UserExperimentRole.java
@@ -0,0 +1,112 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package gov.anl.aps.dm.portal.model.entities;
+
+import javax.persistence.EmbeddedId;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+import javax.xml.bind.annotation.XmlRootElement;
+
+/**
+ *
+ * @author sveseli
+ */
+@Entity
+@Table(name = "user_experiment_role")
+@XmlRootElement
+@NamedQueries({
+    @NamedQuery(name = "UserExperimentRole.findAll", query = "SELECT u FROM UserExperimentRole u"),
+    @NamedQuery(name = "UserExperimentRole.findByUserId", query = "SELECT u FROM UserExperimentRole u WHERE u.userExperimentRolePK.userId = :userId"),
+    @NamedQuery(name = "UserExperimentRole.findByExperimentId", query = "SELECT u FROM UserExperimentRole u WHERE u.userExperimentRolePK.experimentId = :experimentId"),
+    @NamedQuery(name = "UserExperimentRole.findByRoleTypeId", query = "SELECT u FROM UserExperimentRole u WHERE u.userExperimentRolePK.roleTypeId = :roleTypeId")})
+public class UserExperimentRole extends CloneableEntity
+{
+    @EmbeddedId
+    protected UserExperimentRolePK userExperimentRolePK;
+    @JoinColumn(name = "user_id", referencedColumnName = "id", insertable = false, updatable = false)
+    @ManyToOne(optional = false)
+    private UserInfo userInfo;
+    @JoinColumn(name = "role_type_id", referencedColumnName = "id", insertable = false, updatable = false)
+    @ManyToOne(optional = false)
+    private RoleType roleType;
+    @JoinColumn(name = "experiment_id", referencedColumnName = "id", insertable = false, updatable = false)
+    @ManyToOne(optional = false)
+    private Experiment experiment;
+
+    public UserExperimentRole() {
+    }
+
+    public UserExperimentRole(UserExperimentRolePK userExperimentRolePK) {
+        this.userExperimentRolePK = userExperimentRolePK;
+    }
+
+    public UserExperimentRole(int userId, int experimentId, int roleTypeId) {
+        this.userExperimentRolePK = new UserExperimentRolePK(userId, experimentId, roleTypeId);
+    }
+
+    public UserExperimentRolePK getUserExperimentRolePK() {
+        return userExperimentRolePK;
+    }
+
+    public void setUserExperimentRolePK(UserExperimentRolePK userExperimentRolePK) {
+        this.userExperimentRolePK = userExperimentRolePK;
+    }
+
+    public UserInfo getUserInfo() {
+        return userInfo;
+    }
+
+    public void setUserInfo(UserInfo userInfo) {
+        this.userInfo = userInfo;
+    }
+
+    public RoleType getRoleType() {
+        return roleType;
+    }
+
+    public void setRoleType(RoleType roleType) {
+        this.roleType = roleType;
+    }
+
+    public Experiment getExperiment() {
+        return experiment;
+    }
+
+    public void setExperiment(Experiment experiment) {
+        this.experiment = experiment;
+    }
+
+    @Override
+    public int hashCode() {
+        int hash = 0;
+        hash += (userExperimentRolePK != null ? userExperimentRolePK.hashCode() : 0);
+        return hash;
+    }
+
+    @Override
+    public boolean equals(Object object) {
+        // TODO: Warning - this method won't work in the case the id fields are not set
+        if (!(object instanceof UserExperimentRole)) {
+            return false;
+        }
+        UserExperimentRole other = (UserExperimentRole) object;
+        if ((this.userExperimentRolePK == null && other.userExperimentRolePK != null) || (this.userExperimentRolePK != null && !this.userExperimentRolePK.equals(other.userExperimentRolePK))) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public String toString() {
+        return "gov.anl.aps.dm.portal.model.entities.UserExperimentRole[ userExperimentRolePK=" + userExperimentRolePK + " ]";
+    }
+    
+}
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/UserExperimentRolePK.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/UserExperimentRolePK.java
new file mode 100644
index 0000000000000000000000000000000000000000..caf5c4892f4aa9e0f37e53912b60cbe67202c3c9
--- /dev/null
+++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/UserExperimentRolePK.java
@@ -0,0 +1,101 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package gov.anl.aps.dm.portal.model.entities;
+
+import java.io.Serializable;
+import javax.persistence.Basic;
+import javax.persistence.Column;
+import javax.persistence.Embeddable;
+import javax.validation.constraints.NotNull;
+
+/**
+ *
+ * @author sveseli
+ */
+@Embeddable
+public class UserExperimentRolePK implements Serializable
+{
+    @Basic(optional = false)
+    @NotNull
+    @Column(name = "user_id")
+    private int userId;
+    @Basic(optional = false)
+    @NotNull
+    @Column(name = "experiment_id")
+    private int experimentId;
+    @Basic(optional = false)
+    @NotNull
+    @Column(name = "role_type_id")
+    private int roleTypeId;
+
+    public UserExperimentRolePK() {
+    }
+
+    public UserExperimentRolePK(int userId, int experimentId, int roleTypeId) {
+        this.userId = userId;
+        this.experimentId = experimentId;
+        this.roleTypeId = roleTypeId;
+    }
+
+    public int getUserId() {
+        return userId;
+    }
+
+    public void setUserId(int userId) {
+        this.userId = userId;
+    }
+
+    public int getExperimentId() {
+        return experimentId;
+    }
+
+    public void setExperimentId(int experimentId) {
+        this.experimentId = experimentId;
+    }
+
+    public int getRoleTypeId() {
+        return roleTypeId;
+    }
+
+    public void setRoleTypeId(int roleTypeId) {
+        this.roleTypeId = roleTypeId;
+    }
+
+    @Override
+    public int hashCode() {
+        int hash = 0;
+        hash += (int) userId;
+        hash += (int) experimentId;
+        hash += (int) roleTypeId;
+        return hash;
+    }
+
+    @Override
+    public boolean equals(Object object) {
+        // TODO: Warning - this method won't work in the case the id fields are not set
+        if (!(object instanceof UserExperimentRolePK)) {
+            return false;
+        }
+        UserExperimentRolePK other = (UserExperimentRolePK) object;
+        if (this.userId != other.userId) {
+            return false;
+        }
+        if (this.experimentId != other.experimentId) {
+            return false;
+        }
+        if (this.roleTypeId != other.roleTypeId) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public String toString() {
+        return "gov.anl.aps.dm.portal.model.entities.UserExperimentRolePK[ userId=" + userId + ", experimentId=" + experimentId + ", roleTypeId=" + roleTypeId + " ]";
+    }
+    
+}
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/UserInfo.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/UserInfo.java
new file mode 100644
index 0000000000000000000000000000000000000000..2083e39e8e17d389f2b76e1300a73c6ad31b4af5
--- /dev/null
+++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/UserInfo.java
@@ -0,0 +1,216 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package gov.anl.aps.dm.portal.model.entities;
+
+import java.util.List;
+import javax.persistence.Basic;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.ManyToMany;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlTransient;
+
+/**
+ *
+ * @author sveseli
+ */
+@Entity
+@Table(name = "user_info")
+@XmlRootElement
+@NamedQueries({
+    @NamedQuery(name = "UserInfo.findAll", query = "SELECT u FROM UserInfo u"),
+    @NamedQuery(name = "UserInfo.findById", query = "SELECT u FROM UserInfo u WHERE u.id = :id"),
+    @NamedQuery(name = "UserInfo.findByUsername", query = "SELECT u FROM UserInfo u WHERE u.username = :username"),
+    @NamedQuery(name = "UserInfo.findByFirstName", query = "SELECT u FROM UserInfo u WHERE u.firstName = :firstName"),
+    @NamedQuery(name = "UserInfo.findByLastName", query = "SELECT u FROM UserInfo u WHERE u.lastName = :lastName"),
+    @NamedQuery(name = "UserInfo.findByMiddleName", query = "SELECT u FROM UserInfo u WHERE u.middleName = :middleName"),
+    @NamedQuery(name = "UserInfo.findByEmail", query = "SELECT u FROM UserInfo u WHERE u.email = :email"),
+    @NamedQuery(name = "UserInfo.findByDescription", query = "SELECT u FROM UserInfo u WHERE u.description = :description"),
+    @NamedQuery(name = "UserInfo.findByPassword", query = "SELECT u FROM UserInfo u WHERE u.password = :password")})
+public class UserInfo extends CloneableEntity
+{
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Basic(optional = false)
+    @Column(name = "id")
+    private Integer id;
+    @Basic(optional = false)
+    @NotNull
+    @Size(min = 1, max = 2147483647)
+    @Column(name = "username")
+    private String username;
+    @Basic(optional = false)
+    @NotNull
+    @Size(min = 1, max = 2147483647)
+    @Column(name = "first_name")
+    private String firstName;
+    @Basic(optional = false)
+    @NotNull
+    @Size(min = 1, max = 2147483647)
+    @Column(name = "last_name")
+    private String lastName;
+    @Size(max = 2147483647)
+    @Column(name = "middle_name")
+    private String middleName;
+    // @Pattern(regexp="[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?", message="Invalid email")//if the field contains email address consider using this annotation to enforce field validation
+    @Size(max = 2147483647)
+    @Column(name = "email")
+    private String email;
+    @Size(max = 2147483647)
+    @Column(name = "description")
+    private String description;
+    @Size(max = 2147483647)
+    @Column(name = "password")
+    private String password;
+    @ManyToMany(mappedBy = "userInfoList")
+    private List<RoleType> roleTypeList;
+    @OneToMany(cascade = CascadeType.ALL, mappedBy = "userInfo")
+    private List<UserExperimentRole> userExperimentRoleList;
+    @OneToMany(cascade = CascadeType.ALL, mappedBy = "userInfo")
+    private List<UserSetting> userSettingList;
+
+    public UserInfo() {
+    }
+
+    public UserInfo(Integer id) {
+        this.id = id;
+    }
+
+    public UserInfo(Integer id, String username, String firstName, String lastName) {
+        this.id = id;
+        this.username = username;
+        this.firstName = firstName;
+        this.lastName = lastName;
+    }
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    public String getFirstName() {
+        return firstName;
+    }
+
+    public void setFirstName(String firstName) {
+        this.firstName = firstName;
+    }
+
+    public String getLastName() {
+        return lastName;
+    }
+
+    public void setLastName(String lastName) {
+        this.lastName = lastName;
+    }
+
+    public String getMiddleName() {
+        return middleName;
+    }
+
+    public void setMiddleName(String middleName) {
+        this.middleName = middleName;
+    }
+
+    public String getEmail() {
+        return email;
+    }
+
+    public void setEmail(String email) {
+        this.email = email;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public String getPassword() {
+        return password;
+    }
+
+    public void setPassword(String password) {
+        this.password = password;
+    }
+
+    @XmlTransient
+    public List<RoleType> getRoleTypeList() {
+        return roleTypeList;
+    }
+
+    public void setRoleTypeList(List<RoleType> roleTypeList) {
+        this.roleTypeList = roleTypeList;
+    }
+
+    @XmlTransient
+    public List<UserExperimentRole> getUserExperimentRoleList() {
+        return userExperimentRoleList;
+    }
+
+    public void setUserExperimentRoleList(List<UserExperimentRole> userExperimentRoleList) {
+        this.userExperimentRoleList = userExperimentRoleList;
+    }
+
+    @XmlTransient
+    public List<UserSetting> getUserSettingList() {
+        return userSettingList;
+    }
+
+    public void setUserSettingList(List<UserSetting> userSettingList) {
+        this.userSettingList = userSettingList;
+    }
+
+    @Override
+    public int hashCode() {
+        int hash = 0;
+        hash += (id != null ? id.hashCode() : 0);
+        return hash;
+    }
+
+    @Override
+    public boolean equals(Object object) {
+        // TODO: Warning - this method won't work in the case the id fields are not set
+        if (!(object instanceof UserInfo)) {
+            return false;
+        }
+        UserInfo other = (UserInfo) object;
+        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public String toString() {
+        return "gov.anl.aps.dm.portal.model.entities.UserInfo[ id=" + id + " ]";
+    }
+    
+}
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/UserSetting.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/UserSetting.java
new file mode 100644
index 0000000000000000000000000000000000000000..7d539cba4e429b86114f92c25c64bfd30da920f7
--- /dev/null
+++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/UserSetting.java
@@ -0,0 +1,115 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package gov.anl.aps.dm.portal.model.entities;
+
+import javax.persistence.Basic;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+import javax.validation.constraints.Size;
+import javax.xml.bind.annotation.XmlRootElement;
+
+/**
+ *
+ * @author sveseli
+ */
+@Entity
+@Table(name = "user_setting")
+@XmlRootElement
+@NamedQueries({
+    @NamedQuery(name = "UserSetting.findAll", query = "SELECT u FROM UserSetting u"),
+    @NamedQuery(name = "UserSetting.findById", query = "SELECT u FROM UserSetting u WHERE u.id = :id"),
+    @NamedQuery(name = "UserSetting.findBySettingValue", query = "SELECT u FROM UserSetting u WHERE u.settingValue = :settingValue")})
+public class UserSetting extends CloneableEntity
+{
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Basic(optional = false)
+    @Column(name = "id")
+    private Integer id;
+    @Size(max = 2147483647)
+    @Column(name = "setting_value")
+    private String settingValue;
+    @JoinColumn(name = "user_id", referencedColumnName = "id")
+    @ManyToOne(optional = false)
+    private UserInfo userInfo;
+    @JoinColumn(name = "setting_type_id", referencedColumnName = "id")
+    @ManyToOne(optional = false)
+    private SettingType settingType;
+
+    public UserSetting() {
+    }
+
+    public UserSetting(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getSettingValue() {
+        return settingValue;
+    }
+
+    public void setSettingValue(String settingValue) {
+        this.settingValue = settingValue;
+    }
+
+    public UserInfo getUserInfo() {
+        return userInfo;
+    }
+
+    public void setUserInfo(UserInfo userInfo) {
+        this.userInfo = userInfo;
+    }
+
+    public SettingType getSettingType() {
+        return settingType;
+    }
+
+    public void setSettingType(SettingType settingType) {
+        this.settingType = settingType;
+    }
+
+    @Override
+    public int hashCode() {
+        int hash = 0;
+        hash += (id != null ? id.hashCode() : 0);
+        return hash;
+    }
+
+    @Override
+    public boolean equals(Object object) {
+        // TODO: Warning - this method won't work in the case the id fields are not set
+        if (!(object instanceof UserSetting)) {
+            return false;
+        }
+        UserSetting other = (UserSetting) object;
+        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public String toString() {
+        return "gov.anl.aps.dm.portal.model.entities.UserSetting[ id=" + id + " ]";
+    }
+    
+}
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/utilities/CollectionUtility.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/utilities/CollectionUtility.java
new file mode 100644
index 0000000000000000000000000000000000000000..2031bf450d3cd41f704b8722781ddea036cf6515
--- /dev/null
+++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/utilities/CollectionUtility.java
@@ -0,0 +1,66 @@
+package gov.anl.aps.dm.portal.utilities;
+
+import java.util.List;
+import java.util.ListIterator;
+import javax.faces.model.SelectItem;
+
+public class CollectionUtility
+{
+
+    public static SelectItem[] getSelectItems(List<?> entities, boolean selectOne) {
+        int size = selectOne ? entities.size() + 1 : entities.size();
+        SelectItem[] items = new SelectItem[size];
+        int i = 0;
+        if (selectOne) {
+            items[0] = new SelectItem("", "Select");
+            i++;
+        }
+        for (Object x : entities) {
+            items[i++] = new SelectItem(x, x.toString());
+        }
+        return items;
+    }
+
+    public static String displayItemList(List<?> list, String beginDelimiter, String itemDelimiter, String endDelimiter) {
+        String result = beginDelimiter;
+        boolean addItemDelimiter = false;
+        if (list != null) {
+            for (Object item : list) {
+                if (!addItemDelimiter) {
+                    addItemDelimiter = true;
+                }
+                else {
+                    result += itemDelimiter;
+                }
+                result += item.toString();
+            }
+        }
+        result += endDelimiter;
+        return result;
+    }
+
+    public static String displayItemListWithoutOutsideDelimiters(List<?> list, String itemDelimiter) {
+        String beginDelimiter = "";
+        String endDelimiter = "";
+        return displayItemList(list, beginDelimiter, itemDelimiter, endDelimiter);
+    }
+    
+    public static String displayItemListWithoutDelimiters(List<?> list) {
+        String beginDelimiter = "";
+        String itemDelimiter = "";
+        String endDelimiter = "";
+        return displayItemList(list, beginDelimiter, itemDelimiter, endDelimiter);
+    }
+
+    public static void removeNullReferencesFromList(List<?> list) {
+        if (list == null) {
+            return;
+        }
+        ListIterator iterator = list.listIterator();
+        while (iterator.hasNext()) {
+            if (iterator.next() == null) {
+                iterator.remove();
+            }
+        }
+    }
+}
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/utilities/ConfigurationUtility.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/utilities/ConfigurationUtility.java
new file mode 100644
index 0000000000000000000000000000000000000000..dbd38b2c1933566fbb301c34ac2abbb70bb3ff3a
--- /dev/null
+++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/utilities/ConfigurationUtility.java
@@ -0,0 +1,103 @@
+package gov.anl.aps.dm.portal.utilities;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+import org.apache.log4j.Logger;
+
+public class ConfigurationUtility {
+
+    public static final String PropertiesPath = "cms.portal.properties";
+    public static final String PropertiesDelimiter = ",";
+   
+    private static final Logger logger = Logger.getLogger(ConfigurationUtility.class.getName());
+    private static final Properties portalProperties = loadProperties(PropertiesPath);
+
+    public Properties getPortalProperties() {
+        return portalProperties;
+    }
+
+    public static String getPortalProperty(String propertyName) {
+        return portalProperties.getProperty(propertyName, "");
+    }
+    
+    public static String getPortalProperty(String propertyName, String defaultValue) {
+        return portalProperties.getProperty(propertyName, defaultValue);
+    }
+
+    public static List<String> getPortalPropertyList(String propertyName) {
+        return getPortalPropertyList(propertyName, "");
+    }
+    
+    public static List<String> getPortalPropertyList(String propertyName, String defaultValue) {
+        String[] propertyArray = portalProperties.getProperty(propertyName, defaultValue).split(PropertiesDelimiter);
+        logger.debug("Looking for property " + propertyName);
+        ArrayList propertyList = new ArrayList();
+        for (String property : propertyArray) {
+            String p = property.trim();
+            if (p.length() > 0) {
+                propertyList.add(property.trim());
+            }
+        }
+        logger.debug("Resulting property list: " + propertyList);
+        return propertyList;
+    }    
+    
+    /**
+     * Load properties.
+     *
+     * @param path
+     * @return loaded properties
+     */
+    public static Properties loadProperties(String path) {
+        Properties properties = new Properties();
+        if (path != null) {
+            try {
+                logger.debug("Loading properties from " + path);
+                InputStream inputStream = ConfigurationUtility.class.getClassLoader().getResourceAsStream(path);
+                properties.load(inputStream);
+            } catch (IOException ex) {
+                logger.warn("Could not load properties from file " + path + ": " + ex);
+            }
+        } else {
+            logger.warn("Properties path not specified.");
+        }
+        return properties;
+    }
+
+    /**
+     * Get system property.
+     *
+     * @param propertyName property name
+     * @return property value
+     */
+    public static String getSystemProperty(String propertyName) {
+        Properties p = System.getProperties();
+        return p.getProperty(propertyName);
+    }
+
+    /**
+     * Get system property.
+     *
+     * @param propertyName property name
+     * @param defaultValue default property value
+     * @return property value
+     */
+    public static String getSystemProperty(String propertyName, String defaultValue) {
+        Properties p = System.getProperties();
+        return p.getProperty(propertyName, defaultValue);
+    }
+
+    /**
+     * Get environment variable.
+     *
+     * @param name Environment variable name
+     * @return environment variable value, or null if it is not defined
+     */
+    public static String getEnvVar(String name) {
+        return System.getenv(name);
+    }
+
+}
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/utilities/DateUtility.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/utilities/DateUtility.java
new file mode 100644
index 0000000000000000000000000000000000000000..db70bd90fd8acb394297908548e70821b91b96b3
--- /dev/null
+++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/utilities/DateUtility.java
@@ -0,0 +1,12 @@
+package gov.anl.aps.dm.portal.utilities;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+public class DateUtility
+{
+    private static final SimpleDateFormat DateTimeFormat = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
+    public static String getCurrentDateTime() {
+        return DateTimeFormat.format(new Date());
+    }
+}
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/utilities/LdapUtility.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/utilities/LdapUtility.java
new file mode 100644
index 0000000000000000000000000000000000000000..465e4131b6a90ecb35f3f9302a30383ad921e82e
--- /dev/null
+++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/utilities/LdapUtility.java
@@ -0,0 +1,67 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package gov.anl.aps.dm.portal.utilities;
+
+import java.util.Hashtable;
+import javax.naming.Context;
+import javax.naming.NamingException;
+import javax.naming.directory.DirContext;
+import javax.naming.directory.InitialDirContext;
+import org.apache.log4j.Logger;
+
+/**
+ *
+ * @author sveseli
+ */
+public class LdapUtility
+{
+
+    private static final String LdapUrlPropertyName = "dm.portal.ldapUrl";
+    private static final String LdapDnStringPropertyName = "dm.portal.ldapDnString";
+    private static final String ldapUrl = ConfigurationUtility.getPortalProperty(LdapUrlPropertyName);
+    private static final String ldapDnString = ConfigurationUtility.getPortalProperty(LdapDnStringPropertyName);
+
+    private static final Logger logger = Logger.getLogger(LdapUtility.class.getName());
+
+    /**
+     * Use username and password to attempt initial connection and bind with APS
+     * LDAP server. Successful connection implies that credentials are accepted.
+     *
+     * @param username username
+     * @param password password
+     *
+     * @return true if valid, false otherwise
+     */
+    public static boolean validateCredentials(String username, String password) {
+
+        // dump out immediately if not given password
+        if (password.isEmpty()) {
+            return false;
+        }
+
+        boolean validated = false;
+        Hashtable env = new Hashtable();
+        String dn = ldapDnString.replace("USERNAME", username);
+        logger.debug("Authenticating: " + dn);
+        env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
+        env.put(Context.PROVIDER_URL, ldapUrl);
+        env.put(Context.SECURITY_AUTHENTICATION, "simple");
+        env.put(Context.SECURITY_PRINCIPAL, dn);
+        env.put(Context.SECURITY_CREDENTIALS, password);
+        // the below property allows us to circumvent server certificate checks
+        env.put("java.naming.ldap.factory.socket", "gov.anl.aps.dm.portal.utilities.NoServerVerificationSSLSocketFactory");
+
+        try {
+            DirContext ctx = new InitialDirContext(env);
+            validated = true;
+        }
+        catch (NamingException ex) {
+            ex.printStackTrace();
+        }
+        return validated;
+    }
+
+}
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/utilities/NoOpTrustManager.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/utilities/NoOpTrustManager.java
new file mode 100644
index 0000000000000000000000000000000000000000..972792fb806b863828c3288f148c7d9792269d8b
--- /dev/null
+++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/utilities/NoOpTrustManager.java
@@ -0,0 +1,32 @@
+package gov.anl.aps.dm.portal.utilities;
+
+import java.security.cert.X509Certificate;
+import javax.net.ssl.X509TrustManager;
+
+/**
+ * A trivial implementation of <code>X509TrustManager</code> that doesn't
+ * actually check the validity of a certificate. This allows us to make
+ * SSL connections to internal servers without requiring the installation
+ * and maintenance of certificates in the client keystore.
+ *
+ * @see NoServerVerificationSSLSocketFactory
+ */
+public class NoOpTrustManager implements X509TrustManager 
+{
+
+    @Override
+    public void checkClientTrusted(X509Certificate[] cert, String authType) 
+    {
+    }
+    
+    @Override
+    public void checkServerTrusted(X509Certificate[] cert, String authType) 
+    {
+    }
+    
+    @Override
+    public X509Certificate[] getAcceptedIssuers() 
+    {
+        return new X509Certificate[0];
+    }
+}
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/utilities/NoServerVerificationSSLSocketFactory.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/utilities/NoServerVerificationSSLSocketFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..d13f7f6c8609cb2ef9edca1111cf4fab2d4a8d3e
--- /dev/null
+++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/utilities/NoServerVerificationSSLSocketFactory.java
@@ -0,0 +1,89 @@
+package gov.anl.aps.dm.portal.utilities;
+
+import java.io.IOException;
+import java.net.InetAddress;
+import java.net.Socket;
+import java.security.KeyManagementException;
+import java.security.NoSuchAlgorithmException;
+import javax.net.SocketFactory;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLSocketFactory;
+import javax.net.ssl.TrustManager;
+
+/**
+ * A minor extension of <code>SSLSocketFactory</code> that installs
+ * a dummy trust manager. This allows creation of SSL sockets that don't
+ * verify the server certificates.
+ *
+ * @see NoOpTrustManager
+ */
+public class NoServerVerificationSSLSocketFactory extends SSLSocketFactory 
+{
+    private SSLSocketFactory factory;
+    public NoServerVerificationSSLSocketFactory() 
+    {
+        try {
+            TrustManager tm = new NoOpTrustManager();
+            SSLContext sslcontext = SSLContext.getInstance("TLS");
+            sslcontext.init( null, // No KeyManager required
+                             new TrustManager[] {tm},
+                             new java.security.SecureRandom());
+            
+            factory = (SSLSocketFactory)sslcontext.getSocketFactory();
+            
+        } 
+        catch(KeyManagementException | NoSuchAlgorithmException ex) { 
+            ex.printStackTrace(); 
+        }
+    }
+    
+    public static SocketFactory getDefault() {
+        return new NoServerVerificationSSLSocketFactory();
+    }
+    
+    @Override
+    public Socket createSocket(Socket socket, String s, int i, boolean flag) 
+        throws IOException 
+    {
+        return factory.createSocket( socket, s, i, flag);
+    }
+    
+    @Override
+    public Socket createSocket(InetAddress inaddr, int i, InetAddress inaddr1, int j) 
+        throws IOException 
+    {
+        return factory.createSocket(inaddr, i, inaddr1, j);
+    }
+    
+    @Override
+    public Socket createSocket(InetAddress inaddr, int i) throws IOException 
+    {
+        return factory.createSocket(inaddr, i);
+    }
+    
+    @Override
+    public Socket createSocket(String s, int i, InetAddress inaddr, int j) 
+        throws IOException 
+    {
+        return factory.createSocket(s, i, inaddr, j);
+    }
+    
+    @Override
+    public Socket createSocket(String s, int i) throws IOException 
+    {
+        return factory.createSocket(s, i);
+    }
+    
+    @Override
+    public String[] getDefaultCipherSuites() 
+    {
+        return factory.getSupportedCipherSuites();
+    }
+    
+    @Override
+    public String[] getSupportedCipherSuites() 
+    {
+        return factory.getSupportedCipherSuites();
+    }
+    
+}
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/utilities/ObjectUtility.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/utilities/ObjectUtility.java
new file mode 100644
index 0000000000000000000000000000000000000000..6950b455b08a681e20f0a67f21abb021a4083b17
--- /dev/null
+++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/utilities/ObjectUtility.java
@@ -0,0 +1,15 @@
+package gov.anl.aps.dm.portal.utilities;
+
+
+public class ObjectUtility
+{   
+    public static <Type> boolean equals(Type object1, Type object2) {
+        if (object1 == null && object2 == null) {
+            return true;
+        }
+        if (object1 == null || object2 == null) {
+            return false;
+        }
+        return object1.equals(object2);
+    }
+}
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/utilities/SearchResult.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/utilities/SearchResult.java
new file mode 100644
index 0000000000000000000000000000000000000000..0529a8cfd266d0db71774fe82a2ba9e6e48c1e61
--- /dev/null
+++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/utilities/SearchResult.java
@@ -0,0 +1,72 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package gov.anl.aps.dm.portal.utilities;
+
+import java.util.HashMap;
+import java.util.regex.Pattern;
+
+/**
+ *
+ * @author sveseli
+ */
+public class SearchResult
+{
+
+    private final Integer objectId;
+    private final String objectName;
+    private HashMap<String, String> objectAttributeMatchMap = new HashMap();
+
+    public SearchResult(Integer objectId, String objectName) {
+        this.objectId = objectId;
+        this.objectName = objectName;
+    }
+
+    public Integer getObjectId() {
+        return objectId;
+    }
+
+    public String getObjectName() {
+        return objectName;
+    }
+
+    public void addAttributeMatch(String key, String value) {
+        objectAttributeMatchMap.put(key, value);
+    }
+
+    public HashMap<String, String> getObjectAttributeMatchMap() {
+        return objectAttributeMatchMap;
+    }
+
+    public void setObjectAttributeMatchMap(HashMap<String, String> objectAttributeMatchMap) {
+        this.objectAttributeMatchMap = objectAttributeMatchMap;
+    }
+
+    public boolean isEmpty() {
+        return objectAttributeMatchMap.isEmpty();
+    }
+
+    public boolean doesValueContainPattern(String key, String value, Pattern searchPattern) {
+        if (value == null || value.isEmpty()) {
+            return false;
+        }
+        boolean searchResult = searchPattern.matcher(value).find();
+        if (searchResult) {
+            addAttributeMatch(key, value);
+        }
+        return searchResult;
+    }
+
+    public String getDisplay() {
+        String result = "";
+        String keyDelimiter = ": ";
+        String entryDelimiter = "";
+        for (String key : objectAttributeMatchMap.keySet()) {
+            result += entryDelimiter + key + keyDelimiter + objectAttributeMatchMap.get(key);
+            entryDelimiter = "; ";
+        }
+        return result;
+    }
+}
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/utilities/SessionUtility.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/utilities/SessionUtility.java
new file mode 100644
index 0000000000000000000000000000000000000000..bf59cb2c40e2f0852d87960bed6bfbcb2531cd0f
--- /dev/null
+++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/utilities/SessionUtility.java
@@ -0,0 +1,133 @@
+package gov.anl.aps.dm.portal.utilities;
+
+import java.util.Map;
+import java.util.Stack;
+import javax.faces.application.FacesMessage;
+import javax.faces.context.FacesContext;
+
+/**
+ * Session utility class.
+ */
+public class SessionUtility
+{
+
+    /**
+     * Keys.
+     */
+    public static final String MessagesKey = "messages";
+    public static final String UserKey = "user";
+    public static final String ViewStackKey = "viewStack";
+
+    /**
+     * Constructor.
+     */
+    public SessionUtility() {
+    }
+
+    /**
+     * Add error message.
+     *
+     * @param summary message summary
+     * @param detail detailed message
+     */
+    public static void addErrorMessage(String summary, String detail) {
+        FacesContext context = FacesContext.getCurrentInstance();
+        context.getExternalContext().getFlash().setKeepMessages(true);
+        context.addMessage(MessagesKey, new FacesMessage(FacesMessage.SEVERITY_ERROR, summary, detail));
+    }
+
+    /**
+     * Add warning message.
+     *
+     * @param summary message summary
+     * @param detail detailed message
+     */
+    public static void addWarningMessage(String summary, String detail) {
+        FacesContext context = FacesContext.getCurrentInstance();
+        context.getExternalContext().getFlash().setKeepMessages(true);
+        context.addMessage(MessagesKey, new FacesMessage(FacesMessage.SEVERITY_WARN, summary, detail));
+    }
+
+    /**
+     * Add info message.
+     *
+     * @param summary message summary
+     * @param detail detailed message
+     */
+    public static void addInfoMessage(String summary, String detail) {
+        FacesContext context = FacesContext.getCurrentInstance();
+        context.getExternalContext().getFlash().setKeepMessages(true);
+        context.addMessage(MessagesKey, new FacesMessage(FacesMessage.SEVERITY_INFO, summary, detail));
+    }
+
+    /**
+     * Get request parameter value.
+     *
+     * @param parameterName parameter name
+     * @return parameter value
+     */
+    public static String getRequestParameterValue(String parameterName) {
+        Map parameterMap = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
+        return (String) parameterMap.get(parameterName);
+    }
+
+    /**
+     * Set user.
+     *
+     * @param user user
+     */
+    public static void setUser(Object user) {
+        Map sessionMap = FacesContext.getCurrentInstance().getExternalContext().getSessionMap();
+        sessionMap.put(UserKey, user);
+    }
+
+    /**
+     * Get user.
+     *
+     * @return user
+     */
+    public static Object getUser() {
+        Map sessionMap = FacesContext.getCurrentInstance().getExternalContext().getSessionMap();
+        return sessionMap.get(UserKey);
+    }
+
+    public static void pushViewOnStack(String viewId) {
+        Map sessionMap = FacesContext.getCurrentInstance().getExternalContext().getSessionMap();
+        Stack<String> viewStack = (Stack) sessionMap.get(ViewStackKey);
+        if (viewStack == null) {
+            viewStack = new Stack<>();
+            sessionMap.put(ViewStackKey, viewStack);
+        }
+        viewStack.push(viewId);
+    }
+
+    public static String popViewFromStack() {
+        Map sessionMap = FacesContext.getCurrentInstance().getExternalContext().getSessionMap();
+        Stack<String> viewStack = (Stack) sessionMap.get(ViewStackKey);
+        if (viewStack != null && !viewStack.empty()) {
+            return viewStack.pop();
+        }
+        return null;
+    }
+    
+    public static String getCurrentViewId() {
+        FacesContext context = FacesContext.getCurrentInstance();
+        return context.getViewRoot().getViewId();
+    }
+    
+    public static String getReferrerViewId() {
+        String referrer = FacesContext.getCurrentInstance().getExternalContext().getRequestHeaderMap().get("referer");
+        if (referrer != null) {
+            int beginViewId = referrer.indexOf("/views");
+            if (beginViewId >= 0) {
+                return referrer.substring(beginViewId);
+            }
+        }
+        return null;
+    }
+
+    public static void clearSession() {
+        Map sessionMap = FacesContext.getCurrentInstance().getExternalContext().getSessionMap();
+        sessionMap.clear();
+    }
+}
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/utilities/StringUtility.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/utilities/StringUtility.java
new file mode 100644
index 0000000000000000000000000000000000000000..aeedb7b522b7097d8bb7822b19e2f27c15f4d140
--- /dev/null
+++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/utilities/StringUtility.java
@@ -0,0 +1,15 @@
+package gov.anl.aps.dm.portal.utilities;
+
+
+public class StringUtility
+{
+    public static boolean equals(CharSequence cs1, CharSequence cs2) {
+        if (cs1 == null && cs2 == null) {
+            return true;
+        }
+        if (cs1 == null || cs2 == null) {
+            return false;
+        }
+        return cs1.equals(cs2);
+    }
+}
diff --git a/src/java/DmWebPortal/src/java/resources.properties b/src/java/DmWebPortal/src/java/resources.properties
new file mode 100644
index 0000000000000000000000000000000000000000..e33fd81446fe8ab5f3f257a515be99c2fc0d6323
--- /dev/null
+++ b/src/java/DmWebPortal/src/java/resources.properties
@@ -0,0 +1,928 @@
+PersistenceErrorOccured=A persistence error occurred.
+Previous=Previous
+Next=Next
+
+AllowedPolicyValueCreated=AllowedPolicyValue was successfully created.
+AllowedPolicyValueUpdated=AllowedPolicyValue was successfully updated.
+AllowedPolicyValueDeleted=AllowedPolicyValue was successfully deleted.
+CreateAllowedPolicyValueTitle=Create New AllowedPolicyValue
+CreateAllowedPolicyValueSaveLink=Save
+CreateAllowedPolicyValueShowAllLink=Show All AllowedPolicyValue Items
+CreateAllowedPolicyValueIndexLink=Index
+CreateAllowedPolicyValueLabel_id=Id:
+CreateAllowedPolicyValueRequiredMessage_id=The Id field is required.
+CreateAllowedPolicyValueTitle_id=Id
+CreateAllowedPolicyValueLabel_value=Value:
+CreateAllowedPolicyValueTitle_value=Value
+CreateAllowedPolicyValueLabel_description=Description:
+CreateAllowedPolicyValueTitle_description=Description
+CreateAllowedPolicyValueLabel_policyTypeId=PolicyTypeId:
+CreateAllowedPolicyValueRequiredMessage_policyTypeId=The PolicyTypeId field is required.
+CreateAllowedPolicyValueTitle_policyTypeId=PolicyTypeId
+EditAllowedPolicyValueTitle=Edit AllowedPolicyValue
+EditAllowedPolicyValueSaveLink=Save
+EditAllowedPolicyValueViewLink=View
+EditAllowedPolicyValueShowAllLink=Show All AllowedPolicyValue Items
+EditAllowedPolicyValueIndexLink=Index
+EditAllowedPolicyValueLabel_id=Id:
+EditAllowedPolicyValueRequiredMessage_id=The Id field is required.
+EditAllowedPolicyValueTitle_id=Id
+EditAllowedPolicyValueLabel_value=Value:
+EditAllowedPolicyValueTitle_value=Value
+EditAllowedPolicyValueLabel_description=Description:
+EditAllowedPolicyValueTitle_description=Description
+EditAllowedPolicyValueLabel_policyTypeId=PolicyTypeId:
+EditAllowedPolicyValueRequiredMessage_policyTypeId=The PolicyTypeId field is required.
+EditAllowedPolicyValueTitle_policyTypeId=PolicyTypeId
+ViewAllowedPolicyValueTitle=View
+ViewAllowedPolicyValueDestroyLink=Destroy
+ViewAllowedPolicyValueEditLink=Edit
+ViewAllowedPolicyValueCreateLink=Create New AllowedPolicyValue
+ViewAllowedPolicyValueShowAllLink=Show All AllowedPolicyValue Items
+ViewAllowedPolicyValueIndexLink=Index
+ViewAllowedPolicyValueLabel_id=Id:
+ViewAllowedPolicyValueTitle_id=Id
+ViewAllowedPolicyValueLabel_value=Value:
+ViewAllowedPolicyValueTitle_value=Value
+ViewAllowedPolicyValueLabel_description=Description:
+ViewAllowedPolicyValueTitle_description=Description
+ViewAllowedPolicyValueLabel_policyTypeId=PolicyTypeId:
+ViewAllowedPolicyValueTitle_policyTypeId=PolicyTypeId
+ListAllowedPolicyValueTitle=List
+ListAllowedPolicyValueEmpty=(No AllowedPolicyValue Items Found)
+ListAllowedPolicyValueDestroyLink=Destroy
+ListAllowedPolicyValueEditLink=Edit
+ListAllowedPolicyValueViewLink=View
+ListAllowedPolicyValueCreateLink=Create New AllowedPolicyValue
+ListAllowedPolicyValueIndexLink=Index
+ListAllowedPolicyValueTitle_id=Id
+ListAllowedPolicyValueTitle_value=Value
+ListAllowedPolicyValueTitle_description=Description
+ListAllowedPolicyValueTitle_policyTypeId=PolicyTypeId
+AllowedSettingValueCreated=AllowedSettingValue was successfully created.
+AllowedSettingValueUpdated=AllowedSettingValue was successfully updated.
+AllowedSettingValueDeleted=AllowedSettingValue was successfully deleted.
+CreateAllowedSettingValueTitle=Create New AllowedSettingValue
+CreateAllowedSettingValueSaveLink=Save
+CreateAllowedSettingValueShowAllLink=Show All AllowedSettingValue Items
+CreateAllowedSettingValueIndexLink=Index
+CreateAllowedSettingValueLabel_id=Id:
+CreateAllowedSettingValueRequiredMessage_id=The Id field is required.
+CreateAllowedSettingValueTitle_id=Id
+CreateAllowedSettingValueLabel_value=Value:
+CreateAllowedSettingValueTitle_value=Value
+CreateAllowedSettingValueLabel_description=Description:
+CreateAllowedSettingValueTitle_description=Description
+CreateAllowedSettingValueLabel_settingTypeId=SettingTypeId:
+CreateAllowedSettingValueRequiredMessage_settingTypeId=The SettingTypeId field is required.
+CreateAllowedSettingValueTitle_settingTypeId=SettingTypeId
+EditAllowedSettingValueTitle=Edit AllowedSettingValue
+EditAllowedSettingValueSaveLink=Save
+EditAllowedSettingValueViewLink=View
+EditAllowedSettingValueShowAllLink=Show All AllowedSettingValue Items
+EditAllowedSettingValueIndexLink=Index
+EditAllowedSettingValueLabel_id=Id:
+EditAllowedSettingValueRequiredMessage_id=The Id field is required.
+EditAllowedSettingValueTitle_id=Id
+EditAllowedSettingValueLabel_value=Value:
+EditAllowedSettingValueTitle_value=Value
+EditAllowedSettingValueLabel_description=Description:
+EditAllowedSettingValueTitle_description=Description
+EditAllowedSettingValueLabel_settingTypeId=SettingTypeId:
+EditAllowedSettingValueRequiredMessage_settingTypeId=The SettingTypeId field is required.
+EditAllowedSettingValueTitle_settingTypeId=SettingTypeId
+ViewAllowedSettingValueTitle=View
+ViewAllowedSettingValueDestroyLink=Destroy
+ViewAllowedSettingValueEditLink=Edit
+ViewAllowedSettingValueCreateLink=Create New AllowedSettingValue
+ViewAllowedSettingValueShowAllLink=Show All AllowedSettingValue Items
+ViewAllowedSettingValueIndexLink=Index
+ViewAllowedSettingValueLabel_id=Id:
+ViewAllowedSettingValueTitle_id=Id
+ViewAllowedSettingValueLabel_value=Value:
+ViewAllowedSettingValueTitle_value=Value
+ViewAllowedSettingValueLabel_description=Description:
+ViewAllowedSettingValueTitle_description=Description
+ViewAllowedSettingValueLabel_settingTypeId=SettingTypeId:
+ViewAllowedSettingValueTitle_settingTypeId=SettingTypeId
+ListAllowedSettingValueTitle=List
+ListAllowedSettingValueEmpty=(No AllowedSettingValue Items Found)
+ListAllowedSettingValueDestroyLink=Destroy
+ListAllowedSettingValueEditLink=Edit
+ListAllowedSettingValueViewLink=View
+ListAllowedSettingValueCreateLink=Create New AllowedSettingValue
+ListAllowedSettingValueIndexLink=Index
+ListAllowedSettingValueTitle_id=Id
+ListAllowedSettingValueTitle_value=Value
+ListAllowedSettingValueTitle_description=Description
+ListAllowedSettingValueTitle_settingTypeId=SettingTypeId
+DataFolderCreated=DataFolder was successfully created.
+DataFolderUpdated=DataFolder was successfully updated.
+DataFolderDeleted=DataFolder was successfully deleted.
+CreateDataFolderTitle=Create New DataFolder
+CreateDataFolderSaveLink=Save
+CreateDataFolderShowAllLink=Show All DataFolder Items
+CreateDataFolderIndexLink=Index
+CreateDataFolderLabel_id=Id:
+CreateDataFolderRequiredMessage_id=The Id field is required.
+CreateDataFolderTitle_id=Id
+CreateDataFolderLabel_path=Path:
+CreateDataFolderRequiredMessage_path=The Path field is required.
+CreateDataFolderTitle_path=Path
+CreateDataFolderLabel_description=Description:
+CreateDataFolderTitle_description=Description
+CreateDataFolderLabel_parentDataFolderId=ParentDataFolderId:
+CreateDataFolderTitle_parentDataFolderId=ParentDataFolderId
+EditDataFolderTitle=Edit DataFolder
+EditDataFolderSaveLink=Save
+EditDataFolderViewLink=View
+EditDataFolderShowAllLink=Show All DataFolder Items
+EditDataFolderIndexLink=Index
+EditDataFolderLabel_id=Id:
+EditDataFolderRequiredMessage_id=The Id field is required.
+EditDataFolderTitle_id=Id
+EditDataFolderLabel_path=Path:
+EditDataFolderRequiredMessage_path=The Path field is required.
+EditDataFolderTitle_path=Path
+EditDataFolderLabel_description=Description:
+EditDataFolderTitle_description=Description
+EditDataFolderLabel_parentDataFolderId=ParentDataFolderId:
+EditDataFolderTitle_parentDataFolderId=ParentDataFolderId
+ViewDataFolderTitle=View
+ViewDataFolderDestroyLink=Destroy
+ViewDataFolderEditLink=Edit
+ViewDataFolderCreateLink=Create New DataFolder
+ViewDataFolderShowAllLink=Show All DataFolder Items
+ViewDataFolderIndexLink=Index
+ViewDataFolderLabel_id=Id:
+ViewDataFolderTitle_id=Id
+ViewDataFolderLabel_path=Path:
+ViewDataFolderTitle_path=Path
+ViewDataFolderLabel_description=Description:
+ViewDataFolderTitle_description=Description
+ViewDataFolderLabel_parentDataFolderId=ParentDataFolderId:
+ViewDataFolderTitle_parentDataFolderId=ParentDataFolderId
+ListDataFolderTitle=List
+ListDataFolderEmpty=(No DataFolder Items Found)
+ListDataFolderDestroyLink=Destroy
+ListDataFolderEditLink=Edit
+ListDataFolderViewLink=View
+ListDataFolderCreateLink=Create New DataFolder
+ListDataFolderIndexLink=Index
+ListDataFolderTitle_id=Id
+ListDataFolderTitle_path=Path
+ListDataFolderTitle_description=Description
+ListDataFolderTitle_parentDataFolderId=ParentDataFolderId
+DataFolderPermissionCreated=DataFolderPermission was successfully created.
+DataFolderPermissionUpdated=DataFolderPermission was successfully updated.
+DataFolderPermissionDeleted=DataFolderPermission was successfully deleted.
+CreateDataFolderPermissionTitle=Create New DataFolderPermission
+CreateDataFolderPermissionSaveLink=Save
+CreateDataFolderPermissionShowAllLink=Show All DataFolderPermission Items
+CreateDataFolderPermissionIndexLink=Index
+CreateDataFolderPermissionLabel_id=Id:
+CreateDataFolderPermissionRequiredMessage_id=The Id field is required.
+CreateDataFolderPermissionTitle_id=Id
+CreateDataFolderPermissionLabel_value=Value:
+CreateDataFolderPermissionRequiredMessage_value=The Value field is required.
+CreateDataFolderPermissionTitle_value=Value
+CreateDataFolderPermissionLabel_description=Description:
+CreateDataFolderPermissionTitle_description=Description
+CreateDataFolderPermissionLabel_dataFolderId=DataFolderId:
+CreateDataFolderPermissionRequiredMessage_dataFolderId=The DataFolderId field is required.
+CreateDataFolderPermissionTitle_dataFolderId=DataFolderId
+EditDataFolderPermissionTitle=Edit DataFolderPermission
+EditDataFolderPermissionSaveLink=Save
+EditDataFolderPermissionViewLink=View
+EditDataFolderPermissionShowAllLink=Show All DataFolderPermission Items
+EditDataFolderPermissionIndexLink=Index
+EditDataFolderPermissionLabel_id=Id:
+EditDataFolderPermissionRequiredMessage_id=The Id field is required.
+EditDataFolderPermissionTitle_id=Id
+EditDataFolderPermissionLabel_value=Value:
+EditDataFolderPermissionRequiredMessage_value=The Value field is required.
+EditDataFolderPermissionTitle_value=Value
+EditDataFolderPermissionLabel_description=Description:
+EditDataFolderPermissionTitle_description=Description
+EditDataFolderPermissionLabel_dataFolderId=DataFolderId:
+EditDataFolderPermissionRequiredMessage_dataFolderId=The DataFolderId field is required.
+EditDataFolderPermissionTitle_dataFolderId=DataFolderId
+ViewDataFolderPermissionTitle=View
+ViewDataFolderPermissionDestroyLink=Destroy
+ViewDataFolderPermissionEditLink=Edit
+ViewDataFolderPermissionCreateLink=Create New DataFolderPermission
+ViewDataFolderPermissionShowAllLink=Show All DataFolderPermission Items
+ViewDataFolderPermissionIndexLink=Index
+ViewDataFolderPermissionLabel_id=Id:
+ViewDataFolderPermissionTitle_id=Id
+ViewDataFolderPermissionLabel_value=Value:
+ViewDataFolderPermissionTitle_value=Value
+ViewDataFolderPermissionLabel_description=Description:
+ViewDataFolderPermissionTitle_description=Description
+ViewDataFolderPermissionLabel_dataFolderId=DataFolderId:
+ViewDataFolderPermissionTitle_dataFolderId=DataFolderId
+ListDataFolderPermissionTitle=List
+ListDataFolderPermissionEmpty=(No DataFolderPermission Items Found)
+ListDataFolderPermissionDestroyLink=Destroy
+ListDataFolderPermissionEditLink=Edit
+ListDataFolderPermissionViewLink=View
+ListDataFolderPermissionCreateLink=Create New DataFolderPermission
+ListDataFolderPermissionIndexLink=Index
+ListDataFolderPermissionTitle_id=Id
+ListDataFolderPermissionTitle_value=Value
+ListDataFolderPermissionTitle_description=Description
+ListDataFolderPermissionTitle_dataFolderId=DataFolderId
+ExperimentCreated=Experiment was successfully created.
+ExperimentUpdated=Experiment was successfully updated.
+ExperimentDeleted=Experiment was successfully deleted.
+CreateExperimentTitle=Create New Experiment
+CreateExperimentSaveLink=Save
+CreateExperimentShowAllLink=Show All Experiment Items
+CreateExperimentIndexLink=Index
+CreateExperimentLabel_id=Id:
+CreateExperimentRequiredMessage_id=The Id field is required.
+CreateExperimentTitle_id=Id
+CreateExperimentLabel_name=Name:
+CreateExperimentRequiredMessage_name=The Name field is required.
+CreateExperimentTitle_name=Name
+CreateExperimentLabel_description=Description:
+CreateExperimentTitle_description=Description
+CreateExperimentLabel_startDate=StartDate:
+CreateExperimentTitle_startDate=StartDate
+CreateExperimentLabel_endDate=EndDate:
+CreateExperimentTitle_endDate=EndDate
+CreateExperimentLabel_experimentTypeId=ExperimentTypeId:
+CreateExperimentRequiredMessage_experimentTypeId=The ExperimentTypeId field is required.
+CreateExperimentTitle_experimentTypeId=ExperimentTypeId
+EditExperimentTitle=Edit Experiment
+EditExperimentSaveLink=Save
+EditExperimentViewLink=View
+EditExperimentShowAllLink=Show All Experiment Items
+EditExperimentIndexLink=Index
+EditExperimentLabel_id=Id:
+EditExperimentRequiredMessage_id=The Id field is required.
+EditExperimentTitle_id=Id
+EditExperimentLabel_name=Name:
+EditExperimentRequiredMessage_name=The Name field is required.
+EditExperimentTitle_name=Name
+EditExperimentLabel_description=Description:
+EditExperimentTitle_description=Description
+EditExperimentLabel_startDate=StartDate:
+EditExperimentTitle_startDate=StartDate
+EditExperimentLabel_endDate=EndDate:
+EditExperimentTitle_endDate=EndDate
+EditExperimentLabel_experimentTypeId=ExperimentTypeId:
+EditExperimentRequiredMessage_experimentTypeId=The ExperimentTypeId field is required.
+EditExperimentTitle_experimentTypeId=ExperimentTypeId
+ViewExperimentTitle=View
+ViewExperimentDestroyLink=Destroy
+ViewExperimentEditLink=Edit
+ViewExperimentCreateLink=Create New Experiment
+ViewExperimentShowAllLink=Show All Experiment Items
+ViewExperimentIndexLink=Index
+ViewExperimentLabel_id=Id:
+ViewExperimentTitle_id=Id
+ViewExperimentLabel_name=Name:
+ViewExperimentTitle_name=Name
+ViewExperimentLabel_description=Description:
+ViewExperimentTitle_description=Description
+ViewExperimentLabel_startDate=StartDate:
+ViewExperimentTitle_startDate=StartDate
+ViewExperimentLabel_endDate=EndDate:
+ViewExperimentTitle_endDate=EndDate
+ViewExperimentLabel_experimentTypeId=ExperimentTypeId:
+ViewExperimentTitle_experimentTypeId=ExperimentTypeId
+ListExperimentTitle=List
+ListExperimentEmpty=(No Experiment Items Found)
+ListExperimentDestroyLink=Destroy
+ListExperimentEditLink=Edit
+ListExperimentViewLink=View
+ListExperimentCreateLink=Create New Experiment
+ListExperimentIndexLink=Index
+ListExperimentTitle_id=Id
+ListExperimentTitle_name=Name
+ListExperimentTitle_description=Description
+ListExperimentTitle_startDate=StartDate
+ListExperimentTitle_endDate=EndDate
+ListExperimentTitle_experimentTypeId=ExperimentTypeId
+ExperimentPolicyCreated=ExperimentPolicy was successfully created.
+ExperimentPolicyUpdated=ExperimentPolicy was successfully updated.
+ExperimentPolicyDeleted=ExperimentPolicy was successfully deleted.
+CreateExperimentPolicyTitle=Create New ExperimentPolicy
+CreateExperimentPolicySaveLink=Save
+CreateExperimentPolicyShowAllLink=Show All ExperimentPolicy Items
+CreateExperimentPolicyIndexLink=Index
+CreateExperimentPolicyLabel_id=Id:
+CreateExperimentPolicyRequiredMessage_id=The Id field is required.
+CreateExperimentPolicyTitle_id=Id
+CreateExperimentPolicyLabel_value=Value:
+CreateExperimentPolicyRequiredMessage_value=The Value field is required.
+CreateExperimentPolicyTitle_value=Value
+CreateExperimentPolicyLabel_description=Description:
+CreateExperimentPolicyTitle_description=Description
+CreateExperimentPolicyLabel_policyTypeId=PolicyTypeId:
+CreateExperimentPolicyRequiredMessage_policyTypeId=The PolicyTypeId field is required.
+CreateExperimentPolicyTitle_policyTypeId=PolicyTypeId
+CreateExperimentPolicyLabel_experimentId=ExperimentId:
+CreateExperimentPolicyRequiredMessage_experimentId=The ExperimentId field is required.
+CreateExperimentPolicyTitle_experimentId=ExperimentId
+EditExperimentPolicyTitle=Edit ExperimentPolicy
+EditExperimentPolicySaveLink=Save
+EditExperimentPolicyViewLink=View
+EditExperimentPolicyShowAllLink=Show All ExperimentPolicy Items
+EditExperimentPolicyIndexLink=Index
+EditExperimentPolicyLabel_id=Id:
+EditExperimentPolicyRequiredMessage_id=The Id field is required.
+EditExperimentPolicyTitle_id=Id
+EditExperimentPolicyLabel_value=Value:
+EditExperimentPolicyRequiredMessage_value=The Value field is required.
+EditExperimentPolicyTitle_value=Value
+EditExperimentPolicyLabel_description=Description:
+EditExperimentPolicyTitle_description=Description
+EditExperimentPolicyLabel_policyTypeId=PolicyTypeId:
+EditExperimentPolicyRequiredMessage_policyTypeId=The PolicyTypeId field is required.
+EditExperimentPolicyTitle_policyTypeId=PolicyTypeId
+EditExperimentPolicyLabel_experimentId=ExperimentId:
+EditExperimentPolicyRequiredMessage_experimentId=The ExperimentId field is required.
+EditExperimentPolicyTitle_experimentId=ExperimentId
+ViewExperimentPolicyTitle=View
+ViewExperimentPolicyDestroyLink=Destroy
+ViewExperimentPolicyEditLink=Edit
+ViewExperimentPolicyCreateLink=Create New ExperimentPolicy
+ViewExperimentPolicyShowAllLink=Show All ExperimentPolicy Items
+ViewExperimentPolicyIndexLink=Index
+ViewExperimentPolicyLabel_id=Id:
+ViewExperimentPolicyTitle_id=Id
+ViewExperimentPolicyLabel_value=Value:
+ViewExperimentPolicyTitle_value=Value
+ViewExperimentPolicyLabel_description=Description:
+ViewExperimentPolicyTitle_description=Description
+ViewExperimentPolicyLabel_policyTypeId=PolicyTypeId:
+ViewExperimentPolicyTitle_policyTypeId=PolicyTypeId
+ViewExperimentPolicyLabel_experimentId=ExperimentId:
+ViewExperimentPolicyTitle_experimentId=ExperimentId
+ListExperimentPolicyTitle=List
+ListExperimentPolicyEmpty=(No ExperimentPolicy Items Found)
+ListExperimentPolicyDestroyLink=Destroy
+ListExperimentPolicyEditLink=Edit
+ListExperimentPolicyViewLink=View
+ListExperimentPolicyCreateLink=Create New ExperimentPolicy
+ListExperimentPolicyIndexLink=Index
+ListExperimentPolicyTitle_id=Id
+ListExperimentPolicyTitle_value=Value
+ListExperimentPolicyTitle_description=Description
+ListExperimentPolicyTitle_policyTypeId=PolicyTypeId
+ListExperimentPolicyTitle_experimentId=ExperimentId
+ExperimentTypeCreated=ExperimentType was successfully created.
+ExperimentTypeUpdated=ExperimentType was successfully updated.
+ExperimentTypeDeleted=ExperimentType was successfully deleted.
+CreateExperimentTypeTitle=Create New ExperimentType
+CreateExperimentTypeSaveLink=Save
+CreateExperimentTypeShowAllLink=Show All ExperimentType Items
+CreateExperimentTypeIndexLink=Index
+CreateExperimentTypeLabel_id=Id:
+CreateExperimentTypeRequiredMessage_id=The Id field is required.
+CreateExperimentTypeTitle_id=Id
+CreateExperimentTypeLabel_name=Name:
+CreateExperimentTypeRequiredMessage_name=The Name field is required.
+CreateExperimentTypeTitle_name=Name
+CreateExperimentTypeLabel_description=Description:
+CreateExperimentTypeTitle_description=Description
+CreateExperimentTypeLabel_rootDataPath=RootDataPath:
+CreateExperimentTypeTitle_rootDataPath=RootDataPath
+EditExperimentTypeTitle=Edit ExperimentType
+EditExperimentTypeSaveLink=Save
+EditExperimentTypeViewLink=View
+EditExperimentTypeShowAllLink=Show All ExperimentType Items
+EditExperimentTypeIndexLink=Index
+EditExperimentTypeLabel_id=Id:
+EditExperimentTypeRequiredMessage_id=The Id field is required.
+EditExperimentTypeTitle_id=Id
+EditExperimentTypeLabel_name=Name:
+EditExperimentTypeRequiredMessage_name=The Name field is required.
+EditExperimentTypeTitle_name=Name
+EditExperimentTypeLabel_description=Description:
+EditExperimentTypeTitle_description=Description
+EditExperimentTypeLabel_rootDataPath=RootDataPath:
+EditExperimentTypeTitle_rootDataPath=RootDataPath
+ViewExperimentTypeTitle=View
+ViewExperimentTypeDestroyLink=Destroy
+ViewExperimentTypeEditLink=Edit
+ViewExperimentTypeCreateLink=Create New ExperimentType
+ViewExperimentTypeShowAllLink=Show All ExperimentType Items
+ViewExperimentTypeIndexLink=Index
+ViewExperimentTypeLabel_id=Id:
+ViewExperimentTypeTitle_id=Id
+ViewExperimentTypeLabel_name=Name:
+ViewExperimentTypeTitle_name=Name
+ViewExperimentTypeLabel_description=Description:
+ViewExperimentTypeTitle_description=Description
+ViewExperimentTypeLabel_rootDataPath=RootDataPath:
+ViewExperimentTypeTitle_rootDataPath=RootDataPath
+ListExperimentTypeTitle=List
+ListExperimentTypeEmpty=(No ExperimentType Items Found)
+ListExperimentTypeDestroyLink=Destroy
+ListExperimentTypeEditLink=Edit
+ListExperimentTypeViewLink=View
+ListExperimentTypeCreateLink=Create New ExperimentType
+ListExperimentTypeIndexLink=Index
+ListExperimentTypeTitle_id=Id
+ListExperimentTypeTitle_name=Name
+ListExperimentTypeTitle_description=Description
+ListExperimentTypeTitle_rootDataPath=RootDataPath
+PolicyTypeCreated=PolicyType was successfully created.
+PolicyTypeUpdated=PolicyType was successfully updated.
+PolicyTypeDeleted=PolicyType was successfully deleted.
+CreatePolicyTypeTitle=Create New PolicyType
+CreatePolicyTypeSaveLink=Save
+CreatePolicyTypeShowAllLink=Show All PolicyType Items
+CreatePolicyTypeIndexLink=Index
+CreatePolicyTypeLabel_id=Id:
+CreatePolicyTypeRequiredMessage_id=The Id field is required.
+CreatePolicyTypeTitle_id=Id
+CreatePolicyTypeLabel_name=Name:
+CreatePolicyTypeRequiredMessage_name=The Name field is required.
+CreatePolicyTypeTitle_name=Name
+CreatePolicyTypeLabel_description=Description:
+CreatePolicyTypeTitle_description=Description
+CreatePolicyTypeLabel_handlerName=HandlerName:
+CreatePolicyTypeTitle_handlerName=HandlerName
+CreatePolicyTypeLabel_defaultValue=DefaultValue:
+CreatePolicyTypeTitle_defaultValue=DefaultValue
+EditPolicyTypeTitle=Edit PolicyType
+EditPolicyTypeSaveLink=Save
+EditPolicyTypeViewLink=View
+EditPolicyTypeShowAllLink=Show All PolicyType Items
+EditPolicyTypeIndexLink=Index
+EditPolicyTypeLabel_id=Id:
+EditPolicyTypeRequiredMessage_id=The Id field is required.
+EditPolicyTypeTitle_id=Id
+EditPolicyTypeLabel_name=Name:
+EditPolicyTypeRequiredMessage_name=The Name field is required.
+EditPolicyTypeTitle_name=Name
+EditPolicyTypeLabel_description=Description:
+EditPolicyTypeTitle_description=Description
+EditPolicyTypeLabel_handlerName=HandlerName:
+EditPolicyTypeTitle_handlerName=HandlerName
+EditPolicyTypeLabel_defaultValue=DefaultValue:
+EditPolicyTypeTitle_defaultValue=DefaultValue
+ViewPolicyTypeTitle=View
+ViewPolicyTypeDestroyLink=Destroy
+ViewPolicyTypeEditLink=Edit
+ViewPolicyTypeCreateLink=Create New PolicyType
+ViewPolicyTypeShowAllLink=Show All PolicyType Items
+ViewPolicyTypeIndexLink=Index
+ViewPolicyTypeLabel_id=Id:
+ViewPolicyTypeTitle_id=Id
+ViewPolicyTypeLabel_name=Name:
+ViewPolicyTypeTitle_name=Name
+ViewPolicyTypeLabel_description=Description:
+ViewPolicyTypeTitle_description=Description
+ViewPolicyTypeLabel_handlerName=HandlerName:
+ViewPolicyTypeTitle_handlerName=HandlerName
+ViewPolicyTypeLabel_defaultValue=DefaultValue:
+ViewPolicyTypeTitle_defaultValue=DefaultValue
+ListPolicyTypeTitle=List
+ListPolicyTypeEmpty=(No PolicyType Items Found)
+ListPolicyTypeDestroyLink=Destroy
+ListPolicyTypeEditLink=Edit
+ListPolicyTypeViewLink=View
+ListPolicyTypeCreateLink=Create New PolicyType
+ListPolicyTypeIndexLink=Index
+ListPolicyTypeTitle_id=Id
+ListPolicyTypeTitle_name=Name
+ListPolicyTypeTitle_description=Description
+ListPolicyTypeTitle_handlerName=HandlerName
+ListPolicyTypeTitle_defaultValue=DefaultValue
+RoleTypeCreated=RoleType was successfully created.
+RoleTypeUpdated=RoleType was successfully updated.
+RoleTypeDeleted=RoleType was successfully deleted.
+CreateRoleTypeTitle=Create New RoleType
+CreateRoleTypeSaveLink=Save
+CreateRoleTypeShowAllLink=Show All RoleType Items
+CreateRoleTypeIndexLink=Index
+CreateRoleTypeLabel_id=Id:
+CreateRoleTypeRequiredMessage_id=The Id field is required.
+CreateRoleTypeTitle_id=Id
+CreateRoleTypeLabel_name=Name:
+CreateRoleTypeRequiredMessage_name=The Name field is required.
+CreateRoleTypeTitle_name=Name
+CreateRoleTypeLabel_description=Description:
+CreateRoleTypeTitle_description=Description
+EditRoleTypeTitle=Edit RoleType
+EditRoleTypeSaveLink=Save
+EditRoleTypeViewLink=View
+EditRoleTypeShowAllLink=Show All RoleType Items
+EditRoleTypeIndexLink=Index
+EditRoleTypeLabel_id=Id:
+EditRoleTypeRequiredMessage_id=The Id field is required.
+EditRoleTypeTitle_id=Id
+EditRoleTypeLabel_name=Name:
+EditRoleTypeRequiredMessage_name=The Name field is required.
+EditRoleTypeTitle_name=Name
+EditRoleTypeLabel_description=Description:
+EditRoleTypeTitle_description=Description
+ViewRoleTypeTitle=View
+ViewRoleTypeDestroyLink=Destroy
+ViewRoleTypeEditLink=Edit
+ViewRoleTypeCreateLink=Create New RoleType
+ViewRoleTypeShowAllLink=Show All RoleType Items
+ViewRoleTypeIndexLink=Index
+ViewRoleTypeLabel_id=Id:
+ViewRoleTypeTitle_id=Id
+ViewRoleTypeLabel_name=Name:
+ViewRoleTypeTitle_name=Name
+ViewRoleTypeLabel_description=Description:
+ViewRoleTypeTitle_description=Description
+ListRoleTypeTitle=List
+ListRoleTypeEmpty=(No RoleType Items Found)
+ListRoleTypeDestroyLink=Destroy
+ListRoleTypeEditLink=Edit
+ListRoleTypeViewLink=View
+ListRoleTypeCreateLink=Create New RoleType
+ListRoleTypeIndexLink=Index
+ListRoleTypeTitle_id=Id
+ListRoleTypeTitle_name=Name
+ListRoleTypeTitle_description=Description
+SettingTypeCreated=SettingType was successfully created.
+SettingTypeUpdated=SettingType was successfully updated.
+SettingTypeDeleted=SettingType was successfully deleted.
+CreateSettingTypeTitle=Create New SettingType
+CreateSettingTypeSaveLink=Save
+CreateSettingTypeShowAllLink=Show All SettingType Items
+CreateSettingTypeIndexLink=Index
+CreateSettingTypeLabel_id=Id:
+CreateSettingTypeRequiredMessage_id=The Id field is required.
+CreateSettingTypeTitle_id=Id
+CreateSettingTypeLabel_name=Name:
+CreateSettingTypeRequiredMessage_name=The Name field is required.
+CreateSettingTypeTitle_name=Name
+CreateSettingTypeLabel_description=Description:
+CreateSettingTypeTitle_description=Description
+CreateSettingTypeLabel_defaultValue=DefaultValue:
+CreateSettingTypeTitle_defaultValue=DefaultValue
+CreateSettingTypeLabel_isUserModifiable=IsUserModifiable:
+CreateSettingTypeTitle_isUserModifiable=IsUserModifiable
+EditSettingTypeTitle=Edit SettingType
+EditSettingTypeSaveLink=Save
+EditSettingTypeViewLink=View
+EditSettingTypeShowAllLink=Show All SettingType Items
+EditSettingTypeIndexLink=Index
+EditSettingTypeLabel_id=Id:
+EditSettingTypeRequiredMessage_id=The Id field is required.
+EditSettingTypeTitle_id=Id
+EditSettingTypeLabel_name=Name:
+EditSettingTypeRequiredMessage_name=The Name field is required.
+EditSettingTypeTitle_name=Name
+EditSettingTypeLabel_description=Description:
+EditSettingTypeTitle_description=Description
+EditSettingTypeLabel_defaultValue=DefaultValue:
+EditSettingTypeTitle_defaultValue=DefaultValue
+EditSettingTypeLabel_isUserModifiable=IsUserModifiable:
+EditSettingTypeTitle_isUserModifiable=IsUserModifiable
+ViewSettingTypeTitle=View
+ViewSettingTypeDestroyLink=Destroy
+ViewSettingTypeEditLink=Edit
+ViewSettingTypeCreateLink=Create New SettingType
+ViewSettingTypeShowAllLink=Show All SettingType Items
+ViewSettingTypeIndexLink=Index
+ViewSettingTypeLabel_id=Id:
+ViewSettingTypeTitle_id=Id
+ViewSettingTypeLabel_name=Name:
+ViewSettingTypeTitle_name=Name
+ViewSettingTypeLabel_description=Description:
+ViewSettingTypeTitle_description=Description
+ViewSettingTypeLabel_defaultValue=DefaultValue:
+ViewSettingTypeTitle_defaultValue=DefaultValue
+ViewSettingTypeLabel_isUserModifiable=IsUserModifiable:
+ViewSettingTypeTitle_isUserModifiable=IsUserModifiable
+ListSettingTypeTitle=List
+ListSettingTypeEmpty=(No SettingType Items Found)
+ListSettingTypeDestroyLink=Destroy
+ListSettingTypeEditLink=Edit
+ListSettingTypeViewLink=View
+ListSettingTypeCreateLink=Create New SettingType
+ListSettingTypeIndexLink=Index
+ListSettingTypeTitle_id=Id
+ListSettingTypeTitle_name=Name
+ListSettingTypeTitle_description=Description
+ListSettingTypeTitle_defaultValue=DefaultValue
+ListSettingTypeTitle_isUserModifiable=IsUserModifiable
+TemplatePolicyCreated=TemplatePolicy was successfully created.
+TemplatePolicyUpdated=TemplatePolicy was successfully updated.
+TemplatePolicyDeleted=TemplatePolicy was successfully deleted.
+CreateTemplatePolicyTitle=Create New TemplatePolicy
+CreateTemplatePolicySaveLink=Save
+CreateTemplatePolicyShowAllLink=Show All TemplatePolicy Items
+CreateTemplatePolicyIndexLink=Index
+CreateTemplatePolicyLabel_id=Id:
+CreateTemplatePolicyRequiredMessage_id=The Id field is required.
+CreateTemplatePolicyTitle_id=Id
+CreateTemplatePolicyLabel_value=Value:
+CreateTemplatePolicyRequiredMessage_value=The Value field is required.
+CreateTemplatePolicyTitle_value=Value
+CreateTemplatePolicyLabel_description=Description:
+CreateTemplatePolicyTitle_description=Description
+CreateTemplatePolicyLabel_templatePolicySetId=TemplatePolicySetId:
+CreateTemplatePolicyRequiredMessage_templatePolicySetId=The TemplatePolicySetId field is required.
+CreateTemplatePolicyTitle_templatePolicySetId=TemplatePolicySetId
+CreateTemplatePolicyLabel_policyTypeId=PolicyTypeId:
+CreateTemplatePolicyRequiredMessage_policyTypeId=The PolicyTypeId field is required.
+CreateTemplatePolicyTitle_policyTypeId=PolicyTypeId
+EditTemplatePolicyTitle=Edit TemplatePolicy
+EditTemplatePolicySaveLink=Save
+EditTemplatePolicyViewLink=View
+EditTemplatePolicyShowAllLink=Show All TemplatePolicy Items
+EditTemplatePolicyIndexLink=Index
+EditTemplatePolicyLabel_id=Id:
+EditTemplatePolicyRequiredMessage_id=The Id field is required.
+EditTemplatePolicyTitle_id=Id
+EditTemplatePolicyLabel_value=Value:
+EditTemplatePolicyRequiredMessage_value=The Value field is required.
+EditTemplatePolicyTitle_value=Value
+EditTemplatePolicyLabel_description=Description:
+EditTemplatePolicyTitle_description=Description
+EditTemplatePolicyLabel_templatePolicySetId=TemplatePolicySetId:
+EditTemplatePolicyRequiredMessage_templatePolicySetId=The TemplatePolicySetId field is required.
+EditTemplatePolicyTitle_templatePolicySetId=TemplatePolicySetId
+EditTemplatePolicyLabel_policyTypeId=PolicyTypeId:
+EditTemplatePolicyRequiredMessage_policyTypeId=The PolicyTypeId field is required.
+EditTemplatePolicyTitle_policyTypeId=PolicyTypeId
+ViewTemplatePolicyTitle=View
+ViewTemplatePolicyDestroyLink=Destroy
+ViewTemplatePolicyEditLink=Edit
+ViewTemplatePolicyCreateLink=Create New TemplatePolicy
+ViewTemplatePolicyShowAllLink=Show All TemplatePolicy Items
+ViewTemplatePolicyIndexLink=Index
+ViewTemplatePolicyLabel_id=Id:
+ViewTemplatePolicyTitle_id=Id
+ViewTemplatePolicyLabel_value=Value:
+ViewTemplatePolicyTitle_value=Value
+ViewTemplatePolicyLabel_description=Description:
+ViewTemplatePolicyTitle_description=Description
+ViewTemplatePolicyLabel_templatePolicySetId=TemplatePolicySetId:
+ViewTemplatePolicyTitle_templatePolicySetId=TemplatePolicySetId
+ViewTemplatePolicyLabel_policyTypeId=PolicyTypeId:
+ViewTemplatePolicyTitle_policyTypeId=PolicyTypeId
+ListTemplatePolicyTitle=List
+ListTemplatePolicyEmpty=(No TemplatePolicy Items Found)
+ListTemplatePolicyDestroyLink=Destroy
+ListTemplatePolicyEditLink=Edit
+ListTemplatePolicyViewLink=View
+ListTemplatePolicyCreateLink=Create New TemplatePolicy
+ListTemplatePolicyIndexLink=Index
+ListTemplatePolicyTitle_id=Id
+ListTemplatePolicyTitle_value=Value
+ListTemplatePolicyTitle_description=Description
+ListTemplatePolicyTitle_templatePolicySetId=TemplatePolicySetId
+ListTemplatePolicyTitle_policyTypeId=PolicyTypeId
+TemplatePolicySetCreated=TemplatePolicySet was successfully created.
+TemplatePolicySetUpdated=TemplatePolicySet was successfully updated.
+TemplatePolicySetDeleted=TemplatePolicySet was successfully deleted.
+CreateTemplatePolicySetTitle=Create New TemplatePolicySet
+CreateTemplatePolicySetSaveLink=Save
+CreateTemplatePolicySetShowAllLink=Show All TemplatePolicySet Items
+CreateTemplatePolicySetIndexLink=Index
+CreateTemplatePolicySetLabel_id=Id:
+CreateTemplatePolicySetRequiredMessage_id=The Id field is required.
+CreateTemplatePolicySetTitle_id=Id
+CreateTemplatePolicySetLabel_name=Name:
+CreateTemplatePolicySetRequiredMessage_name=The Name field is required.
+CreateTemplatePolicySetTitle_name=Name
+CreateTemplatePolicySetLabel_description=Description:
+CreateTemplatePolicySetTitle_description=Description
+EditTemplatePolicySetTitle=Edit TemplatePolicySet
+EditTemplatePolicySetSaveLink=Save
+EditTemplatePolicySetViewLink=View
+EditTemplatePolicySetShowAllLink=Show All TemplatePolicySet Items
+EditTemplatePolicySetIndexLink=Index
+EditTemplatePolicySetLabel_id=Id:
+EditTemplatePolicySetRequiredMessage_id=The Id field is required.
+EditTemplatePolicySetTitle_id=Id
+EditTemplatePolicySetLabel_name=Name:
+EditTemplatePolicySetRequiredMessage_name=The Name field is required.
+EditTemplatePolicySetTitle_name=Name
+EditTemplatePolicySetLabel_description=Description:
+EditTemplatePolicySetTitle_description=Description
+ViewTemplatePolicySetTitle=View
+ViewTemplatePolicySetDestroyLink=Destroy
+ViewTemplatePolicySetEditLink=Edit
+ViewTemplatePolicySetCreateLink=Create New TemplatePolicySet
+ViewTemplatePolicySetShowAllLink=Show All TemplatePolicySet Items
+ViewTemplatePolicySetIndexLink=Index
+ViewTemplatePolicySetLabel_id=Id:
+ViewTemplatePolicySetTitle_id=Id
+ViewTemplatePolicySetLabel_name=Name:
+ViewTemplatePolicySetTitle_name=Name
+ViewTemplatePolicySetLabel_description=Description:
+ViewTemplatePolicySetTitle_description=Description
+ListTemplatePolicySetTitle=List
+ListTemplatePolicySetEmpty=(No TemplatePolicySet Items Found)
+ListTemplatePolicySetDestroyLink=Destroy
+ListTemplatePolicySetEditLink=Edit
+ListTemplatePolicySetViewLink=View
+ListTemplatePolicySetCreateLink=Create New TemplatePolicySet
+ListTemplatePolicySetIndexLink=Index
+ListTemplatePolicySetTitle_id=Id
+ListTemplatePolicySetTitle_name=Name
+ListTemplatePolicySetTitle_description=Description
+UserExperimentRoleCreated=UserExperimentRole was successfully created.
+UserExperimentRoleUpdated=UserExperimentRole was successfully updated.
+UserExperimentRoleDeleted=UserExperimentRole was successfully deleted.
+CreateUserExperimentRoleTitle=Create New UserExperimentRole
+CreateUserExperimentRoleSaveLink=Save
+CreateUserExperimentRoleShowAllLink=Show All UserExperimentRole Items
+CreateUserExperimentRoleIndexLink=Index
+CreateUserExperimentRoleLabel_userInfo=UserInfo:
+CreateUserExperimentRoleRequiredMessage_userInfo=The UserInfo field is required.
+CreateUserExperimentRoleTitle_userInfo=UserInfo
+CreateUserExperimentRoleLabel_roleType=RoleType:
+CreateUserExperimentRoleRequiredMessage_roleType=The RoleType field is required.
+CreateUserExperimentRoleTitle_roleType=RoleType
+CreateUserExperimentRoleLabel_experiment=Experiment:
+CreateUserExperimentRoleRequiredMessage_experiment=The Experiment field is required.
+CreateUserExperimentRoleTitle_experiment=Experiment
+EditUserExperimentRoleTitle=Edit UserExperimentRole
+EditUserExperimentRoleSaveLink=Save
+EditUserExperimentRoleViewLink=View
+EditUserExperimentRoleShowAllLink=Show All UserExperimentRole Items
+EditUserExperimentRoleIndexLink=Index
+EditUserExperimentRoleLabel_userInfo=UserInfo:
+EditUserExperimentRoleRequiredMessage_userInfo=The UserInfo field is required.
+EditUserExperimentRoleTitle_userInfo=UserInfo
+EditUserExperimentRoleLabel_roleType=RoleType:
+EditUserExperimentRoleRequiredMessage_roleType=The RoleType field is required.
+EditUserExperimentRoleTitle_roleType=RoleType
+EditUserExperimentRoleLabel_experiment=Experiment:
+EditUserExperimentRoleRequiredMessage_experiment=The Experiment field is required.
+EditUserExperimentRoleTitle_experiment=Experiment
+ViewUserExperimentRoleTitle=View
+ViewUserExperimentRoleDestroyLink=Destroy
+ViewUserExperimentRoleEditLink=Edit
+ViewUserExperimentRoleCreateLink=Create New UserExperimentRole
+ViewUserExperimentRoleShowAllLink=Show All UserExperimentRole Items
+ViewUserExperimentRoleIndexLink=Index
+ViewUserExperimentRoleLabel_userInfo=UserInfo:
+ViewUserExperimentRoleTitle_userInfo=UserInfo
+ViewUserExperimentRoleLabel_roleType=RoleType:
+ViewUserExperimentRoleTitle_roleType=RoleType
+ViewUserExperimentRoleLabel_experiment=Experiment:
+ViewUserExperimentRoleTitle_experiment=Experiment
+ListUserExperimentRoleTitle=List
+ListUserExperimentRoleEmpty=(No UserExperimentRole Items Found)
+ListUserExperimentRoleDestroyLink=Destroy
+ListUserExperimentRoleEditLink=Edit
+ListUserExperimentRoleViewLink=View
+ListUserExperimentRoleCreateLink=Create New UserExperimentRole
+ListUserExperimentRoleIndexLink=Index
+ListUserExperimentRoleTitle_userInfo=UserInfo
+ListUserExperimentRoleTitle_roleType=RoleType
+ListUserExperimentRoleTitle_experiment=Experiment
+UserInfoCreated=UserInfo was successfully created.
+UserInfoUpdated=UserInfo was successfully updated.
+UserInfoDeleted=UserInfo was successfully deleted.
+CreateUserInfoTitle=Create New UserInfo
+CreateUserInfoSaveLink=Save
+CreateUserInfoShowAllLink=Show All UserInfo Items
+CreateUserInfoIndexLink=Index
+CreateUserInfoLabel_id=Id:
+CreateUserInfoRequiredMessage_id=The Id field is required.
+CreateUserInfoTitle_id=Id
+CreateUserInfoLabel_username=Username:
+CreateUserInfoRequiredMessage_username=The Username field is required.
+CreateUserInfoTitle_username=Username
+CreateUserInfoLabel_firstName=FirstName:
+CreateUserInfoRequiredMessage_firstName=The FirstName field is required.
+CreateUserInfoTitle_firstName=FirstName
+CreateUserInfoLabel_lastName=LastName:
+CreateUserInfoRequiredMessage_lastName=The LastName field is required.
+CreateUserInfoTitle_lastName=LastName
+CreateUserInfoLabel_middleName=MiddleName:
+CreateUserInfoTitle_middleName=MiddleName
+CreateUserInfoLabel_email=Email:
+CreateUserInfoTitle_email=Email
+CreateUserInfoLabel_description=Description:
+CreateUserInfoTitle_description=Description
+CreateUserInfoLabel_password=Password:
+CreateUserInfoTitle_password=Password
+EditUserInfoTitle=Edit UserInfo
+EditUserInfoSaveLink=Save
+EditUserInfoViewLink=View
+EditUserInfoShowAllLink=Show All UserInfo Items
+EditUserInfoIndexLink=Index
+EditUserInfoLabel_id=Id:
+EditUserInfoRequiredMessage_id=The Id field is required.
+EditUserInfoTitle_id=Id
+EditUserInfoLabel_username=Username:
+EditUserInfoRequiredMessage_username=The Username field is required.
+EditUserInfoTitle_username=Username
+EditUserInfoLabel_firstName=FirstName:
+EditUserInfoRequiredMessage_firstName=The FirstName field is required.
+EditUserInfoTitle_firstName=FirstName
+EditUserInfoLabel_lastName=LastName:
+EditUserInfoRequiredMessage_lastName=The LastName field is required.
+EditUserInfoTitle_lastName=LastName
+EditUserInfoLabel_middleName=MiddleName:
+EditUserInfoTitle_middleName=MiddleName
+EditUserInfoLabel_email=Email:
+EditUserInfoTitle_email=Email
+EditUserInfoLabel_description=Description:
+EditUserInfoTitle_description=Description
+EditUserInfoLabel_password=Password:
+EditUserInfoTitle_password=Password
+ViewUserInfoTitle=View
+ViewUserInfoDestroyLink=Destroy
+ViewUserInfoEditLink=Edit
+ViewUserInfoCreateLink=Create New UserInfo
+ViewUserInfoShowAllLink=Show All UserInfo Items
+ViewUserInfoIndexLink=Index
+ViewUserInfoLabel_id=Id:
+ViewUserInfoTitle_id=Id
+ViewUserInfoLabel_username=Username:
+ViewUserInfoTitle_username=Username
+ViewUserInfoLabel_firstName=FirstName:
+ViewUserInfoTitle_firstName=FirstName
+ViewUserInfoLabel_lastName=LastName:
+ViewUserInfoTitle_lastName=LastName
+ViewUserInfoLabel_middleName=MiddleName:
+ViewUserInfoTitle_middleName=MiddleName
+ViewUserInfoLabel_email=Email:
+ViewUserInfoTitle_email=Email
+ViewUserInfoLabel_description=Description:
+ViewUserInfoTitle_description=Description
+ViewUserInfoLabel_password=Password:
+ViewUserInfoTitle_password=Password
+ListUserInfoTitle=List
+ListUserInfoEmpty=(No UserInfo Items Found)
+ListUserInfoDestroyLink=Destroy
+ListUserInfoEditLink=Edit
+ListUserInfoViewLink=View
+ListUserInfoCreateLink=Create New UserInfo
+ListUserInfoIndexLink=Index
+ListUserInfoTitle_id=Id
+ListUserInfoTitle_username=Username
+ListUserInfoTitle_firstName=FirstName
+ListUserInfoTitle_lastName=LastName
+ListUserInfoTitle_middleName=MiddleName
+ListUserInfoTitle_email=Email
+ListUserInfoTitle_description=Description
+ListUserInfoTitle_password=Password
+UserSettingCreated=UserSetting was successfully created.
+UserSettingUpdated=UserSetting was successfully updated.
+UserSettingDeleted=UserSetting was successfully deleted.
+CreateUserSettingTitle=Create New UserSetting
+CreateUserSettingSaveLink=Save
+CreateUserSettingShowAllLink=Show All UserSetting Items
+CreateUserSettingIndexLink=Index
+CreateUserSettingLabel_id=Id:
+CreateUserSettingRequiredMessage_id=The Id field is required.
+CreateUserSettingTitle_id=Id
+CreateUserSettingLabel_value=Value:
+CreateUserSettingTitle_value=Value
+CreateUserSettingLabel_userId=UserId:
+CreateUserSettingRequiredMessage_userId=The UserId field is required.
+CreateUserSettingTitle_userId=UserId
+CreateUserSettingLabel_settingTypeId=SettingTypeId:
+CreateUserSettingRequiredMessage_settingTypeId=The SettingTypeId field is required.
+CreateUserSettingTitle_settingTypeId=SettingTypeId
+EditUserSettingTitle=Edit UserSetting
+EditUserSettingSaveLink=Save
+EditUserSettingViewLink=View
+EditUserSettingShowAllLink=Show All UserSetting Items
+EditUserSettingIndexLink=Index
+EditUserSettingLabel_id=Id:
+EditUserSettingRequiredMessage_id=The Id field is required.
+EditUserSettingTitle_id=Id
+EditUserSettingLabel_value=Value:
+EditUserSettingTitle_value=Value
+EditUserSettingLabel_userId=UserId:
+EditUserSettingRequiredMessage_userId=The UserId field is required.
+EditUserSettingTitle_userId=UserId
+EditUserSettingLabel_settingTypeId=SettingTypeId:
+EditUserSettingRequiredMessage_settingTypeId=The SettingTypeId field is required.
+EditUserSettingTitle_settingTypeId=SettingTypeId
+ViewUserSettingTitle=View
+ViewUserSettingDestroyLink=Destroy
+ViewUserSettingEditLink=Edit
+ViewUserSettingCreateLink=Create New UserSetting
+ViewUserSettingShowAllLink=Show All UserSetting Items
+ViewUserSettingIndexLink=Index
+ViewUserSettingLabel_id=Id:
+ViewUserSettingTitle_id=Id
+ViewUserSettingLabel_value=Value:
+ViewUserSettingTitle_value=Value
+ViewUserSettingLabel_userId=UserId:
+ViewUserSettingTitle_userId=UserId
+ViewUserSettingLabel_settingTypeId=SettingTypeId:
+ViewUserSettingTitle_settingTypeId=SettingTypeId
+ListUserSettingTitle=List
+ListUserSettingEmpty=(No UserSetting Items Found)
+ListUserSettingDestroyLink=Destroy
+ListUserSettingEditLink=Edit
+ListUserSettingViewLink=View
+ListUserSettingCreateLink=Create New UserSetting
+ListUserSettingIndexLink=Index
+ListUserSettingTitle_id=Id
+ListUserSettingTitle_value=Value
+ListUserSettingTitle_userId=UserId
+ListUserSettingTitle_settingTypeId=SettingTypeId
diff --git a/src/java/DmWebPortal/web/WEB-INF/faces-config.xml b/src/java/DmWebPortal/web/WEB-INF/faces-config.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b8e4f061fb5737b0fd1748305200da1ec2622008
--- /dev/null
+++ b/src/java/DmWebPortal/web/WEB-INF/faces-config.xml
@@ -0,0 +1,12 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<faces-config version="2.2"
+    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd">
+    <application>
+        <resource-bundle>
+            <base-name>/resources</base-name>
+            <var>resources</var>
+        </resource-bundle>
+    </application>
+</faces-config>
diff --git a/src/java/DmWebPortal/web/WEB-INF/web.xml b/src/java/DmWebPortal/web/WEB-INF/web.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c5e7c7381b8565920988ba7607cf0d319cb2eb37
--- /dev/null
+++ b/src/java/DmWebPortal/web/WEB-INF/web.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
+    <context-param>
+        <param-name>javax.faces.PROJECT_STAGE</param-name>
+        <param-value>Development</param-value>
+    </context-param>
+    <servlet>
+        <servlet-name>Faces Servlet</servlet-name>
+        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
+        <load-on-startup>1</load-on-startup>
+    </servlet>
+    <servlet-mapping>
+        <servlet-name>Faces Servlet</servlet-name>
+        <url-pattern>/faces/*</url-pattern>
+    </servlet-mapping>
+    <session-config>
+        <session-timeout>
+            30
+        </session-timeout>
+    </session-config>
+    <welcome-file-list>
+        <welcome-file>faces/index.xhtml</welcome-file>
+    </welcome-file-list>
+</web-app>
diff --git a/src/java/DmWebPortal/web/index.xhtml b/src/java/DmWebPortal/web/index.xhtml
new file mode 100644
index 0000000000000000000000000000000000000000..ae4c3713ee9f411313b1650e1c8439eabc0377d0
--- /dev/null
+++ b/src/java/DmWebPortal/web/index.xhtml
@@ -0,0 +1,13 @@
+<?xml version='1.0' encoding='UTF-8' ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:h="http://xmlns.jcp.org/jsf/html">
+    <h:head>
+        <title>Facelet Title</title>
+        <h:outputStylesheet name="css/jsfcrud.css"/>
+    </h:head>
+    <h:body>
+        Hello from Facelets
+    </h:body>
+</html>
+
diff --git a/src/java/DmWebPortal/web/resources/css/jsfcrud.css b/src/java/DmWebPortal/web/resources/css/jsfcrud.css
new file mode 100644
index 0000000000000000000000000000000000000000..fa75f5b0d6a39265b0db81288f50463fb80feee3
--- /dev/null
+++ b/src/java/DmWebPortal/web/resources/css/jsfcrud.css
@@ -0,0 +1,82 @@
+root { 
+    display: block;
+}
+
+body {
+    font-family: Arial, Helvetica, sans-serif;
+    color: #3a4f54;
+    background-color: #dfecf1;
+    font-size: small;
+}
+
+a {
+    color: #e33b06;
+}
+
+table {
+    empty-cells: show;
+}
+
+form.jsfcrud_list_form th, td th {
+    font-size: x-small;
+    color: #4e6a71;
+    border-top-style: solid;
+    border-bottom-style: solid;
+    border-left-style: solid;
+    border-right-style: solid;
+    border-top-width: 1px;
+    border-bottom-width: 1px;
+    border-left-width: 1px;
+    border-right-width: 1px;
+    border-top-color: #b2d5d6;
+    border-bottom-color: #b2d5d6;
+    border-left-color: #90b4bd;
+    border-right-color: #90b4bd;
+    letter-spacing: 3px;
+    text-align: left;
+    padding-top: 6px;
+    padding-bottom: 6px;
+    padding-left: 6px;
+    padding-right: 6px;
+    background-color: #b2d5d6;
+}
+
+td {
+    vertical-align: top;
+    padding-bottom: 8px;
+    font-size: small;
+}
+
+form.jsfcrud_list_form td, td td {
+    border-top-style: solid;
+    border-bottom-style: solid;
+    border-left-style: solid;
+    border-right-style: solid;
+    border-top-width: 1px;
+    border-bottom-width: 1px;
+    border-left-width: 1px;
+    border-right-width: 1px;
+    border-top-color: #b2d5d6;
+    border-bottom-color: #b2d5d6;
+    border-left-color: #b2d5d6;
+    border-right-color: #b2d5d6;
+    vertical-align: baseline;
+    padding-bottom: 0px;
+}
+
+tr.jsfcrud_odd_row {
+    background-color: #fefeff;
+    color: #4e6a71;
+}
+
+
+tr.jsfcrud_even_row {
+    background-color: #eff5fa;
+    color: #4e6a71;
+}
+
+#busyImage {
+    position: absolute;
+    left: 50%;
+    top: 50%;
+}
diff --git a/src/java/DmWebPortal/web/resources/css/login.css b/src/java/DmWebPortal/web/resources/css/login.css
new file mode 100644
index 0000000000000000000000000000000000000000..94c3e9f4dba116d6ed63440e24d01d0da02d2edc
--- /dev/null
+++ b/src/java/DmWebPortal/web/resources/css/login.css
@@ -0,0 +1,96 @@
+body {
+    background-color: #f2f4f7;
+    font-size: 12px;
+    font-family: Verdana, "Verdana CE",  Arial, "Arial CE", "Lucida Grande CE", lucida, "Helvetica CE", sans-serif;
+    color: #000000;
+    margin: 0px;
+}
+
+a:link, a:visited {
+    color: #4e80b6;
+    font-weight: bold;
+}
+
+a:link:hover, a:visited:hover  {
+    color: #6da5d8;
+    font-weight: bold;
+}
+
+ #top {
+     position: relative;
+     color: white;
+
+     /* IE10 */
+     background-image: -ms-linear-gradient(top, #4e80b6 0%, #6da5d8 100%);
+     /* Mozilla Firefox */
+     background-image: -moz-linear-gradient(top, #4e80b6 0%, #6da5d8 100%);
+     /* Opera */
+     background-image: -o-linear-gradient(top, #4e80b6 0%, #6da5d8 100%);
+     /* Webkit (Safari/Chrome 10) */
+     background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #4e80b6), color-stop(1, #6da5d8));
+     /* Webkit (Chrome 11+) */
+     background-image: -webkit-linear-gradient(top, #4e80b6 0%, #6da5d8 100%);
+     /* Proposed W3C Markup */
+     background-image: linear-gradient(top, #4e80b6 0%, #6da5d8 100%);
+     /* IE6-9 */
+     filter:  progid:DXImageTransform.Microsoft.gradient(startColorstr='#4e80b6', endColorstr='#6da5d8');
+     padding: 15px;
+     margin: 0px 0px 0px 0px;
+     height: 75px;
+ }
+
+#bottom {
+    position: relative;
+    background-color: #f2f4f7;
+    padding: 5px;
+    margin: 0px 0px 0px 0px;
+    height: 100%
+}
+
+.topLeftContent {
+    float: left;
+    width: 150px;
+    margin-left: 35px;
+    vertical-align: central;
+    text-align: center;
+}
+
+.topCenterContent {
+    position: relative;
+    vertical-align: central;
+    text-align: center;
+    margin: 0px 170px 0px 170px;
+}
+
+.topRightContent {
+    float: right;
+    width: 170px;
+    vertical-align: central;
+    text-align: center;
+    font-size: 10px;
+}
+
+.login {
+    vertical-align: central;
+    text-align: center;
+    margin-left: auto;
+    margin-right: auto;
+    background: #f2f4f7;
+    padding: 100px;
+}
+
+
+input {
+    background: #6da5d8;
+    box-shadow: 0px 3px 5px #d5d5d5;
+}
+
+h1 {
+    font-family: Arial, "Arial CE", "Lucida Grande CE", lucida, "Helvetica CE", sans-serif;
+    font-size:  24px;
+    font-weight: bold;
+    margin: 20px;
+    padding-bottom: 0px;
+    color: #f2f4f7;
+    vertical-align: middle;
+}
diff --git a/src/java/DmWebPortal/web/resources/css/portal.css b/src/java/DmWebPortal/web/resources/css/portal.css
new file mode 100644
index 0000000000000000000000000000000000000000..3b1ac1361852be76840c017705963ae78b491dd8
--- /dev/null
+++ b/src/java/DmWebPortal/web/resources/css/portal.css
@@ -0,0 +1,438 @@
+body {
+    background-color: #f2f4f7;
+    font-size: 12px;
+    font-family: Verdana, "Verdana CE",  Arial, "Arial CE", "Lucida Grande CE", lucida, "Helvetica CE", sans-serif;
+    color: #000000;
+    margin: 0px;
+}
+
+a:link, a:visited {
+    color: #4e80b6;
+    font-weight: bold;
+}
+
+a:link:hover, a:visited:hover  {
+    color: #6da5d8;
+    font-weight: bold;
+}
+
+#top {
+    position: relative;
+    color: white;
+
+    /* IE10 */
+    background-image: -ms-linear-gradient(top, #4e80b6 0%, #6da5d8 100%);
+    /* Mozilla Firefox */
+    background-image: -moz-linear-gradient(top, #4e80b6 0%, #6da5d8 100%);
+    /* Opera */
+    background-image: -o-linear-gradient(top, #4e80b6 0%, #6da5d8 100%);
+    /* Webkit (Safari/Chrome 10) */
+    background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #4e80b6), color-stop(1, #6da5d8));
+    /* Webkit (Chrome 11+) */
+    background-image: -webkit-linear-gradient(top, #4e80b6 0%, #6da5d8 100%);
+    /* Proposed W3C Markup */
+    background-image: linear-gradient(top, #4e80b6 0%, #6da5d8 100%);
+    /* IE6-9 */
+    filter:  progid:DXImageTransform.Microsoft.gradient(startColorstr='#4e80b6', endColorstr='#6da5d8');
+
+    padding: 15px;
+    margin: 0px 0px 0px 0px;
+    height: 75px;
+}
+
+#menu {
+    background-color: #6da5d8;
+}
+
+#middle {
+}
+
+#bottom {
+    position: relative;
+    background-color: #6da5d8;
+    padding: 0px;
+    margin: 0px 0px 0px 0px;
+    height: 100%
+}
+
+.topLeftContent {
+    float: left;
+    width: 170px;
+    vertical-align: central;
+    text-align: center;
+    margin-left: 35px;
+}
+
+.topCenterContent {
+    position: relative;
+    vertical-align: central;
+    text-align: center;
+    margin: 0px 170px 0px 170px;
+}
+
+.topRightContent {
+    float: right;
+    width: 170px;
+    vertical-align: central;
+    text-align: left;
+    font-size: 10px;
+}
+
+.menubar {
+    background: #6da5d8;
+}
+
+.menuContent {
+    position: relative;
+    vertical-align: central;
+    text-align: left;
+    margin: 0px 0px 0px 0px;
+    color: white;
+    background-color: #6da5d8;
+}
+
+.menuLeftContent {
+    float: left;
+    width: 50px;
+    height: fit-content;
+    text-align: center;
+    background-color: #6da5d8;
+}
+
+.menuCenterContent {
+    position: relative;
+    vertical-align: central;
+    text-align: left;
+    margin: 0px 0px 0px 0px;
+    color: white;
+    background-color: #6da5d8;
+}
+
+.menuRightContent {
+    float: right;
+    width: 50px;
+    vertical-align: central;
+    text-align: center;
+    background-color: #6da5d8;
+}
+
+.middleLeftContent {
+    float: left;
+    width: 50px;
+    height: fit-content;
+    text-align: center;
+    background-color: #6da5d8;
+}
+
+.middleCenterContent {
+    position: relative;
+    vertical-align: central;
+    text-align: left;
+    margin: 50px;
+    color: white;
+}
+
+.middleCenterLeftContent {
+    float: left;
+    margin-right: 2%;
+    margin-bottom: 2%;
+}
+
+.middleCenterRightContent {
+    float: left;
+    margin-bottom: 2%;
+}
+
+.middleRightContent {
+    float: right;
+    width: 50px;
+    vertical-align: central;
+    text-align: center;
+    background-color: #6da5d8;
+}
+
+.actionButton {
+    margin-top: 5px;
+    margin-bottom: 5px;
+    margin-right: 5px;
+    border: 0px;
+}
+
+.actionButtonRight {
+    float: right;
+    margin-right: 0px;
+    margin-left: 5px;
+}
+
+.actionLink {
+    display: none;
+}
+
+.entityDataLabel {
+    font-weight: bold;
+}
+
+.entityDataEmphasizedLabel {
+    font-weight: bold;
+    font-size: 105%;
+}
+
+.entityDataText {
+    font-weight: normal;
+    float: left;
+}
+
+.entityDataEmphasizedText {
+    font-weight: bold;
+    font-size: 105%;
+}
+
+.entityDataSelectOne {
+    font-weight: normal;
+}
+
+.entityDataSelectMany {
+    font-weight: normal;
+    height: 75px;
+}
+
+.entityDataError {
+    font-weight: bold;
+}
+
+.createEntityDetails td:nth-child(1) {
+    vertical-align: top;
+}
+
+.createEntityDetails td:nth-child(2) {
+    width: 300px;
+}
+
+.viewEntityDetails td:nth-child(1) {
+    vertical-align: top;
+    width: 125px;
+}
+
+.viewEntityDetails td:nth-child(2) {
+    vertical-align: top;
+    width: 300px;
+}
+
+.editEntityDetails td:nth-child(1) {
+    vertical-align: top;
+}
+
+.editEntityDetails td:nth-child(2) {
+    width: 300px;
+}
+
+.entityLogList td:last-child {
+    width: 195px;
+}
+
+.commandLink {
+
+}
+
+tr:hover .actionLink {
+    display: inline-block;
+}
+
+.objectPanel {
+    display: inline-block;
+}
+
+.statusPanel {
+    display: inline-block;
+    white-space: pre;
+}
+
+.queryPanel {
+    width: 100%;
+}
+
+.queryInput {
+    width: 200px;
+}
+
+.queryColumn {
+    text-align: center;
+}
+
+.dialog {
+    background: #6da5d8;
+    box-shadow: 0px 3px 5px #d5d5d5;    
+    vertical-align: central;
+    text-align: center;
+    margin: 0;
+    margin-left: auto;
+    margin-right: auto;
+}
+
+.dialogDataLabel {
+    float: left
+}
+
+.htmlPreserve {
+    white-space: pre;
+}
+
+input, textarea {
+    background: #f2f4f7;
+    box-shadow: 0px 3px 5px #d5d5d5;
+    width: 300px;
+}
+
+.loginInput input {
+    width: 200px;
+}
+
+.cellSelect {
+    width: 150px;
+}
+
+.longCellSelect {
+    width: 300px;
+}
+
+.veryLongCellSelect {
+    width: 450px;
+}
+
+.cellInput {
+    width: 125px;
+}
+
+.shortCellInput {
+    width: 75px;
+}
+
+.longCellInput {
+    width: 250px;
+}
+
+.threeDigitCellInput {
+    width: 20px;
+}
+
+.fourDigitCellInput {
+    width: 30px;
+}
+
+select {
+    width: 150px;
+}
+
+h1 {
+    font-family: Arial, "Arial CE", "Lucida Grande CE", lucida, "Helvetica CE", sans-serif;
+    font-size:  24px;
+    font-weight: bold;
+    margin: 20px;
+    padding-bottom: 0px;
+    color: #f2f4f7;
+    vertical-align: middle;
+}
+
+.homePage {
+    background-image: url(../../resources/images/ApsStorageRing.png);
+    background-repeat: no-repeat;
+    background-position: center;
+    background-size: auto 100%;
+}
+
+.pageTitle h1 {
+    font-family: Arial, "Arial CE", "Lucida Grande CE", lucida, "Helvetica CE", sans-serif;
+    font-size:  20px;
+    font-weight: bold;
+    margin: 0px;
+    padding-bottom: 40px;
+    color: #4e80b6;
+    vertical-align: middle;
+    text-align: left;
+}
+
+.sectionTitle h2 {
+    font-family: Arial, "Arial CE", "Lucida Grande CE", lucida, "Helvetica CE", sans-serif;
+    font-size:  16px;
+    font-weight: bold;
+    margin: 0px;
+    padding-top: 20px;
+    padding-bottom: 20px;
+    color: #4e80b6;
+    vertical-align: middle;
+    text-align: left;
+}
+
+.sectionText {
+    font-size: 14px;
+    font-weight: normal;
+    color: #4e80b6;
+}
+
+h2 {
+    font-size:  20px;
+    font-weight: bold;
+    color: #4e80b6;
+}
+
+.shortFilterColumn {
+    width: 40px;
+}
+
+.ui-accordion .ui-accordion-content {
+    background: #f2f4f7;    
+}
+
+.ui-panelgrid tr, .ui-panelgrid td {
+    background: #f2f4f7;
+    border: none;
+    font-weight: bold;
+}
+
+.ui-menu, .ui-menuitem, .ui-menu .ui-menu-child {
+    background: #6da5d8;
+    color: white;
+    margin-top: 0px;
+}
+
+.ui-menuitem-text {
+    color: white;
+    font-weight: bold;
+}
+
+.ui-growl-item-container {
+    vertical-align: middle;
+}
+
+.ui-tooltip {
+    text-wrap: normal;
+}
+
+.ui-icon {
+    display: inline-block;
+}
+
+.ui-dialog-footer, .ui-dialog-buttonpane, .ui-dialog .ui-dialog-buttonpane {
+    background: #6da5d8;
+    text-align: center;
+}
+
+.ui-confirm-dialog-message {
+    color: white;
+}
+
+.ui-column-dnd-bottom {
+    display: none;
+}
+
+.ui-icon-excel {
+    background-image: url(../../resources/images/excel.ico) !important;
+    background-repeat: no-repeat;
+    background-position: left
+}
+
+.ui-icon-pdf {
+    background-image: url(../../resources/images/pdf.ico) !important;
+    background-repeat: no-repeat;
+    background-position: left
+}
\ No newline at end of file
diff --git a/src/java/DmWebPortal/web/resources/images/AnlLogo167x75.png b/src/java/DmWebPortal/web/resources/images/AnlLogo167x75.png
new file mode 100644
index 0000000000000000000000000000000000000000..369682cf138a5ead2fb29f92d0fb53ada7e6287a
Binary files /dev/null and b/src/java/DmWebPortal/web/resources/images/AnlLogo167x75.png differ
diff --git a/src/java/DmWebPortal/web/resources/images/ApsStorageRing.png b/src/java/DmWebPortal/web/resources/images/ApsStorageRing.png
new file mode 100644
index 0000000000000000000000000000000000000000..97b5f6f23990d5869ba986ed24f58c63b6ff66dd
Binary files /dev/null and b/src/java/DmWebPortal/web/resources/images/ApsStorageRing.png differ
diff --git a/src/java/DmWebPortal/web/resources/js/experimentType/list.filter.js b/src/java/DmWebPortal/web/resources/js/experimentType/list.filter.js
new file mode 100644
index 0000000000000000000000000000000000000000..70a7d2b4ff92bcdf4473cc664fc123c03d5232d7
--- /dev/null
+++ b/src/java/DmWebPortal/web/resources/js/experimentType/list.filter.js
@@ -0,0 +1,4 @@
+
+jQuery(document).ready(function() {
+    experimentTypeListWidget.filter();
+});
diff --git a/src/java/DmWebPortal/web/resources/js/userInfo/list.filter.js b/src/java/DmWebPortal/web/resources/js/userInfo/list.filter.js
new file mode 100644
index 0000000000000000000000000000000000000000..491c0c3ba0efd507857193c50412879e65c07c58
--- /dev/null
+++ b/src/java/DmWebPortal/web/resources/js/userInfo/list.filter.js
@@ -0,0 +1,4 @@
+
+jQuery(document).ready(function() {
+    userInfoListWidget.filter();
+});
\ No newline at end of file
diff --git a/src/java/DmWebPortal/web/templates/contentViewTemplate4x3.xhtml b/src/java/DmWebPortal/web/templates/contentViewTemplate4x3.xhtml
new file mode 100644
index 0000000000000000000000000000000000000000..4519d47c05a44a0d1b9a1d215fb3df06b77211cf
--- /dev/null
+++ b/src/java/DmWebPortal/web/templates/contentViewTemplate4x3.xhtml
@@ -0,0 +1,116 @@
+<?xml version='1.0' encoding='UTF-8' ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:ui="http://java.sun.com/jsf/facelets"
+      xmlns:p="http://primefaces.org/ui"
+      xmlns:h="http://java.sun.com/jsf/html"
+      xmlns:f="http://xmlns.jcp.org/jsf/core">
+
+    <h:head>
+        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+        <link href="../../resources/css/portal.css" rel="stylesheet" type="text/css" />
+        <title>Data Management System Portal</title>
+    </h:head>
+
+    <h:body>
+
+        <div id="top" class="topContent">
+            <div id="topLeft" class="topLeftContent">
+                <ui:insert name="topLeft">
+                    <h:graphicImage alt="ANL Logo" url="../../resources/images/AnlLogo167x75.png"/>
+                </ui:insert>
+            </div>
+            <div>
+                <div id="topRight" class="topRightContent">
+                    <ui:insert name="topRight">
+                        <h:outputText value="Username: #{loginController.displayUsername()}"/>
+                        <br/>
+
+                        <h:outputText value="Role: #{loginController.displayRole()}"/>
+
+                    </ui:insert>
+                </div>
+                <div id="topCenter" class="topCenterContent">
+                    <ui:insert name="topCenter">
+                        <h1>Data Management System Portal</h1>
+                    </ui:insert>
+                </div>
+            </div>
+        </div>
+
+        <ui:fragment>
+            <div id="menu" class="menuContent">
+                <div id="menuLeft" class="menuLeftContent">
+                    <ui:insert name="menuLeft">
+                        <p:menubar/>
+                    </ui:insert>
+                </div>
+                <div>
+                    <div id="menuRight" class="menuRightContent">
+                        <ui:insert name="menuRight">
+                        </ui:insert>
+                    </div>
+                    <div id="menuCenter" class="menuCenterContent">
+                        <ui:insert name="menuCenter">
+                            <h:form prependId="false">
+                                <p:menubar>
+                                    <p:menuitem value="Home" url="/faces/views/home.xhtml" icon="ui-icon-home"/>
+                                    <p:menuitem value="Experiment Types" url="/faces/views/experimentType/list.xhtml"/>
+                                    <p:menuitem value="Users" url="/faces/views/userInfo/list.xhtml"/>
+                                    <p:menuitem value="Login" onclick="loginDialog.show()" rendered="#{!loginController.loggedIn}" icon="ui-icon-person"/>
+                                    <p:menuitem value="Logout" action="#{loginController.logout()}" rendered="#{loginController.loggedIn}" icon="ui-icon-close"/>                                </p:menubar>
+                            </h:form>
+                        </ui:insert>
+                    </div>
+                </div>
+            </div>
+
+            <div id="middle" class="middleContent">
+                <div id="middleLeft" class="middleLeftContent">
+                    <ui:insert name="middleLeft">
+                    </ui:insert>
+                </div>
+                <div>
+                    <div id="middleRight" class="middleRightContent">
+                        <ui:insert name="middleRight">
+                        </ui:insert>
+                    </div>
+                    <div id="middleCenter" class="middleCenterContent">
+                        <ui:insert name="middleCenter">
+                        </ui:insert>
+                    </div>
+                </div>
+            </div>
+        </ui:fragment>
+
+        <ui:fragment>
+            <div id="bottom" class="bottomContent">
+                <ui:insert name="bottom">
+                    <h:form prependId="false">
+                        <p:growl id="messages" showDetail="true" autoUpdate="true"/>
+                    </h:form>
+                </ui:insert>
+            </div>
+        </ui:fragment>
+
+        <h:form id="loginForm">
+            <p:dialog id="loginDialog" styleClass="dialog" header="Login" widgetVar="loginDialog">
+                <h:panelGrid styleClass="loginInput">
+                    <div class="dialog">
+                        <div>
+                            <p:inputText id="username" value="#{loginController.username}" title="Username"/>
+                            <p:watermark for="username" value="Username"/>
+                            <p:password id="password" value="#{loginController.password}" title="Password"/>
+                            <p:watermark for="password" value="Password"/>
+                        </div>
+
+                        <f:facet name="footer">
+                            <p:commandButton id="loginButton" value="Login" action="#{loginController.login}" oncomplete="loginDialog.hide()"/>
+                        </f:facet>
+                    </div>
+                </h:panelGrid>
+            </p:dialog>
+        </h:form>
+    </h:body>
+
+</html>
diff --git a/src/java/DmWebPortal/web/templates/loginViewTemplate.xhtml b/src/java/DmWebPortal/web/templates/loginViewTemplate.xhtml
new file mode 100644
index 0000000000000000000000000000000000000000..5e15b83562768cf7027bc186b873cb20b642b1aa
--- /dev/null
+++ b/src/java/DmWebPortal/web/templates/loginViewTemplate.xhtml
@@ -0,0 +1,41 @@
+<?xml version='1.0' encoding='UTF-8' ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:ui="http://java.sun.com/jsf/facelets"
+      xmlns:h="http://java.sun.com/jsf/html">
+
+    <h:head>
+        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+        <link href="../resources/css/login.css" rel="stylesheet" type="text/css" />
+        <title>Data Management System Login</title>
+
+    </h:head>
+
+    <h:body>
+        <div id="top" class="topContent">
+            <div id="topLeft" class="topLeftContent">
+                <ui:insert name="topLeft">
+                    <h:graphicImage alt="ANL Logo" url="../resources/images/AnlLogo167x75.png"/>
+                </ui:insert>
+            </div>
+            <div>
+                <div id="topRight" class="topRightContent">
+                    <ui:insert name="topRight"/>
+                </div>
+                <div id="topCenter" class="topCenterContent">
+                    <ui:insert name="topCenter">
+                        <h1>Data Management System Portal</h1>
+                    </ui:insert>
+                </div>
+            </div>
+        </div>
+
+        <div id="bottom" class="bottomContent">
+            <ui:insert name="bottom">
+            </ui:insert>
+        </div>
+
+
+    </h:body>
+
+</html>
diff --git a/src/java/DmWebPortal/web/views/common/commonListActionButtons.xhtml b/src/java/DmWebPortal/web/views/common/commonListActionButtons.xhtml
new file mode 100644
index 0000000000000000000000000000000000000000..e7f81547d1f22b22fa7dace76b51f59d3ef54d2d
--- /dev/null
+++ b/src/java/DmWebPortal/web/views/common/commonListActionButtons.xhtml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<ui:composition xmlns="http://www.w3.org/1999/xhtml"
+                xmlns:h="http://java.sun.com/jsf/html"
+                xmlns:p="http://primefaces.org/ui"
+                xmlns:f="http://java.sun.com/jsf/core"
+                xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
+                xmlns:c="http://xmlns.jcp.org/jsp/jstl/core">
+
+    <c:set var="entityTypeName" value="#{entityController.entityTypeName}"/>
+    <c:set var="displayAddButton" value="#{loginController.loggedIn}"/>
+
+    <div class="actionButton">
+        <p:commandButton id="#{entityTypeName}AddButton" action="#{entityController.prepareCreate()}" rendered="#{displayAddButton}" value="Add" alt="Add new #{entityTypeName}" icon="ui-icon-plus">
+            <p:tooltip for="#{entityTypeName}AddButton" value="Create new #{entityController.displayEntityTypeName}."/>
+        </p:commandButton>
+        
+        <p:commandButton id="#{entityTypeName}ResetFiltersButton" action="#{entityController.resetList()}" alt="Clear Filters" icon="ui-icon-refresh" styleClass="actionButtonRight">
+            <p:tooltip for="#{entityTypeName}ResetFiltersButton" value="Reset list filters."/>
+        </p:commandButton>
+
+        <p:commandButton id="#{entityTypeName}NoOp" style="visibility:hidden" value="NoOp"/>
+        <p:defaultCommand target="#{entityTypeName}NoOp"/>
+    </div>
+
+</ui:composition>
diff --git a/src/java/DmWebPortal/web/views/experimentType/create.xhtml b/src/java/DmWebPortal/web/views/experimentType/create.xhtml
new file mode 100644
index 0000000000000000000000000000000000000000..ad514f2fa46d578e3feb7e5791819739ff485531
--- /dev/null
+++ b/src/java/DmWebPortal/web/views/experimentType/create.xhtml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<ui:composition xmlns="http://www.w3.org/1999/xhtml"
+                xmlns:h="http://java.sun.com/jsf/html"
+                xmlns:p="http://primefaces.org/ui"
+                xmlns:f="http://java.sun.com/jsf/core"
+                xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
+                xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
+                template="../../templates/contentViewTemplate4x3.xhtml">
+
+    <ui:define name="middleCenter">
+        <div class="pageTitle">
+            <h1>Add Experiment Type</h1>
+        </div>
+
+        <h:form id="addExperimentTypeForm">
+
+            <ui:include src="experimentTypeCreatePanelGrid.xhtml"/>
+
+            <p/>
+            <div class="actionButton">
+                <p:commandButton action="#{experimentTypeController.create()}" value="Save" alt="Save" icon="ui-icon-check" update="@form"/>
+                <p:commandButton action="#{experimentTypeController.prepareList()}" immediate="true" value="Cancel" alt="Cancel" icon="ui-icon-cancel"/>
+            </div>
+        </h:form>
+
+    </ui:define>
+</ui:composition>
+
+
diff --git a/src/java/DmWebPortal/web/views/experimentType/edit.xhtml b/src/java/DmWebPortal/web/views/experimentType/edit.xhtml
new file mode 100644
index 0000000000000000000000000000000000000000..f7a9b637b044356b3fb9579a84387d6f4f9f87b3
--- /dev/null
+++ b/src/java/DmWebPortal/web/views/experimentType/edit.xhtml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<ui:composition xmlns="http://www.w3.org/1999/xhtml"
+                xmlns:h="http://java.sun.com/jsf/html"
+                xmlns:p="http://primefaces.org/ui"
+                xmlns:f="http://java.sun.com/jsf/core"
+                xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
+                xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
+                template="../../templates/contentViewTemplate4x3.xhtml">
+
+    <ui:define name="middleCenter">
+        <h:form id="editExperimentTypeForm">
+
+            <div class="middleCenterLeftContent">
+                <div class="pageTitle">
+                    <h1>Edit Experiment Type</h1>
+                </div>
+
+                <ui:include src="experimentTypeEditPanelGrid.xhtml"/>
+                <p/>
+                <div class="actionButton">
+                    <p:commandButton action="#{experimentTypeController.update()}" value="Save" alt="Save" icon="ui-icon-check" update="@form"/>
+                    <p:commandButton action="#{experimentTypeController.prepareList()}" immediate="true" value="Done" alt="Done" icon="ui-icon-arrowreturnthick-1-w"/>
+                </div>
+            </div>
+
+        </h:form>
+
+    </ui:define>
+</ui:composition>
+
+
diff --git a/src/java/DmWebPortal/web/views/experimentType/experimentTypeCreatePanelGrid.xhtml b/src/java/DmWebPortal/web/views/experimentType/experimentTypeCreatePanelGrid.xhtml
new file mode 100644
index 0000000000000000000000000000000000000000..f51940fedf627b25a423f9ce1f7a5bfe5cda4f37
--- /dev/null
+++ b/src/java/DmWebPortal/web/views/experimentType/experimentTypeCreatePanelGrid.xhtml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<ui:composition xmlns="http://www.w3.org/1999/xhtml"
+                xmlns:h="http://java.sun.com/jsf/html"
+                xmlns:p="http://primefaces.org/ui"
+                xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
+                xmlns:c="http://xmlns.jcp.org/jsp/jstl/core">
+
+    <c:set var="experimentTypeObject" value="#{experimentTypeController.selected}"/>
+
+    <p:panelGrid columns="3" styleClass="createEntityDetails">
+
+        <h:outputLabel for="name" value="Name" styleClass="entityDataEmphasizedLabel"/>
+        <h:inputText id="name" value="#{experimentTypeObject.name}" title="Name" required="true" styleClass="entityDataEmphasizedText"/>
+        <p:message for="name"/> 
+
+        <h:outputLabel for="description" value="Description" styleClass="entityDataLabel"/>
+        <h:inputText id="description" value="#{experimentTypeObject.description}" title="Description" styleClass="entityDataText"/>
+        <p:message for="description"/>        
+
+        <h:outputLabel for="rootDataPath" value="Root Data Path" styleClass="entityDataLabel"/>
+        <h:inputText id="rootDataPath" value="#{experimentTypeObject.rootDataPath}" title="Root Data Path" styleClass="entityDataText"/>
+        <p:message for="rootDataPath"/>
+        
+    </p:panelGrid>
+
+</ui:composition>
+
+
diff --git a/src/java/DmWebPortal/web/views/experimentType/experimentTypeDestroyDialog.xhtml b/src/java/DmWebPortal/web/views/experimentType/experimentTypeDestroyDialog.xhtml
new file mode 100644
index 0000000000000000000000000000000000000000..2a297bcd48a605348685008e33803183899fbb78
--- /dev/null
+++ b/src/java/DmWebPortal/web/views/experimentType/experimentTypeDestroyDialog.xhtml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<ui:composition xmlns="http://www.w3.org/1999/xhtml"
+                xmlns:p="http://primefaces.org/ui"
+                xmlns:ui="http://xmlns.jcp.org/jsf/facelets">
+
+    <p:confirmDialog id="experimentTypeDestroyDialog" message="Destroy experiment type #{experimentTypeController.getCurrentEntityInstanceName()}?"
+                     header="Destroy Experiment Type" severity="alert" widgetVar="experimentTypeDestroyDialogWidget"
+                     styleClass="dialog">
+        <p:commandButton value="Yes" oncomplete="experimentTypeDestroyDialogWidget.hide()" action="#{experimentTypeController.destroy()}"/>
+        <p:commandButton value="No" onclick="experimentTypeDestroyDialogWidget.hide()" type="button" />
+    </p:confirmDialog>  
+</ui:composition>
+
+
diff --git a/src/java/DmWebPortal/web/views/experimentType/experimentTypeEditPanelGrid.xhtml b/src/java/DmWebPortal/web/views/experimentType/experimentTypeEditPanelGrid.xhtml
new file mode 100644
index 0000000000000000000000000000000000000000..451a52760be398cb77f6cb1fbdbcb19eed31f131
--- /dev/null
+++ b/src/java/DmWebPortal/web/views/experimentType/experimentTypeEditPanelGrid.xhtml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<ui:composition xmlns="http://www.w3.org/1999/xhtml"
+                xmlns:h="http://java.sun.com/jsf/html"
+                xmlns:p="http://primefaces.org/ui"
+                xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
+                xmlns:c="http://xmlns.jcp.org/jsp/jstl/core">
+
+    <c:set var="experimentTypeObject" value="#{experimentTypeController.selected}"/>
+    <c:set var="isFieldWriteable" value="#{loginController.loggedIn}"/>
+
+    <p:panelGrid columns="3" styleClass="editEntityDetails"> 
+
+        <h:outputLabel for="name" value="Name" styleClass="entityDataEmphasizedLabel"/>
+        <h:inputText id="name" value="#{experimentTypeObject.name}" title="Name" required="true" styleClass="entityDataEmphasizedText"/>
+        <p:message for="name"/> 
+
+        <h:outputLabel for="id" value="Id" styleClass="entityDataLabel"/>
+        <h:outputText id="id" value="#{experimentTypeObject.id}" title="Id" styleClass="entityDataText"/>
+        <p:message for="id"/>
+
+        <h:outputLabel for="description" value="Description" styleClass="entityDataLabel"/>
+        <h:inputText id="description" value="#{experimentTypeObject.description}" title="Description" styleClass="entityDataText"/>
+        <p:message for="description"/>     
+
+        <h:outputLabel for="rootDataPath" value="Root Data Path" styleClass="entityDataLabel"/>
+        <h:inputText id="rootDataPath" value="#{experimentTypeObject.rootDataPath}" title="Root Data Path" styleClass="entityDataText"/>
+        <p:message for="rootDataPath"/>
+        
+    </p:panelGrid>
+</ui:composition>
+
+
diff --git a/src/java/DmWebPortal/web/views/experimentType/experimentTypeListDataTable.xhtml b/src/java/DmWebPortal/web/views/experimentType/experimentTypeListDataTable.xhtml
new file mode 100644
index 0000000000000000000000000000000000000000..9c253d488899fa7d2bbd923d803725690cf69920
--- /dev/null
+++ b/src/java/DmWebPortal/web/views/experimentType/experimentTypeListDataTable.xhtml
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<ui:composition xmlns="http://www.w3.org/1999/xhtml"
+                xmlns:h="http://java.sun.com/jsf/html"
+                xmlns:p="http://primefaces.org/ui"
+                xmlns:f="http://java.sun.com/jsf/core"
+                xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
+                xmlns:c="http://xmlns.jcp.org/jsp/jstl/core">
+
+    <p:dataTable id="experimentTypeListDataTable"                              
+                 var="experimentTypeObject" 
+                 value="#{experimentTypeController.listDataModel}" 
+                 filteredValue="#{experimentTypeController.filteredObjectList}"
+                 paginator="true" 
+                 paginatorAlwaysVisible="false" 
+                 rows="25"
+                 binding="#{experimentTypeController.listDataTable}"
+                 widgetVar="experimentTypeListWidget" 
+                 emptyMessage="No experiment types found.">
+
+        <p:column sortBy="#{experimentTypeObject.id}" headerText="Id">
+            <h:outputText value="#{experimentTypeObject.id}"/>
+        </p:column>
+
+        <p:column sortBy="#{experimentTypeObject.name}" headerText="Name" 
+                  filterBy="#{experimentTypeObject.name}" filterMatchMode="contains">
+            <h:outputText value="#{experimentTypeObject.name}"/>
+        </p:column>
+
+        <p:column sortBy="#{experimentTypeObject.description}" headerText="Description" 
+                  filterBy="#{experimentTypeObject.description}" filterMatchMode="contains">
+            <h:outputText value="#{experimentTypeObject.description}"/>
+        </p:column>
+
+        <p:column sortBy="#{experimentTypeObject.rootDataPath}" headerText="Root Data Path" 
+                  filterBy="#{experimentTypeObject.rootDataPath}" filterMatchMode="contains">
+            <h:outputText value="#{experimentTypeObject.rootDataPath}"/>
+        </p:column>
+        
+        <c:set var="isEntityWriteable" value="#{loginController.loggedIn}"/>
+        <p:column headerText="Actions">
+            <div class="actionLink">
+                <p:commandLink action="#{experimentTypeController.prepareView(experimentTypeObject)}" styleClass="ui-icon ui-icon-info" title="View"/>
+                <p:commandLink action="#{experimentTypeController.prepareEdit(experimentTypeObject)}" rendered="#{isEntityWriteable}" styleClass="ui-icon ui-icon-pencil" title="Edit"/>
+                <p:commandLink oncomplete="experimentTypeDestroyDialogWidget.show()" rendered="#{loginController.loggedIn}" styleClass="ui-icon ui-icon-trash" title="Delete" update="@form">
+                    <f:setPropertyActionListener value="#{experimentTypeObject}" target="#{experimentTypeController.current}"/>
+                </p:commandLink>
+            </div>
+        </p:column>
+    </p:dataTable>
+
+</ui:composition>
diff --git a/src/java/DmWebPortal/web/views/experimentType/experimentTypeViewPanelGrid.xhtml b/src/java/DmWebPortal/web/views/experimentType/experimentTypeViewPanelGrid.xhtml
new file mode 100644
index 0000000000000000000000000000000000000000..e1d669bf2eeb73ad46b0c933ec9fed2e48272613
--- /dev/null
+++ b/src/java/DmWebPortal/web/views/experimentType/experimentTypeViewPanelGrid.xhtml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<ui:composition xmlns="http://www.w3.org/1999/xhtml"
+                xmlns:h="http://java.sun.com/jsf/html"
+                xmlns:p="http://primefaces.org/ui"
+                xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
+                xmlns:c="http://xmlns.jcp.org/jsp/jstl/core">
+
+    <c:set var="experimentTypeObject" value="#{experimentTypeController.selected}"/>
+
+    <p:panelGrid columns="2" styleClass="viewEntityDetails">
+
+        <h:outputLabel for="name" value="Name" styleClass="entityDataEmphasizedLabel"/>
+        <h:outputText id="name" value="#{experimentTypeObject.name}" title="Name" styleClass="entityDataEmphasizedText"/>
+
+        <h:outputLabel for="id" value="Id" styleClass="entityDataLabel"/>
+        <h:outputText id="id" value="#{experimentTypeObject.id}" title="Id" styleClass="entityDataText"/>
+
+        <h:outputLabel for="description" value="Description" styleClass="entityDataLabel"/>
+        <h:outputText id="description" value="#{experimentTypeObject.description}" title="Description" styleClass="entityDataText"/>
+ 
+        <h:outputLabel for="rootDataPath" value="Root Data Path" styleClass="entityDataLabel"/>
+        <h:outputText id="rootDataPath" value="#{experimentTypeObject.rootDataPath}" title="Root Data Path" styleClass="entityDataText"/>
+        
+    </p:panelGrid>
+
+</ui:composition>
+
+
diff --git a/src/java/DmWebPortal/web/views/experimentType/list.xhtml b/src/java/DmWebPortal/web/views/experimentType/list.xhtml
new file mode 100644
index 0000000000000000000000000000000000000000..11ab5db38a4efb52ec83f5b2c52902479cd058d1
--- /dev/null
+++ b/src/java/DmWebPortal/web/views/experimentType/list.xhtml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<ui:composition xmlns="http://www.w3.org/1999/xhtml"
+                xmlns:h="http://java.sun.com/jsf/html"
+                xmlns:p="http://primefaces.org/ui"
+                xmlns:f="http://java.sun.com/jsf/core"
+                xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
+                xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
+                template="../../templates/contentViewTemplate4x3.xhtml">
+
+    <ui:define name="middleCenter">
+        <div class="pageTitle">
+            <h1>Experiment Types</h1>
+        </div>
+
+        <h:form id="viewExperimentTypeListForm">
+            <c:set var="entityController" value="#{experimentTypeController}"/>
+            <ui:include src="../common/commonListActionButtons.xhtml"/>
+
+            <h:panelGroup>  
+                <ui:include src="experimentTypeListDataTable.xhtml"/>
+            </h:panelGroup>
+
+            <ui:include src="experimentTypeDestroyDialog.xhtml"/>
+
+            <h:outputScript library="js/experimentType" name="list.filter.js" rendered="#{loginController.loggedIn}"/>
+
+        </h:form>
+
+    </ui:define>
+</ui:composition>
diff --git a/src/java/DmWebPortal/web/views/experimentType/view.xhtml b/src/java/DmWebPortal/web/views/experimentType/view.xhtml
new file mode 100644
index 0000000000000000000000000000000000000000..1ab0e8e52c0e48ca1b19786b5bb601032cc9af55
--- /dev/null
+++ b/src/java/DmWebPortal/web/views/experimentType/view.xhtml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<ui:composition xmlns="http://www.w3.org/1999/xhtml"
+                xmlns:h="http://java.sun.com/jsf/html"
+                xmlns:p="http://primefaces.org/ui"
+                xmlns:f="http://java.sun.com/jsf/core"
+                xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
+                xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
+                template="../../templates/contentViewTemplate4x3.xhtml">
+
+    <ui:define name="middleCenter">
+        <h:form id="viewExperimentTypeForm">
+
+            <div class="middleCenterLeftContent">
+                <div class="pageTitle">
+                    <h1>Experiment Type Details</h1>
+                </div>
+
+                <ui:include src="experimentTypeViewPanelGrid.xhtml"/>
+                
+                <p/>
+                    <c:set var="experimentTypeObject" value="#{experimentTypeController.selected}"/>
+                <c:set var="isEntityWriteable" value="#{loginController.loggedIn}"/>
+                <div class="actionButton">
+                    <p:commandButton action="#{experimentTypeController.prepareEdit(experimentTypeObject)}" rendered="#{isEntityWriteable}" value="Edit" alt="Edit" icon="ui-icon-pencil"/>
+                    <p:commandButton onclick="PF('experimentTypeDestroyDialogWidget').show();" rendered="#{loginController.loggedIn}" value="Delete" alt="Delete" icon="ui-icon-trash">
+                        <f:setPropertyActionListener value="#{experimentTypeObject}" target="#{experimentTypeController.current}"/>
+                    </p:commandButton>  
+                    <p:commandButton action="#{experimentTypeController.prepareList()}" value="Done" alt="Done" icon="ui-icon-arrowreturnthick-1-w"/>
+                </div>
+
+                <ui:include src="experimentTypeDestroyDialog.xhtml"/>
+                
+            </div>
+
+        </h:form>
+
+    </ui:define>
+
+</ui:composition>
+
+
diff --git a/src/java/DmWebPortal/web/views/home.xhtml b/src/java/DmWebPortal/web/views/home.xhtml
new file mode 100644
index 0000000000000000000000000000000000000000..320a192381592e22c97e640d21370cc3f28cc7b8
--- /dev/null
+++ b/src/java/DmWebPortal/web/views/home.xhtml
@@ -0,0 +1,41 @@
+<?xml version='1.0' encoding='UTF-8' ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<ui:composition xmlns="http://www.w3.org/1999/xhtml"
+                xmlns:h="http://java.sun.com/jsf/html"
+                xmlns:ui="http://java.sun.com/jsf/facelets"
+                xmlns:p="http://primefaces.org/ui"
+                xmlns:f="http://xmlns.jcp.org/jsf/core">
+
+    <ui:composition template="../templates/contentViewTemplate4x3.xhtml">
+        <ui:define name="middleCenter">
+
+            <div class="homePage">
+
+                <div class="pageTitle">
+                    <h1>Data Management Portal Home</h1>
+                </div>
+
+                <div class="sectionText"> 
+                    The primary goal of the Data Management project is to move data...
+                    <p/>
+                </div>
+
+                <div class="sectionTitle">
+                    <h2>System At A Glance</h2>
+                </div>    
+
+                <h:form id="systemSummaryForm">
+                    <p:growl id="messages" showDetail="true" autoUpdate="true"/>
+                    <p:panelGrid columns="2">
+                        <h:outputLabel for="nRegisteredUsers" value="Number of Registered Users" styleClass="entityDataLabel"/>
+                        <h:outputText id="nRegisteredUsers" value="#{userInfoController.items.getRowCount()}" title="Number of Registered Users" styleClass="entityDataText"/>
+
+                    </p:panelGrid>
+                </h:form>
+            </div>
+
+
+        </ui:define>
+    </ui:composition>
+</ui:composition>
+
diff --git a/src/java/DmWebPortal/web/views/login.xhtml b/src/java/DmWebPortal/web/views/login.xhtml
new file mode 100644
index 0000000000000000000000000000000000000000..04c2b663f7006fdeef8bda92fc06daf533241a4c
--- /dev/null
+++ b/src/java/DmWebPortal/web/views/login.xhtml
@@ -0,0 +1,31 @@
+<?xml version='1.0' encoding='UTF-8' ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:ui="http://java.sun.com/jsf/facelets"
+      xmlns:p="http://primefaces.org/ui"
+      xmlns:h="http://java.sun.com/jsf/html">
+
+    <h:body>
+        <ui:composition template="../templates/loginViewTemplate.xhtml">
+            <ui:define name="bottom">
+                <h:form id="loginForm">
+                    <p:growl id="messages" showDetail="true" autoUpdate="true"/>
+                    <div class="login">
+                        <div>
+                            <p:inputText id="username" value="#{loginController.username}" title="Username"/>
+                            <p:watermark for="username" value="Username"/>
+                        </div>
+                        <div>
+                            <p:password id="password" value="#{loginController.password}" title="Password"/>
+                            <p:watermark for="password" value="Password"/>
+                        </div>
+                        <p/>
+                        <div>
+                            <p:commandButton value="Login" action="#{loginController.login()}" />
+                        </div>
+                    </div>
+                </h:form>
+            </ui:define>
+        </ui:composition>
+    </h:body>
+</html>
diff --git a/src/java/DmWebPortal/web/views/userInfo/create.xhtml b/src/java/DmWebPortal/web/views/userInfo/create.xhtml
new file mode 100644
index 0000000000000000000000000000000000000000..5252c3655a8e8e1674250f5ba41319d07aa72401
--- /dev/null
+++ b/src/java/DmWebPortal/web/views/userInfo/create.xhtml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<ui:composition xmlns="http://www.w3.org/1999/xhtml"
+                xmlns:h="http://java.sun.com/jsf/html"
+                xmlns:p="http://primefaces.org/ui"
+                xmlns:f="http://java.sun.com/jsf/core"
+                xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
+                xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
+                template="../../templates/contentViewTemplate4x3.xhtml">
+
+    <ui:define name="middleCenter">
+        <div class="pageTitle">
+            <h1>Add User</h1>
+        </div>
+
+        <h:form id="addUserInfoForm">
+
+            <ui:include src="userInfoCreatePanelGrid.xhtml"/>
+
+            <p/>
+            <div class="actionButton">
+                <p:commandButton action="#{userInfoController.create()}" value="Save" alt="Save" icon="ui-icon-check" update="@form"/>
+                <p:commandButton action="#{userInfoController.prepareList()}" immediate="true" value="Cancel" alt="Cancel" icon="ui-icon-cancel"/>
+            </div>
+        </h:form>
+
+    </ui:define>
+</ui:composition>
+
+
diff --git a/src/java/DmWebPortal/web/views/userInfo/edit.xhtml b/src/java/DmWebPortal/web/views/userInfo/edit.xhtml
new file mode 100644
index 0000000000000000000000000000000000000000..d600e219dda09a7795d85ce4c09cf0826d8e91f0
--- /dev/null
+++ b/src/java/DmWebPortal/web/views/userInfo/edit.xhtml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<ui:composition xmlns="http://www.w3.org/1999/xhtml"
+                xmlns:h="http://java.sun.com/jsf/html"
+                xmlns:p="http://primefaces.org/ui"
+                xmlns:f="http://java.sun.com/jsf/core"
+                xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
+                xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
+                template="../../templates/contentViewTemplate4x3.xhtml">
+
+    <ui:define name="middleCenter">
+        <h:form id="editUserInfoForm">
+
+            <div class="middleCenterLeftContent">
+                <div class="pageTitle">
+                    <h1>Edit User</h1>
+                </div>
+
+                <ui:include src="userInfoEditPanelGrid.xhtml"/>
+                <p/>
+                <div class="actionButton">
+                    <p:commandButton action="#{userInfoController.update()}" value="Save" alt="Save" icon="ui-icon-check" update="@form"/>
+                    <p:commandButton action="#{userInfoController.prepareList()}" immediate="true" value="Done" alt="Done" icon="ui-icon-arrowreturnthick-1-w"/>
+                </div>
+            </div>
+            <div class="middleCenterRightContent">
+<!--                <p:accordionPanel multiple="true">
+                    <p:tab title="Settings">
+
+                        <ui:include src="../userSetting/edit.xhtml"/>
+
+                    </p:tab>
+                </p:accordionPanel>-->
+            </div>
+        </h:form>
+
+    </ui:define>
+</ui:composition>
+
+
diff --git a/src/java/DmWebPortal/web/views/userInfo/list.xhtml b/src/java/DmWebPortal/web/views/userInfo/list.xhtml
new file mode 100644
index 0000000000000000000000000000000000000000..6c44f9b1f51b28d2daf3cf73dd830d117353efc9
--- /dev/null
+++ b/src/java/DmWebPortal/web/views/userInfo/list.xhtml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<ui:composition xmlns="http://www.w3.org/1999/xhtml"
+                xmlns:h="http://java.sun.com/jsf/html"
+                xmlns:p="http://primefaces.org/ui"
+                xmlns:f="http://java.sun.com/jsf/core"
+                xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
+                xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
+                template="../../templates/contentViewTemplate4x3.xhtml">
+
+    <ui:define name="middleCenter">
+        <div class="pageTitle">
+            <h1>Registered Users</h1>
+        </div>
+
+        <h:form id="viewUserInfoListForm">
+            <c:set var="entityController" value="#{userInfoController}"/>
+            <ui:include src="../common/commonListActionButtons.xhtml"/>
+
+            <h:panelGroup>  
+                <ui:include src="userInfoListDataTable.xhtml"/>
+            </h:panelGroup>
+
+            <ui:include src="userInfoDestroyDialog.xhtml"/>
+
+            <h:outputScript library="js/userInfo" name="list.filter.js" rendered="#{loginController.loggedIn}"/>
+
+        </h:form>
+
+    </ui:define>
+</ui:composition>
diff --git a/src/java/DmWebPortal/web/views/userInfo/userInfoCreatePanelGrid.xhtml b/src/java/DmWebPortal/web/views/userInfo/userInfoCreatePanelGrid.xhtml
new file mode 100644
index 0000000000000000000000000000000000000000..080fa58a67f68c40edb21d491d5c8e6daefb941c
--- /dev/null
+++ b/src/java/DmWebPortal/web/views/userInfo/userInfoCreatePanelGrid.xhtml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<ui:composition xmlns="http://www.w3.org/1999/xhtml"
+                xmlns:h="http://java.sun.com/jsf/html"
+                xmlns:p="http://primefaces.org/ui"
+                xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
+                xmlns:c="http://xmlns.jcp.org/jsp/jstl/core">
+
+    <c:set var="userInfoObject" value="#{userInfoController.selected}"/>
+
+    <p:panelGrid columns="3" styleClass="createEntityDetails">
+
+        <h:outputLabel for="username" value="Username" styleClass="entityDataEmphasizedLabel"/>
+        <h:inputText id="username" value="#{userInfoObject.username}" title="Username" required="true" styleClass="entityDataEmphasizedText"/>
+        <p:message for="username"/> 
+
+        <h:outputLabel for="lastName" value="Last Name" styleClass="entityDataLabel"/>
+        <h:inputText id="lastName" value="#{userInfoObject.lastName}" title="Last Name" required="true" styleClass="entityDataText"/>
+        <p:message for="lastName"/>
+
+        <h:outputLabel for="firstName" value="First Name" styleClass="entityDataLabel"/>
+        <h:inputText id="firstName" value="#{userInfoObject.firstName}" title="First Name" required="true" styleClass="entityDataText"/>
+        <p:message for="firstName"/> 
+
+        <h:outputLabel for="middleName" value="Middle Name" styleClass="entityDataLabel"/>
+        <h:inputText id="middleName" value="#{userInfoObject.middleName}" title="Middle Name" styleClass="entityDataText"/>
+        <p:message for="middleName"/>
+
+        <h:outputLabel for="email" value="Email" styleClass="entityDataLabel"/>
+        <h:inputText id="email" value="#{userInfoObject.email}" title="Email" styleClass="entityDataText"/>
+        <p:message for="email"/>
+
+        <h:outputLabel for="password" value="Password" styleClass="entityDataLabel"/>
+        <p:password id="password" value="#{userInfoObject.password}" title="Password" feedback="true" styleClass="entityDataText"/>
+        <p:message for="password"/>
+
+        <h:outputLabel for="description" value="Description" styleClass="entityDataLabel"/>
+        <h:inputText id="description" value="#{userInfoObject.description}" title="Description" styleClass="entityDataText"/>
+        <p:message for="description"/>        
+        
+    </p:panelGrid>
+
+</ui:composition>
+
+
diff --git a/src/java/DmWebPortal/web/views/userInfo/userInfoDestroyDialog.xhtml b/src/java/DmWebPortal/web/views/userInfo/userInfoDestroyDialog.xhtml
new file mode 100644
index 0000000000000000000000000000000000000000..4ca615378dc2df75ebd25a51a4633fbdbae4f31a
--- /dev/null
+++ b/src/java/DmWebPortal/web/views/userInfo/userInfoDestroyDialog.xhtml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<ui:composition xmlns="http://www.w3.org/1999/xhtml"
+                xmlns:p="http://primefaces.org/ui"
+                xmlns:ui="http://xmlns.jcp.org/jsf/facelets">
+
+    <p:confirmDialog id="userInfoDestroyDialog" message="Destroy user #{userInfoController.getCurrentEntityInstanceName()}?"
+                     header="Destroy User" severity="alert" widgetVar="userInfoDestroyDialogWidget"
+                     styleClass="dialog">
+        <p:commandButton value="Yes" oncomplete="userInfoDestroyDialogWidget.hide()" action="#{userInfoController.destroy()}"/>
+        <p:commandButton value="No" onclick="userInfoDestroyDialogWidget.hide()" type="button" />
+    </p:confirmDialog>  
+</ui:composition>
+
+
diff --git a/src/java/DmWebPortal/web/views/userInfo/userInfoEditPanelGrid.xhtml b/src/java/DmWebPortal/web/views/userInfo/userInfoEditPanelGrid.xhtml
new file mode 100644
index 0000000000000000000000000000000000000000..ed3f7724505dcb4b62f870574aa6d88508317cb0
--- /dev/null
+++ b/src/java/DmWebPortal/web/views/userInfo/userInfoEditPanelGrid.xhtml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<ui:composition xmlns="http://www.w3.org/1999/xhtml"
+                xmlns:h="http://java.sun.com/jsf/html"
+                xmlns:p="http://primefaces.org/ui"
+                xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
+                xmlns:c="http://xmlns.jcp.org/jsp/jstl/core">
+
+    <c:set var="userInfoObject" value="#{userInfoController.selected}"/>
+    <c:set var="isFieldWriteable" value="#{loginController.loggedIn}"/>
+
+    <p:panelGrid columns="3" styleClass="editEntityDetails"> 
+
+        <h:outputLabel for="username" value="Username" styleClass="entityDataEmphasizedLabel"/>
+        <h:inputText id="username" value="#{userInfoObject.username}" rendered="#{isFieldWriteable}" title="Username" required="true" styleClass="entityDataEmphasizedText"/>
+        <h:outputText id="usernameOutput" value="#{userInfoObject.username}" rendered="#{!isFieldWriteable}" title="Username" styleClass="entityDataEmphasizedText"/>
+        <p:message for="username"/> 
+
+        <h:outputLabel for="id" value="Id" styleClass="entityDataLabel"/>
+        <h:outputText id="id" value="#{userInfoObject.id}" title="Id" styleClass="entityDataText"/>
+        <p:message for="id"/>
+
+        <h:outputLabel for="lastName" value="Last Name" styleClass="entityDataLabel"/>
+        <h:inputText id="lastName" value="#{userInfoObject.lastName}" rendered="#{isFieldWriteable}" title="Last Name" required="true" styleClass="entityDataText"/>
+        <h:outputText id="lastNameOutput" value="#{userInfoObject.lastName}" rendered="#{!isFieldWriteable}" title="Last Name" styleClass="entityDataText"/>
+        <p:message for="lastName"/>
+
+        <h:outputLabel for="firstName" value="First Name" styleClass="entityDataLabel"/>
+        <h:inputText id="firstName" value="#{userInfoObject.firstName}" rendered="#{isFieldWriteable}" title="First Name" required="true" styleClass="entityDataText"/>
+        <h:outputText id="firstNameOutput" value="#{userInfoObject.firstName}" rendered="#{!isFieldWriteable}" title="First Name" styleClass="entityDataText"/>
+        <p:message for="firstName"/> 
+
+        <h:outputLabel for="middleName" value="Middle Name" styleClass="entityDataLabel"/>
+        <h:inputText id="middleName" value="#{userInfoObject.middleName}" title="Middle Name" rendered="#{isFieldWriteable}" styleClass="entityDataText"/>
+        <h:outputText id="middleNameOutput" value="#{userInfoObject.middleName}" title="Middle Name" rendered="#{!isFieldWriteable}" styleClass="entityDataText"/>
+        <p:message for="middleName"/>
+
+        <h:outputLabel for="email" value="Email" styleClass="entityDataLabel"/>
+        <h:inputText id="email" value="#{userInfoObject.email}" title="Email" styleClass="entityDataText"/>
+        <p:message for="email"/>
+
+        <h:outputLabel for="password" value="Password" styleClass="entityDataLabel"/>
+        <p:password id="password" value="#{userInfoController.passwordEntry}" title="Password" feedback="true" styleClass="entityDataText"/>
+        <p:message for="password"/>
+
+        <h:outputLabel for="description" value="Description" styleClass="entityDataLabel"/>
+        <h:inputText id="description" value="#{userInfoObject.description}" title="Description" styleClass="entityDataText"/>
+        <p:message for="description"/>     
+        
+    </p:panelGrid>
+</ui:composition>
+
+
diff --git a/src/java/DmWebPortal/web/views/userInfo/userInfoListDataTable.xhtml b/src/java/DmWebPortal/web/views/userInfo/userInfoListDataTable.xhtml
new file mode 100644
index 0000000000000000000000000000000000000000..c6b5b928c9bddadc78a22e23f82e32f5dc4568c5
--- /dev/null
+++ b/src/java/DmWebPortal/web/views/userInfo/userInfoListDataTable.xhtml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<ui:composition xmlns="http://www.w3.org/1999/xhtml"
+                xmlns:h="http://java.sun.com/jsf/html"
+                xmlns:p="http://primefaces.org/ui"
+                xmlns:f="http://java.sun.com/jsf/core"
+                xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
+                xmlns:c="http://xmlns.jcp.org/jsp/jstl/core">
+
+    <p:dataTable id="userInfoListDataTable"                              
+                 var="userInfoObject" 
+                 value="#{userInfoController.listDataModel}" 
+                 filteredValue="#{userInfoController.filteredObjectList}"
+                 paginator="true" 
+                 paginatorAlwaysVisible="false" 
+                 rows="25"
+                 binding="#{userInfoController.listDataTable}"
+                 widgetVar="userInfoListWidget" 
+                 emptyMessage="No users found.">
+
+        <p:column sortBy="#{userInfoObject.id}" headerText="Id">
+            <h:outputText value="#{userInfoObject.id}"/>
+        </p:column>
+
+        <p:column sortBy="#{userInfoObject.username}" headerText="Username" 
+                  filterBy="#{userInfoObject.username}" filterMatchMode="contains">
+            <h:outputText value="#{userInfoObject.username}"/>
+        </p:column>
+
+        <p:column sortBy="#{userInfoObject.lastName}" headerText="Last Name" 
+                  filterBy="#{userInfoObject.lastName}" filterMatchMode="contains">
+            <h:outputText value="#{userInfoObject.lastName}"/>
+        </p:column>                  
+
+        <p:column sortBy="#{userInfoObject.firstName}" headerText="First Name" 
+                  filterBy="#{userInfoObject.firstName}" filterMatchMode="contains">
+            <h:outputText value="#{userInfoObject.firstName}"/>
+        </p:column> 
+
+        <p:column sortBy="#{userInfoObject.middleName}" rendered="false" headerText="Middle Name" 
+                  filterBy="#{userInfoObject.middleName}" filterMatchMode="contains">
+            <h:outputText value="#{userInfoObject.middleName}"/>
+        </p:column> 
+
+        <p:column sortBy="#{userInfoObject.email}" headerText="Email" 
+                  filterBy="#{userInfoObject.email}" filterMatchMode="contains">
+            <h:outputText value="#{userInfoObject.email}"/>
+        </p:column>
+
+        <p:column sortBy="#{userInfoObject.description}" headerText="Description" 
+                  filterBy="#{userInfoObject.description}" filterMatchMode="contains">
+            <h:outputText value="#{userInfoObject.description}"/>
+        </p:column>
+        
+        <c:set var="isEntityWriteable" value="#{loginController.isUserWriteable(userInfoObject)}"/>
+        <p:column headerText="Actions">
+            <div class="actionLink">
+                <p:commandLink action="#{userInfoController.prepareView(userInfoObject)}" styleClass="ui-icon ui-icon-info" title="View"/>
+                <p:commandLink action="#{userInfoController.prepareEdit(userInfoObject)}" rendered="#{isEntityWriteable}" styleClass="ui-icon ui-icon-pencil" title="Edit"/>
+                <p:commandLink oncomplete="userInfoDestroyDialogWidget.show()" rendered="#{loginController.loggedIn}" styleClass="ui-icon ui-icon-trash" title="Delete" update="@form">
+                    <f:setPropertyActionListener value="#{userInfoObject}" target="#{userInfoController.current}"/>
+                </p:commandLink>
+            </div>
+        </p:column>
+    </p:dataTable>
+
+</ui:composition>
diff --git a/src/java/DmWebPortal/web/views/userInfo/userInfoViewPanelGrid.xhtml b/src/java/DmWebPortal/web/views/userInfo/userInfoViewPanelGrid.xhtml
new file mode 100644
index 0000000000000000000000000000000000000000..46dda1700ed4c897eb6d1293b5b5772c26af5edf
--- /dev/null
+++ b/src/java/DmWebPortal/web/views/userInfo/userInfoViewPanelGrid.xhtml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<ui:composition xmlns="http://www.w3.org/1999/xhtml"
+                xmlns:h="http://java.sun.com/jsf/html"
+                xmlns:p="http://primefaces.org/ui"
+                xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
+                xmlns:c="http://xmlns.jcp.org/jsp/jstl/core">
+
+    <c:set var="userInfoObject" value="#{userInfoController.selected}"/>
+
+    <p:panelGrid columns="2" styleClass="viewEntityDetails">
+
+        <h:outputLabel for="username" value="Username" styleClass="entityDataEmphasizedLabel"/>
+        <h:outputText id="username" value="#{userInfoObject.username}" title="Username" styleClass="entityDataEmphasizedText"/>
+
+        <h:outputLabel for="id" value="Id" styleClass="entityDataLabel"/>
+        <h:outputText id="id" value="#{userInfoObject.id}" title="Id" styleClass="entityDataText"/>
+
+        <h:outputLabel for="lastName" value="Last Name" styleClass="entityDataLabel"/>
+        <h:outputText id="lastName" value="#{userInfoObject.lastName}" title="Last Name" styleClass="entityDataText"/>
+
+        <h:outputLabel for="firstName" value="First Name" styleClass="entityDataLabel"/>
+        <h:outputText id="firstName" value="#{userInfoObject.firstName}" title="First Name" styleClass="entityDataText"/>
+
+        <h:outputLabel for="middleName" value="Middle Name" styleClass="entityDataLabel"/>
+        <h:outputText id="middleName" value="#{userInfoObject.middleName}" title="Middle Name" styleClass="entityDataText"/>
+
+        <h:outputLabel for="email" value="Email" styleClass="entityDataLabel"/>
+        <h:outputText id="email" value="#{userInfoObject.email}" title="Email" styleClass="entityDataText"/>
+
+        <h:outputLabel for="description" value="Description" styleClass="entityDataLabel"/>
+        <h:outputText id="description" value="#{userInfoObject.description}" title="Description" styleClass="entityDataText"/>
+        
+    </p:panelGrid>
+
+</ui:composition>
+
+
diff --git a/src/java/DmWebPortal/web/views/userInfo/view.xhtml b/src/java/DmWebPortal/web/views/userInfo/view.xhtml
new file mode 100644
index 0000000000000000000000000000000000000000..a3b761984562590add3e647ab2f16a68c3bd3905
--- /dev/null
+++ b/src/java/DmWebPortal/web/views/userInfo/view.xhtml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<ui:composition xmlns="http://www.w3.org/1999/xhtml"
+                xmlns:h="http://java.sun.com/jsf/html"
+                xmlns:p="http://primefaces.org/ui"
+                xmlns:f="http://java.sun.com/jsf/core"
+                xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
+                xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
+                template="../../templates/contentViewTemplate4x3.xhtml">
+
+    <ui:define name="middleCenter">
+        <h:form id="viewUserInfoForm">
+
+            <div class="middleCenterLeftContent">
+                <div class="pageTitle">
+                    <h1>User Details</h1>
+                </div>
+
+                <ui:include src="userInfoViewPanelGrid.xhtml"/>
+                
+                <p/>
+                    <c:set var="userInfoObject" value="#{userInfoController.selected}"/>
+                <c:set var="isEntityWriteable" value="#{loginController.isUserWriteable(userInfoObject)}"/>
+                <div class="actionButton">
+                    <p:commandButton action="#{userInfoController.prepareEdit(userInfoObject)}" rendered="#{isEntityWriteable}" value="Edit" alt="Edit" icon="ui-icon-pencil"/>
+                    <p:commandButton onclick="PF('userInfoDestroyDialogWidget').show();" rendered="#{loginController.loggedIn}" value="Delete" alt="Delete" icon="ui-icon-trash">
+                        <f:setPropertyActionListener value="#{userInfoObject}" target="#{userInfoController.current}"/>
+                    </p:commandButton>  
+                    <p:commandButton action="#{userInfoController.prepareList()}" value="Done" alt="Done" icon="ui-icon-arrowreturnthick-1-w"/>
+                </div>
+
+                <ui:include src="userInfoDestroyDialog.xhtml"/>
+                
+            </div>
+
+        </h:form>
+
+    </ui:define>
+
+</ui:composition>
+
+
diff --git a/src/java/Makefile b/src/java/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..6d9c7bda8578741337bb6f0d434b6f0d9c95e0c5
--- /dev/null
+++ b/src/java/Makefile
@@ -0,0 +1,6 @@
+
+TOP = ../..
+SUBDIRS = DmWebPortal
+
+include $(TOP)/tools/make/RULES_DM
+