Merge branch 'maint-rel-1.6' of https://github.com/vivo-project/Vitro into maint-rel-1.6
Conflicts: webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/FileGraphSetup.java
This commit is contained in:
commit
754c8004ae
64 changed files with 1174 additions and 925 deletions
126
doc/install.html
126
doc/install.html
|
@ -67,7 +67,7 @@
|
||||||
<h4>Vitro inside Tomcat</h4>
|
<h4>Vitro inside Tomcat</h4>
|
||||||
<p>
|
<p>
|
||||||
When you run the build script to compile and deploy Vitro
|
When you run the build script to compile and deploy Vitro
|
||||||
(see <a href="#deploy">installation step VI</a>, below),
|
(see <a href="#deploy">installation step V</a>, below),
|
||||||
the files will be deployed to a
|
the files will be deployed to a
|
||||||
directory inside Tomcat. This is the actual executing code for Vitro,
|
directory inside Tomcat. This is the actual executing code for Vitro,
|
||||||
but you won’t need to look at it or change it. If you need to change
|
but you won’t need to look at it or change it. If you need to change
|
||||||
|
@ -86,7 +86,7 @@
|
||||||
build.properties file (see <a href="#build_properties">installation step IV</a>,
|
build.properties file (see <a href="#build_properties">installation step IV</a>,
|
||||||
below). You must create this directory before starting Vitro,
|
below). You must create this directory before starting Vitro,
|
||||||
you must create the <code>runtime.properties</code> file in this directory
|
you must create the <code>runtime.properties</code> file in this directory
|
||||||
(see <a href="#runtime_properties">Step V</a>, below), and you
|
(see <a href="#runtime_properties">Step VI</a>, below), and you
|
||||||
must ensure that Tomcat has permission to read and write to this
|
must ensure that Tomcat has permission to read and write to this
|
||||||
directory when it runs.
|
directory when it runs.
|
||||||
</p>
|
</p>
|
||||||
|
@ -186,10 +186,10 @@
|
||||||
<a href="#build_properties">Specify build properties</a>
|
<a href="#build_properties">Specify build properties</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="#runtime_properties">Specify runtime properties</a>
|
<a href="#deploy">Compile and deploy</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="#deploy">Compile and deploy</a>
|
<a href="#runtime_properties">Specify runtime properties</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="#tomcat_settings">Configure Tomcat</a>
|
<a href="#tomcat_settings">Configure Tomcat</a>
|
||||||
|
@ -226,20 +226,19 @@
|
||||||
</p>
|
</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>
|
<li>
|
||||||
Java (SE) 1.6 or higher, <a href="http://java.sun.com">http://java.sun.com</a>
|
Java (SE) 1.7.x <a href="http://java.sun.com">http://java.sun.com</a>
|
||||||
(Not OpenJDK)
|
<ul>
|
||||||
|
<li>VIVO has not been tested with OpenJDK</li>
|
||||||
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
Apache Tomcat 6.x or higher, <a href="http://tomcat.apache.org">http://tomcat.apache.org</a>
|
Apache Tomcat 6.x or 7.x <a href="http://tomcat.apache.org">http://tomcat.apache.org</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
Apache Ant 1.8 or higher, <a href="http://ant.apache.org">http://ant.apache.org</a>
|
Apache Ant 1.8 or higher, <a href="http://ant.apache.org">http://ant.apache.org</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
MySQL 5.1 or higher*, <a href="http://www.mysql.com">http://www.mysql.com</a>
|
MySQL 5.1 or higher, <a href="http://www.mysql.com">http://www.mysql.com</a>
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
Apache Subversion 1.6.x or higher*, <a href="http://subversion.apache.org/">http://subversion.apache.org/</a>
|
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<p>
|
<p>
|
||||||
|
@ -320,8 +319,8 @@
|
||||||
<p>
|
<p>
|
||||||
These properties are used in compilation and deployment.
|
These properties are used in compilation and deployment.
|
||||||
They will be incorporated into Vitro when it is compiled in
|
They will be incorporated into Vitro when it is compiled in
|
||||||
<a href="#deploy">Step VI</a>. If you want to change these properties at
|
<a href="#deploy">Step V</a>. If you want to change these properties at
|
||||||
a later date, you will need to stop Tomcat, repeat <a href="#deploy">Step VI</a>,
|
a later date, you will need to stop Tomcat, repeat <a href="#deploy">Step V</a>,
|
||||||
and restart Tomcat.
|
and restart Tomcat.
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
|
@ -394,22 +393,64 @@
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<h3 id="runtime_properties">V. Specify runtime properties </h3>
|
<h3 id="deploy">V. Compile and deploy</h3>
|
||||||
<p>
|
<p>
|
||||||
In <a href="#build_properties">Step IV</a>, you defined the location of the Vitro home directory,
|
In <a href="#build_properties">Step IV</a>, you defined the location of the VIVO home directory,
|
||||||
by specifying <code>vitro.home</code> in the <code>build.properties</code> file.
|
by specifying <code>vitro.home</code> in the <code>build.properties</code> file.
|
||||||
Create that directory now.
|
Create that directory now.
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
In the <code>webapp/config</code> subdirectory of the Vitro distribution, you will find a file called
|
At the command line, change to the <code>webapp</code> directory inside the Vitro distribution
|
||||||
<code>example.runtime.properties</code>. Copy this to the Vitro home directory you have created,
|
directory. Then type:
|
||||||
renaming the copy to <code>runtime.properties</code>.
|
</p>
|
||||||
Edit the file to suit your installation, as described in the following table.
|
<pre> ant all<br> </pre>
|
||||||
|
<p>
|
||||||
|
to build Vitro and deploy to Tomcat's webapps directory.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
The build script may run for as much as five minutes,
|
||||||
|
and creates more than 100 lines of output.
|
||||||
|
The process comprises several steps:
|
||||||
|
<ul>
|
||||||
|
<li>collecting the source files from the distribution directory,</li>
|
||||||
|
<li>compiling the Java source code,</li>
|
||||||
|
<li>compiling and running unit tests,</li>
|
||||||
|
<li>preparing the Solr search engine,</li>
|
||||||
|
<li>deploying Vitro and Solr to Tomcat.</li>
|
||||||
|
</ul>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
The output of the build may include a variety of warning messages.
|
||||||
|
The Java compiler may warn of code that is outdated.
|
||||||
|
Unit tests may produce warning messages,
|
||||||
|
and some tests may be ignored if they do not produce consistent results.
|
||||||
|
</p>
|
||||||
|
<table align="center"><tr><td>
|
||||||
|
BUILD SUCCESSFUL<br>Total time: 1 minute 49 seconds
|
||||||
|
</td></tr></table>
|
||||||
|
<p>
|
||||||
|
If the output ends with a success message, the build was successful.
|
||||||
|
Proceed to the next step.
|
||||||
|
</p>
|
||||||
|
<table align="center"><tr><td>
|
||||||
|
BUILD FAILED<br>Total time: 35 seconds
|
||||||
|
</td></tr></table>
|
||||||
|
<p>
|
||||||
|
If the output ends with a failure message, the build has failed.
|
||||||
|
Find the cause of the failure, fix the problem, and run the script again.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h3 id="runtime_properties">VI. Specify runtime properties </h3>
|
||||||
|
<p>
|
||||||
|
The build process in <a href="deploy">Step V</a> created a file called <code>example.runtime.properties</code>
|
||||||
|
in your Vitro home directory (<code>vitro.home</code> in the <code>build.properties</code> file).
|
||||||
|
Rename this file to <code>runtime.properties</code>, and
|
||||||
|
edit the file to suit your installation, as described in the following table.
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
These properties are loaded when Vitro starts up. If you want to change these
|
These properties are loaded when Vitro starts up. If you want to change these
|
||||||
properties at a later date, you will need to restart Tomcat for them to take
|
properties at a later date, you will need to restart Tomcat for them to take
|
||||||
effect. You will not need to repeat <a href="#deploy">Step VI</a>.
|
effect. You will not need to repeat <a href="#deploy">Step V</a>.
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<em>Windows:</em>
|
<em>Windows:</em>
|
||||||
|
@ -800,47 +841,6 @@
|
||||||
|
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<h3 id="deploy">VI. Compile and deploy</h3>
|
|
||||||
<p>
|
|
||||||
At the command line, change to the <code>webapp</code> directory inside the Vitro distribution
|
|
||||||
directory. Then type:
|
|
||||||
</p>
|
|
||||||
<pre> ant all<br> </pre>
|
|
||||||
<p>
|
|
||||||
to build Vitro and deploy to Tomcat's webapps directory.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
The build script may run for as much as five minutes,
|
|
||||||
and creates more than 100 lines of output.
|
|
||||||
The process comprises several steps:
|
|
||||||
<ul>
|
|
||||||
<li>collecting the source files from the distribution directory,</li>
|
|
||||||
<li>compiling the Java source code,</li>
|
|
||||||
<li>compiling and running unit tests,</li>
|
|
||||||
<li>preparing the Solr search engine,</li>
|
|
||||||
<li>deploying Vitro and Solr to Tomcat.</li>
|
|
||||||
</ul>
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
The output of the build may include a variety of warning messages.
|
|
||||||
The Java compiler may warn of code that is outdated.
|
|
||||||
Unit tests may produce warning messages,
|
|
||||||
and some tests may be ignored if they do not produce consistent results.
|
|
||||||
</p>
|
|
||||||
<table align="center"><tr><td>
|
|
||||||
BUILD SUCCESSFUL<br>Total time: 1 minute 49 seconds
|
|
||||||
</td></tr></table>
|
|
||||||
<p>
|
|
||||||
If the output ends with a success message, the build was successful.
|
|
||||||
Proceed to the next step.
|
|
||||||
</p>
|
|
||||||
<table align="center"><tr><td>
|
|
||||||
BUILD FAILED<br>Total time: 35 seconds
|
|
||||||
</td></tr></table>
|
|
||||||
<p>
|
|
||||||
If the output ends with a failure message, the build has failed.
|
|
||||||
Find the cause of the failure, fix the problem, and run the script again.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<h3 id="tomcat_settings">VII. Configure Tomcat</h3>
|
<h3 id="tomcat_settings">VII. Configure Tomcat</h3>
|
||||||
<h4>Set JVM parameters</h4>
|
<h4>Set JVM parameters</h4>
|
||||||
|
@ -921,8 +921,8 @@
|
||||||
problem is detected, the normal Vitro pages will redirect
|
problem is detected, the normal Vitro pages will redirect
|
||||||
to a startup status page describing the problem. You
|
to a startup status page describing the problem. You
|
||||||
can stop tomcat, attempt to fix the problem and
|
can stop tomcat, attempt to fix the problem and
|
||||||
proceeded from <a href="#deploy">Step VI</a>. The
|
proceed from <a href="#deploy">Step V</a>. If the problem is not serious, the
|
||||||
startup status page may offer a continue link which
|
startup status page may offer a <code>continue</code> link which
|
||||||
will allow you to use VIVO in spite of the problems.
|
will allow you to use VIVO in spite of the problems.
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
|
|
|
@ -102,6 +102,24 @@
|
||||||
<target name="deployProperties" depends="buildProperties">
|
<target name="deployProperties" depends="buildProperties">
|
||||||
<fail unless="vitro.home" message="${build.properties.file} must contain a value for vitro.home" />
|
<fail unless="vitro.home" message="${build.properties.file} must contain a value for vitro.home" />
|
||||||
<fail unless="tomcat.home" message="${build.properties.file} must contain a value for tomcat.home" />
|
<fail unless="tomcat.home" message="${build.properties.file} must contain a value for tomcat.home" />
|
||||||
|
<fail>
|
||||||
|
<condition>
|
||||||
|
<not>
|
||||||
|
<available file="${tomcat.home}" />
|
||||||
|
</not>
|
||||||
|
</condition>
|
||||||
|
Tomcat home directory '${tomcat.home}' does not exist.
|
||||||
|
Check the value of 'tomcat.home' in your build.properties file.
|
||||||
|
</fail>
|
||||||
|
<fail>
|
||||||
|
<condition>
|
||||||
|
<not>
|
||||||
|
<available file="${tomcat.home}/webapps" />
|
||||||
|
</not>
|
||||||
|
</condition>
|
||||||
|
'${tomcat.home}' does not refer to a valid Tomcat instance: it has no 'webapps' sub-directory.
|
||||||
|
Check the value of 'tomcat.home' in your build.properties file."
|
||||||
|
</fail>
|
||||||
|
|
||||||
<property name="solr.home.dir" location="${vitro.home}/solr" />
|
<property name="solr.home.dir" location="${vitro.home}/solr" />
|
||||||
|
|
||||||
|
|
|
@ -126,10 +126,6 @@ submit_add_new_account = Añadir nueva cuenta
|
||||||
|
|
||||||
account_created = Su {0} cuenta ha sido creada.
|
account_created = Su {0} cuenta ha sido creada.
|
||||||
account_created_subject = Su {0} cuenta ha sido creada.
|
account_created_subject = Su {0} cuenta ha sido creada.
|
||||||
account_created_email_html = @@file files/accountCreatedEmail.html
|
|
||||||
account_created_email_text = @@file files/accountCreatedEmail.txt
|
|
||||||
account_created_external_email_html = @@file files/accountCreatedExternalOnlyEmail.html
|
|
||||||
account_created_external_email_text = @@file files/accountCreatedExternalOnlyEmail.txt
|
|
||||||
|
|
||||||
confirm_delete_account_singular = ¿Está seguro de que desea eliminar esta cuenta?
|
confirm_delete_account_singular = ¿Está seguro de que desea eliminar esta cuenta?
|
||||||
confirm_delete_account_plural = ¿Está seguro de que desea eliminar estas cuentas?
|
confirm_delete_account_plural = ¿Está seguro de que desea eliminar estas cuentas?
|
||||||
|
@ -148,21 +144,11 @@ select_associated_profile = Seleccione el perfil asociado
|
||||||
create_associated_profile = Cree el perfil asociado
|
create_associated_profile = Cree el perfil asociado
|
||||||
|
|
||||||
email_changed_subject = Su {0} cuenta de correo electrónico ha cambiado.
|
email_changed_subject = Su {0} cuenta de correo electrónico ha cambiado.
|
||||||
email_changed_html = @@file files/accountEmailChanged.html
|
|
||||||
email_changed_text = @@file files/accountEmailChanged.txt
|
|
||||||
|
|
||||||
create_your_password = Crea tu Contraseña
|
create_your_password = Crea tu Contraseña
|
||||||
password_created_subject = Su {0} contraseña ha sido creado con éxito.
|
password_created_subject = Su {0} contraseña ha sido creado con éxito.
|
||||||
password_created_email_html = @@file files/passwordCreatedEmail.html
|
|
||||||
password_created_email_text = @@file files/passwordCreatedEmail.txt
|
|
||||||
|
|
||||||
password_reset_pending_subject = {0} restablecer solicitud de contraseña
|
password_reset_pending_subject = {0} restablecer solicitud de contraseña
|
||||||
password_reset_pending_email_html = @@file files/passwordResetPending.html
|
|
||||||
password_reset_pending_email_text = @@file files/passwordResetPending.txt
|
|
||||||
|
|
||||||
password_reset_complete_subject = Su {0} ha cambiado la contraseña.
|
password_reset_complete_subject = Su {0} ha cambiado la contraseña.
|
||||||
password_reset_complete_email_html = @@file files/passwordResetComplete.html
|
|
||||||
password_reset_complete_email_text = @@file files/passwordResetComplete.txt
|
|
||||||
|
|
||||||
reset_your_password = Renovar su contraseña
|
reset_your_password = Renovar su contraseña
|
||||||
first_time_login = Log Por primera vez en
|
first_time_login = Log Por primera vez en
|
||||||
|
@ -181,8 +167,6 @@ password_saved_please_login = Su contraseña ha sido guardada. Por favor, ingres
|
||||||
|
|
||||||
please_provide_contact_information = Por favor proporcione su información de contacto para terminar de crear la cuenta.
|
please_provide_contact_information = Por favor proporcione su información de contacto para terminar de crear la cuenta.
|
||||||
first_time_login_note = Nota: Un correo electrónico será enviado a la dirección indicada anteriormente notificar que una cuenta ha sido creada.
|
first_time_login_note = Nota: Un correo electrónico será enviado a la dirección indicada anteriormente notificar que una cuenta ha sido creada.
|
||||||
first_time_external_email_html = @@file files/accountFirstTimeExternal.html
|
|
||||||
first_time_external_email_text = @@file files/accountFirstTimeExternal.txt
|
|
||||||
|
|
||||||
myAccount_heading = Mi cuenta
|
myAccount_heading = Mi cuenta
|
||||||
myAccount_confirm_changes = Los cambios se han guardado.
|
myAccount_confirm_changes = Los cambios se han guardado.
|
||||||
|
|
|
@ -0,0 +1,68 @@
|
||||||
|
<#-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
|
||||||
|
|
||||||
|
<#-- Confirmation that an account has been created. -->
|
||||||
|
|
||||||
|
<#assign subject = "Su cuenta ${siteName} ha sido creado." />
|
||||||
|
|
||||||
|
<#assign html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>${subject}</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<p>
|
||||||
|
${userAccount.firstName} ${userAccount.lastName}
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<strong>Enhorabuena!</strong>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Hemos creado la nueva cuenta en ${siteName}, asociada con ${userAccount.emailAddress}.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Si no has solicitado esta nueva cuenta puede ignorar este mensaje.
|
||||||
|
Esta solicitud caducará si no se hubiere pronunciado sobre durante 30 días.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Haga clic en el enlace de abajo para crear la contraseña de su cuenta usando nuestro servidor seguro.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<a href="${passwordLink}" title="password">${passwordLink}</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Si el enlace no funciona, puedes copiar y pegar el enlace directamente en la barra de direcciones de su navegador.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
¡Gracias!
|
||||||
|
</p>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
</#assign>
|
||||||
|
|
||||||
|
<#assign text>
|
||||||
|
${userAccount.firstName} ${userAccount.lastName}
|
||||||
|
|
||||||
|
Enhorabuena!
|
||||||
|
|
||||||
|
Hemos creado la nueva cuenta en ${siteName},
|
||||||
|
asociada con ${userAccount.emailAddress}.
|
||||||
|
|
||||||
|
Si no has solicitado esta nueva cuenta puede ignorar este mensaje.
|
||||||
|
Esta solicitud caducará si no se hubiere pronunciado sobre durante 30 días.
|
||||||
|
|
||||||
|
Pega el siguiente enlace en la barra de direcciones de su navegador para
|
||||||
|
crear su contraseña para su nueva cuenta usando nuestro servidor seguro.
|
||||||
|
|
||||||
|
${passwordLink}
|
||||||
|
|
||||||
|
¡Gracias!
|
||||||
|
</#assign>
|
||||||
|
|
||||||
|
<@email subject=subject html=html text=text />
|
|
@ -0,0 +1,43 @@
|
||||||
|
<#-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
|
||||||
|
|
||||||
|
<#-- Confirmation that an account has been created. -->
|
||||||
|
|
||||||
|
<#assign subject = "Su cuenta ${siteName} ha sido creada." />
|
||||||
|
|
||||||
|
<#assign html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>${subject}</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<p>
|
||||||
|
${userAccount.firstName} ${userAccount.lastName}
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<strong>¡Enhorabuena!</strong>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Hemos creado la nueva cuenta VIVO asociado con ${userAccount.emailAddress}.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
¡Gracias!
|
||||||
|
</p>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
</#assign>
|
||||||
|
|
||||||
|
<#assign text>
|
||||||
|
${userAccount.firstName} ${userAccount.lastName}
|
||||||
|
|
||||||
|
¡Enhorabuena!
|
||||||
|
|
||||||
|
Hemos creado la nueva cuenta VIVO asociado con
|
||||||
|
${userAccount.emailAddress}.
|
||||||
|
|
||||||
|
¡Gracias!
|
||||||
|
</#assign>
|
||||||
|
|
||||||
|
<@email subject=subject html=html text=text />
|
|
@ -0,0 +1,38 @@
|
||||||
|
<#-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
|
||||||
|
|
||||||
|
<#-- Confirmation that the user has changed his email account. -->
|
||||||
|
|
||||||
|
<#assign subject = "Su cuenta de correo electrónico ${siteName} ha cambiado." />
|
||||||
|
|
||||||
|
<#assign html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>${subject}</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<p>
|
||||||
|
Hola, ${userAccount.firstName} ${userAccount.lastName}
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Ha cambiado recientemente la dirección de correo electrónico asociada a
|
||||||
|
${userAccount.firstName} ${userAccount.lastName}
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Gracias.
|
||||||
|
</p>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
</#assign>
|
||||||
|
|
||||||
|
<#assign text>
|
||||||
|
Hola, ${userAccount.firstName} ${userAccount.lastName}
|
||||||
|
|
||||||
|
Ha cambiado recientemente la dirección de correo electrónico asociada a
|
||||||
|
${userAccount.firstName} ${userAccount.lastName}
|
||||||
|
|
||||||
|
Gracias.
|
||||||
|
</#assign>
|
||||||
|
|
||||||
|
<@email subject=subject html=html text=text />
|
|
@ -0,0 +1,43 @@
|
||||||
|
<#-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
|
||||||
|
|
||||||
|
<#-- Confirmation that an account has been created for an externally-authenticated user. -->
|
||||||
|
|
||||||
|
<#assign subject = "Su cuenta ${siteName} ha sido creada." />
|
||||||
|
|
||||||
|
<#assign html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>${subject}</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<p>
|
||||||
|
${userAccount.firstName} ${userAccount.lastName}
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<strong>¡Enhorabuena!</strong>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Hemos creado la nueva cuenta VIVO asociado con ${userAccount.emailAddress}.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
¡Gracias!
|
||||||
|
</p>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
</#assign>
|
||||||
|
|
||||||
|
<#assign text>
|
||||||
|
${userAccount.firstName} ${userAccount.lastName}
|
||||||
|
|
||||||
|
¡Enhorabuena!
|
||||||
|
|
||||||
|
Hemos creado la nueva cuenta VIVO asociado con
|
||||||
|
${userAccount.emailAddress}.
|
||||||
|
|
||||||
|
¡Gracias!
|
||||||
|
</#assign>
|
||||||
|
|
||||||
|
<@email subject=subject html=html text=text />
|
|
@ -0,0 +1,43 @@
|
||||||
|
<#-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
|
||||||
|
|
||||||
|
<#-- Confirmation that an password has been created. -->
|
||||||
|
|
||||||
|
<#assign subject = "El ${siteName} contraseña ha sido creado con éxito." />
|
||||||
|
|
||||||
|
<#assign html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>${subject}</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<p>
|
||||||
|
${userAccount.firstName} ${userAccount.lastName}
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<strong>Contraseña creado con éxito.</strong>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Su nueva contraseña asociada con ${userAccount.emailAddress} se ha creado.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Gracias.
|
||||||
|
</p>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
</#assign>
|
||||||
|
|
||||||
|
<#assign text>
|
||||||
|
${userAccount.firstName} ${userAccount.lastName}
|
||||||
|
|
||||||
|
Contraseña creado con éxito.
|
||||||
|
|
||||||
|
Su nueva contraseña asociada con ${userAccount.emailAddress}
|
||||||
|
se ha creado.
|
||||||
|
|
||||||
|
Gracias.
|
||||||
|
</#assign>
|
||||||
|
|
||||||
|
<@email subject=subject html=html text=text />
|
|
@ -0,0 +1,44 @@
|
||||||
|
<#-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
|
||||||
|
|
||||||
|
<#-- Confirmation that a password has been reset. -->
|
||||||
|
|
||||||
|
<#assign subject = "El ${siteName} contraseña cambiada." />
|
||||||
|
|
||||||
|
<#assign html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>${subject}</title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<p>
|
||||||
|
${userAccount.firstName} ${userAccount.lastName}
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<strong>Contraseña cambiada con éxito.</strong>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Su nueva contraseña asociada con ${userAccount.emailAddress} ha sido cambiado.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Gracias.
|
||||||
|
</p>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
</#assign>
|
||||||
|
|
||||||
|
<#assign text>
|
||||||
|
${userAccount.firstName} ${userAccount.lastName}
|
||||||
|
|
||||||
|
Contraseña cambiada con éxito.
|
||||||
|
|
||||||
|
Su nueva contraseña asociada con ${userAccount.emailAddress}
|
||||||
|
ha sido cambiado.
|
||||||
|
|
||||||
|
Gracias.
|
||||||
|
</#assign>
|
||||||
|
|
||||||
|
<@email subject=subject html=html text=text />
|
|
@ -0,0 +1,62 @@
|
||||||
|
<#-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
|
||||||
|
|
||||||
|
<#-- Confirmation email for user account password reset -->
|
||||||
|
|
||||||
|
<#assign subject = "${siteName} restablecer solicitud de contraseña" />
|
||||||
|
|
||||||
|
<#assign html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>${subject}</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<p>
|
||||||
|
Estimado ${userAccount.firstName} ${userAccount.lastName}:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Hemos recibido una solicitud para restablecer la contraseña de su cuenta ${siteName}
|
||||||
|
(${userAccount.emailAddress}).
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Por favor, siga las siguientes instrucciones para proceder con su restablecimiento de contraseña.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Si no has solicitado esta nueva cuenta puede ignorar este mensaje.
|
||||||
|
Esta solicitud caducará si no se hubiere pronunciado en un plazo de 30 días.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Haga clic en el enlace de abajo o pegarlo en la barra de direcciones de su navegador para
|
||||||
|
restablecer su contraseña usando nuestro servidor seguro.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>${passwordLink}</p>
|
||||||
|
|
||||||
|
<p>¡Gracias!</p>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
</#assign>
|
||||||
|
|
||||||
|
<#assign text>
|
||||||
|
Estimado ${userAccount.firstName} ${userAccount.lastName}:
|
||||||
|
|
||||||
|
Hemos recibido una solicitud para restablecer la contraseña de su cuenta ${siteName}
|
||||||
|
(${userAccount.emailAddress}).
|
||||||
|
|
||||||
|
Por favor, siga las siguientes instrucciones para proceder con su restablecimiento de contraseña.
|
||||||
|
|
||||||
|
Si no has solicitado esta nueva cuenta puede ignorar este mensaje.
|
||||||
|
Esta solicitud caducará si no se hubiere pronunciado en un plazo de 30 días.
|
||||||
|
|
||||||
|
Pega el siguiente enlace en la barra de direcciones de su navegador para
|
||||||
|
restablecer su contraseña usando nuestro servidor seguro.
|
||||||
|
|
||||||
|
${passwordLink}
|
||||||
|
|
||||||
|
¡Gracias!
|
||||||
|
</#assign>
|
||||||
|
|
||||||
|
<@email subject=subject html=html text=text />
|
|
@ -11,7 +11,6 @@ import com.hp.hpl.jena.ontology.OntModel;
|
||||||
import com.hp.hpl.jena.ontology.OntModelSpec;
|
import com.hp.hpl.jena.ontology.OntModelSpec;
|
||||||
import com.hp.hpl.jena.rdf.model.Model;
|
import com.hp.hpl.jena.rdf.model.Model;
|
||||||
import com.hp.hpl.jena.rdf.model.ModelFactory;
|
import com.hp.hpl.jena.rdf.model.ModelFactory;
|
||||||
import com.hp.hpl.jena.rdf.model.Property;
|
|
||||||
import com.hp.hpl.jena.rdf.model.RDFNode;
|
import com.hp.hpl.jena.rdf.model.RDFNode;
|
||||||
import com.hp.hpl.jena.rdf.model.Resource;
|
import com.hp.hpl.jena.rdf.model.Resource;
|
||||||
import com.hp.hpl.jena.rdf.model.Statement;
|
import com.hp.hpl.jena.rdf.model.Statement;
|
||||||
|
@ -20,7 +19,6 @@ import com.hp.hpl.jena.rdf.model.StmtIterator;
|
||||||
import edu.cornell.mannlib.vitro.webapp.auth.identifier.ActiveIdentifierBundleFactories;
|
import edu.cornell.mannlib.vitro.webapp.auth.identifier.ActiveIdentifierBundleFactories;
|
||||||
import edu.cornell.mannlib.vitro.webapp.auth.identifier.IdentifierBundle;
|
import edu.cornell.mannlib.vitro.webapp.auth.identifier.IdentifierBundle;
|
||||||
import edu.cornell.mannlib.vitro.webapp.auth.identifier.RequestIdentifiers;
|
import edu.cornell.mannlib.vitro.webapp.auth.identifier.RequestIdentifiers;
|
||||||
import edu.cornell.mannlib.vitro.webapp.auth.permissions.SimplePermission;
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.auth.policy.ifaces.PolicyIface;
|
import edu.cornell.mannlib.vitro.webapp.auth.policy.ifaces.PolicyIface;
|
||||||
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.Actions;
|
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.Actions;
|
||||||
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.ifaces.RequestedAction;
|
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.ifaces.RequestedAction;
|
||||||
|
@ -136,7 +134,8 @@ public class PolicyHelper {
|
||||||
.asResource().getURI());
|
.asResource().getURI());
|
||||||
} else {
|
} else {
|
||||||
action = new AddDataPropertyStatement(modelToBeModified,
|
action = new AddDataPropertyStatement(modelToBeModified,
|
||||||
subject.getURI(), predicate.getURI());
|
subject.getURI(), predicate.getURI(), objectNode
|
||||||
|
.asLiteral().getString());
|
||||||
}
|
}
|
||||||
return isAuthorizedForActions(req, action);
|
return isAuthorizedForActions(req, action);
|
||||||
}
|
}
|
||||||
|
@ -169,7 +168,8 @@ public class PolicyHelper {
|
||||||
.asResource().getURI());
|
.asResource().getURI());
|
||||||
} else {
|
} else {
|
||||||
action = new DropDataPropertyStatement(modelToBeModified,
|
action = new DropDataPropertyStatement(modelToBeModified,
|
||||||
subject.getURI(), predicate.getURI());
|
subject.getURI(), predicate.getURI(), objectNode
|
||||||
|
.asLiteral().getString());
|
||||||
}
|
}
|
||||||
return isAuthorizedForActions(req, action);
|
return isAuthorizedForActions(req, action);
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,15 +16,17 @@ public abstract class AbstractDataPropertyStatementAction extends
|
||||||
private final String subjectUri;
|
private final String subjectUri;
|
||||||
private final String predicateUri;
|
private final String predicateUri;
|
||||||
private final Property predicate;
|
private final Property predicate;
|
||||||
|
private final String dataValue;
|
||||||
|
|
||||||
public AbstractDataPropertyStatementAction(OntModel ontModel,
|
public AbstractDataPropertyStatementAction(OntModel ontModel,
|
||||||
String subjectUri, String predicateUri) {
|
String subjectUri, String predicateUri, String dataValue) {
|
||||||
super(ontModel);
|
super(ontModel);
|
||||||
this.subjectUri = subjectUri;
|
this.subjectUri = subjectUri;
|
||||||
this.predicateUri = predicateUri;
|
this.predicateUri = predicateUri;
|
||||||
Property dataProperty = new Property();
|
Property dataProperty = new Property();
|
||||||
dataProperty.setURI(predicateUri);
|
dataProperty.setURI(predicateUri);
|
||||||
this.predicate = dataProperty;
|
this.predicate = dataProperty;
|
||||||
|
this.dataValue = dataValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
public AbstractDataPropertyStatementAction(OntModel ontModel,
|
public AbstractDataPropertyStatementAction(OntModel ontModel,
|
||||||
|
@ -36,12 +38,14 @@ public abstract class AbstractDataPropertyStatementAction extends
|
||||||
Property dataProperty = new Property();
|
Property dataProperty = new Property();
|
||||||
dataProperty.setURI(predicateUri);
|
dataProperty.setURI(predicateUri);
|
||||||
this.predicate = dataProperty;
|
this.predicate = dataProperty;
|
||||||
|
this.dataValue = dps.getData();
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getSubjectUri() {
|
public String getSubjectUri() {
|
||||||
return subjectUri;
|
return subjectUri;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public Property getPredicate() {
|
public Property getPredicate() {
|
||||||
return predicate;
|
return predicate;
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,8 +13,8 @@ public class AddDataPropertyStatement extends
|
||||||
AbstractDataPropertyStatementAction {
|
AbstractDataPropertyStatementAction {
|
||||||
|
|
||||||
public AddDataPropertyStatement(OntModel ontModel, String subjectUri,
|
public AddDataPropertyStatement(OntModel ontModel, String subjectUri,
|
||||||
String predicateUri) {
|
String predicateUri, String dataValue) {
|
||||||
super(ontModel, subjectUri, predicateUri);
|
super(ontModel, subjectUri, predicateUri, dataValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
public AddDataPropertyStatement(OntModel ontModel, DataPropertyStatement dps) {
|
public AddDataPropertyStatement(OntModel ontModel, DataPropertyStatement dps) {
|
||||||
|
|
|
@ -14,8 +14,8 @@ public class DropDataPropertyStatement extends
|
||||||
AbstractDataPropertyStatementAction {
|
AbstractDataPropertyStatementAction {
|
||||||
|
|
||||||
public DropDataPropertyStatement(OntModel ontModel, String subjectUri,
|
public DropDataPropertyStatement(OntModel ontModel, String subjectUri,
|
||||||
String predicateUri) {
|
String predicateUri, String dataValue) {
|
||||||
super(ontModel, subjectUri, predicateUri);
|
super(ontModel, subjectUri, predicateUri, dataValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
public DropDataPropertyStatement(OntModel ontModel,
|
public DropDataPropertyStatement(OntModel ontModel,
|
||||||
|
|
|
@ -12,8 +12,8 @@ import edu.cornell.mannlib.vitro.webapp.beans.DataPropertyStatement;
|
||||||
public class EditDataPropertyStatement extends
|
public class EditDataPropertyStatement extends
|
||||||
AbstractDataPropertyStatementAction {
|
AbstractDataPropertyStatementAction {
|
||||||
public EditDataPropertyStatement(OntModel ontModel, String subjectUri,
|
public EditDataPropertyStatement(OntModel ontModel, String subjectUri,
|
||||||
String predicateUri) {
|
String predicateUri, String dataValue) {
|
||||||
super(ontModel, subjectUri, predicateUri);
|
super(ontModel, subjectUri, predicateUri, dataValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
public EditDataPropertyStatement(OntModel ontModel,
|
public EditDataPropertyStatement(OntModel ontModel,
|
||||||
|
|
|
@ -13,10 +13,7 @@ import javax.servlet.ServletContext;
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang.StringUtils;
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
import org.apache.solr.client.solrj.SolrQuery;
|
|
||||||
import org.apache.solr.client.solrj.SolrServer;
|
|
||||||
import org.apache.solr.client.solrj.SolrServerException;
|
import org.apache.solr.client.solrj.SolrServerException;
|
||||||
import org.apache.solr.client.solrj.response.QueryResponse;
|
|
||||||
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.beans.Individual;
|
import edu.cornell.mannlib.vitro.webapp.beans.Individual;
|
||||||
import edu.cornell.mannlib.vitro.webapp.beans.VClass;
|
import edu.cornell.mannlib.vitro.webapp.beans.VClass;
|
||||||
|
@ -25,9 +22,8 @@ import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
|
||||||
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.ExceptionResponseValues;
|
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.ExceptionResponseValues;
|
||||||
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.ResponseValues;
|
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.ResponseValues;
|
||||||
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.TemplateResponseValues;
|
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.TemplateResponseValues;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.controller.individuallist.IndividualListResults;
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.IndividualDao;
|
import edu.cornell.mannlib.vitro.webapp.dao.IndividualDao;
|
||||||
import edu.cornell.mannlib.vitro.webapp.search.VitroSearchTermNames;
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.search.solr.SolrSetup;
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.utils.solr.SolrQueryUtils;
|
import edu.cornell.mannlib.vitro.webapp.utils.solr.SolrQueryUtils;
|
||||||
import edu.cornell.mannlib.vitro.webapp.web.templatemodels.individuallist.ListedIndividual;
|
import edu.cornell.mannlib.vitro.webapp.web.templatemodels.individuallist.ListedIndividual;
|
||||||
|
|
||||||
|
@ -94,16 +90,15 @@ public class IndividualListController extends FreemarkerHttpServlet {
|
||||||
|
|
||||||
String alpha = getAlphaParameter(vreq);
|
String alpha = getAlphaParameter(vreq);
|
||||||
int page = getPageParameter(vreq);
|
int page = getPageParameter(vreq);
|
||||||
Map<String,Object> map = getResultsForVClass(
|
IndividualListResults vcResults = getResultsForVClass(
|
||||||
vclass.getURI(),
|
vclass.getURI(),
|
||||||
page,
|
page,
|
||||||
alpha,
|
alpha,
|
||||||
vreq.getWebappDaoFactory().getIndividualDao(),
|
vreq.getWebappDaoFactory().getIndividualDao(),
|
||||||
getServletContext());
|
getServletContext());
|
||||||
body.putAll(map);
|
body.putAll(vcResults.asFreemarkerMap());
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
List<Individual> inds = vcResults.getEntities();
|
||||||
List<Individual> inds = (List<Individual>)map.get("entities");
|
|
||||||
List<ListedIndividual> indsTm = new ArrayList<ListedIndividual>();
|
List<ListedIndividual> indsTm = new ArrayList<ListedIndividual>();
|
||||||
if (inds != null) {
|
if (inds != null) {
|
||||||
for ( Individual ind : inds ) {
|
for ( Individual ind : inds ) {
|
||||||
|
@ -154,13 +149,12 @@ public class IndividualListController extends FreemarkerHttpServlet {
|
||||||
return SolrQueryUtils.getPageParameter(request);
|
return SolrQueryUtils.getPageParameter(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Map<String,Object> getResultsForVClass(String vclassURI, int page, String alpha, IndividualDao indDao, ServletContext context)
|
public static IndividualListResults getResultsForVClass(String vclassURI, int page, String alpha, IndividualDao indDao, ServletContext context)
|
||||||
throws SearchException{
|
throws SearchException{
|
||||||
Map<String,Object> rvMap = new HashMap<String,Object>();
|
|
||||||
try{
|
try{
|
||||||
List<String> classUris = Collections.singletonList(vclassURI);
|
List<String> classUris = Collections.singletonList(vclassURI);
|
||||||
IndividualListQueryResults results = SolrQueryUtils.buildAndExecuteVClassQuery(classUris, alpha, page, INDIVIDUALS_PER_PAGE, context, indDao);
|
IndividualListQueryResults results = SolrQueryUtils.buildAndExecuteVClassQuery(classUris, alpha, page, INDIVIDUALS_PER_PAGE, context, indDao);
|
||||||
rvMap = getResultsForVClassQuery(results, page, INDIVIDUALS_PER_PAGE, alpha);
|
return getResultsForVClassQuery(results, page, INDIVIDUALS_PER_PAGE, alpha);
|
||||||
} catch (SolrServerException e) {
|
} catch (SolrServerException e) {
|
||||||
String msg = "An error occurred retrieving results for vclass query";
|
String msg = "An error occurred retrieving results for vclass query";
|
||||||
log.error(msg, e);
|
log.error(msg, e);
|
||||||
|
@ -168,31 +162,29 @@ public class IndividualListController extends FreemarkerHttpServlet {
|
||||||
throw new SearchException(msg);
|
throw new SearchException(msg);
|
||||||
} catch(Throwable th) {
|
} catch(Throwable th) {
|
||||||
log.error("An error occurred retrieving results for vclass query", th);
|
log.error("An error occurred retrieving results for vclass query", th);
|
||||||
|
return IndividualListResults.EMPTY;
|
||||||
}
|
}
|
||||||
return rvMap;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Map<String,Object> getResultsForVClassIntersections(List<String> vclassURIs, int page, int pageSize, String alpha, IndividualDao indDao, ServletContext context) {
|
public static IndividualListResults getResultsForVClassIntersections(List<String> vclassURIs, int page, int pageSize, String alpha, IndividualDao indDao, ServletContext context) {
|
||||||
Map<String,Object> rvMap = new HashMap<String,Object>();
|
|
||||||
try{
|
try{
|
||||||
IndividualListQueryResults results = SolrQueryUtils.buildAndExecuteVClassQuery(vclassURIs, alpha, page, pageSize, context, indDao);
|
IndividualListQueryResults results = SolrQueryUtils.buildAndExecuteVClassQuery(vclassURIs, alpha, page, pageSize, context, indDao);
|
||||||
rvMap = getResultsForVClassQuery(results, page, pageSize, alpha);
|
return getResultsForVClassQuery(results, page, pageSize, alpha);
|
||||||
} catch(Throwable th) {
|
} catch(Throwable th) {
|
||||||
log.error("Error retrieving individuals corresponding to intersection multiple classes." + vclassURIs.toString(), th);
|
log.error("Error retrieving individuals corresponding to intersection multiple classes." + vclassURIs.toString(), th);
|
||||||
|
return IndividualListResults.EMPTY;
|
||||||
}
|
}
|
||||||
return rvMap;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Map<String,Object> getRandomResultsForVClass(String vclassURI, int page, int pageSize, IndividualDao indDao, ServletContext context) {
|
public static IndividualListResults getRandomResultsForVClass(String vclassURI, int page, int pageSize, IndividualDao indDao, ServletContext context) {
|
||||||
Map<String,Object> rvMap = new HashMap<String,Object>();
|
|
||||||
try{
|
try{
|
||||||
List<String> classUris = Collections.singletonList(vclassURI);
|
List<String> classUris = Collections.singletonList(vclassURI);
|
||||||
IndividualListQueryResults results = SolrQueryUtils.buildAndExecuteRandomVClassQuery(classUris, page, pageSize, context, indDao);
|
IndividualListQueryResults results = SolrQueryUtils.buildAndExecuteRandomVClassQuery(classUris, page, pageSize, context, indDao);
|
||||||
rvMap = getResultsForVClassQuery(results, page, pageSize, "");
|
return getResultsForVClassQuery(results, page, pageSize, "");
|
||||||
} catch(Throwable th) {
|
} catch(Throwable th) {
|
||||||
log.error("An error occurred retrieving random results for vclass query", th);
|
log.error("An error occurred retrieving random results for vclass query", th);
|
||||||
|
return IndividualListResults.EMPTY;
|
||||||
}
|
}
|
||||||
return rvMap;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO: Get rid of this method and utilize SolrQueryUtils - currently appears to be referenced
|
//TODO: Get rid of this method and utilize SolrQueryUtils - currently appears to be referenced
|
||||||
|
@ -201,24 +193,13 @@ public class IndividualListController extends FreemarkerHttpServlet {
|
||||||
return SolrQueryUtils.getIndividualCount(vclassUris, indDao, context);
|
return SolrQueryUtils.getIndividualCount(vclassUris, indDao, context);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Map<String,Object> getResultsForVClassQuery(IndividualListQueryResults results, int page, int pageSize, String alpha) {
|
private static IndividualListResults getResultsForVClassQuery(IndividualListQueryResults results, int page, int pageSize, String alpha) {
|
||||||
Map<String,Object> rvMap = new HashMap<String,Object>();
|
|
||||||
|
|
||||||
long hitCount = results.getHitCount();
|
long hitCount = results.getHitCount();
|
||||||
if ( hitCount > pageSize ){
|
if ( hitCount > pageSize ){
|
||||||
rvMap.put("showPages", Boolean.TRUE);
|
return new IndividualListResults(hitCount, results.getIndividuals(), alpha, true, makePagesList(hitCount, pageSize, page));
|
||||||
List<PageRecord> pageRecords = makePagesList(hitCount, pageSize, page);
|
|
||||||
rvMap.put("pages", pageRecords);
|
|
||||||
}else{
|
}else{
|
||||||
rvMap.put("showPages", Boolean.FALSE);
|
return new IndividualListResults(hitCount, results.getIndividuals(), alpha, false, Collections.<PageRecord>emptyList());
|
||||||
rvMap.put("pages", Collections.emptyList());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
rvMap.put("alpha",alpha);
|
|
||||||
rvMap.put("totalCount", hitCount);
|
|
||||||
rvMap.put("entities", results.getIndividuals());
|
|
||||||
|
|
||||||
return rvMap;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -4,11 +4,6 @@ package edu.cornell.mannlib.vitro.webapp.controller.individual;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import javax.servlet.ServletContext;
|
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
|
||||||
import org.apache.commons.logging.LogFactory;
|
|
||||||
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.beans.Individual;
|
import edu.cornell.mannlib.vitro.webapp.beans.Individual;
|
||||||
import edu.cornell.mannlib.vitro.webapp.beans.SelfEditingConfiguration;
|
import edu.cornell.mannlib.vitro.webapp.beans.SelfEditingConfiguration;
|
||||||
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
|
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
|
||||||
|
@ -22,18 +17,13 @@ import edu.cornell.mannlib.vitro.webapp.filestorage.model.FileInfo;
|
||||||
*/
|
*/
|
||||||
public class IndividualRequestAnalysisContextImpl implements
|
public class IndividualRequestAnalysisContextImpl implements
|
||||||
IndividualRequestAnalysisContext {
|
IndividualRequestAnalysisContext {
|
||||||
private static final Log log = LogFactory
|
|
||||||
.getLog(IndividualRequestAnalysisContextImpl.class);
|
|
||||||
|
|
||||||
|
|
||||||
private final VitroRequest vreq;
|
private final VitroRequest vreq;
|
||||||
private final ServletContext ctx;
|
|
||||||
private final WebappDaoFactory wadf;
|
private final WebappDaoFactory wadf;
|
||||||
private final IndividualDao iDao;
|
private final IndividualDao iDao;
|
||||||
|
|
||||||
public IndividualRequestAnalysisContextImpl(VitroRequest vreq) {
|
public IndividualRequestAnalysisContextImpl(VitroRequest vreq) {
|
||||||
this.vreq = vreq;
|
this.vreq = vreq;
|
||||||
this.ctx = vreq.getSession().getServletContext();
|
|
||||||
this.wadf = vreq.getWebappDaoFactory();
|
this.wadf = vreq.getWebappDaoFactory();
|
||||||
this.iDao = wadf.getIndividualDao();
|
this.iDao = wadf.getIndividualDao();
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,48 @@
|
||||||
|
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
|
||||||
|
|
||||||
|
package edu.cornell.mannlib.vitro.webapp.controller.individuallist;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.json.JSONException;
|
||||||
|
import org.json.JSONObject;
|
||||||
|
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.beans.Individual;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.dao.ObjectPropertyStatementDao;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Wrap an Individual in a JSON object for display by the script.
|
||||||
|
*
|
||||||
|
* This will be overridden in VIVO so we can have more info in the display.
|
||||||
|
*/
|
||||||
|
public class IndividualJsonWrapper {
|
||||||
|
static JSONObject packageIndividualAsJson(VitroRequest vreq, Individual ind)
|
||||||
|
throws JSONException {
|
||||||
|
// need an unfiltered dao to get firstnames and lastnames
|
||||||
|
WebappDaoFactory fullWdf = vreq.getUnfilteredWebappDaoFactory();
|
||||||
|
|
||||||
|
JSONObject jo = new JSONObject();
|
||||||
|
jo.put("URI", ind.getURI());
|
||||||
|
jo.put("label", ind.getRdfsLabel());
|
||||||
|
jo.put("name", ind.getName());
|
||||||
|
jo.put("thumbUrl", ind.getThumbUrl());
|
||||||
|
jo.put("imageUrl", ind.getImageUrl());
|
||||||
|
jo.put("profileUrl", UrlBuilder.getIndividualProfileUrl(ind, vreq));
|
||||||
|
jo.put("mostSpecificTypes", getMostSpecificTypes(ind, fullWdf));
|
||||||
|
return jo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Collection<String> getMostSpecificTypes(
|
||||||
|
Individual individual, WebappDaoFactory wdf) {
|
||||||
|
ObjectPropertyStatementDao opsDao = wdf.getObjectPropertyStatementDao();
|
||||||
|
Map<String, String> mostSpecificTypes = opsDao
|
||||||
|
.getMostSpecificTypesInClassgroupsForIndividual(individual
|
||||||
|
.getURI());
|
||||||
|
return mostSpecificTypes.values();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,87 @@
|
||||||
|
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
|
||||||
|
|
||||||
|
package edu.cornell.mannlib.vitro.webapp.controller.individuallist;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.beans.Individual;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.IndividualListController.PageRecord;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* These are the paged results of a query for Individuals.
|
||||||
|
*
|
||||||
|
* The criteria for the search are the index of the desired page, the number of
|
||||||
|
* results displayed on each page, and an optional initial letter to search
|
||||||
|
* against.
|
||||||
|
*
|
||||||
|
* By the time this is built, the results have already been partially processed.
|
||||||
|
* A list of PageRecord object is included, with values that the GUI can use to
|
||||||
|
* create Alphabetical links. Maybe this processing should have been done later.
|
||||||
|
* Maybe it should have been left to the GUI.
|
||||||
|
*/
|
||||||
|
public class IndividualListResults {
|
||||||
|
private static final Log log = LogFactory
|
||||||
|
.getLog(IndividualListResults.class);
|
||||||
|
|
||||||
|
public static final IndividualListResults EMPTY = new IndividualListResults();
|
||||||
|
|
||||||
|
private final long totalCount;
|
||||||
|
private final List<Individual> entities;
|
||||||
|
private final String alpha;
|
||||||
|
private final boolean showPages;
|
||||||
|
private final List<PageRecord> pages;
|
||||||
|
|
||||||
|
public IndividualListResults(long totalCount, List<Individual> entities,
|
||||||
|
String alpha, boolean showPages, List<PageRecord> pages) {
|
||||||
|
this.totalCount = totalCount;
|
||||||
|
this.entities = entities;
|
||||||
|
this.alpha = alpha;
|
||||||
|
this.showPages = showPages;
|
||||||
|
this.pages = pages;
|
||||||
|
}
|
||||||
|
|
||||||
|
private IndividualListResults() {
|
||||||
|
this(0L, Collections.<Individual> emptyList(), "", false, Collections
|
||||||
|
.<PageRecord> emptyList());
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getTotalCount() {
|
||||||
|
return totalCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAlpha() {
|
||||||
|
return alpha;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Individual> getEntities() {
|
||||||
|
return entities;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<PageRecord> getPages() {
|
||||||
|
return pages;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isShowPages() {
|
||||||
|
return showPages;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Some controllers put this data directly into the Freemarker body map.
|
||||||
|
* Others wrap it in JSON.
|
||||||
|
*/
|
||||||
|
public Map<String, Object> asFreemarkerMap() {
|
||||||
|
Map<String, Object> m = new HashMap<>();
|
||||||
|
m.put("showPages", showPages);
|
||||||
|
m.put("pages", pages);
|
||||||
|
m.put("alpha", alpha);
|
||||||
|
m.put("totalCount", totalCount);
|
||||||
|
m.put("entities", entities);
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,148 @@
|
||||||
|
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
|
||||||
|
|
||||||
|
package edu.cornell.mannlib.vitro.webapp.controller.individuallist;
|
||||||
|
|
||||||
|
import java.io.UnsupportedEncodingException;
|
||||||
|
import java.net.URLEncoder;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.apache.commons.lang.ArrayUtils;
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.json.JSONArray;
|
||||||
|
import org.json.JSONException;
|
||||||
|
import org.json.JSONObject;
|
||||||
|
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.beans.Individual;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.beans.VClass;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.controller.Controllers;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.IndividualListController.PageRecord;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Utility methods for procesing the paged results of a query for a list of Individuals.
|
||||||
|
*
|
||||||
|
* Right now, there is only a method to wrap the results in Json.
|
||||||
|
*/
|
||||||
|
public class IndividualListResultsUtils {
|
||||||
|
private static final Log log = LogFactory
|
||||||
|
.getLog(IndividualListResultsUtils.class);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Process results related to VClass or vclasses. Handles both single and
|
||||||
|
* multiple vclasses being sent.
|
||||||
|
*/
|
||||||
|
public static JSONObject wrapIndividualListResultsInJson(IndividualListResults results, VitroRequest vreq,
|
||||||
|
boolean multipleVclasses) {
|
||||||
|
JSONObject rObj = new JSONObject();
|
||||||
|
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
dumpParametersFromRequest(vreq);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
List<VClass> vclasses = buildListOfRequestedVClasses(vreq);
|
||||||
|
|
||||||
|
VClass vclass = null;
|
||||||
|
// if single vclass expected, then include vclass.
|
||||||
|
// This relates to what the expected behavior is, not size of list
|
||||||
|
if (!multipleVclasses) {
|
||||||
|
vclass = vclasses.get(0);
|
||||||
|
// currently used for ClassGroupPage
|
||||||
|
} else {
|
||||||
|
// For now, utilize very last VClass (assume that that is the one to be employed)
|
||||||
|
// TODO: Find more general way of dealing with this: put multiple ones in?
|
||||||
|
vclass = vclasses.get(vclasses.size() - 1);
|
||||||
|
// rObj.put("vclasses", new JSONObject().put("URIs",vitroClassIdStr).put("name",vclass.getName()));
|
||||||
|
}
|
||||||
|
|
||||||
|
rObj.put("vclass", packageVClassAsJson(vclass));
|
||||||
|
rObj.put("totalCount", results.getTotalCount());
|
||||||
|
rObj.put("alpha", results.getAlpha());
|
||||||
|
rObj.put("individuals", packageIndividualsAsJson(vreq, results.getEntities()));
|
||||||
|
rObj.put("pages", packagePageRecordsAsJson(results.getPages()));
|
||||||
|
rObj.put("letters", packageLettersAsJson());
|
||||||
|
} catch (Exception ex) {
|
||||||
|
log.error("Error occurred in processing JSON object", ex);
|
||||||
|
}
|
||||||
|
return rObj;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static List<VClass> buildListOfRequestedVClasses(VitroRequest vreq)
|
||||||
|
throws Exception {
|
||||||
|
String[] vitroClassIdStr = vreq.getParameterValues("vclassId");
|
||||||
|
if (ArrayUtils.isEmpty(vitroClassIdStr)) {
|
||||||
|
log.error("parameter vclassId URI parameter expected ");
|
||||||
|
throw new Exception("parameter vclassId URI parameter expected ");
|
||||||
|
}
|
||||||
|
|
||||||
|
List<VClass> list = new ArrayList<>();
|
||||||
|
for (String vclassId : vitroClassIdStr) {
|
||||||
|
VClass vclass = vreq.getWebappDaoFactory().getVClassDao()
|
||||||
|
.getVClassByURI(vclassId);
|
||||||
|
if (vclass == null) {
|
||||||
|
log.error("Couldn't retrieve vclass ");
|
||||||
|
throw new Exception("Class " + vclassId + " not found");
|
||||||
|
}
|
||||||
|
list.add(vclass);
|
||||||
|
}
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static JSONObject packageVClassAsJson(VClass vclass)
|
||||||
|
throws JSONException {
|
||||||
|
JSONObject jvclass = new JSONObject();
|
||||||
|
jvclass.put("URI", vclass.getURI());
|
||||||
|
jvclass.put("name", vclass.getName());
|
||||||
|
return jvclass;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static JSONArray packageLettersAsJson() throws JSONException,
|
||||||
|
UnsupportedEncodingException {
|
||||||
|
List<String> letters = Controllers.getLetters();
|
||||||
|
JSONArray jletters = new JSONArray();
|
||||||
|
for (String s : letters) {
|
||||||
|
JSONObject jo = new JSONObject();
|
||||||
|
jo.put("text", s);
|
||||||
|
jo.put("param", "alpha=" + URLEncoder.encode(s, "UTF-8"));
|
||||||
|
jletters.put(jo);
|
||||||
|
}
|
||||||
|
return jletters;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static JSONArray packagePageRecordsAsJson(List<PageRecord> pages)
|
||||||
|
throws JSONException {
|
||||||
|
JSONArray wpages = new JSONArray();
|
||||||
|
for (PageRecord pr : pages) {
|
||||||
|
JSONObject p = new JSONObject();
|
||||||
|
p.put("text", pr.text);
|
||||||
|
p.put("param", pr.param);
|
||||||
|
p.put("index", pr.index);
|
||||||
|
wpages.put(p);
|
||||||
|
}
|
||||||
|
return wpages;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static JSONArray packageIndividualsAsJson(VitroRequest vreq,
|
||||||
|
List<Individual> inds) throws JSONException {
|
||||||
|
log.debug("Number of individuals returned from request: " + inds.size());
|
||||||
|
|
||||||
|
JSONArray jInds = new JSONArray();
|
||||||
|
for (Individual ind : inds) {
|
||||||
|
jInds.put(IndividualJsonWrapper.packageIndividualAsJson(vreq, ind));
|
||||||
|
}
|
||||||
|
return jInds;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void dumpParametersFromRequest(VitroRequest vreq) {
|
||||||
|
Map<String, String[]> pMap = vreq.getParameterMap();
|
||||||
|
for (String name : pMap.keySet()) {
|
||||||
|
for (String value : pMap.get(name)) {
|
||||||
|
log.debug("value for " + name + ": '" + value + "'");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -3,11 +3,8 @@
|
||||||
package edu.cornell.mannlib.vitro.webapp.controller.json;
|
package edu.cornell.mannlib.vitro.webapp.controller.json;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.URLEncoder;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Enumeration;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
@ -18,18 +15,15 @@ import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
import org.json.JSONArray;
|
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.beans.DataProperty;
|
import edu.cornell.mannlib.vitro.webapp.beans.DataProperty;
|
||||||
import edu.cornell.mannlib.vitro.webapp.beans.Individual;
|
import edu.cornell.mannlib.vitro.webapp.beans.Individual;
|
||||||
import edu.cornell.mannlib.vitro.webapp.beans.VClass;
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.controller.Controllers;
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.controller.VitroHttpServlet;
|
import edu.cornell.mannlib.vitro.webapp.controller.VitroHttpServlet;
|
||||||
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
|
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
|
||||||
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.IndividualListController;
|
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.IndividualListController;
|
||||||
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.IndividualListController.PageRecord;
|
import edu.cornell.mannlib.vitro.webapp.controller.individuallist.IndividualListResultsUtils;
|
||||||
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder;
|
import edu.cornell.mannlib.vitro.webapp.controller.individuallist.IndividualListResults;
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.ObjectPropertyStatementDao;
|
import edu.cornell.mannlib.vitro.webapp.dao.ObjectPropertyStatementDao;
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory;
|
import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory;
|
||||||
import edu.cornell.mannlib.vitro.webapp.utils.log.LogUtils;
|
import edu.cornell.mannlib.vitro.webapp.utils.log.LogUtils;
|
||||||
|
@ -94,29 +88,28 @@ public class JsonServlet extends VitroHttpServlet {
|
||||||
List<String> vclassURIs = Collections.singletonList(vclassURI);
|
List<String> vclassURIs = Collections.singletonList(vclassURI);
|
||||||
VitroRequest vreq = new VitroRequest(req);
|
VitroRequest vreq = new VitroRequest(req);
|
||||||
|
|
||||||
Map<String, Object> map = getSolrVClassIntersectionResults(vclassURIs, vreq, context);
|
IndividualListResults vcResults = getSolrVClassIntersectionResults(vclassURIs, vreq, context);
|
||||||
//last parameter indicates single vclass instead of multiple vclasses
|
//last parameter indicates single vclass instead of multiple vclasses
|
||||||
return processVclassResultsJSON(map, vreq, false);
|
return IndividualListResultsUtils.wrapIndividualListResultsInJson(vcResults, vreq, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static JSONObject getSolrIndividualsByVClasses(List<String> vclassURIs, HttpServletRequest req, ServletContext context) throws Exception {
|
public static JSONObject getSolrIndividualsByVClasses(List<String> vclassURIs, HttpServletRequest req, ServletContext context) throws Exception {
|
||||||
VitroRequest vreq = new VitroRequest(req);
|
VitroRequest vreq = new VitroRequest(req);
|
||||||
log.debug("Retrieve solr results for vclasses" + vclassURIs.toString());
|
log.debug("Retrieve solr results for vclasses" + vclassURIs.toString());
|
||||||
Map<String, Object> map = getSolrVClassIntersectionResults(vclassURIs, vreq, context);
|
IndividualListResults vcResults = getSolrVClassIntersectionResults(vclassURIs, vreq, context);
|
||||||
log.debug("Results returned from Solr for " + vclassURIs.toString() + " are of size " + map.size());
|
log.debug("Results returned from Solr for " + vclassURIs.toString() + " are of size " + vcResults.getTotalCount());
|
||||||
|
|
||||||
return processVclassResultsJSON(map, vreq, true);
|
return IndividualListResultsUtils.wrapIndividualListResultsInJson(vcResults, vreq, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Including version for Solr query for Vclass Intersections
|
//Including version for Solr query for Vclass Intersections
|
||||||
private static Map<String,Object> getSolrVClassIntersectionResults(List<String> vclassURIs, VitroRequest vreq, ServletContext context){
|
private static IndividualListResults getSolrVClassIntersectionResults(List<String> vclassURIs, VitroRequest vreq, ServletContext context){
|
||||||
log.debug("Retrieving Solr intersection results for " + vclassURIs.toString());
|
log.debug("Retrieving Solr intersection results for " + vclassURIs.toString());
|
||||||
String alpha = IndividualListController.getAlphaParameter(vreq);
|
String alpha = IndividualListController.getAlphaParameter(vreq);
|
||||||
int page = IndividualListController.getPageParameter(vreq);
|
int page = IndividualListController.getPageParameter(vreq);
|
||||||
log.debug("Alpha and page parameters are " + alpha + " and " + page);
|
log.debug("Alpha and page parameters are " + alpha + " and " + page);
|
||||||
Map<String,Object> map = null;
|
|
||||||
try {
|
try {
|
||||||
map = IndividualListController.getResultsForVClassIntersections(
|
return IndividualListController.getResultsForVClassIntersections(
|
||||||
vclassURIs,
|
vclassURIs,
|
||||||
page, INDIVIDUALS_PER_PAGE,
|
page, INDIVIDUALS_PER_PAGE,
|
||||||
alpha,
|
alpha,
|
||||||
|
@ -124,21 +117,8 @@ public class JsonServlet extends VitroHttpServlet {
|
||||||
context);
|
context);
|
||||||
} catch(Exception ex) {
|
} catch(Exception ex) {
|
||||||
log.error("Error in retrieval of search results for VClass " + vclassURIs.toString(), ex);
|
log.error("Error in retrieval of search results for VClass " + vclassURIs.toString(), ex);
|
||||||
|
return IndividualListResults.EMPTY;
|
||||||
}
|
}
|
||||||
|
|
||||||
return map;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Map given to process method includes the actual individuals returned from the search
|
|
||||||
// public static JSONObject processVClassResults(Map<String, Object> map, VitroRequest vreq, ServletContext context, boolean multipleVclasses) throws Exception{
|
|
||||||
// JSONObject rObj = processVclassResultsJSON(map, vreq, multipleVclasses);
|
|
||||||
// return rObj;
|
|
||||||
// }
|
|
||||||
|
|
||||||
public static Collection<String> getMostSpecificTypes(Individual individual, WebappDaoFactory wdf) {
|
|
||||||
ObjectPropertyStatementDao opsDao = wdf.getObjectPropertyStatementDao();
|
|
||||||
Map<String, String> mostSpecificTypes = opsDao.getMostSpecificTypesInClassgroupsForIndividual(individual.getURI());
|
|
||||||
return mostSpecificTypes.values();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getDataPropertyValue(Individual ind, DataProperty dp, WebappDaoFactory wdf){
|
public static String getDataPropertyValue(Individual ind, DataProperty dp, WebappDaoFactory wdf){
|
||||||
|
@ -152,21 +132,20 @@ public class JsonServlet extends VitroHttpServlet {
|
||||||
public static JSONObject getRandomSolrIndividualsByVClass(String vclassURI, HttpServletRequest req, ServletContext context) throws Exception {
|
public static JSONObject getRandomSolrIndividualsByVClass(String vclassURI, HttpServletRequest req, ServletContext context) throws Exception {
|
||||||
VitroRequest vreq = new VitroRequest(req);
|
VitroRequest vreq = new VitroRequest(req);
|
||||||
|
|
||||||
Map<String, Object> map = getRandomSolrVClassResults(vclassURI, vreq, context);
|
IndividualListResults vcResults = getRandomSolrVClassResults(vclassURI, vreq, context);
|
||||||
//last parameter indicates single vclass instead of multiple vclasses
|
//last parameter indicates single vclass instead of multiple vclasses
|
||||||
return processVclassResultsJSON(map, vreq, false);
|
return IndividualListResultsUtils.wrapIndividualListResultsInJson(vcResults, vreq, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Including version for Random Solr query for Vclass Intersections
|
//Including version for Random Solr query for Vclass Intersections
|
||||||
private static Map<String,Object> getRandomSolrVClassResults(String vclassURI, VitroRequest vreq, ServletContext context){
|
private static IndividualListResults getRandomSolrVClassResults(String vclassURI, VitroRequest vreq, ServletContext context){
|
||||||
log.debug("Retrieving random Solr intersection results for " + vclassURI);
|
log.debug("Retrieving random Solr intersection results for " + vclassURI);
|
||||||
|
|
||||||
int page = IndividualListController.getPageParameter(vreq);
|
int page = IndividualListController.getPageParameter(vreq);
|
||||||
int pageSize = Integer.parseInt(vreq.getParameter("pageSize"));
|
int pageSize = Integer.parseInt(vreq.getParameter("pageSize"));
|
||||||
log.debug("page and pageSize parameters = " + page + " and " + pageSize);
|
log.debug("page and pageSize parameters = " + page + " and " + pageSize);
|
||||||
Map<String,Object> map = null;
|
|
||||||
try {
|
try {
|
||||||
map = IndividualListController.getRandomResultsForVClass(
|
return IndividualListController.getRandomResultsForVClass(
|
||||||
vclassURI,
|
vclassURI,
|
||||||
page,
|
page,
|
||||||
pageSize,
|
pageSize,
|
||||||
|
@ -174,126 +153,8 @@ public class JsonServlet extends VitroHttpServlet {
|
||||||
context);
|
context);
|
||||||
} catch(Exception ex) {
|
} catch(Exception ex) {
|
||||||
log.error("Error in retrieval of search results for VClass " + vclassURI, ex);
|
log.error("Error in retrieval of search results for VClass " + vclassURI, ex);
|
||||||
}
|
return IndividualListResults.EMPTY;
|
||||||
|
|
||||||
return map;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Process results related to VClass or vclasses. Handles both single and multiple vclasses being sent.
|
|
||||||
*/
|
|
||||||
public static JSONObject processVclassResultsJSON(Map<String, Object> map, VitroRequest vreq, boolean multipleVclasses) {
|
|
||||||
JSONObject rObj = new JSONObject();
|
|
||||||
VClass vclass=null;
|
|
||||||
|
|
||||||
try {
|
|
||||||
|
|
||||||
// Properties from ontologies used by VIVO - should not be in vitro
|
|
||||||
DataProperty fNameDp = (new DataProperty());
|
|
||||||
fNameDp.setURI("http://xmlns.com/foaf/0.1/firstName");
|
|
||||||
DataProperty lNameDp = (new DataProperty());
|
|
||||||
lNameDp.setURI("http://xmlns.com/foaf/0.1/lastName");
|
|
||||||
DataProperty preferredTitleDp = (new DataProperty());
|
|
||||||
preferredTitleDp.setURI("http://vivoweb.org/ontology/core#preferredTitle");
|
|
||||||
|
|
||||||
if( log.isDebugEnabled() ){
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
Enumeration<String> e = vreq.getParameterNames();
|
|
||||||
while(e.hasMoreElements()){
|
|
||||||
String name = e.nextElement();
|
|
||||||
log.debug("parameter: " + name);
|
|
||||||
for( String value : vreq.getParameterValues(name) ){
|
|
||||||
log.debug("value for " + name + ": '" + value + "'");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//need an unfiltered dao to get firstnames and lastnames
|
|
||||||
WebappDaoFactory fullWdf = vreq.getUnfilteredWebappDaoFactory();
|
|
||||||
|
|
||||||
String[] vitroClassIdStr = vreq.getParameterValues("vclassId");
|
|
||||||
if ( vitroClassIdStr != null && vitroClassIdStr.length > 0){
|
|
||||||
for(String vclassId: vitroClassIdStr) {
|
|
||||||
vclass = vreq.getWebappDaoFactory().getVClassDao().getVClassByURI(vclassId);
|
|
||||||
if (vclass == null) {
|
|
||||||
log.error("Couldn't retrieve vclass ");
|
|
||||||
throw new Exception ("Class " + vclassId + " not found");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}else{
|
|
||||||
log.error("parameter vclassId URI parameter expected ");
|
|
||||||
throw new Exception("parameter vclassId URI parameter expected ");
|
|
||||||
}
|
|
||||||
List<String> vclassIds = Arrays.asList(vitroClassIdStr);
|
|
||||||
//if single vclass expected, then include vclass. This relates to what the expected behavior is, not size of list
|
|
||||||
if(!multipleVclasses) {
|
|
||||||
//currently used for ClassGroupPage
|
|
||||||
rObj.put("vclass",
|
|
||||||
new JSONObject().put("URI",vclass.getURI())
|
|
||||||
.put("name",vclass.getName()));
|
|
||||||
} else {
|
|
||||||
//For now, utilize very last VClass (assume that that is the one to be employed)
|
|
||||||
//TODO: Find more general way of dealing with this
|
|
||||||
//put multiple ones in?
|
|
||||||
if(vclassIds.size() > 0) {
|
|
||||||
int numberVClasses = vclassIds.size();
|
|
||||||
vclass = vreq.getWebappDaoFactory().getVClassDao().getVClassByURI(vclassIds.get(numberVClasses - 1));
|
|
||||||
rObj.put("vclass", new JSONObject().put("URI",vclass.getURI())
|
|
||||||
.put("name",vclass.getName()));
|
|
||||||
}
|
|
||||||
// rObj.put("vclasses", new JSONObject().put("URIs",vitroClassIdStr)
|
|
||||||
// .put("name",vclass.getName()));
|
|
||||||
}
|
|
||||||
if (vclass != null) {
|
|
||||||
|
|
||||||
rObj.put("totalCount", map.get("totalCount"));
|
|
||||||
rObj.put("alpha", map.get("alpha"));
|
|
||||||
|
|
||||||
List<Individual> inds = (List<Individual>)map.get("entities");
|
|
||||||
log.debug("Number of individuals returned from request: " + inds.size());
|
|
||||||
JSONArray jInds = new JSONArray();
|
|
||||||
for(Individual ind : inds ){
|
|
||||||
JSONObject jo = new JSONObject();
|
|
||||||
jo.put("URI", ind.getURI());
|
|
||||||
jo.put("label",ind.getRdfsLabel());
|
|
||||||
jo.put("name",ind.getName());
|
|
||||||
jo.put("thumbUrl", ind.getThumbUrl());
|
|
||||||
jo.put("imageUrl", ind.getImageUrl());
|
|
||||||
jo.put("profileUrl", UrlBuilder.getIndividualProfileUrl(ind, vreq));
|
|
||||||
|
|
||||||
jo.put("mostSpecificTypes", JsonServlet.getMostSpecificTypes(ind,fullWdf));
|
|
||||||
jo.put("preferredTitle", JsonServlet.getDataPropertyValue(ind, preferredTitleDp, fullWdf));
|
|
||||||
|
|
||||||
jInds.put(jo);
|
|
||||||
}
|
|
||||||
rObj.put("individuals", jInds);
|
|
||||||
|
|
||||||
JSONArray wpages = new JSONArray();
|
|
||||||
//Made sure that PageRecord here is SolrIndividualListController not IndividualListController
|
|
||||||
List<PageRecord> pages = (List<PageRecord>)map.get("pages");
|
|
||||||
for( PageRecord pr: pages ){
|
|
||||||
JSONObject p = new JSONObject();
|
|
||||||
p.put("text", pr.text);
|
|
||||||
p.put("param", pr.param);
|
|
||||||
p.put("index", pr.index);
|
|
||||||
wpages.put( p );
|
|
||||||
}
|
|
||||||
rObj.put("pages",wpages);
|
|
||||||
|
|
||||||
JSONArray jletters = new JSONArray();
|
|
||||||
List<String> letters = Controllers.getLetters();
|
|
||||||
for( String s : letters){
|
|
||||||
JSONObject jo = new JSONObject();
|
|
||||||
jo.put("text", s);
|
|
||||||
jo.put("param", "alpha=" + URLEncoder.encode(s, "UTF-8"));
|
|
||||||
jletters.put( jo );
|
|
||||||
}
|
|
||||||
rObj.put("letters", jletters);
|
|
||||||
}
|
|
||||||
} catch(Exception ex) {
|
|
||||||
log.error("Error occurred in processing JSON object", ex);
|
|
||||||
}
|
|
||||||
return rObj;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -126,6 +126,7 @@ public class DateTimeValueFormGenerator extends BaseEditConfigurationGenerator
|
||||||
public void addFormSpecificData(EditConfigurationVTwo editConfiguration, VitroRequest vreq) {
|
public void addFormSpecificData(EditConfigurationVTwo editConfiguration, VitroRequest vreq) {
|
||||||
HashMap<String, Object> formSpecificData = new HashMap<String, Object>();
|
HashMap<String, Object> formSpecificData = new HashMap<String, Object>();
|
||||||
formSpecificData.put("editMode", getEditMode(vreq).name().toLowerCase());
|
formSpecificData.put("editMode", getEditMode(vreq).name().toLowerCase());
|
||||||
|
formSpecificData.put("domainUri", getDomainUri(vreq));
|
||||||
editConfiguration.setFormSpecificData(formSpecificData);
|
editConfiguration.setFormSpecificData(formSpecificData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -140,4 +141,10 @@ public class DateTimeValueFormGenerator extends BaseEditConfigurationGenerator
|
||||||
}
|
}
|
||||||
return editMode;
|
return editMode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String getDomainUri(VitroRequest vreq) {
|
||||||
|
String domainUri = vreq.getParameter("domainUri");
|
||||||
|
|
||||||
|
return domainUri;
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -1,6 +1,10 @@
|
||||||
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
|
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
|
||||||
package edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators;
|
package edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators;
|
||||||
|
|
||||||
|
import static edu.cornell.mannlib.vitro.webapp.auth.requestedAction.ifaces.RequestActionConstants.SOME_LITERAL;
|
||||||
|
import static edu.cornell.mannlib.vitro.webapp.auth.requestedAction.ifaces.RequestActionConstants.SOME_PREDICATE;
|
||||||
|
import static edu.cornell.mannlib.vitro.webapp.auth.requestedAction.ifaces.RequestActionConstants.SOME_URI;
|
||||||
|
|
||||||
import java.io.FileNotFoundException;
|
import java.io.FileNotFoundException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
@ -24,14 +28,12 @@ import com.hp.hpl.jena.vocabulary.RDFS;
|
||||||
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.auth.policy.PolicyHelper;
|
import edu.cornell.mannlib.vitro.webapp.auth.policy.PolicyHelper;
|
||||||
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.Actions;
|
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.Actions;
|
||||||
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.ifaces.RequestActionConstants;
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.propstmt.AddDataPropertyStatement;
|
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.propstmt.AddDataPropertyStatement;
|
||||||
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.propstmt.AddObjectPropertyStatement;
|
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.propstmt.AddObjectPropertyStatement;
|
||||||
import edu.cornell.mannlib.vitro.webapp.beans.Individual;
|
import edu.cornell.mannlib.vitro.webapp.beans.Individual;
|
||||||
import edu.cornell.mannlib.vitro.webapp.beans.Property;
|
import edu.cornell.mannlib.vitro.webapp.beans.Property;
|
||||||
import edu.cornell.mannlib.vitro.webapp.beans.VClass;
|
import edu.cornell.mannlib.vitro.webapp.beans.VClass;
|
||||||
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
|
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory;
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.jena.QueryUtils;
|
import edu.cornell.mannlib.vitro.webapp.dao.jena.QueryUtils;
|
||||||
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationUtils;
|
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationUtils;
|
||||||
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationVTwo;
|
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationVTwo;
|
||||||
|
@ -271,11 +273,10 @@ public class ManageLabelsForIndividualGenerator extends BaseEditConfigurationGen
|
||||||
Individual individual = EditConfigurationUtils.getIndividual(vreq, config.getSubjectUri());
|
Individual individual = EditConfigurationUtils.getIndividual(vreq, config.getSubjectUri());
|
||||||
AddDataPropertyStatement adps = new AddDataPropertyStatement(
|
AddDataPropertyStatement adps = new AddDataPropertyStatement(
|
||||||
vreq.getJenaOntModel(), individual.getURI(),
|
vreq.getJenaOntModel(), individual.getURI(),
|
||||||
RequestActionConstants.SOME_URI);
|
SOME_URI, SOME_LITERAL);
|
||||||
AddObjectPropertyStatement aops = new AddObjectPropertyStatement(
|
AddObjectPropertyStatement aops = new AddObjectPropertyStatement(
|
||||||
vreq.getJenaOntModel(), individual.getURI(),
|
vreq.getJenaOntModel(), individual.getURI(),
|
||||||
RequestActionConstants.SOME_PREDICATE,
|
SOME_PREDICATE, SOME_URI);
|
||||||
RequestActionConstants.SOME_URI);
|
|
||||||
return PolicyHelper.isAuthorizedForActions(vreq, new Actions(adps).or(aops));
|
return PolicyHelper.isAuthorizedForActions(vreq, new Actions(adps).or(aops));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -55,6 +55,15 @@ public class PostEditCleanupController extends FreemarkerHttpServlet{
|
||||||
return new RedirectResponseValues( UrlBuilder.getHomeUrl() );
|
return new RedirectResponseValues( UrlBuilder.getHomeUrl() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//In some cases, a generator/form may have a regular URL to return to but the same generator
|
||||||
|
//may be used from different pages, so a parameter allowing the form to return to a specific page
|
||||||
|
//would be useful
|
||||||
|
|
||||||
|
String returnURLParameter = vreq.getParameter("returnURL");
|
||||||
|
if(returnURLParameter != null) {
|
||||||
|
return new DirectRedirectResponseValues( returnURLParameter );
|
||||||
|
}
|
||||||
|
|
||||||
// If there is a urlToReturnTo that takes precedence
|
// If there is a urlToReturnTo that takes precedence
|
||||||
if( editConfig.getUrlToReturnTo() != null && ! editConfig.getUrlToReturnTo().trim().isEmpty()){
|
if( editConfig.getUrlToReturnTo() != null && ! editConfig.getUrlToReturnTo().trim().isEmpty()){
|
||||||
//this does not get value substitution or the predicate anchor
|
//this does not get value substitution or the predicate anchor
|
||||||
|
|
|
@ -439,9 +439,13 @@ public class FakeApplicationOntologyService {
|
||||||
* "display model". The query finds a preferred title for the individual.
|
* "display model". The query finds a preferred title for the individual.
|
||||||
*/
|
*/
|
||||||
private static class FakeVivoPeopleDataGetter extends SparqlQueryDataGetter {
|
private static class FakeVivoPeopleDataGetter extends SparqlQueryDataGetter {
|
||||||
private static final String QUERY_STRING = "SELECT ?uri ?pt WHERE {\n"
|
private static String QUERY_STRING = ""
|
||||||
+ " ?uri <http://vivoweb.org/ontology/core#preferredTitle> ?pt\n"
|
+ "PREFIX obo: <http://purl.obolibrary.org/obo/> \n"
|
||||||
+ "} LIMIT 1";
|
+ "PREFIX vcard: <http://www.w3.org/2006/vcard/ns#> \n"
|
||||||
|
+ "SELECT ?uri ?pt \n" + "WHERE { \n"
|
||||||
|
+ " ?uri obo:ARG_2000028 ?vIndividual . \n"
|
||||||
|
+ " ?vIndividual vcard:hasTitle ?vTitle . \n"
|
||||||
|
+ " ?vTitle vcard:title ?pt . \n" + "} LIMIT 1";
|
||||||
|
|
||||||
private static final String FAKE_VIVO_PEOPLE_DATA_GETTER_URI = "http://FakeVivoPeopleDataGetter";
|
private static final String FAKE_VIVO_PEOPLE_DATA_GETTER_URI = "http://FakeVivoPeopleDataGetter";
|
||||||
|
|
||||||
|
|
|
@ -188,6 +188,7 @@ public class FileGraphSetup implements ServletContextListener {
|
||||||
baseModel.add(model);
|
baseModel.add(model);
|
||||||
}
|
}
|
||||||
log.info("Attached file graph as " + type + " submodel " + p.getFileName());
|
log.info("Attached file graph as " + type + " submodel " + p.getFileName());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
modelChanged = modelChanged | updateGraphInDB(dataset, model, type, p);
|
modelChanged = modelChanged | updateGraphInDB(dataset, model, type, p);
|
||||||
|
|
|
@ -87,14 +87,23 @@ public class RDFFilesLoader {
|
||||||
OntModel model) {
|
OntModel model) {
|
||||||
OntModel everytimeModel = ModelFactory
|
OntModel everytimeModel = ModelFactory
|
||||||
.createOntologyModel(OntModelSpec.OWL_MEM);
|
.createOntologyModel(OntModelSpec.OWL_MEM);
|
||||||
Set<Path> paths = getPaths(locateHomeDirectory(ctx), RDF, modelPath,
|
String home = locateHomeDirectory(ctx);
|
||||||
EVERY_TIME);
|
Set<Path> paths = getPaths(home, RDF, modelPath, EVERY_TIME);
|
||||||
for (Path p : paths) {
|
for (Path p : paths) {
|
||||||
|
log.info("Loading " + relativePath(p, home));
|
||||||
readOntologyFileIntoModel(p, everytimeModel);
|
readOntologyFileIntoModel(p, everytimeModel);
|
||||||
}
|
}
|
||||||
model.addSubModel(everytimeModel);
|
model.addSubModel(everytimeModel);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static Path relativePath(Path p, String home) {
|
||||||
|
try {
|
||||||
|
return Paths.get(home).relativize(p);
|
||||||
|
} catch (Exception e) {
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a model from all the RDF files in the specified directory.
|
* Create a model from all the RDF files in the specified directory.
|
||||||
*/
|
*/
|
||||||
|
@ -148,7 +157,7 @@ public class RDFFilesLoader {
|
||||||
|
|
||||||
private static void readOntologyFileIntoModel(Path p, Model model) {
|
private static void readOntologyFileIntoModel(Path p, Model model) {
|
||||||
String format = getRdfFormat(p);
|
String format = getRdfFormat(p);
|
||||||
log.info("Loading "+ p);
|
log.debug("Loading "+ p);
|
||||||
try (InputStream stream = new FileInputStream(p.toFile())) {
|
try (InputStream stream = new FileInputStream(p.toFile())) {
|
||||||
model.read(stream, null, format);
|
model.read(stream, null, format);
|
||||||
log.debug("...successful");
|
log.debug("...successful");
|
||||||
|
|
|
@ -3,10 +3,7 @@ package edu.cornell.mannlib.vitro.webapp.utils.dataGetter;
|
||||||
|
|
||||||
import java.lang.reflect.Constructor;
|
import java.lang.reflect.Constructor;
|
||||||
import java.lang.reflect.InvocationTargetException;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
import java.net.URLEncoder;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Enumeration;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
@ -17,7 +14,6 @@ import javax.servlet.http.HttpServletRequest;
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang.StringUtils;
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
import org.json.JSONArray;
|
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
|
|
||||||
import com.hp.hpl.jena.query.Query;
|
import com.hp.hpl.jena.query.Query;
|
||||||
|
@ -35,20 +31,13 @@ import com.hp.hpl.jena.rdf.model.ResourceFactory;
|
||||||
import com.hp.hpl.jena.shared.Lock;
|
import com.hp.hpl.jena.shared.Lock;
|
||||||
import com.hp.hpl.jena.vocabulary.OWL;
|
import com.hp.hpl.jena.vocabulary.OWL;
|
||||||
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.beans.DataProperty;
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.beans.Individual;
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.beans.VClass;
|
import edu.cornell.mannlib.vitro.webapp.beans.VClass;
|
||||||
import edu.cornell.mannlib.vitro.webapp.beans.VClassGroup;
|
import edu.cornell.mannlib.vitro.webapp.beans.VClassGroup;
|
||||||
import edu.cornell.mannlib.vitro.webapp.controller.Controllers;
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
|
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
|
||||||
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.IndividualListController;
|
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.IndividualListController;
|
||||||
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.IndividualListController.PageRecord;
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder;
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.controller.json.JsonServlet;
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.DisplayVocabulary;
|
import edu.cornell.mannlib.vitro.webapp.dao.DisplayVocabulary;
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.VClassGroupsForRequest;
|
import edu.cornell.mannlib.vitro.webapp.dao.VClassGroupsForRequest;
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary;
|
import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary;
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory;
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.jena.VClassGroupCache;
|
import edu.cornell.mannlib.vitro.webapp.dao.jena.VClassGroupCache;
|
||||||
|
|
||||||
|
|
||||||
|
@ -324,123 +313,6 @@ public class DataGetterUtils {
|
||||||
return classGroupUri;
|
return classGroupUri;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Process results related to VClass or vclasses. Handles both single and multiple vclasses being sent.
|
|
||||||
*/
|
|
||||||
public static JSONObject processVclassResultsJSON(Map<String, Object> map, VitroRequest vreq, boolean multipleVclasses) {
|
|
||||||
JSONObject rObj = new JSONObject();
|
|
||||||
VClass vclass=null;
|
|
||||||
|
|
||||||
try {
|
|
||||||
|
|
||||||
// Properties from ontologies used by VIVO - should not be in vitro
|
|
||||||
DataProperty fNameDp = (new DataProperty());
|
|
||||||
fNameDp.setURI("http://xmlns.com/foaf/0.1/firstName");
|
|
||||||
DataProperty lNameDp = (new DataProperty());
|
|
||||||
lNameDp.setURI("http://xmlns.com/foaf/0.1/lastName");
|
|
||||||
DataProperty preferredTitleDp = (new DataProperty());
|
|
||||||
preferredTitleDp.setURI("http://vivoweb.org/ontology/core#preferredTitle");
|
|
||||||
|
|
||||||
if( log.isDebugEnabled() ){
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
Enumeration<String> e = vreq.getParameterNames();
|
|
||||||
while(e.hasMoreElements()){
|
|
||||||
String name = e.nextElement();
|
|
||||||
log.debug("parameter: " + name);
|
|
||||||
for( String value : vreq.getParameterValues(name) ){
|
|
||||||
log.debug("value for " + name + ": '" + value + "'");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//need an unfiltered dao to get firstnames and lastnames
|
|
||||||
WebappDaoFactory fullWdf = vreq.getUnfilteredWebappDaoFactory();
|
|
||||||
|
|
||||||
String[] vitroClassIdStr = vreq.getParameterValues("vclassId");
|
|
||||||
if ( vitroClassIdStr != null && vitroClassIdStr.length > 0){
|
|
||||||
for(String vclassId: vitroClassIdStr) {
|
|
||||||
vclass = vreq.getWebappDaoFactory().getVClassDao().getVClassByURI(vclassId);
|
|
||||||
if (vclass == null) {
|
|
||||||
log.error("Couldn't retrieve vclass ");
|
|
||||||
throw new Exception ("Class " + vclassId + " not found");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}else{
|
|
||||||
log.error("parameter vclassId URI parameter expected ");
|
|
||||||
throw new Exception("parameter vclassId URI parameter expected ");
|
|
||||||
}
|
|
||||||
List<String> vclassIds = Arrays.asList(vitroClassIdStr);
|
|
||||||
//if single vclass expected, then include vclass. This relates to what the expected behavior is, not size of list
|
|
||||||
if(!multipleVclasses) {
|
|
||||||
//currently used for ClassGroupPage
|
|
||||||
rObj.put("vclass",
|
|
||||||
new JSONObject().put("URI",vclass.getURI())
|
|
||||||
.put("name",vclass.getName()));
|
|
||||||
} else {
|
|
||||||
//For now, utilize very last VClass (assume that that is the one to be employed)
|
|
||||||
//TODO: Find more general way of dealing with this
|
|
||||||
//put multiple ones in?
|
|
||||||
if(vclassIds.size() > 0) {
|
|
||||||
int numberVClasses = vclassIds.size();
|
|
||||||
vclass = vreq.getWebappDaoFactory().getVClassDao().getVClassByURI(vclassIds.get(numberVClasses - 1));
|
|
||||||
rObj.put("vclass", new JSONObject().put("URI",vclass.getURI())
|
|
||||||
.put("name",vclass.getName()));
|
|
||||||
}
|
|
||||||
// rObj.put("vclasses", new JSONObject().put("URIs",vitroClassIdStr)
|
|
||||||
// .put("name",vclass.getName()));
|
|
||||||
}
|
|
||||||
if (vclass != null) {
|
|
||||||
|
|
||||||
rObj.put("totalCount", map.get("totalCount"));
|
|
||||||
rObj.put("alpha", map.get("alpha"));
|
|
||||||
|
|
||||||
List<Individual> inds = (List<Individual>)map.get("entities");
|
|
||||||
log.debug("Number of individuals returned from request: " + inds.size());
|
|
||||||
JSONArray jInds = new JSONArray();
|
|
||||||
for(Individual ind : inds ){
|
|
||||||
JSONObject jo = new JSONObject();
|
|
||||||
jo.put("URI", ind.getURI());
|
|
||||||
jo.put("label",ind.getRdfsLabel());
|
|
||||||
jo.put("name",ind.getName());
|
|
||||||
jo.put("thumbUrl", ind.getThumbUrl());
|
|
||||||
jo.put("imageUrl", ind.getImageUrl());
|
|
||||||
jo.put("profileUrl", UrlBuilder.getIndividualProfileUrl(ind, vreq));
|
|
||||||
|
|
||||||
jo.put("mostSpecificTypes", JsonServlet.getMostSpecificTypes(ind,fullWdf));
|
|
||||||
jo.put("preferredTitle", JsonServlet.getDataPropertyValue(ind, preferredTitleDp, fullWdf));
|
|
||||||
|
|
||||||
jInds.put(jo);
|
|
||||||
}
|
|
||||||
rObj.put("individuals", jInds);
|
|
||||||
|
|
||||||
JSONArray wpages = new JSONArray();
|
|
||||||
//Made sure that PageRecord here is SolrIndividualListController not IndividualListController
|
|
||||||
List<PageRecord> pages = (List<PageRecord>)map.get("pages");
|
|
||||||
for( PageRecord pr: pages ){
|
|
||||||
JSONObject p = new JSONObject();
|
|
||||||
p.put("text", pr.text);
|
|
||||||
p.put("param", pr.param);
|
|
||||||
p.put("index", pr.index);
|
|
||||||
wpages.put( p );
|
|
||||||
}
|
|
||||||
rObj.put("pages",wpages);
|
|
||||||
|
|
||||||
JSONArray jletters = new JSONArray();
|
|
||||||
List<String> letters = Controllers.getLetters();
|
|
||||||
for( String s : letters){
|
|
||||||
JSONObject jo = new JSONObject();
|
|
||||||
jo.put("text", s);
|
|
||||||
jo.put("param", "alpha=" + URLEncoder.encode(s, "UTF-8"));
|
|
||||||
jletters.put( jo );
|
|
||||||
}
|
|
||||||
rObj.put("letters", jletters);
|
|
||||||
}
|
|
||||||
} catch(Exception ex) {
|
|
||||||
log.error("Error occurred in processing JSON object", ex);
|
|
||||||
}
|
|
||||||
return rObj;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static final String forClassGroupURI = "<" + DisplayVocabulary.FOR_CLASSGROUP + ">";
|
private static final String forClassGroupURI = "<" + DisplayVocabulary.FOR_CLASSGROUP + ">";
|
||||||
|
|
||||||
private static final String classGroupForDataGetterQuery =
|
private static final String classGroupForDataGetterQuery =
|
||||||
|
|
|
@ -353,11 +353,12 @@ public class IndividualsForClassesDataGetter extends DataGetterBase implements D
|
||||||
public String getDataServiceUrl() {
|
public String getDataServiceUrl() {
|
||||||
return UrlBuilder.getUrl("/dataservice?getRenderedSolrIndividualsByVClass=1&vclassId=");
|
return UrlBuilder.getUrl("/dataservice?getRenderedSolrIndividualsByVClass=1&vclassId=");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* For processig of JSONObject
|
* For processig of JSONObject
|
||||||
*/
|
*/
|
||||||
public JSONObject convertToJSON(Map<String, Object> map, VitroRequest vreq) {
|
public JSONObject convertToJSON(Map<String, Object> dataMap, VitroRequest vreq) {
|
||||||
JSONObject rObj = DataGetterUtils.processVclassResultsJSON(map, vreq, true);
|
JSONObject rObj = null;
|
||||||
return rObj;
|
return rObj;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,9 +3,7 @@ package edu.cornell.mannlib.vitro.webapp.utils.dataGetter;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
@ -23,7 +21,6 @@ import com.hp.hpl.jena.query.QuerySolutionMap;
|
||||||
import com.hp.hpl.jena.query.ResultSet;
|
import com.hp.hpl.jena.query.ResultSet;
|
||||||
import com.hp.hpl.jena.rdf.model.Literal;
|
import com.hp.hpl.jena.rdf.model.Literal;
|
||||||
import com.hp.hpl.jena.rdf.model.Model;
|
import com.hp.hpl.jena.rdf.model.Model;
|
||||||
import com.hp.hpl.jena.rdf.model.RDFNode;
|
|
||||||
import com.hp.hpl.jena.rdf.model.Resource;
|
import com.hp.hpl.jena.rdf.model.Resource;
|
||||||
import com.hp.hpl.jena.rdf.model.ResourceFactory;
|
import com.hp.hpl.jena.rdf.model.ResourceFactory;
|
||||||
import com.hp.hpl.jena.shared.Lock;
|
import com.hp.hpl.jena.shared.Lock;
|
||||||
|
@ -33,8 +30,9 @@ import edu.cornell.mannlib.vitro.webapp.beans.VClass;
|
||||||
import edu.cornell.mannlib.vitro.webapp.beans.VClassGroup;
|
import edu.cornell.mannlib.vitro.webapp.beans.VClassGroup;
|
||||||
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
|
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
|
||||||
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.IndividualListController;
|
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.IndividualListController;
|
||||||
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder;
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.IndividualListController.SearchException;
|
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.IndividualListController.SearchException;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.controller.individuallist.IndividualListResults;
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.DisplayVocabulary;
|
import edu.cornell.mannlib.vitro.webapp.dao.DisplayVocabulary;
|
||||||
import edu.cornell.mannlib.vitro.webapp.utils.solr.SolrQueryUtils;
|
import edu.cornell.mannlib.vitro.webapp.utils.solr.SolrQueryUtils;
|
||||||
import edu.cornell.mannlib.vitro.webapp.web.templatemodels.individuallist.ListedIndividual;
|
import edu.cornell.mannlib.vitro.webapp.web.templatemodels.individuallist.ListedIndividual;
|
||||||
|
@ -174,16 +172,15 @@ public class SolrIndividualsDataGetter extends DataGetterBase implements DataGet
|
||||||
try {
|
try {
|
||||||
String alpha = SolrQueryUtils.getAlphaParameter(vreq);
|
String alpha = SolrQueryUtils.getAlphaParameter(vreq);
|
||||||
int page = SolrQueryUtils.getPageParameter(vreq);
|
int page = SolrQueryUtils.getPageParameter(vreq);
|
||||||
Map<String,Object> map = IndividualListController.getResultsForVClass(
|
IndividualListResults vcResults = IndividualListController.getResultsForVClass(
|
||||||
vclass.getURI(),
|
vclass.getURI(),
|
||||||
page,
|
page,
|
||||||
alpha,
|
alpha,
|
||||||
vreq.getWebappDaoFactory().getIndividualDao(),
|
vreq.getWebappDaoFactory().getIndividualDao(),
|
||||||
vreq.getSession().getServletContext());
|
vreq.getSession().getServletContext());
|
||||||
body.putAll(map);
|
body.putAll(vcResults.asFreemarkerMap());
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
List<Individual> inds = vcResults.getEntities();
|
||||||
List<Individual> inds = (List<Individual>)map.get("entities");
|
|
||||||
List<ListedIndividual> indsTm = new ArrayList<ListedIndividual>();
|
List<ListedIndividual> indsTm = new ArrayList<ListedIndividual>();
|
||||||
if (inds != null) {
|
if (inds != null) {
|
||||||
for ( Individual ind : inds ) {
|
for ( Individual ind : inds ) {
|
||||||
|
|
|
@ -4,8 +4,6 @@ package edu.cornell.mannlib.vitro.webapp.utils.solr;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
@ -20,9 +18,7 @@ import org.apache.solr.client.solrj.SolrServerException;
|
||||||
import org.apache.solr.client.solrj.response.QueryResponse;
|
import org.apache.solr.client.solrj.response.QueryResponse;
|
||||||
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
|
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
|
||||||
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.IndividualListController;
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.IndividualListQueryResults;
|
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.IndividualListQueryResults;
|
||||||
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.IndividualListController.SearchException;
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.IndividualDao;
|
import edu.cornell.mannlib.vitro.webapp.dao.IndividualDao;
|
||||||
import edu.cornell.mannlib.vitro.webapp.search.VitroSearchTermNames;
|
import edu.cornell.mannlib.vitro.webapp.search.VitroSearchTermNames;
|
||||||
import edu.cornell.mannlib.vitro.webapp.search.solr.SolrSetup;
|
import edu.cornell.mannlib.vitro.webapp.search.solr.SolrSetup;
|
||||||
|
|
|
@ -666,7 +666,13 @@ public class EditConfigurationTemplateModel extends BaseTemplateModel {
|
||||||
//this url is for canceling
|
//this url is for canceling
|
||||||
public String getCancelUrl() {
|
public String getCancelUrl() {
|
||||||
String editKey = editConfig.getEditKey();
|
String editKey = editConfig.getEditKey();
|
||||||
return EditConfigurationUtils.getCancelUrlBase(vreq) + "?editKey=" + editKey + "&cancel=true";
|
String cancelURL = EditConfigurationUtils.getCancelUrlBase(vreq) + "?editKey=" + editKey + "&cancel=true";
|
||||||
|
//Check for special return url parameter
|
||||||
|
String returnURLParameter = vreq.getParameter("returnURL");
|
||||||
|
if(returnURLParameter != null && !returnURLParameter.isEmpty() ) {
|
||||||
|
cancelURL += "&returnURL=" + returnURLParameter;
|
||||||
|
}
|
||||||
|
return cancelURL;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Get confirm deletion url
|
//Get confirm deletion url
|
||||||
|
|
|
@ -2,6 +2,10 @@
|
||||||
|
|
||||||
package edu.cornell.mannlib.vitro.webapp.web.templatemodels.individual;
|
package edu.cornell.mannlib.vitro.webapp.web.templatemodels.individual;
|
||||||
|
|
||||||
|
import static edu.cornell.mannlib.vitro.webapp.auth.requestedAction.ifaces.RequestActionConstants.SOME_LITERAL;
|
||||||
|
import static edu.cornell.mannlib.vitro.webapp.auth.requestedAction.ifaces.RequestActionConstants.SOME_PREDICATE;
|
||||||
|
import static edu.cornell.mannlib.vitro.webapp.auth.requestedAction.ifaces.RequestActionConstants.SOME_URI;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
@ -16,7 +20,6 @@ import edu.cornell.mannlib.vedit.beans.LoginStatusBean;
|
||||||
import edu.cornell.mannlib.vitro.webapp.auth.permissions.SimplePermission;
|
import edu.cornell.mannlib.vitro.webapp.auth.permissions.SimplePermission;
|
||||||
import edu.cornell.mannlib.vitro.webapp.auth.policy.PolicyHelper;
|
import edu.cornell.mannlib.vitro.webapp.auth.policy.PolicyHelper;
|
||||||
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.Actions;
|
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.Actions;
|
||||||
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.ifaces.RequestActionConstants;
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.propstmt.AddDataPropertyStatement;
|
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.propstmt.AddDataPropertyStatement;
|
||||||
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.propstmt.AddObjectPropertyStatement;
|
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.propstmt.AddObjectPropertyStatement;
|
||||||
import edu.cornell.mannlib.vitro.webapp.beans.DataPropertyStatement;
|
import edu.cornell.mannlib.vitro.webapp.beans.DataPropertyStatement;
|
||||||
|
@ -116,11 +119,10 @@ public abstract class BaseIndividualTemplateModel extends BaseTemplateModel {
|
||||||
public boolean isEditable() {
|
public boolean isEditable() {
|
||||||
AddDataPropertyStatement adps = new AddDataPropertyStatement(
|
AddDataPropertyStatement adps = new AddDataPropertyStatement(
|
||||||
vreq.getJenaOntModel(), individual.getURI(),
|
vreq.getJenaOntModel(), individual.getURI(),
|
||||||
RequestActionConstants.SOME_URI);
|
SOME_URI, SOME_LITERAL);
|
||||||
AddObjectPropertyStatement aops = new AddObjectPropertyStatement(
|
AddObjectPropertyStatement aops = new AddObjectPropertyStatement(
|
||||||
vreq.getJenaOntModel(), individual.getURI(),
|
vreq.getJenaOntModel(), individual.getURI(),
|
||||||
RequestActionConstants.SOME_PREDICATE,
|
SOME_PREDICATE, SOME_URI);
|
||||||
RequestActionConstants.SOME_URI);
|
|
||||||
return PolicyHelper.isAuthorizedForActions(vreq, new Actions(adps).or(aops));
|
return PolicyHelper.isAuthorizedForActions(vreq, new Actions(adps).or(aops));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,8 @@
|
||||||
|
|
||||||
package edu.cornell.mannlib.vitro.webapp.web.templatemodels.individual;
|
package edu.cornell.mannlib.vitro.webapp.web.templatemodels.individual;
|
||||||
|
|
||||||
|
import static edu.cornell.mannlib.vitro.webapp.auth.requestedAction.ifaces.RequestActionConstants.SOME_LITERAL;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
@ -118,7 +120,7 @@ public class DataPropertyTemplateModel extends PropertyTemplateModel {
|
||||||
|
|
||||||
// Determine whether a new statement can be added
|
// Determine whether a new statement can be added
|
||||||
RequestedAction action = new AddDataPropertyStatement(
|
RequestedAction action = new AddDataPropertyStatement(
|
||||||
vreq.getJenaOntModel(), subjectUri, propertyUri);
|
vreq.getJenaOntModel(), subjectUri, propertyUri, SOME_LITERAL);
|
||||||
if ( ! PolicyHelper.isAuthorizedForActions(vreq, action) ) {
|
if ( ! PolicyHelper.isAuthorizedForActions(vreq, action) ) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@ package edu.cornell.mannlib.vitro.webapp.auth.policy;
|
||||||
|
|
||||||
import static edu.cornell.mannlib.vitro.webapp.auth.policy.ifaces.Authorization.AUTHORIZED;
|
import static edu.cornell.mannlib.vitro.webapp.auth.policy.ifaces.Authorization.AUTHORIZED;
|
||||||
import static edu.cornell.mannlib.vitro.webapp.auth.policy.ifaces.Authorization.INCONCLUSIVE;
|
import static edu.cornell.mannlib.vitro.webapp.auth.policy.ifaces.Authorization.INCONCLUSIVE;
|
||||||
|
import static edu.cornell.mannlib.vitro.webapp.auth.requestedAction.ifaces.RequestActionConstants.SOME_LITERAL;
|
||||||
import static junit.framework.Assert.assertEquals;
|
import static junit.framework.Assert.assertEquals;
|
||||||
import static junit.framework.Assert.assertNotNull;
|
import static junit.framework.Assert.assertNotNull;
|
||||||
import static junit.framework.Assert.assertNull;
|
import static junit.framework.Assert.assertNull;
|
||||||
|
@ -31,6 +32,7 @@ import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.admin.RebuildTextIn
|
||||||
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.admin.RemoveUser;
|
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.admin.RemoveUser;
|
||||||
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.admin.ServerStatus;
|
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.admin.ServerStatus;
|
||||||
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.admin.UpdateTextIndex;
|
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.admin.UpdateTextIndex;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.ifaces.RequestActionConstants;
|
||||||
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.ifaces.RequestedAction;
|
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.ifaces.RequestedAction;
|
||||||
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.ontology.CreateOwlClass;
|
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.ontology.CreateOwlClass;
|
||||||
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.ontology.DefineDataProperty;
|
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.ontology.DefineDataProperty;
|
||||||
|
@ -125,19 +127,19 @@ public class SelfEditingPolicyTest extends AbstractTestClass {
|
||||||
|
|
||||||
// now with dataprop statements
|
// now with dataprop statements
|
||||||
whatToAuth = new AddDataPropertyStatement(ontModel, SELFEDITOR_URI,
|
whatToAuth = new AddDataPropertyStatement(ontModel, SELFEDITOR_URI,
|
||||||
"http://mannlib.cornell.edu/bad#prp234");
|
"http://mannlib.cornell.edu/bad#prp234", SOME_LITERAL);
|
||||||
assertDecision(INCONCLUSIVE, policy.isAuthorized(ids, whatToAuth));
|
assertDecision(INCONCLUSIVE, policy.isAuthorized(ids, whatToAuth));
|
||||||
|
|
||||||
whatToAuth = new AddDataPropertyStatement(ontModel, SELFEDITOR_URI,
|
whatToAuth = new AddDataPropertyStatement(ontModel, SELFEDITOR_URI,
|
||||||
"http://mannlib.cornell.edu/bad#prp999");
|
"http://mannlib.cornell.edu/bad#prp999", SOME_LITERAL);
|
||||||
assertDecision(INCONCLUSIVE, policy.isAuthorized(ids, whatToAuth));
|
assertDecision(INCONCLUSIVE, policy.isAuthorized(ids, whatToAuth));
|
||||||
|
|
||||||
whatToAuth = new AddDataPropertyStatement(ontModel, SELFEDITOR_URI,
|
whatToAuth = new AddDataPropertyStatement(ontModel, SELFEDITOR_URI,
|
||||||
SAFE_PREDICATE.getURI());
|
SAFE_PREDICATE.getURI(), SOME_LITERAL);
|
||||||
assertDecision(AUTHORIZED, policy.isAuthorized(ids, whatToAuth));
|
assertDecision(AUTHORIZED, policy.isAuthorized(ids, whatToAuth));
|
||||||
|
|
||||||
whatToAuth = new AddDataPropertyStatement(ontModel, SELFEDITOR_URI,
|
whatToAuth = new AddDataPropertyStatement(ontModel, SELFEDITOR_URI,
|
||||||
UNSAFE_PREDICATE.getURI());
|
UNSAFE_PREDICATE.getURI(), SOME_LITERAL);
|
||||||
assertDecision(INCONCLUSIVE, policy.isAuthorized(ids, whatToAuth));
|
assertDecision(INCONCLUSIVE, policy.isAuthorized(ids, whatToAuth));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -219,16 +221,16 @@ public class SelfEditingPolicyTest extends AbstractTestClass {
|
||||||
//
|
//
|
||||||
@Test
|
@Test
|
||||||
public void testVisitIdentifierBundleEditDataPropStmt() {
|
public void testVisitIdentifierBundleEditDataPropStmt() {
|
||||||
whatToAuth = new EditDataPropertyStatement(ontModel, SELFEDITOR_URI,SAFE_PREDICATE.getURI());
|
whatToAuth = new EditDataPropertyStatement(ontModel, SELFEDITOR_URI,SAFE_PREDICATE.getURI(), SOME_LITERAL);
|
||||||
assertDecision(AUTHORIZED, policy.isAuthorized(ids, whatToAuth));
|
assertDecision(AUTHORIZED, policy.isAuthorized(ids, whatToAuth));
|
||||||
|
|
||||||
whatToAuth = new EditDataPropertyStatement(ontModel, SELFEDITOR_URI, UNSAFE_PREDICATE.getURI());
|
whatToAuth = new EditDataPropertyStatement(ontModel, SELFEDITOR_URI, UNSAFE_PREDICATE.getURI(), SOME_LITERAL);
|
||||||
assertDecision(INCONCLUSIVE, policy.isAuthorized(ids, whatToAuth));
|
assertDecision(INCONCLUSIVE, policy.isAuthorized(ids, whatToAuth));
|
||||||
|
|
||||||
whatToAuth = new EditDataPropertyStatement(ontModel, UNSAFE_RESOURCE, SAFE_PREDICATE.getURI());
|
whatToAuth = new EditDataPropertyStatement(ontModel, UNSAFE_RESOURCE, SAFE_PREDICATE.getURI(), SOME_LITERAL);
|
||||||
assertDecision(INCONCLUSIVE, policy.isAuthorized(ids, whatToAuth));
|
assertDecision(INCONCLUSIVE, policy.isAuthorized(ids, whatToAuth));
|
||||||
|
|
||||||
whatToAuth = new EditDataPropertyStatement(ontModel, SAFE_RESOURCE, SAFE_PREDICATE.getURI());
|
whatToAuth = new EditDataPropertyStatement(ontModel, SAFE_RESOURCE, SAFE_PREDICATE.getURI(), SOME_LITERAL);
|
||||||
assertDecision(INCONCLUSIVE, policy.isAuthorized(ids, whatToAuth));
|
assertDecision(INCONCLUSIVE, policy.isAuthorized(ids, whatToAuth));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -288,7 +290,7 @@ public class SelfEditingPolicyTest extends AbstractTestClass {
|
||||||
public void twoSEIsFindDataPropertySubject() {
|
public void twoSEIsFindDataPropertySubject() {
|
||||||
setUpTwoSEIs();
|
setUpTwoSEIs();
|
||||||
|
|
||||||
whatToAuth = new EditDataPropertyStatement(ontModel, SELFEDITOR_URI, SAFE_PREDICATE.getURI());
|
whatToAuth = new EditDataPropertyStatement(ontModel, SELFEDITOR_URI, SAFE_PREDICATE.getURI(), SOME_LITERAL);
|
||||||
assertDecision(AUTHORIZED, policy.isAuthorized(ids, whatToAuth));
|
assertDecision(AUTHORIZED, policy.isAuthorized(ids, whatToAuth));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -296,7 +298,7 @@ public class SelfEditingPolicyTest extends AbstractTestClass {
|
||||||
public void twoSEIsDontFindInDataProperty() {
|
public void twoSEIsDontFindInDataProperty() {
|
||||||
setUpTwoSEIs();
|
setUpTwoSEIs();
|
||||||
|
|
||||||
whatToAuth = new EditDataPropertyStatement(ontModel, SAFE_RESOURCE, SAFE_PREDICATE.getURI());
|
whatToAuth = new EditDataPropertyStatement(ontModel, SAFE_RESOURCE, SAFE_PREDICATE.getURI(), SOME_LITERAL);
|
||||||
assertDecision(INCONCLUSIVE, policy.isAuthorized(ids, whatToAuth));
|
assertDecision(INCONCLUSIVE, policy.isAuthorized(ids, whatToAuth));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,8 @@
|
||||||
|
|
||||||
package edu.cornell.mannlib.vitro.webapp.auth.policy;
|
package edu.cornell.mannlib.vitro.webapp.auth.policy;
|
||||||
|
|
||||||
|
import static edu.cornell.mannlib.vitro.webapp.auth.requestedAction.ifaces.RequestActionConstants.SOME_LITERAL;
|
||||||
|
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
|
@ -306,7 +308,7 @@ public class SelfEditingPolicy_2_Test extends AbstractTestClass {
|
||||||
private void assertEditDataPropStmt(String individualURI,
|
private void assertEditDataPropStmt(String individualURI,
|
||||||
String datapropURI, String data, Authorization expectedAuthorization) {
|
String datapropURI, String data, Authorization expectedAuthorization) {
|
||||||
EditDataPropertyStatement whatToAuth = new EditDataPropertyStatement(
|
EditDataPropertyStatement whatToAuth = new EditDataPropertyStatement(
|
||||||
ontModel, individualURI, datapropURI);
|
ontModel, individualURI, datapropURI, SOME_LITERAL);
|
||||||
PolicyDecision dec = policy.isAuthorized(ids, whatToAuth);
|
PolicyDecision dec = policy.isAuthorized(ids, whatToAuth);
|
||||||
log.debug(dec);
|
log.debug(dec);
|
||||||
Assert.assertNotNull(dec);
|
Assert.assertNotNull(dec);
|
||||||
|
|
|
@ -134,10 +134,6 @@ submit_add_new_account = Add new account
|
||||||
|
|
||||||
account_created = Your {0} account has been created.
|
account_created = Your {0} account has been created.
|
||||||
account_created_subject = Your {0} account has been created.
|
account_created_subject = Your {0} account has been created.
|
||||||
account_created_email_html = @@file files/accountCreatedEmail.html
|
|
||||||
account_created_email_text = @@file files/accountCreatedEmail.txt
|
|
||||||
account_created_external_email_html = @@file files/accountCreatedExternalOnlyEmail.html
|
|
||||||
account_created_external_email_text = @@file files/accountCreatedExternalOnlyEmail.txt
|
|
||||||
|
|
||||||
confirm_delete_account_singular = Are you sure you want to delete this account?
|
confirm_delete_account_singular = Are you sure you want to delete this account?
|
||||||
confirm_delete_account_plural = Are you sure you want to delete these accounts?
|
confirm_delete_account_plural = Are you sure you want to delete these accounts?
|
||||||
|
@ -156,21 +152,11 @@ select_associated_profile = Select the associated profile
|
||||||
create_associated_profile = Create the associated profile
|
create_associated_profile = Create the associated profile
|
||||||
|
|
||||||
email_changed_subject = Your {0} email account has been changed.
|
email_changed_subject = Your {0} email account has been changed.
|
||||||
email_changed_html = @@file files/accountEmailChanged.html
|
|
||||||
email_changed_text = @@file files/accountEmailChanged.txt
|
|
||||||
|
|
||||||
create_your_password = Create your Password
|
create_your_password = Create your Password
|
||||||
password_created_subject = Your {0} password has successfully been created.
|
password_created_subject = Your {0} password has successfully been created.
|
||||||
password_created_email_html = @@file files/passwordCreatedEmail.html
|
|
||||||
password_created_email_text = @@file files/passwordCreatedEmail.txt
|
|
||||||
|
|
||||||
password_reset_pending_subject = {0} reset password request
|
password_reset_pending_subject = {0} reset password request
|
||||||
password_reset_pending_email_html = @@file files/passwordResetPending.html
|
|
||||||
password_reset_pending_email_text = @@file files/passwordResetPending.txt
|
|
||||||
|
|
||||||
password_reset_complete_subject = Your {0} password changed.
|
password_reset_complete_subject = Your {0} password changed.
|
||||||
password_reset_complete_email_html = @@file files/passwordResetComplete.html
|
|
||||||
password_reset_complete_email_text = @@file files/passwordResetComplete.txt
|
|
||||||
|
|
||||||
reset_your_password = Reset your Password
|
reset_your_password = Reset your Password
|
||||||
first_time_login = First time log in
|
first_time_login = First time log in
|
||||||
|
@ -193,8 +179,6 @@ password_saved_please_login = Your password has been saved. Please log in.
|
||||||
please_provide_contact_information = Please provide your contact information to finish creating your account.
|
please_provide_contact_information = Please provide your contact information to finish creating your account.
|
||||||
first_time_login_note = Note: An email will be sent to the address entered above notifying \
|
first_time_login_note = Note: An email will be sent to the address entered above notifying \
|
||||||
that an account has been created.
|
that an account has been created.
|
||||||
first_time_external_email_html = @@file files/accountFirstTimeExternal.html
|
|
||||||
first_time_external_email_text = @@file files/accountFirstTimeExternal.txt
|
|
||||||
|
|
||||||
myAccount_heading = My account
|
myAccount_heading = My account
|
||||||
myAccount_confirm_changes = Your changes have been saved.
|
myAccount_confirm_changes = Your changes have been saved.
|
||||||
|
|
|
@ -1,39 +0,0 @@
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<title>{1}</title>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<p>
|
|
||||||
{2} {3}
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
<strong>Congratulations!</strong>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
We have created your new account on {0}, associated with {4}.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
If you did not request this new account you can safely ignore this email.
|
|
||||||
This request will expire if not acted upon for 30 days.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Click the link below to create your password for your new account using our secure server.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
<a href="{5}" title="password">{5}</a>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
If the link above doesn't work, you can copy and paste the link directly into your browser's address bar.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Thanks!
|
|
||||||
</p>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,17 +0,0 @@
|
||||||
{2} {3}
|
|
||||||
|
|
||||||
Congratulations!
|
|
||||||
|
|
||||||
We have created your new account on {0},
|
|
||||||
associated with {4}.
|
|
||||||
|
|
||||||
If you did not request this new account you can safely ignore this email.
|
|
||||||
This request will expire if not acted upon for 30 days.
|
|
||||||
|
|
||||||
Paste the link below into your browser's address bar to create your password
|
|
||||||
for your new account using our secure server.
|
|
||||||
|
|
||||||
{5}
|
|
||||||
|
|
||||||
Thanks!
|
|
||||||
|
|
|
@ -1,22 +0,0 @@
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<title>${1}</title>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<p>
|
|
||||||
${2} ${3}
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
<strong>Congratulations!</strong>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
We have created your new VIVO account associated with ${4}.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Thanks!
|
|
||||||
</p>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,9 +0,0 @@
|
||||||
${2} ${3}
|
|
||||||
|
|
||||||
Congratulations!
|
|
||||||
|
|
||||||
We have created your new VIVO account associated with
|
|
||||||
${4}.
|
|
||||||
|
|
||||||
Thanks!
|
|
||||||
|
|
|
@ -1,19 +0,0 @@
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<title>{1}</title>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<p>
|
|
||||||
Hi, {2} ${3}
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
You recently changed the email address associated with
|
|
||||||
${2} ${3}
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Thank you.
|
|
||||||
</p>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,6 +0,0 @@
|
||||||
Hi, {2} {3}
|
|
||||||
|
|
||||||
You recently changed the email address associated with
|
|
||||||
{2} {3}
|
|
||||||
|
|
||||||
Thank you.
|
|
|
@ -1,22 +0,0 @@
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<title>{1}</title>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<p>
|
|
||||||
{2} {3}
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
<strong>Congratulations!</strong>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
We have created your new {0} account associated with {4}.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Thanks!
|
|
||||||
</p>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,8 +0,0 @@
|
||||||
{2} {3}
|
|
||||||
|
|
||||||
Congratulations!
|
|
||||||
|
|
||||||
We have created your new {0} account associated with
|
|
||||||
{4}
|
|
||||||
|
|
||||||
Thanks!
|
|
|
@ -1,22 +0,0 @@
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<title>{1}</title>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<p>
|
|
||||||
{2} {3}
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
<strong>Password successfully created.</strong>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Your new password associated with {4} has been created.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Thank you.
|
|
||||||
</p>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,8 +0,0 @@
|
||||||
{2} {3}
|
|
||||||
|
|
||||||
Password successfully created.
|
|
||||||
|
|
||||||
Your new password associated with {4}
|
|
||||||
has been created.
|
|
||||||
|
|
||||||
Thank you.
|
|
|
@ -1,34 +0,0 @@
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<title>{1}</title>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<p>
|
|
||||||
Dear {2} {3}:
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
We have received a request to reset the password for your {0} account ({4}).
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Please follow the instructions below to proceed with your password reset.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
If you did not request this new account you can safely ignore this email.
|
|
||||||
This request will expire if not acted upon within 30 days.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Click on the link below or paste it into your browser's address bar to reset your password
|
|
||||||
using our secure server.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
<a href="{5}" title="password">{5}</a>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>Thank you!</p>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,16 +0,0 @@
|
||||||
Dear {2} {3}:
|
|
||||||
|
|
||||||
We have received a request to reset the password for your {0} account
|
|
||||||
({4}).
|
|
||||||
|
|
||||||
Please follow the instructions below to proceed with your password reset.
|
|
||||||
|
|
||||||
If you did not request this new account you can safely ignore this email.
|
|
||||||
This request will expire if not acted upon within 30 days.
|
|
||||||
|
|
||||||
Paste the link below into your browser's address bar to reset your password
|
|
||||||
using our secure server.
|
|
||||||
|
|
||||||
{5}
|
|
||||||
|
|
||||||
Thank you!
|
|
|
@ -1,22 +0,0 @@
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<title>{1}</title>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<p>
|
|
||||||
{2} {3}
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
<strong>Password successfully changed.</strong>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Your new password associated with {4} has been changed.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Thank you.
|
|
||||||
</p>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,8 +0,0 @@
|
||||||
{2} {3}
|
|
||||||
|
|
||||||
Password successfully changed.
|
|
||||||
|
|
||||||
Your new password associated with {4}
|
|
||||||
has been changed.
|
|
||||||
|
|
||||||
Thank you.
|
|
|
@ -1,34 +0,0 @@
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<title>{1}</title>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<p>
|
|
||||||
Dear {2} {3}:
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
We have received a request to reset the password for your {0} account ({4}).
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Please follow the instructions below to proceed with your password reset.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
If you did not request this new account you can safely ignore this email.
|
|
||||||
This request will expire if not acted upon within 30 days.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Click on the link below or paste it into your browser's address bar to reset your password
|
|
||||||
using our secure server.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
<a href="{5}" title="password">{5}</a>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>Thank you!</p>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,16 +0,0 @@
|
||||||
Dear {2} {3}:
|
|
||||||
|
|
||||||
We have received a request to reset the password for your {0} account
|
|
||||||
({4}).
|
|
||||||
|
|
||||||
Please follow the instructions below to proceed with your password reset.
|
|
||||||
|
|
||||||
If you did not request this new account you can safely ignore this email.
|
|
||||||
This request will expire if not acted upon within 30 days.
|
|
||||||
|
|
||||||
Paste the link below into your browser's address bar to reset your password
|
|
||||||
using our secure server.
|
|
||||||
|
|
||||||
{5}
|
|
||||||
|
|
||||||
Thank you!
|
|
|
@ -2,22 +2,67 @@
|
||||||
|
|
||||||
<#-- Confirmation that an account has been created. -->
|
<#-- Confirmation that an account has been created. -->
|
||||||
|
|
||||||
<#assign strings = i18n() />
|
<#assign subject = "Your ${siteName} account has been created." />
|
||||||
|
|
||||||
<#assign subject = strings.account_created(siteName) />
|
<#assign html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>${subject}</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<p>
|
||||||
|
${userAccount.firstName} ${userAccount.lastName}
|
||||||
|
</p>
|
||||||
|
|
||||||
<#assign html = strings.account_created_email_html(siteName,
|
<p>
|
||||||
subject,
|
<strong>Congratulations!</strong>
|
||||||
userAccount.firstName,
|
</p>
|
||||||
userAccount.lastName,
|
|
||||||
userAccount.emailAddress,
|
|
||||||
passwordLink) />
|
|
||||||
|
|
||||||
<#assign text = strings.account_created_email_text(siteName,
|
<p>
|
||||||
subject,
|
We have created your new account on ${siteName}, associated with ${userAccount.emailAddress}.
|
||||||
userAccount.firstName,
|
</p>
|
||||||
userAccount.lastName,
|
|
||||||
userAccount.emailAddress,
|
<p>
|
||||||
passwordLink) />
|
If you did not request this new account you can safely ignore this email.
|
||||||
|
This request will expire if not acted upon for 30 days.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Click the link below to create your password for your new account using our secure server.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<a href="${passwordLink}" title="password">${passwordLink}</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
If the link above doesn't work, you can copy and paste the link directly into your browser's address bar.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Thanks!
|
||||||
|
</p>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
</#assign>
|
||||||
|
|
||||||
|
<#assign text>
|
||||||
|
${userAccount.firstName} ${userAccount.lastName}
|
||||||
|
|
||||||
|
Congratulations!
|
||||||
|
|
||||||
|
We have created your new account on ${siteName},
|
||||||
|
associated with ${userAccount.emailAddress}.
|
||||||
|
|
||||||
|
If you did not request this new account you can safely ignore this email.
|
||||||
|
This request will expire if not acted upon for 30 days.
|
||||||
|
|
||||||
|
Paste the link below into your browser's address bar to create your password
|
||||||
|
for your new account using our secure server.
|
||||||
|
|
||||||
|
${passwordLink}
|
||||||
|
|
||||||
|
Thanks!
|
||||||
|
</#assign>
|
||||||
|
|
||||||
<@email subject=subject html=html text=text />
|
<@email subject=subject html=html text=text />
|
|
@ -2,18 +2,42 @@
|
||||||
|
|
||||||
<#-- Confirmation that an account has been created. -->
|
<#-- Confirmation that an account has been created. -->
|
||||||
|
|
||||||
<#assign subject = strings.account_created(siteName) />
|
<#assign subject = "Your ${siteName} account has been created." />
|
||||||
|
|
||||||
<#assign html = strings.account_created_external_email_html(siteName,
|
<#assign html>
|
||||||
subject,
|
<html>
|
||||||
userAccount.firstName,
|
<head>
|
||||||
userAccount.lastName,
|
<title>${subject}</title>
|
||||||
userAccount.emailAddress) />
|
</head>
|
||||||
|
<body>
|
||||||
|
<p>
|
||||||
|
${userAccount.firstName} ${userAccount.lastName}
|
||||||
|
</p>
|
||||||
|
|
||||||
<#assign text = string.account_created_external_email_text(siteName,
|
<p>
|
||||||
subject,
|
<strong>Congratulations!</strong>
|
||||||
userAccount.firstName,
|
</p>
|
||||||
userAccount.lastName,
|
|
||||||
userAccount.emailAddress) />
|
<p>
|
||||||
|
We have created your new VIVO account associated with ${userAccount.emailAddress}.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Thanks!
|
||||||
|
</p>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
</#assign>
|
||||||
|
|
||||||
|
<#assign text>
|
||||||
|
${userAccount.firstName} ${userAccount.lastName}
|
||||||
|
|
||||||
|
Congratulations!
|
||||||
|
|
||||||
|
We have created your new VIVO account associated with
|
||||||
|
${userAccount.emailAddress}.
|
||||||
|
|
||||||
|
Thanks!
|
||||||
|
</#assign>
|
||||||
|
|
||||||
<@email subject=subject html=html text=text />
|
<@email subject=subject html=html text=text />
|
|
@ -2,20 +2,37 @@
|
||||||
|
|
||||||
<#-- Confirmation that the user has changed his email account. -->
|
<#-- Confirmation that the user has changed his email account. -->
|
||||||
|
|
||||||
<#assign strings = i18n() />
|
<#assign subject = "Your ${siteName} email account has been changed." />
|
||||||
|
|
||||||
<#assign subject = strings.email_changed_subject(siteName) />
|
<#assign html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>${subject}</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<p>
|
||||||
|
Hi, ${userAccount.firstName} ${userAccount.lastName}
|
||||||
|
</p>
|
||||||
|
|
||||||
<#assign html = strings.email_changed_html(siteName,
|
<p>
|
||||||
subject,
|
You recently changed the email address associated with
|
||||||
userAccount.firstName,
|
${userAccount.firstName} ${userAccount.lastName}
|
||||||
userAccount.lastName,
|
</p>
|
||||||
userAccount.emailAddress) />
|
|
||||||
|
|
||||||
<#assign text = strings.email_changed_text(siteName,
|
<p>
|
||||||
subject,
|
Thank you.
|
||||||
userAccount.firstName,
|
</p>
|
||||||
userAccount.lastName,
|
</body>
|
||||||
userAccount.emailAddress) />
|
</html>
|
||||||
|
</#assign>
|
||||||
|
|
||||||
|
<#assign text>
|
||||||
|
Hi, ${userAccount.firstName} ${userAccount.lastName}
|
||||||
|
|
||||||
|
You recently changed the email address associated with
|
||||||
|
${userAccount.firstName} ${userAccount.lastName}
|
||||||
|
|
||||||
|
Thank you.
|
||||||
|
</#assign>
|
||||||
|
|
||||||
<@email subject=subject html=html text=text />
|
<@email subject=subject html=html text=text />
|
||||||
|
|
|
@ -2,20 +2,42 @@
|
||||||
|
|
||||||
<#-- Confirmation that an account has been created for an externally-authenticated user. -->
|
<#-- Confirmation that an account has been created for an externally-authenticated user. -->
|
||||||
|
|
||||||
<#assign strings = i18n() />
|
<#assign subject = "Your ${siteName} account has been created." />
|
||||||
|
|
||||||
<#assign subject = strings.account_created(siteName) />
|
<#assign html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>${subject}</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<p>
|
||||||
|
${userAccount.firstName} ${userAccount.lastName}
|
||||||
|
</p>
|
||||||
|
|
||||||
<#assign html = strings.first_time_external_email_html(siteName,
|
<p>
|
||||||
subject,
|
<strong>Congratulations!</strong>
|
||||||
userAccount.firstName,
|
</p>
|
||||||
userAccount.lastName,
|
|
||||||
userAccount.emailAddress) />
|
|
||||||
|
|
||||||
<#assign text = strings.first_time_external_email_text(siteName,
|
<p>
|
||||||
subject,
|
We have created your new VIVO account associated with ${userAccount.emailAddress}.
|
||||||
userAccount.firstName,
|
</p>
|
||||||
userAccount.lastName,
|
|
||||||
userAccount.emailAddress) />
|
<p>
|
||||||
|
Thanks!
|
||||||
|
</p>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
</#assign>
|
||||||
|
|
||||||
|
<#assign text>
|
||||||
|
${userAccount.firstName} ${userAccount.lastName}
|
||||||
|
|
||||||
|
Congratulations!
|
||||||
|
|
||||||
|
We have created your new VIVO account associated with
|
||||||
|
${userAccount.emailAddress}.
|
||||||
|
|
||||||
|
Thanks!
|
||||||
|
</#assign>
|
||||||
|
|
||||||
<@email subject=subject html=html text=text />
|
<@email subject=subject html=html text=text />
|
|
@ -2,20 +2,42 @@
|
||||||
|
|
||||||
<#-- Confirmation that an password has been created. -->
|
<#-- Confirmation that an password has been created. -->
|
||||||
|
|
||||||
<#assign strings = i18n() />
|
<#assign subject = "Your ${siteName} password has successfully been created." />
|
||||||
|
|
||||||
<#assign subject = strings.password_created_subject(siteName) />
|
<#assign html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>${subject}</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<p>
|
||||||
|
${userAccount.firstName} ${userAccount.lastName}
|
||||||
|
</p>
|
||||||
|
|
||||||
<#assign html = strings.password_created_email_html(siteName,
|
<p>
|
||||||
subject,
|
<strong>Password successfully created.</strong>
|
||||||
userAccount.firstName,
|
</p>
|
||||||
userAccount.lastName,
|
|
||||||
userAccount.emailAddress) />
|
|
||||||
|
|
||||||
<#assign text = strings.password_created_email_text(siteName,
|
<p>
|
||||||
subject,
|
Your new password associated with ${userAccount.emailAddress} has been created.
|
||||||
userAccount.firstName,
|
</p>
|
||||||
userAccount.lastName,
|
|
||||||
userAccount.emailAddress) />
|
<p>
|
||||||
|
Thank you.
|
||||||
|
</p>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
</#assign>
|
||||||
|
|
||||||
|
<#assign text>
|
||||||
|
${userAccount.firstName} ${userAccount.lastName}
|
||||||
|
|
||||||
|
Password successfully created.
|
||||||
|
|
||||||
|
Your new password associated with ${userAccount.emailAddress}
|
||||||
|
has been created.
|
||||||
|
|
||||||
|
Thank you.
|
||||||
|
</#assign>
|
||||||
|
|
||||||
<@email subject=subject html=html text=text />
|
<@email subject=subject html=html text=text />
|
|
@ -2,20 +2,43 @@
|
||||||
|
|
||||||
<#-- Confirmation that a password has been reset. -->
|
<#-- Confirmation that a password has been reset. -->
|
||||||
|
|
||||||
<#assign strings = i18n() />
|
<#assign subject = "Your ${siteName} password changed." />
|
||||||
|
|
||||||
<#assign subject = strings.password_reset_complete_subject(siteName) />
|
<#assign html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>${subject}</title>
|
||||||
|
</head>
|
||||||
|
|
||||||
<#assign html = strings.password_reset_complete_email_html(siteName,
|
<body>
|
||||||
subject,
|
<p>
|
||||||
userAccount.firstName,
|
${userAccount.firstName} ${userAccount.lastName}
|
||||||
userAccount.lastName,
|
</p>
|
||||||
userAccount.emailAddress) />
|
|
||||||
|
|
||||||
<#assign text = strings.password_reset_complete_email_text(siteName,
|
<p>
|
||||||
subject,
|
<strong>Password successfully changed.</strong>
|
||||||
userAccount.firstName,
|
</p>
|
||||||
userAccount.lastName,
|
|
||||||
userAccount.emailAddress) />
|
<p>
|
||||||
|
Your new password associated with ${userAccount.emailAddress} has been changed.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Thank you.
|
||||||
|
</p>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
</#assign>
|
||||||
|
|
||||||
|
<#assign text>
|
||||||
|
${userAccount.firstName} ${userAccount.lastName}
|
||||||
|
|
||||||
|
Password successfully changed.
|
||||||
|
|
||||||
|
Your new password associated with ${userAccount.emailAddress}
|
||||||
|
has been changed.
|
||||||
|
|
||||||
|
Thank you.
|
||||||
|
</#assign>
|
||||||
|
|
||||||
<@email subject=subject html=html text=text />
|
<@email subject=subject html=html text=text />
|
|
@ -2,22 +2,60 @@
|
||||||
|
|
||||||
<#-- Confirmation email for user account password reset -->
|
<#-- Confirmation email for user account password reset -->
|
||||||
|
|
||||||
<#assign strings = i18n() />
|
<#assign subject = "${siteName} reset password request" />
|
||||||
|
|
||||||
<#assign subject = strings.password_reset_pending_subject(siteName) />
|
<#assign html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>${subject}</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<p>
|
||||||
|
Dear ${userAccount.firstName} ${userAccount.lastName}:
|
||||||
|
</p>
|
||||||
|
|
||||||
<#assign html = strings.password_reset_pending_email_html(siteName,
|
<p>
|
||||||
subject,
|
We have received a request to reset the password for your ${siteName} account (${userAccount.emailAddress}).
|
||||||
userAccount.firstName,
|
</p>
|
||||||
userAccount.lastName,
|
|
||||||
userAccount.emailAddress,
|
|
||||||
passwordLink) />
|
|
||||||
|
|
||||||
<#assign text = strings.password_reset_pending_email_text(siteName,
|
<p>
|
||||||
subject,
|
Please follow the instructions below to proceed with your password reset.
|
||||||
userAccount.firstName,
|
</p>
|
||||||
userAccount.lastName,
|
|
||||||
userAccount.emailAddress,
|
<p>
|
||||||
passwordLink) />
|
If you did not request this new account you can safely ignore this email.
|
||||||
|
This request will expire if not acted upon within 30 days.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Click on the link below or paste it into your browser's address bar to reset your password
|
||||||
|
using our secure server.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>${passwordLink}</p>
|
||||||
|
|
||||||
|
<p>Thank you!</p>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
</#assign>
|
||||||
|
|
||||||
|
<#assign text>
|
||||||
|
Dear ${userAccount.firstName} ${userAccount.lastName}:
|
||||||
|
|
||||||
|
We have received a request to reset the password for your ${siteName} account
|
||||||
|
(${userAccount.emailAddress}).
|
||||||
|
|
||||||
|
Please follow the instructions below to proceed with your password reset.
|
||||||
|
|
||||||
|
If you did not request this new account you can safely ignore this email.
|
||||||
|
This request will expire if not acted upon within 30 days.
|
||||||
|
|
||||||
|
Paste the link below into your browser's address bar to reset your password
|
||||||
|
using our secure server.
|
||||||
|
|
||||||
|
${passwordLink}
|
||||||
|
|
||||||
|
Thank you!
|
||||||
|
</#assign>
|
||||||
|
|
||||||
<@email subject=subject html=html text=text />
|
<@email subject=subject html=html text=text />
|
|
@ -5,8 +5,7 @@
|
||||||
<#include "individual-setup.ftl">
|
<#include "individual-setup.ftl">
|
||||||
|
|
||||||
<#assign hasElement = propertyGroups.pullProperty("${namespaces.display}hasElement")!>
|
<#assign hasElement = propertyGroups.pullProperty("${namespaces.display}hasElement")!>
|
||||||
|
<#assign returnURL = "/vivo/individual?uri=http%3A%2F%2Fvitro.mannlib.cornell.edu%2Fontologies%2Fdisplay%2F1.1%23DefaultMenu&switchToDisplayModel=true" />
|
||||||
<#assign addNewMenuItemUrl = "${urls.base}/menuManagementController?cmd=add" >
|
|
||||||
|
|
||||||
<#if hasElement?has_content>
|
<#if hasElement?has_content>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
|
@ -24,13 +23,13 @@
|
||||||
|
|
||||||
<#-- Link to add a new menu item -->
|
<#-- Link to add a new menu item -->
|
||||||
<#if editable>
|
<#if editable>
|
||||||
<#if addNewMenuItemUrl?has_content>
|
|
||||||
<form id="pageListForm" action="${urls.base}/editRequestDispatch" method="get">
|
<form id="pageListForm" action="${urls.base}/editRequestDispatch" method="get">
|
||||||
<input type="hidden" name="typeOfNew" value="http://vitro.mannlib.cornell.edu/ontologies/display/1.1#Page">
|
<input type="hidden" name="typeOfNew" value="http://vitro.mannlib.cornell.edu/ontologies/display/1.1#Page">
|
||||||
<input type="hidden" name="switchToDisplayModel" value="1">
|
<input type="hidden" name="switchToDisplayModel" value="1">
|
||||||
<input type="hidden" name="editForm" value="edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators.ManagePageGenerator" role="input">
|
<input type="hidden" name="editForm" value="edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators.ManagePageGenerator" role="input">
|
||||||
<input type="hidden" name="addMenuItem" value="true" />
|
<input type="hidden" name="addMenuItem" value="true" />
|
||||||
<input id="submit" value="Add new menu page" role="button" type="submit" >
|
<input id="submit" value="Add new menu page" role="button" type="submit" >
|
||||||
|
<input type="hidden" name="returnURL" value="${returnURL?url}" />
|
||||||
<#if verbosePropertySwitch.url?contains("pageManagement")>
|
<#if verbosePropertySwitch.url?contains("pageManagement")>
|
||||||
<span class="or"> ${i18n().or} </span>
|
<span class="or"> ${i18n().or} </span>
|
||||||
<a style="margin-left:7px" href="${urls.base}/pageList" title="Return to Profile Page">Return to Page Management</a>
|
<a style="margin-left:7px" href="${urls.base}/pageList" title="Return to Profile Page">Return to Page Management</a>
|
||||||
|
@ -40,7 +39,6 @@
|
||||||
<br />
|
<br />
|
||||||
<p class="note">${i18n().refresh_page_after_reordering}</p>
|
<p class="note">${i18n().refresh_page_after_reordering}</p>
|
||||||
</#if>
|
</#if>
|
||||||
</#if>
|
|
||||||
|
|
||||||
${stylesheets.add('<link rel="stylesheet" href="${urls.base}/css/individual/individual.css" />',
|
${stylesheets.add('<link rel="stylesheet" href="${urls.base}/css/individual/individual.css" />',
|
||||||
'<link rel="stylesheet" href="${urls.base}/css/individual/menuManagement-menuItems.css" />')}
|
'<link rel="stylesheet" href="${urls.base}/css/individual/menuManagement-menuItems.css" />')}
|
||||||
|
|
|
@ -4,7 +4,6 @@
|
||||||
|
|
||||||
<#import "lib-properties.ftl" as p>
|
<#import "lib-properties.ftl" as p>
|
||||||
<#assign subjectUri = individual.controlPanelUrl()?split("=") >
|
<#assign subjectUri = individual.controlPanelUrl()?split("=") >
|
||||||
<#assign nameForOtherGroup = nameForOtherGroup!"other">
|
|
||||||
|
|
||||||
<#if (propertyGroups.all)??>
|
<#if (propertyGroups.all)??>
|
||||||
<#assign groups = propertyGroups.all>
|
<#assign groups = propertyGroups.all>
|
||||||
|
@ -13,6 +12,7 @@
|
||||||
<nav id="property-group-menu" role="navigation">
|
<nav id="property-group-menu" role="navigation">
|
||||||
<ul role="list">
|
<ul role="list">
|
||||||
<#list groups as group>
|
<#list groups as group>
|
||||||
|
<#if (group.properties?size > 0) >
|
||||||
<#assign groupname = group.getName(nameForOtherGroup)>
|
<#assign groupname = group.getName(nameForOtherGroup)>
|
||||||
<#if groupname?has_content>
|
<#if groupname?has_content>
|
||||||
<#--create property group html id is the function that will replace all spaces with underscore to make a valid id-->
|
<#--create property group html id is the function that will replace all spaces with underscore to make a valid id-->
|
||||||
|
@ -21,6 +21,7 @@
|
||||||
function to capitalize all except function words. -->
|
function to capitalize all except function words. -->
|
||||||
<li role="listitem"><a href="#${groupnameHtmlId}" title="${i18n().group_name}">${groupname?capitalize}</a></li>
|
<li role="listitem"><a href="#${groupnameHtmlId}" title="${i18n().group_name}">${groupname?capitalize}</a></li>
|
||||||
</#if>
|
</#if>
|
||||||
|
</#if>
|
||||||
</#list>
|
</#list>
|
||||||
</ul>
|
</ul>
|
||||||
</nav>
|
</nav>
|
||||||
|
@ -28,6 +29,7 @@
|
||||||
</#if>
|
</#if>
|
||||||
</#if>
|
</#if>
|
||||||
<#list propertyGroups.all as group>
|
<#list propertyGroups.all as group>
|
||||||
|
<#if (group.properties?size > 0)>
|
||||||
<#assign groupName = group.getName(nameForOtherGroup)>
|
<#assign groupName = group.getName(nameForOtherGroup)>
|
||||||
<#assign verbose = (verbosePropertySwitch.currentValue)!false>
|
<#assign verbose = (verbosePropertySwitch.currentValue)!false>
|
||||||
|
|
||||||
|
@ -50,4 +52,5 @@
|
||||||
<#-- List the properties in the group -->
|
<#-- List the properties in the group -->
|
||||||
<#include "individual-properties.ftl">
|
<#include "individual-properties.ftl">
|
||||||
</section> <!-- end property-group -->
|
</section> <!-- end property-group -->
|
||||||
|
</#if>
|
||||||
</#list>
|
</#list>
|
||||||
|
|
|
@ -35,6 +35,7 @@
|
||||||
</#if>
|
</#if>
|
||||||
</ul>
|
</ul>
|
||||||
<#list propertyGroups.all as group>
|
<#list propertyGroups.all as group>
|
||||||
|
<#if (group.properties?size > 0)>
|
||||||
<#assign groupName = group.getName(nameForOtherGroup)>
|
<#assign groupName = group.getName(nameForOtherGroup)>
|
||||||
<#assign groupNameHtmlId = p.createPropertyGroupHtmlId(groupName) >
|
<#assign groupNameHtmlId = p.createPropertyGroupHtmlId(groupName) >
|
||||||
<#assign verbose = (verbosePropertySwitch.currentValue)!false>
|
<#assign verbose = (verbosePropertySwitch.currentValue)!false>
|
||||||
|
@ -57,8 +58,9 @@
|
||||||
<#-- List the properties in the group -->
|
<#-- List the properties in the group -->
|
||||||
<#include "individual-properties.ftl">
|
<#include "individual-properties.ftl">
|
||||||
</div>
|
</div>
|
||||||
</section> <!-- end property-group -->
|
</section> <!-- end property-group -->
|
||||||
<#assign sectionCount = 2 >
|
<#assign sectionCount = 2 >
|
||||||
|
</#if>
|
||||||
</#list>
|
</#list>
|
||||||
<script>
|
<script>
|
||||||
var individualLocalName = "${individual.localName}";
|
var individualLocalName = "${individual.localName}";
|
||||||
|
|
Loading…
Add table
Reference in a new issue