You can subscribe to this list here.
| 2009 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(20) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2010 |
Jan
|
Feb
|
Mar
|
Apr
(1) |
May
(3) |
Jun
(1) |
Jul
(1) |
Aug
(3) |
Sep
(6) |
Oct
(1) |
Nov
|
Dec
(4) |
| 2011 |
Jan
|
Feb
|
Mar
|
Apr
(1) |
May
(1) |
Jun
|
Jul
|
Aug
|
Sep
(2) |
Oct
(4) |
Nov
|
Dec
|
| 2021 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(14) |
Sep
(9) |
Oct
(9) |
Nov
(15) |
Dec
(5) |
| 2022 |
Jan
(3) |
Feb
(13) |
Mar
(2) |
Apr
|
May
(3) |
Jun
(4) |
Jul
(4) |
Aug
(1) |
Sep
|
Oct
|
Nov
(7) |
Dec
(3) |
| 2023 |
Jan
(1) |
Feb
(3) |
Mar
(1) |
Apr
(4) |
May
(1) |
Jun
(5) |
Jul
(3) |
Aug
|
Sep
|
Oct
(1) |
Nov
|
Dec
|
| 2024 |
Jan
(1) |
Feb
|
Mar
(1) |
Apr
|
May
|
Jun
(3) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
|
From: <udi...@us...> - 2024-06-01 13:14:04
|
Revision: 1490
http://sourceforge.net/p/j-trac/code/1490
Author: udittmer
Date: 2024-06-01 13:14:02 +0000 (Sat, 01 Jun 2024)
Log Message:
-----------
JTrac 2.3.3
Added Paths:
-----------
tags/jtrac-2.3.3/
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <udi...@us...> - 2024-06-01 12:42:03
|
Revision: 1489
http://sourceforge.net/p/j-trac/code/1489
Author: udittmer
Date: 2024-06-01 12:42:00 +0000 (Sat, 01 Jun 2024)
Log Message:
-----------
documentation updated
Modified Paths:
--------------
trunk/jtrac/doc/src/index.xml
Modified: trunk/jtrac/doc/src/index.xml
===================================================================
--- trunk/jtrac/doc/src/index.xml 2024-06-01 12:22:42 UTC (rev 1488)
+++ trunk/jtrac/doc/src/index.xml 2024-06-01 12:42:00 UTC (rev 1489)
@@ -5,7 +5,7 @@
<bookinfo>
<title>JTrac</title>
<subtitle>User / Developer Guide</subtitle>
- <releaseinfo>2.3.2</releaseinfo>
+ <releaseinfo>2.3.3</releaseinfo>
<authorgroup>
<author>
<firstname>Peter</firstname>
@@ -229,6 +229,18 @@
For details see <ulink url="https://sourceforge.net/p/j-trac/wiki/NewFeatures232">NewFeatures232</ulink> on SourceForge.
</para>
</sect1>
+
+ <sect1 id="introduction-releasenotes-2_3_3">
+ <title>Release Notes: Version 2.3.3</title>
+ <para>
+ jTrac 2.3.3 has only small changes like translation fixes and dependency upgrades, but no functional improvements.
+ Instructions on how to upgrade are available in the "<link linkend="upgrading">upgrading</link>" section of this document.
+ </para>
+ <para>
+ For details see <ulink url="https://sourceforge.net/p/j-trac/wiki/NewFeatures233">NewFeatures233</ulink> on SourceForge.
+ </para>
+ </sect1>
+
</chapter>
<chapter id="features">
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <udi...@us...> - 2024-06-01 12:22:43
|
Revision: 1488
http://sourceforge.net/p/j-trac/code/1488
Author: udittmer
Date: 2024-06-01 12:22:42 +0000 (Sat, 01 Jun 2024)
Log Message:
-----------
updated dependencies
Modified Paths:
--------------
trunk/jtrac/pom.xml
Modified: trunk/jtrac/pom.xml
===================================================================
--- trunk/jtrac/pom.xml 2024-03-15 16:09:29 UTC (rev 1487)
+++ trunk/jtrac/pom.xml 2024-06-01 12:22:42 UTC (rev 1488)
@@ -164,7 +164,7 @@
<dependency>
<groupId>org.ocpsoft.prettytime</groupId>
<artifactId>prettytime</artifactId>
- <version>5.0.7.Final</version>
+ <version>5.0.8.Final</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
@@ -512,7 +512,7 @@
<timestamp>${maven.build.timestamp}</timestamp>
<maven.build.timestamp.format>yyyy-MM-dd HH:mm z</maven.build.timestamp.format>
<commonmark.version>0.22.0</commonmark.version>
- <log4j2.version>2.23.0</log4j2.version>
- <slf4j.version>2.0.12</slf4j.version>
+ <log4j2.version>2.23.1</log4j2.version>
+ <slf4j.version>2.0.13</slf4j.version>
</properties>
</project>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <udi...@us...> - 2024-03-15 16:09:34
|
Revision: 1487
http://sourceforge.net/p/j-trac/code/1487
Author: udittmer
Date: 2024-03-15 16:09:29 +0000 (Fri, 15 Mar 2024)
Log Message:
-----------
update dependencies
Modified Paths:
--------------
trunk/jtrac/pom.xml
Modified: trunk/jtrac/pom.xml
===================================================================
--- trunk/jtrac/pom.xml 2024-01-17 16:08:07 UTC (rev 1486)
+++ trunk/jtrac/pom.xml 2024-03-15 16:09:29 UTC (rev 1487)
@@ -67,7 +67,7 @@
<dependency>
<groupId>org.htmlunit</groupId>
<artifactId>htmlunit</artifactId>
- <version>3.10.0</version>
+ <version>3.11.0</version>
<scope>test</scope>
</dependency>
<dependency>
@@ -511,8 +511,8 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<timestamp>${maven.build.timestamp}</timestamp>
<maven.build.timestamp.format>yyyy-MM-dd HH:mm z</maven.build.timestamp.format>
- <commonmark.version>0.21.0</commonmark.version>
- <log4j2.version>2.22.1</log4j2.version>
- <slf4j.version>2.0.11</slf4j.version>
+ <commonmark.version>0.22.0</commonmark.version>
+ <log4j2.version>2.23.0</log4j2.version>
+ <slf4j.version>2.0.12</slf4j.version>
</properties>
</project>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <udi...@us...> - 2024-01-17 16:08:09
|
Revision: 1486
http://sourceforge.net/p/j-trac/code/1486
Author: udittmer
Date: 2024-01-17 16:08:07 +0000 (Wed, 17 Jan 2024)
Log Message:
-----------
update dependencies
Modified Paths:
--------------
trunk/jtrac/pom.xml
Modified: trunk/jtrac/pom.xml
===================================================================
--- trunk/jtrac/pom.xml 2023-10-05 07:46:13 UTC (rev 1485)
+++ trunk/jtrac/pom.xml 2024-01-17 16:08:07 UTC (rev 1486)
@@ -4,7 +4,7 @@
<groupId>info.jtrac</groupId>
<artifactId>jtrac</artifactId>
<packaging>war</packaging>
- <version>2.3.2</version>
+ <version>2.3.3</version>
<name>JTrac</name>
<description>
JTrac is a generic issue-tracking web-application that can be easily customized by adding custom fields
@@ -67,7 +67,7 @@
<dependency>
<groupId>org.htmlunit</groupId>
<artifactId>htmlunit</artifactId>
- <version>3.6.0</version>
+ <version>3.10.0</version>
<scope>test</scope>
</dependency>
<dependency>
@@ -340,7 +340,7 @@
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
- <version>5.2.3</version>
+ <version>5.2.5</version>
</dependency>
<dependency>
<groupId>org.tmate</groupId>
@@ -461,7 +461,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
- <version>3.11.0</version>
+ <version>3.12.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
@@ -488,7 +488,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
- <version>3.1.2</version>
+ <version>3.2.5</version>
<configuration>
<excludes>
<exclude>info/jtrac/test/**</exclude>
@@ -512,7 +512,7 @@
<timestamp>${maven.build.timestamp}</timestamp>
<maven.build.timestamp.format>yyyy-MM-dd HH:mm z</maven.build.timestamp.format>
<commonmark.version>0.21.0</commonmark.version>
- <log4j2.version>2.20.0</log4j2.version>
- <slf4j.version>2.0.9</slf4j.version>
+ <log4j2.version>2.22.1</log4j2.version>
+ <slf4j.version>2.0.11</slf4j.version>
</properties>
</project>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <udi...@us...> - 2023-10-05 07:46:15
|
Revision: 1485
http://sourceforge.net/p/j-trac/code/1485
Author: udittmer
Date: 2023-10-05 07:46:13 +0000 (Thu, 05 Oct 2023)
Log Message:
-----------
dependency updates, fix Spanish and Spanish (MX) translation files
Modified Paths:
--------------
trunk/jtrac/doc/src/index.xml
trunk/jtrac/pom.xml
trunk/jtrac/src/main/resources/messages_es.properties
trunk/jtrac/src/main/resources/messages_es_MX.properties
Modified: trunk/jtrac/doc/src/index.xml
===================================================================
--- trunk/jtrac/doc/src/index.xml 2023-07-30 15:26:07 UTC (rev 1484)
+++ trunk/jtrac/doc/src/index.xml 2023-10-05 07:46:13 UTC (rev 1485)
@@ -66,7 +66,7 @@
released that moved the Java baseline to Java 8.
</para>
<para>
- JTrac is extremely easy to install and the only pre-requisite is a Java 8 (or higher) Runtime Environment.
+ JTrac is extremely easy to install and the only pre-requisite is a Java 8 runtime environment.
You can be up and running in seconds because JTrac comes bundled with a small-footprint web-application
server called <ulink url="https://www.eclipse.org/jetty/">Jetty</ulink> and an embedded database called
<ulink url="https://www.hsqldb.org/">HSQLDB</ulink>. Please refer to the
@@ -73,6 +73,9 @@
<link linkend="installation">installation</link> section of this documentation for details.
You can also choose to drop the WAR file into an application server of your choice and start using JTrac right away.
</para>
+ <para>JTrac also runs fine in a Java 11 runtime, and has been reported to run in a Java 17 runtime with a few JVM options enabled.
+ See <ulink url="https://sourceforge.net/p/j-trac/support-requests/29/#a0a9">this post</ulink> for details.
+ </para>
</sect1>
<sect1 id="introduction-releasenotes">
Modified: trunk/jtrac/pom.xml
===================================================================
--- trunk/jtrac/pom.xml 2023-07-30 15:26:07 UTC (rev 1484)
+++ trunk/jtrac/pom.xml 2023-10-05 07:46:13 UTC (rev 1485)
@@ -67,7 +67,7 @@
<dependency>
<groupId>org.htmlunit</groupId>
<artifactId>htmlunit</artifactId>
- <version>3.4.0</version>
+ <version>3.6.0</version>
<scope>test</scope>
</dependency>
<dependency>
@@ -513,6 +513,6 @@
<maven.build.timestamp.format>yyyy-MM-dd HH:mm z</maven.build.timestamp.format>
<commonmark.version>0.21.0</commonmark.version>
<log4j2.version>2.20.0</log4j2.version>
- <slf4j.version>2.0.7</slf4j.version>
+ <slf4j.version>2.0.9</slf4j.version>
</properties>
</project>
Modified: trunk/jtrac/src/main/resources/messages_es.properties
===================================================================
--- trunk/jtrac/src/main/resources/messages_es.properties 2023-07-30 15:26:07 UTC (rev 1484)
+++ trunk/jtrac/src/main/resources/messages_es.properties 2023-10-05 07:46:13 UTC (rev 1485)
@@ -1,11 +1,10 @@
# please refer documentation before starting work on a translation:
-# http://j-trac.sourceforge.net/doc/html/dev-guide.html#dev-translating
-
+# http://j-trac.sourceforge.io/doc/html/dev-guide.html#dev-translating
# globals
submit = Aceptar
cancel = Cancelar
delete = Borrar
-back = Atr\xE1s
+back = Atr\u00e1s
next = Siguiente
edit = Editar
view = Ver
@@ -14,15 +13,15 @@
save = Guardar
# override default messages for spring mvc form binding errors
-typeMismatch.java.lang.Double = Por favor, introduzca un valor num\xE9rico v\xE1lido
-typeMismatch.java.util.Date = Por favor, introduzca un valor de fecha v\xE1lido. Formato\: aaaa-mm-dd
+typeMismatch.java.lang.Double = Por favor, introduzca un valor num\u00e9rico v\u00e1lido
+typeMismatch.java.util.Date = Por favor, introduzca un valor de fecha v\u00e1lido. Formato\: aaaa-mm-dd
# wicket globals
null =
-nullValid =
+nullValid =
Required = Por favor, rellene los campos obligatorios
-IConverter.Double = ${label}\: Por favor, introduzca un n\xFAmero v\xE1lido
-IConverter.Date = ${label}\: Por favor, introduzca una fecha v\xE1lida con el formato aaaa-mm-dd
+IConverter.Double = ${label}\: Por favor, introduzca un n\u00famero v\u00e1lido
+IConverter.Date = ${label}\: Por favor, introduzca una fecha v\u00e1lida con el formato aaaa-mm-dd
# generic form validation message
error.empty = Valor requerido
@@ -35,9 +34,9 @@
header.logout = DESCONECTAR
# dashboard
-dashboard.noSpaces = No est\xE1 asignado a ning\xFAn Proyecto
+dashboard.noSpaces = No est\u00e1 asignado a ning\u00fan Proyecto
dashboard.space = Proyecto
-dashboard.action = Acci\xF3n
+dashboard.action = Acci\u00f3n
dashboard.status = Estado
dashboard.loggedByMe = Mis<br/>incidencias
dashboard.assignedToMe = Asignada<br/>a mi
@@ -55,18 +54,18 @@
item_form.sendNotifications = enviar notificaciones por e-mail
item_form.notifyByEmail = Notificar por e-mail
item_form.attachment = Anexo
-item_form.error.version = Incidencia modificada por otro usuario o se utiliz\xF3 el bot\xF3n "Atr\xE1s" del navegador.
+item_form.error.version = Incidencia modificada por otro usuario o se utiliz\u00f3 el bot\u00f3n "Atr\u00e1s" del navegador.
# item_view (note this is rendered within a taglib and not in a JSP)
item_view.id = ID
item_view.relatedItems = Incidencias Relacionadas
item_view.remove = Eliminar
-item_view.relatedTo = est\xE1 relacionada con
+item_view.relatedTo = est\u00e1 relacionada con
item_view.duplicateOf = es un duplicado de
item_view.dependsOn = depende de
-item_view.relatedToThis = est\xE1 relacionada con \xE9sta
-item_view.duplicateOfThis = es duplicado de \xE9sta
-item_view.dependsOnThis = depende de \xE9sta
+item_view.relatedToThis = est\u00e1 relacionada con \u00e9sta
+item_view.duplicateOfThis = es duplicado de \u00e9sta
+item_view.dependsOnThis = depende de \u00e9sta
item_view.this = este
item_view.status = Estado
item_view.loggedBy = Autor
@@ -73,25 +72,25 @@
item_view.assignedTo = Asignado a
item_view.summary = Resumen
item_view.detail = Detalles
-item_view.history = Hist\xF3rico
+item_view.history = Hist\u00f3rico
item_view.comment = Comentario
item_view.timeStamp = Marca de Tiempo
# item_view_form
item_view_form.relateTo = Relacionar esta incidencia con
-item_view_form.duplicateOf = es duplicado de \xE9sta
-item_view_form.dependsOn = depende de \xE9sta
-item_view_form.relatedTo = est\xE1 relacionada con \xE9sta
+item_view_form.duplicateOf = es duplicado de \u00e9sta
+item_view_form.dependsOn = depende de \u00e9sta
+item_view_form.relatedTo = est\u00e1 relacionada con \u00e9sta
item_view_form.newStatus = Nuevo Estado
item_view_form.assignTo = Asignar A
item_view_form.comment = Comentario
item_view_form.sendNotifications = enviar notificaciones por e-mail
-item_view_form.addRelatedItem = a\xF1adir incidencia relacionada
+item_view_form.addRelatedItem = a\u00f1adir incidencia relacionada
item_view_form.change = cambiar
item_view_form.notifyByEmail = Notificar por E-mail
item_view_form.attachment = Anexo
item_view_form.assignedTo.error = Oligatorio si el estado es distinto de Cerrado
-item_view_form.status.error = Oligatorio si se est\xE1 asignando
+item_view_form.status.error = Oligatorio si se est\u00e1 asignando
item_view_form.chooseStatus = -- seleccione Estado --
# item_search_form
@@ -98,30 +97,30 @@
item_search_form.searchingForRelated = Buscando incidencias relacionadas con
item_search_form.viewItemById = Ver incidencia por ID
item_search_form.textSearch = Busqueda de Texto
-item_search_form.resultsPerPage = Resultados / P\xE1gina
-item_search_form.noLimit = Sin L\xEDmite
+item_search_form.resultsPerPage = Resultados / P\u00e1gina
+item_search_form.noLimit = Sin L\u00edmite
item_search_form.sortOnColumn = Ordenar por columna
item_search_form.id = ID
item_search_form.descending = Descendente
item_search_form.showDetail = Mostrar Detalles
-item_search_form.showHistory = Mostrar Hist\xF3rico
+item_search_form.showHistory = Mostrar Hist\u00f3rico
item_search_form.loggedBy = Logado Por
item_search_form.assignedTo = Asignado A
-item_search_form.createdDate = Fecha de Creaci\xF3n
-item_search_form.onOrAfter = En / Despu\xE9s de
+item_search_form.createdDate = Fecha de Creaci\u00f3n
+item_search_form.onOrAfter = En / Despu\u00e9s de
item_search_form.onOrBefore = En / Antes de
item_search_form.status = Estado
item_search_form.severity = Urgencia
item_search_form.priority = Prioridad
-item_search_form.historyUpdatedDate = Fecha de modificaci\xF3n del Hist\xF3rico
+item_search_form.historyUpdatedDate = Fecha de modificaci\u00f3n del Hist\u00f3rico
item_search_form.space = Proyecto
-item_search_form.error.refId.invalid = ID no v\xE1lido
+item_search_form.error.refId.invalid = ID no v\u00e1lido
item_search_form.error.refId.notFound = Incidencia no encontrado
-item_search_form.error.summary.invalid = Cadena de b\xFAsqueda no v\xE1lida
+item_search_form.error.summary.invalid = Cadena de b\u00fasqueda no v\u00e1lida
# item_list (most rendered within a taglib not JSP, some reused also for excel export)
item_list.searchingForRelated = Buscando incidencias relacionadas con
-item_list.modifySearch = Modificar B\xFAsqueda
+item_list.modifySearch = Modificar B\u00fasqueda
item_list.recordFound = Registro Encontrado
item_list.recordsFound = Registros Encontrados
item_list.exportToExcel = Exportar a Excel
@@ -132,16 +131,16 @@
item_list.status = Estado
item_list.assignedTo = Asignado A
item_list.timeStamp = Marca de Tiempo
-item_list.history = Hist\xF3rico
+item_list.history = Hist\u00f3rico
item_list.space = Proyecto
# options
-options.optionsMenu = Men\xFA de Opciones
+options.optionsMenu = Men\u00fa de Opciones
options.editYourProfile = Edite su perfil
-options.manageUsers = Gesti\xF3n de Usuarios
-options.manageSpaces = Gesti\xF3n de Proyectos
-options.manageSettings = Gesti\xF3n de Configuraci\xF3n
-options.rebuildIndexes = Reconstruir \xEDndices
+options.manageUsers = Gesti\u00f3n de Usuarios
+options.manageSpaces = Gesti\u00f3n de Proyectos
+options.manageSettings = Gesti\u00f3n de Configuraci\u00f3n
+options.rebuildIndexes = Reconstruir \u00edndices
options.importFromExcel = Importar de un Excel
# user_form
@@ -150,12 +149,12 @@
user_form.fullName = Nombre Completo
user_form.emailId = E-Mail ID
user_form.language = Lenguaje
-user_form.passwordMessage = Un password ser\xE1 generado y enviado a su e-mail por defecto.</br>Los campos a continuacion son opcionales
+user_form.passwordMessage = Un password ser\u00e1 generado y enviado a su e-mail por defecto.</br>Los campos a continuacion son opcionales
user_form.password = Password
user_form.confirmPassword = Confirme Password
-user_form.loginId.error.invalid = S\xF3lo min\xFAsculas y n\xFAmeros permitidos
+user_form.loginId.error.invalid = S\u00f3lo min\u00fasculas y n\u00fameros permitidos
user_form.loginId.error.exists = El Login ID ya existe
-user_form.passwordConfirm.error = Confirmaci\xF3n de Password Incorrecta
+user_form.passwordConfirm.error = Confirmaci\u00f3n de Password Incorrecta
user_form.mailPassword = enviar password por e-mail
user_form.locked = Bloqueado
@@ -162,7 +161,7 @@
# logout
logout.title = Desconectado
logout.home = Inicio
-logout.message = Desconectado. Cualquier sesi\xF3n "recu\xE9rdeme" ha sido deshabilitada.
+logout.message = Desconectado. Cualquier sesi\u00f3n "recu\u00e9rdeme" ha sido deshabilitada.
logout.login = Login
# login
@@ -170,37 +169,37 @@
login.home = Inicio
login.loginName = Login / email ID
login.password = Password
-login.rememberMe = recu\xE9rdeme
+login.rememberMe = recu\u00e9rdeme
login.submit = Aceptar
-login.error = Credenciales err\xF3neas
+login.error = Credenciales err\u00f3neas
# config explanations (used in both config_list and config_form screens)
-config.mail.server.host = Nombre del Host o direcci\xF3n IP del servidor SMTP usado para el env\xEDo de e-mail
+config.mail.server.host = Nombre del Host o direcci\u00f3n IP del servidor SMTP usado para el env\u00edo de e-mail
config.mail.server.port = Puerto usado por el servidor SMTP (por defecto 25)
-config.mail.server.username = Nombre de usuario para el servidor SMTP, si \xE9ste requiere autenticaci\xF3n
-config.mail.server.password = Password para el servidor SMTP, si \xE9ste requiere autenticaci\xF3n
+config.mail.server.username = Nombre de usuario para el servidor SMTP, si \u00e9ste requiere autenticaci\u00f3n
+config.mail.server.password = Password para el servidor SMTP, si \u00e9ste requiere autenticaci\u00f3n
config.mail.server.starttls.enable = Usar "Verdadero" para conexiones seguras (SSL) , si se requiere en el servidor SMTP
config.mail.subject.prefix = Texto prefijo para el asunto de los e-mail (por defecto [jtrac])
-config.mail.from = Cuando se genere un e-mail, \xE9sta ser\xE1 la direcci\xF3n 'from'
-config.jtrac.url.base = URB base de la instalaci\xF3n JTrac (p.e. http://miservidor/jtrac), requerido para el funcionamiento correcto de los enlaces en los e-mail
-config.locale.default = Lenguaje por defecto usado en esta instalaci\xF3n de JTrac (p.e. "es" para Espa\xF1ol)
-config.session.timeout = Tiempo en minutos para la expiraci\xF3n de la sesi\xF3n (por defecto 30 minutos)
-config.attachment.maxsize = Tama\xF1o m\xE1ximo en MB de los ficheros adjuntos (por defecto 5 MB). Use -1 para no tener l\xEDmite
+config.mail.from = Cuando se genere un e-mail, \u00e9sta ser\u00e1 la direcci\u00f3n 'from'
+config.jtrac.url.base = URB base de la instalaci\u00f3n JTrac (p.e. http://miservidor/jtrac), requerido para el funcionamiento correcto de los enlaces en los e-mail
+config.locale.default = Lenguaje por defecto usado en esta instalaci\u00f3n de JTrac (p.e. "es" para Espa\u00f1ol)
+config.session.timeout = Tiempo en minutos para la expiraci\u00f3n de la sesi\u00f3n (por defecto 30 minutos)
+config.attachment.maxsize = Tama\u00f1o m\u00e1ximo en MB de los ficheros adjuntos (por defecto 5 MB). Use -1 para no tener l\u00edmite
# config_list (config_form does not have any extra messages)
-config_list.configurationSettings = Configuraci\xF3n
+config_list.configurationSettings = Configuraci\u00f3n
config_list.parameter = Clave del Parametro
config_list.value = Valor
config_list.edit = Editar
-config_list.description = Descripci\xF3n
+config_list.description = Descripci\u00f3n
# excel_upload
excel_upload.uploadExcelFile = Subir fichero Excel
-excel_upload.error.invalidFile = Error procesando el fichero, puede que no sea un fichero Excel v\xE1lido.
+excel_upload.error.invalidFile = Error procesando el fichero, puede que no sea un fichero Excel v\u00e1lido.
# excel_view
excel_view.previewImportedData= Preview de los Datos Importados
-excel_view.selectActionToPerform = seleccione la acci\xF3n a realizar
+excel_view.selectActionToPerform = seleccione la acci\u00f3n a realizar
excel_view.deleteSelected = Borrar las filas/columnas seleccionadas
excel_view.convertToDate = Convertir el formato de las columnas seleccionadas a Fecha
excel_view.concatenateFields = Concatenar el contenido de las columnas seleccionadas
@@ -207,16 +206,16 @@
excel_view.extractFirstEighty = Extraer los primeros 80 caracteres a una nueva columna
# exception_flow
-exception_flow.unsupportedNavigation = Navegaci\xF3n no permitida
-exception_flow.line1 = Boton 'atr\xE1s' del navegador / refresco de p\xE1gina - no implementado en esta versi\xF3n.
-exception_flow.line2 = Este error no es recuperable y debe reiniciar su navegaci\xF3n previa.
-exception_flow.line3 = Para evitar este error, use los links o botones de la aplicaci\xF3n para navegar.
+exception_flow.unsupportedNavigation = Navegaci\u00f3n no permitida
+exception_flow.line1 = Boton 'atr\u00e1s' del navegador / refresco de p\u00e1gina - no implementado en esta versi\u00f3n.
+exception_flow.line2 = Este error no es recuperable y debe reiniciar su navegaci\u00f3n previa.
+exception_flow.line3 = Para evitar este error, use los links o botones de la aplicaci\u00f3n para navegar.
# index_rebuild_success
-index_rebuild.heading = Reconstruir \xEDndices
+index_rebuild.heading = Reconstruir \u00edndices
# index_rebuild_success
-index_rebuild_success.message = Reconstrucci\xF3n de \xEDndices finaliz\xF3 con \xE9xito
+index_rebuild_success.message = Reconstrucci\u00f3n de \u00edndices finaliz\u00f3 con \u00e9xito
# space_allocate
space_allocate.usersAllocatedToSpace = Usuarios asignados al Proyecto
space_allocate.loginName = Login
@@ -230,15 +229,15 @@
# space_delete
space_delete.confirm = Confirmar el Borrado del Proyecto
-space_delete.line1 = \xBFEst\xE1 seguro de que desea borrar este Proyecto?
-space_delete.line2 = Esta operaci\xF3n eliminar\xE1 todos las incidencias de este Proyecto.
-space_delete.line3 = No puede deshacer operaciones de actualizaci\xF3n en la base de datos para esta operaci\xF3n.
+space_delete.line1 = \u00bfEst\u00e1 seguro de que desea borrar este Proyecto?
+space_delete.line2 = Esta operaci\u00f3n eliminar\u00e1 todos las incidencias de este Proyecto.
+space_delete.line3 = No puede deshacer operaciones de actualizaci\u00f3n en la base de datos para esta operaci\u00f3n.
# space_field_delete
space_field_delete.confirm = Confirmar el Borrado del Campo.
-space_field_delete.line1 = \xBFEst\xE1 seguro de que desea borrar este Campo?
-space_field_delete.line2 = N\xFAmero de registros afectados en la base de datos = {0}
-space_field_delete.line3 = No puede deshacer operaciones de actualizaci\xF3n en la base de datos para esta operaci\xF3n.
+space_field_delete.line1 = \u00bfEst\u00e1 seguro de que desea borrar este Campo?
+space_field_delete.line2 = N\u00famero de registros afectados en la base de datos = {0}
+space_field_delete.line3 = No puede deshacer operaciones de actualizaci\u00f3n en la base de datos para esta operaci\u00f3n.
# space_field_form
space_field_form.editField = Editar Campo
@@ -246,21 +245,21 @@
space_field_form.label = Etiqueta
space_field_form.optional = Opcional
space_field_form.options = Opciones
-space_field_form.addOption = A\xF1adir Opciones
+space_field_form.addOption = A\u00f1adir Opciones
space_field_form.update = Actualizar
space_field_form.done = Hecho
-space_field_form.error.optionExists = La Opci\xF3n ya existe
+space_field_form.error.optionExists = La Opci\u00f3n ya existe
# space_field_option_delete
-space_field_option_delete.confirm = Confirmar el Borrado de la Opci\xF3n
-space_field_option_delete.line1 = \xBFEst\xE1 seguro de que desea borrar esta Opci\xF3n?
-space_field_option_delete.line2 = N\xFAmero de registros afectados en la base de datos = {0}
-space_field_option_delete.line3 = No puede deshacer operaciones de actualizaci\xF3n en la base de datos para esta operaci\xF3n.
+space_field_option_delete.confirm = Confirmar el Borrado de la Opci\u00f3n
+space_field_option_delete.line1 = \u00bfEst\u00e1 seguro de que desea borrar esta Opci\u00f3n?
+space_field_option_delete.line2 = N\u00famero de registros afectados en la base de datos = {0}
+space_field_option_delete.line3 = No puede deshacer operaciones de actualizaci\u00f3n en la base de datos para esta operaci\u00f3n.
# space_field_option_edit
-space_field_option_edit.editOption = Editar la Opci\xF3n por Campo
-space_field_option_edit.error.optionEmpty = Debe seleccionar una Opci\xF3n
-space_field_option_edit.error.exists = La Opci\xF3n ya existe
+space_field_option_edit.editOption = Editar la Opci\u00f3n por Campo
+space_field_option_edit.error.optionEmpty = Debe seleccionar una Opci\u00f3n
+space_field_option_edit.error.exists = La Opci\u00f3n ya existe
# space_fields
space_fields.customFields = Campos Personalizados por Proyecto
@@ -270,12 +269,12 @@
space_fields.optional = Opcional
space_fields.label = Etiqueta
space_fields.optionList = Lista de Opciones
-space_fields.chooseType = Escoja el Tipo del Campo Personalizado a a\xF1adir
-space_fields.addField = A\xF1adir un Campo
+space_fields.chooseType = Escoja el Tipo del Campo Personalizado a a\u00f1adir
+space_fields.addField = A\u00f1adir un Campo
space_fields.type_1 = Severidad (Desplegable)
space_fields.type_2 = Prioridad (Desplegable)
space_fields.type_3 = Lista Desplegable
-space_fields.type_4 = N\xFAmero Decimal
+space_fields.type_4 = N\u00famero Decimal
space_fields.type_5 = Campo Texto Libre
space_fields.type_6 = Campo Fecha
space_fields.typeRemaining = {0} left
@@ -284,14 +283,14 @@
space_form.spaceDetails = Detalles del Proyecto
space_form.displayName = Nombre a Mostrar
space_form.spaceKey = Clave del Proyecto (Nombre Corto)
-space_form.description = Descripci\xF3n
-space_form.makePublic = Convertir a P\xFAblico
-space_form.allowGuest = Permitir Acceso (s\xF3lo lectura) a Invitado
+space_form.description = Descripci\u00f3n
+space_form.makePublic = Convertir a P\u00fablico
+space_form.allowGuest = Permitir Acceso (s\u00f3lo lectura) a Invitado
space_form.copyExisting = Copiar Proyecto Existente
space_form.createFresh = crear desde cero
space_form.error.prefixCode.tooShort = La logitud debe ser de al menos 3 caracteres.
space_form.error.prefixCode.tooLong = La longitud no debe superar los 10 caracteres.
-space_form.error.prefixCode.invalid = S\xF3lo may\xFAsculas y n\xFAmeros est\xE1n permitidos
+space_form.error.prefixCode.invalid = S\u00f3lo may\u00fasculas y n\u00fameros est\u00e1n permitidos
space_form.error.prefixCode.exists = Un Proyecto con esta Clave ya existe.
# space_list
@@ -300,29 +299,29 @@
space_list.key = Clave
space_list.name = Nombre
space_list.edit = Editar
-space_list.description = Descripci\xF3n
+space_list.description = Descripci\u00f3n
space_list.users = Usuarios
# space_role_delete
space_role_delete.confirm = Confirmar el Borrado del Rol
space_role_delete.line1 = Hay ({0}) usuarios asignados a este Proyecto con este Rol.
-space_role_delete.line2 = \xBFEst\xE1 seguro de que desea borrar este Rol?
-space_role_delete.line3 = No puede deshacer operaciones de actualizaci\xF3n en la base de datos para esta operaci\xF3n.
+space_role_delete.line2 = \u00bfEst\u00e1 seguro de que desea borrar este Rol?
+space_role_delete.line3 = No puede deshacer operaciones de actualizaci\u00f3n en la base de datos para esta operaci\u00f3n.
# space_role_form
space_role_form.editRoleName = Editar el Nombre del Rol
-space_role_form.error.role.invalid = El nombre del Rol debe ser todo en may\xFAsculas o n\xFAmeros
+space_role_form.error.role.invalid = El nombre del Rol debe ser todo en may\u00fasculas o n\u00fameros
space_role_form.error.role.exists = Ya existe un Rol con ese nombre
# space_role_form_confirm
space_role_form_confirm.confirm = Confirmar el Renombrado del Rol
-space_role_form_confirm.line1 = \xBFEst\xE1 seguro de que desea renombrar este Rol?
-space_role_form_confirm.line2 = No puede deshacer operaciones de actualizaci\xF3n en la base de datos para esta operaci\xF3n.
+space_role_form_confirm.line1 = \u00bfEst\u00e1 seguro de que desea renombrar este Rol?
+space_role_form_confirm.line2 = No puede deshacer operaciones de actualizaci\u00f3n en la base de datos para esta operaci\u00f3n.
# space_roles
space_roles.spaceRoles = Roles del Proyecto y Transiciones de Estados (WorkFlow) por Proyecto
-space_roles.addState = A\xF1adir Estado
-space_roles.addRole = A\xF1adir Rol
+space_roles.addState = A\u00f1adir Estado
+space_roles.addRole = A\u00f1adir Rol
space_roles.nextAllowedState = Siguiente Estado Permitido
space_roles.fieldLevelPermissions = Nivel de Permisos del Campo
space_roles.flpLegend = E=Editar, V=Ver
@@ -334,13 +333,13 @@
# space_state_delete
space_state_delete.confirm = Confirmar el Borrado del Estado
-space_state_delete.line1 = \xBFEst\xE1 seguro de que desea borrar este Estado?
-space_state_delete.line2 = N\xFAmero de registros afectados en la base de datos = (0)
-space_state_delete.line3 = No puede deshacer operaciones de actualizaci\xF3n en la base de datos para esta operaci\xF3n.
+space_state_delete.line1 = \u00bfEst\u00e1 seguro de que desea borrar este Estado?
+space_state_delete.line2 = N\u00famero de registros afectados en la base de datos = (0)
+space_state_delete.line3 = No puede deshacer operaciones de actualizaci\u00f3n en la base de datos para esta operaci\u00f3n.
# space_state_form
space_state_form.editState = Editar Estado
-space_state_form.error.state.invalid = El nombre del Estado debe empezar por may\xFAscula con guiones ('-') para separar las palabras (p.e. "Resuelto", "En-Desarrollo"
+space_state_form.error.state.invalid = El nombre del Estado debe empezar por may\u00fascula con guiones ('-') para separar las palabras (p.e. "Resuelto", "En-Desarrollo"
space_state_form.error.state.exists = Ya existe un Estado con ese nombre
# user_allocate_space
@@ -370,7 +369,7 @@
user_list.filterBy = Filtrado Por
# mail_sender (this is in the mail sending code, not a JSP)
-mail_sender.clickHereToAccess = Click aqu\xED para acceder
+mail_sender.clickHereToAccess = Click aqu\u00ed para acceder
mail_sender.loginMailSubject = Datos de login de JTrac
mail_sender.loginMailGreeting = Hola
mail_sender.loginMailLine1 = Sus datos de login han sido creados/modificados de la siguiente manera:
@@ -379,18 +378,18 @@
mail_sender.loginMailLine2 = Use el enlace para acceder:
# new item_relate_remove
-item_relate_remove.heading = Cofirmar borrado de la relaci\xF3n
+item_relate_remove.heading = Cofirmar borrado de la relaci\u00f3n
# item_delete
item_delete.confirm = Confirmar borrado de la incidencia
-item_delete.line1 = \xBFEst\xE1 seguro de que quiere borrar esta incidencia?
-item_delete.line2 = No puede deshacer operaciones de actualizaci\xF3n en la base de datos para esta operaci\xF3n.
+item_delete.line1 = \u00bfEst\u00e1 seguro de que quiere borrar esta incidencia?
+item_delete.line2 = No puede deshacer operaciones de actualizaci\u00f3n en la base de datos para esta operaci\u00f3n.
# user_delete
user_delete.confirm = Confirmar borrado del Usuario
-user_delete.line1 = \xBFEst\xE1 seguro de que quiere borrar este Usuario?
-user_delete.line2 = No puede deshacer operaciones de actualizaci\xF3n en la base de datos para esta operaci\xF3n.
-user_delete.notPossible = Este usuario est\xE1 relacionado con otras incidencias y no puede ser borrado. Intente bloquear el usuario o borrar primero las incidencias relacionadas.
+user_delete.line1 = \u00bfEst\u00e1 seguro de que quiere borrar este Usuario?
+user_delete.line2 = No puede deshacer operaciones de actualizaci\u00f3n en la base de datos para esta operaci\u00f3n.
+user_delete.notPossible = Este usuario est\u00e1 relacionado con otras incidencias y no puede ser borrado. Intente bloquear el usuario o borrar primero las incidencias relacionadas.
# generic error messages
error.itemBelongsToUnallocatedSpace = No tiene permiso para ver esta incidencia
@@ -397,7 +396,7 @@
# item search filter wizard
item_filter.showColumn = Mostrar en Resultado
-item_filter.expression = Filtro de B\xFAsqueda
+item_filter.expression = Filtro de B\u00fasqueda
item_filter.in = tiene los valores
item_filter.notIn = no tiene los valores
item_filter.like = contiene el texto
@@ -406,3 +405,4 @@
item_filter.greaterThan = mayor que
item_filter.lessThan = menor que
item_filter.between = entre
+
Modified: trunk/jtrac/src/main/resources/messages_es_MX.properties
===================================================================
--- trunk/jtrac/src/main/resources/messages_es_MX.properties 2023-07-30 15:26:07 UTC (rev 1484)
+++ trunk/jtrac/src/main/resources/messages_es_MX.properties 2023-10-05 07:46:13 UTC (rev 1485)
@@ -1,44 +1,46 @@
+# please refer documentation before starting work on a translation:
+# http://j-trac.sourceforge.io/doc/html/dev-guide.html#dev-translating
# globals
-IConverter.Date=${label}: Por favor, introduzca una fecha v\xE1lida en el formato aaaa-mm-dd
-IConverter.Double=${label}: Por favor, introduzca un n\xFAmero v\xE1lido
+IConverter.Date=${label}: Por favor, introduzca una fecha v\u00e1lida en el formato aaaa-mm-dd
+IConverter.Double=${label}: Por favor, introduzca un n\u00famero v\u00e1lido
Required=Por favor, introduzca los campos obligatorios
RequiredValidator=Por favor introduzca los campos obligatorios
-TypeValidator.Date=${label}: Por favor introduzca una fecha v\xE1lida en el formato aaaa-mm-dd
-TypeValidator.Double=${label}: Por favor introduzca un n\xFAmero v\xE1lido
-back=Atr\xE1s
+TypeValidator.Date=${label}: Por favor introduzca una fecha v\u00e1lida en el formato aaaa-mm-dd
+TypeValidator.Double=${label}: Por favor introduzca un n\u00famero v\u00e1lido
+back=Atr\u00e1s
cancel=Cancelar
-config.attachment.maxsize=Tama\xF1o m\xE1ximo en MB de los archivos adjuntos. (predeterminado en 5 MB) Use -1 para no tener l\xEDmite
-config.jtrac.edit.item=\xBFDeber\xEDa el propietario de la tarea editar sus elementos (incidencias)?
+config.attachment.maxsize=Tama\u00f1o m\u00e1ximo en MB de los archivos adjuntos. (predeterminado en 5 MB) Use -1 para no tener l\u00edmite
+config.jtrac.edit.item=\u00bfDeber\u00eda el propietario de la tarea editar sus elementos (incidencias)?
config.jtrac.header.picture=Imagen de encabezado individual
config.jtrac.header.text=Texto de encabezado individual
-config.jtrac.url.base=URL base de la instalaci\xF3n JTrac (p.e. http://miservidor/jtrac), requerido para el funcionamiento correcto de los enlaces en los e-mails
-config.locale.default=Lenguaje predeterminado usado en esta instalaci\xE9n de JTrac (e.g. "es" para Espa\xF1ol)
-config.mail.from=Cuando se genere un e-mail, esta ser\xE1 la direcci\xF3n remitente ('from')
+config.jtrac.url.base=URL base de la instalaci\u00f3n JTrac (p.e. http://miservidor/jtrac), requerido para el funcionamiento correcto de los enlaces en los e-mails
+config.locale.default=Lenguaje predeterminado usado en esta instalaci\u00e9n de JTrac (e.g. "es" para Espa\u00f1ol)
+config.mail.from=Cuando se genere un e-mail, esta ser\u00e1 la direcci\u00f3n remitente ('from')
# config explanations (used in both config_list and config_form screens)
-config.mail.server.host=Nombre del Host o direcci\xF3n IP del servidor SMTP usado para el env\xEDo de e-mail
-config.mail.server.password=Contrase\xF1a para el servidor SMTP, si este requiere autenticaci\xF3n
+config.mail.server.host=Nombre del Host o direcci\u00f3n IP del servidor SMTP usado para el env\u00edo de e-mail
+config.mail.server.password=Contrase\u00f1a para el servidor SMTP, si este requiere autenticaci\u00f3n
config.mail.server.port=Puerto usado por el servidor SMTP (predeterminado 25)
config.mail.server.starttls.enable=Usar "true" para conexiones seguras (SSL) , si se requiere en el servidor SMTP
-config.mail.server.username=Nombre de usuario para el servidor SMTP, si este requiere autenticaci\xF3n
-config.mail.session.jndiname=javax.mail.Session nombre JNDI - Si est\xE1 presente, \xE9ste ser\xE1 usado en lugar de los detalles del servidor SMTP de arriba
-config.mail.smtp.localhost=Texto para la configuraci\xF3n HELO de pasarelas SMTP muy estrictas
+config.mail.server.username=Nombre de usuario para el servidor SMTP, si este requiere autenticaci\u00f3n
+config.mail.session.jndiname=javax.mail.Session nombre JNDI - Si est\u00e1 presente, \u00e9ste ser\u00e1 usado en lugar de los detalles del servidor SMTP de arriba
+config.mail.smtp.localhost=Texto para la configuraci\u00f3n HELO de pasarelas SMTP muy estrictas
config.mail.subject.prefix=Texto prefijo para el asunto de los e-mail (predeterminado [jtrac])
-config.session.timeout=Tiempo en minutos despu\xE9s del cual expira la sesi\xF3n de usuario (predeterminado en 30 minutos)
+config.session.timeout=Tiempo en minutos despu\u00e9s del cual expira la sesi\u00f3n de usuario (predeterminado en 30 minutos)
# config_list (config_form does not have any extra messages)
-config_list.configurationSettings=Configuraci\xF3n
-config_list.description=Descripci\xF3n
+config_list.configurationSettings=Configuraci\u00f3n
+config_list.description=Descripci\u00f3n
config_list.edit=Editar
-config_list.parameter=Clave del Par\xE1metro
+config_list.parameter=Clave del Par\u00e1metro
config_list.value=Valor
-dashboard.action=Acci\xF3n
+dashboard.action=Acci\u00f3n
dashboard.all=Todos
-dashboard.assignedToMe=Asignado<br/>A M\xED
+dashboard.assignedToMe=Asignado<br/>A M\u00ed
dashboard.hideDetails=Ocultar Detalles
-dashboard.loggedByMe=Registrado<br/>Por M\xED
+dashboard.loggedByMe=Registrado<br/>Por M\u00ed
dashboard.new=NUEVO
# dashboard
-dashboard.noSpaces=No est\xE1 asignado a ning\xFAn Espacio
+dashboard.noSpaces=No est\u00e1 asignado a ning\u00fan Espacio
dashboard.search=BUSCAR
dashboard.showDetails=Mostrar Detalles
dashboard.space=Espacio
@@ -48,7 +50,7 @@
# generic form validation message
error.empty=Valor requerido
error.itemBelongsToUnallocatedSpace=No tiene permiso para ver este elemento
-excel_upload.error.invalidFile=Error procesando el archivo, puede que no sea un archivo Excel v\xE1lido.
+excel_upload.error.invalidFile=Error procesando el archivo, puede que no sea un archivo Excel v\u00e1lido.
# excel_upload
excel_upload.uploadExcelFile=Subir archivo Excel
excel_view.columnData=Datos de Columna
@@ -57,16 +59,16 @@
excel_view.deleteSelected=Borrar las filas/columnas seleccionadas
excel_view.distinctValues=Valores Distintos
excel_view.duplicateColumn=Duplicar Columna Seleccionada
-excel_view.editRow=Editar Datos de Rengl\xF3n Seleccionada
+excel_view.editRow=Editar Datos de Rengl\u00f3n Seleccionada
excel_view.error.atLeastTwoColumns=Por favor seleccione al menos dos columnas
-excel_view.error.duplicateMapping=Campo mapeado m\xE1s de una vez: {0}
-excel_view.error.invalidValue=Algunas celdas tienen datos inv\xE1lidos
-excel_view.error.noActionSelected=Por favor seleccione una acci\xF3n a realizar
+excel_view.error.duplicateMapping=Campo mapeado m\u00e1s de una vez: '{0}'
+excel_view.error.invalidValue=Algunas celdas tienen datos inv\u00e1lidos
+excel_view.error.noActionSelected=Por favor seleccione una acci\u00f3n a realizar
excel_view.error.noColumnOrRowSelected=Por favor seleccione columnas / renglones
excel_view.error.noColumnSelected=Por favor seleccione una columna
-excel_view.error.noRowSelected=Por favor seleccione un rengl\xF3n
+excel_view.error.noRowSelected=Por favor seleccione un rengl\u00f3n
excel_view.error.noSpaceSelected=Por favor elija un espacio primero
-excel_view.error.notMapped=Campo tiene que ser mapeado: {0}
+excel_view.error.notMapped=Campo tiene que ser mapeado: '{0}'
excel_view.extractFirstEighty=Extraer los Primeros 80 Caracteres a una nueva Columna
excel_view.import=Importar en el Espacio Seleccionado
excel_view.importSuccess=Elementos Importados Exitosamente
@@ -75,35 +77,35 @@
excel_view.noSpaceSelected=(espacio no seleccionado)
excel_view.preview=Previsualizar
# excel_view
-excel_view.previewImportedData=Previsualizaci\xF3n de los Datos Importados
-excel_view.selectActionToPerform=seleccione la acci\xF3n a realizar
+excel_view.previewImportedData=Previsualizaci\u00f3n de los Datos Importados
+excel_view.selectActionToPerform=seleccione la acci\u00f3n a realizar
excel_view.selectSpace=Elija Espacio
excel_view.selectedColumn=Columna Seleccionada:
excel_view.selectedSpace=Espacio Seleccionado
excel_view.update=Actualizar
-exception_flow.line1=Boton 'atr\xE1s' del navegador / refresco de p\xE1gina - no implementado en esta versi\xF3n.
-exception_flow.line2=Este error no es recuperable y debe reiniciar su navegaci\xF3n previa.
-exception_flow.line3=Para evitar este error, use los enlaces o botones de la aplicaci\xF3n para navegar.
+exception_flow.line1=Boton 'atr\u00e1s' del navegador / refresco de p\u00e1gina - no implementado en esta versi\u00f3n.
+exception_flow.line2=Este error no es recuperable y debe reiniciar su navegaci\u00f3n previa.
+exception_flow.line3=Para evitar este error, use los enlaces o botones de la aplicaci\u00f3n para navegar.
# exception_flow
-exception_flow.unsupportedNavigation=Navegaci\xF3n no permitida
+exception_flow.unsupportedNavigation=Navegaci\u00f3n no permitida
# header navigation
header.dashboard=TABLERO DE CONTROL
-header.login=INICIAR SESI\xD3N
-header.logout=CERRAR SESI\xD3N
+header.login=INICIAR SESI\u00d3N
+header.logout=CERRAR SESI\u00d3N
header.new=NUEVO
header.options=OPCIONES
header.search=BUSCAR
-index_rebuild.heading=Reconstruir \xCDndices
+index_rebuild.heading=Reconstruir \u00cdndices
index_rebuild.warning=Esto puede tomar largo tiempo y se recomienda que no haya otros usuarios dentro del sistema.
# index_rebuild_success
-index_rebuild_success.message=Reconstrucci\xF3n de \xCDndices Realizada.
-item_delete.confirm=Confirmar Eliminaci\xF3n de Elemento
-item_delete.line1=\xBFEst\xE1 seguro de querer eliminar este elemento?
-item_delete.line2=No puede deshacer actualizaciones de base de datos para esta operaci\xF3n.
+index_rebuild_success.message=Reconstrucci\u00f3n de \u00cdndices Realizada.
+item_delete.confirm=Confirmar Eliminaci\u00f3n de Elemento
+item_delete.line1=\u00bfEst\u00e1 seguro de querer eliminar este elemento?
+item_delete.line2=No puede deshacer actualizaciones de base de datos para esta operaci\u00f3n.
item_filter.between=entre
item_filter.equal=igual a
item_filter.expandAll=(extender todo)
-item_filter.expression=Filtro de B\xFAsqueda
+item_filter.expression=Filtro de B\u00fasqueda
item_filter.greaterThan=mayor que
item_filter.in=tenga los valores
item_filter.lessThan=menor que
@@ -115,7 +117,7 @@
item_form.attachment=Anexo
item_form.detail=Detalles
item_form.editReason=Editar Motivo
-item_form.error.version=Elemento modificado por otro usuario, o usted us\xF3 el bot\xF3n Regresar del navegador.
+item_form.error.version=Elemento modificado por otro usuario, o usted us\u00f3 el bot\u00f3n Regresar del navegador.
item_form.notifyByEmail=Notificar por e-mail
item_form.sendNotifications=enviar notificaciones por e-mail
# item_form
@@ -124,10 +126,10 @@
item_list.detail=Detalles
item_list.exportToExcel=Exportar a Excel
item_list.exportToXml=XML
-item_list.history=Hist\xF3rico
+item_list.history=Hist\u00f3rico
item_list.id=ID
item_list.loggedBy=Registrado por
-item_list.modifySearch=Modificar B\xFAsqueda
+item_list.modifySearch=Modificar B\u00fasqueda
item_list.recordFound=Registro Encontrado
item_list.recordsFound=Registros Encontrados
# item_list (most rendered within a taglib not JSP, some reused also for excel export)
@@ -136,51 +138,51 @@
item_list.status=Estado
item_list.summary=Resumen
item_list.timeStamp=Marca de Tiempo
-item_relate_remove.heading=Confirmar eliminaci\xF3n de asociaci\xF3n
+item_relate_remove.heading=Confirmar eliminaci\u00f3n de asociaci\u00f3n
item_search_form.assignedTo=Asignado A
-item_search_form.createdDate=Fecha de creaci\xF3n
+item_search_form.createdDate=Fecha de creaci\u00f3n
item_search_form.descending=Descendente
-item_search_form.error.refId.invalid=ID no v\xE1lido
+item_search_form.error.refId.invalid=ID no v\u00e1lido
item_search_form.error.refId.notFound=Elemento no encontrado
-item_search_form.error.summary.invalid=Cadena de b\xFAsqueda no v\xE1lida
-item_search_form.historyUpdatedDate=Fecha de modificaci\xF3n del Hist\xF3rico
+item_search_form.error.summary.invalid=Cadena de b\u00fasqueda no v\u00e1lida
+item_search_form.historyUpdatedDate=Fecha de modificaci\u00f3n del Hist\u00f3rico
item_search_form.id=ID
item_search_form.loggedBy=Registrado Por
-item_search_form.noLimit=Sin L\xEDmite
-item_search_form.onOrAfter=En / Despu\xE9s de\
+item_search_form.noLimit=Sin L\u00edmite
+item_search_form.onOrAfter=En / Despu\u00e9s de\
item_search_form.onOrBefore=En / Antes de
item_search_form.priority=Prioridad
-item_search_form.resultsPerPage=Resultados / P\xE1gina
+item_search_form.resultsPerPage=Resultados / P\u00e1gina
# item_search_form
item_search_form.searchingForRelated=Buscando elementos relacionados con
item_search_form.severity=Severidad
item_search_form.showDetail=Mostrar Detalles
-item_search_form.showHistory=Mostrar Hist\xF3rico
+item_search_form.showHistory=Mostrar Hist\u00f3rico
item_search_form.sortOnColumn=Ordenar por columna
item_search_form.space=Espacio
item_search_form.status=Estado
-item_search_form.textSearch=B\xFAsqueda de Texto
+item_search_form.textSearch=B\u00fasqueda de Texto
item_search_form.viewItemById=Ver elemento por ID
item_view.assignedTo=Asignado a
item_view.comment=Comentario
item_view.dependsOn=depende de
-item_view.dependsOnThis=depende de \xE9ste
+item_view.dependsOnThis=depende de \u00e9ste
item_view.detail=Detalles
item_view.duplicateOf=es un duplicado de
-item_view.duplicateOfThis=es duplicado de \xE9ste
-item_view.history=Hist\xF3rico
+item_view.duplicateOfThis=es duplicado de \u00e9ste
+item_view.history=Hist\u00f3rico
# item_view (note this is rendered within a taglib and not in a JSP)
item_view.id=ID
item_view.loggedBy=Registrado Por
item_view.relatedItems=Elementos Relacionados
-item_view.relatedTo=est\xE1 relacionado con
-item_view.relatedToThis=est\xE1 relacionado con \xE9ste
+item_view.relatedTo=est\u00e1 relacionado con
+item_view.relatedToThis=est\u00e1 relacionado con \u00e9ste
item_view.remove=Eliminar
item_view.status=Estado
item_view.summary=Resumen
item_view.this=este
item_view.timeStamp=Marca de Tiempo
-item_view_form.addRelatedItem=a\xF1adir elemento relacionado
+item_view_form.addRelatedItem=a\u00f1adir elemento relacionado
item_view_form.assignTo=Asignar A
item_view_form.assignedTo.error=Requerido si el estado es distinto de Cerrado
item_view_form.attachment=Anexo
@@ -187,36 +189,36 @@
item_view_form.change=cambiar
item_view_form.chooseStatus=-- elija estado --
item_view_form.comment=Comentario
-item_view_form.dependsOn=depende de \xE9ste
-item_view_form.duplicateOf=es duplicado de \xE9ste
+item_view_form.dependsOn=depende de \u00e9ste
+item_view_form.duplicateOf=es duplicado de \u00e9ste
item_view_form.newStatus=Nuevo Estado
item_view_form.notifyByEmail=Notificar por e-mail
# item_view_form
item_view_form.relateTo=Relacionar este elemento con
-item_view_form.relatedTo=esta relacionado con \xE9ste
+item_view_form.relatedTo=esta relacionado con \u00e9ste
item_view_form.sendNotifications=enviar notificaciones por e-mail
-item_view_form.status.error=Requerido si se est\xE1 asignando
-login.error=Credenciales err\xF3neas
+item_view_form.status.error=Requerido si se est\u00e1 asignando
+login.error=Credenciales err\u00f3neas
login.home=Inicio
login.loginName=Usuario / ID de E-mail
-login.password=Contrase\xF1a
-login.rememberMe=Recu\xE9rdeme
+login.password=Contrase\u00f1a
+login.rememberMe=Recu\u00e9rdeme
login.submit=Entrar
# login
-login.title=JTrac Inicio de Sesi\xF3n
+login.title=JTrac Inicio de Sesi\u00f3n
logout.home=Inicio
-logout.login=Inicio de Sesi\xF3n
-logout.message=Sesi\xF3n cerrada. Cualquier sesi\xF3n "recu\xE9rdeme" ha sido deshabilitada.
+logout.login=Inicio de Sesi\u00f3n
+logout.message=Sesi\u00f3n cerrada. Cualquier sesi\u00f3n "recu\u00e9rdeme" ha sido deshabilitada.
# logout
-logout.title=Sesi\xF3n cerrada
+logout.title=Sesi\u00f3n cerrada
# mail_sender (this is in the mail sending code, not a JSP)
-mail_sender.clickHereToAccess=Clic aqu\xED para acceder
+mail_sender.clickHereToAccess=Clic aqu\u00ed para acceder
mail_sender.loginMailGreeting=Hola
-mail_sender.loginMailLine1=Sus datos de inicio de sesi\xF3n han sido creados/modificados de la siguiente manera:
+mail_sender.loginMailLine1=Sus datos de inicio de sesi\u00f3n han sido creados/modificados de la siguiente manera:
mail_sender.loginMailLine2=Use el enlace para acceder:
-mail_sender.loginMailSubject=Datos de inicio de sesi\xF3n de JTrac
+mail_sender.loginMailSubject=Datos de inicio de sesi\u00f3n de JTrac
mail_sender.loginName=Usuario
-mail_sender.password=Contrase\xF1a
+mail_sender.password=Contrase\u00f1a
new=Nuevo
next=Siguiente
null=
@@ -223,19 +225,19 @@
nullValid=
options.editYourProfile=Edite su perfil
options.importFromExcel=Importar desde un archivo Excel
-options.manageSettings=Administraci\xF3n de Configuraci\xF3n
-options.manageSpaces=Administraci\xF3n de Espacios
-options.manageUsers=Administraci\xF3n de Usuarios
+options.manageSettings=Administraci\u00f3n de Configuraci\u00f3n
+options.manageSpaces=Administraci\u00f3n de Espacios
+options.manageUsers=Administraci\u00f3n de Usuarios
# options
-options.optionsMenu=Men\xFA de Opciones
-options.rebuildIndexes=Reconstruir \xCDndices
-rest_multi_action_controller.anExceptionOcurred.error=Se present\xF3 una excepci\xF3n.\
-rest_multi_action_controller.itemNotFound.error=Elemento (incidencia) no se encontr\xF3:\
-rest_multi_action_controller.newStatusNotPermitted.error=Nuevo estado no est\xE1 permitido desde el estado actual
-rest_multi_action_controller.requiredParameterNotFound.error=Par\xE1metro requerido no se encontr\xF3 en la solicitud:\
-rest_multi_action_controller.spaceNotFound.error=Espacio no se encontr\xF3:\
-rest_multi_action_controller.userNotAbleToTransition.error=Usuario no est\xE1 autorizado para realizar la transici\xF3n desde el estado actual hacia el nuevo estado:\
-rest_multi_action_controller.userNotRegistered.error=Usuario no est\xE1 registrado:\
+options.optionsMenu=Men\u00fa de Opciones
+options.rebuildIndexes=Reconstruir \u00cdndices
+rest_multi_action_controller.anExceptionOcurred.error=Se present\u00f3 una excepci\u00f3n.\
+rest_multi_action_controller.itemNotFound.error=Elemento (incidencia) no se encontr\u00f3:\
+rest_multi_action_controller.newStatusNotPermitted.error=Nuevo estado no est\u00e1 permitido desde el estado actual
+rest_multi_action_controller.requiredParameterNotFound.error=Par\u00e1metro requerido no se encontr\u00f3 en la solicitud:\
+rest_multi_action_controller.spaceNotFound.error=Espacio no se encontr\u00f3:\
+rest_multi_action_controller.userNotAbleToTransition.error=Usuario no est\u00e1 autorizado para realizar la transici\u00f3n desde el estado actual hacia el nuevo estado:\
+rest_multi_action_controller.userNotRegistered.error=Usuario no est\u00e1 registrado:\
save=Guardar
search=Buscar
space_allocate.allocate=Asignar
@@ -242,7 +244,7 @@
space_allocate.allocateUser=Elija el Usuario y el Rol a asignar
space_allocate.createNewUser=Crear Nuevo Usuario
space_allocate.fullName=Nombre Completo
-space_allocate.loginName=Nombre de usuario de inicio de sesi\xF3n
+space_allocate.loginName=Nombre de usuario de inicio de sesi\u00f3n
space_allocate.remove=Eliminar
space_allocate.role=Rol
space_allocate.user=Usuario
@@ -250,19 +252,19 @@
space_allocate.usersAllocatedToSpace=Usuarios asignados al Espacio
# space_delete
space_delete.confirm=Confirmar el Borrado del Espacio
-space_delete.line1=\xBFEst\xE1 seguro que desea borrar este Espacio?
-space_delete.line2=Esta operaci\xF3n eliminar\xE1 todos los elementos de este espacio.
-space_delete.line3=No puede deshacer operaciones de actualizaci\xE1n en la base de datos para esta operaci\xF3n.
+space_delete.line1=\u00bfEst\u00e1 seguro que desea borrar este Espacio?
+space_delete.line2=Esta operaci\u00f3n eliminar\u00e1 todos los elementos de este espacio.
+space_delete.line3=No puede deshacer operaciones de actualizaci\u00e1n en la base de datos para esta operaci\u00f3n.
# space_field_delete
space_field_delete.confirm=Confirmar el Borrado del Campo.
-space_field_delete.line1=\xBFEst\xE1 seguro que desea borrar este Campo?
-space_field_delete.line2=N\xFAmero de registros afectados en la base de datos = {0}
-space_field_delete.line3=No puede deshacer operaciones de actualizaci\xF3n en la base de datos para esta operaci\xF3n.
-space_field_form.addOption=A\xF1adir Opciones
+space_field_delete.line1=\u00bfEst\u00e1 seguro que desea borrar este Campo?
+space_field_delete.line2=N\u00famero de registros afectados en la base de datos = {0}
+space_field_delete.line3=No puede deshacer operaciones de actualizaci\u00f3n en la base de datos para esta operaci\u00f3n.
+space_field_form.addOption=A\u00f1adir Opciones
space_field_form.done=Hecho
# space_field_form
space_field_form.editField=Editar Campo
-space_field_form.error.optionExists=La Opci\xF3n ya existe
+space_field_form.error.optionExists=La Opci\u00f3n ya existe
space_field_form.internalName=Nombre Interno
space_field_form.label=Etiqueta
space_field_form.optional=Opcional
@@ -269,16 +271,16 @@
space_field_form.options=Opciones
space_field_form.update=Actualizar
# space_field_option_delete
-space_field_option_delete.confirm=Cormfirmar el Borrado de la Opci\xF3n
-space_field_option_delete.line1=\xBFEst\xE1 seguro que desea borrar esta Opci\xF3n?
-space_field_option_delete.line2=N\xFAmero de registros afectados en la base de datos = {0}
-space_field_option_delete.line3=No puede deshacer operaciones de actualizaci\xF3n en la base de datos para esta operaci\xF3n.
+space_field_option_delete.confirm=Cormfirmar el Borrado de la Opci\u00f3n
+space_field_option_delete.line1=\u00bfEst\u00e1 seguro que desea borrar esta Opci\u00f3n?
+space_field_option_delete.line2=N\u00famero de registros afectados en la base de datos = {0}
+space_field_option_delete.line3=No puede deshacer operaciones de actualizaci\u00f3n en la base de datos para esta operaci\u00f3n.
# space_field_option_edit
-space_field_option_edit.editOption=Editar la Opci\xF3n por Campo
-space_field_option_edit.error.exists=La Opci\xF3n ya existe
-space_field_option_edit.error.optionEmpty=Debe seleccionar una Opci\xF3n
-space_fields.addField=A\xF1adir un Campo
-space_fields.chooseType=Escoja el Tipo del Campo Personalizado a a\xF1adir
+space_field_option_edit.editOption=Editar la Opci\u00f3n por Campo
+space_field_option_edit.error.exists=La Opci\u00f3n ya existe
+space_field_option_edit.error.optionEmpty=Debe seleccionar una Opci\u00f3n
+space_fields.addField=A\u00f1adir un Campo
+space_fields.chooseType=Escoja el Tipo del Campo Personalizado a a\u00f1adir
# space_fields
space_fields.customFields=Campos Personalizados por Espacio
space_fields.internalName=Nombre Interno
@@ -291,24 +293,24 @@
space_fields.type_1=Severidad (Lista)
space_fields.type_2=Prioridad (Lista)
space_fields.type_3=Lista
-space_fields.type_4=N\xFAmero Decimal
+space_fields.type_4=N\u00famero Decimal
space_fields.type_5=Campo de Texto Libre
space_fields.type_6=Campo Fecha
-space_form.allowGuest=Permitir Acceso (s\xF3lo lectura) a Invitado\
+space_form.allowGuest=Permitir Acceso (s\u00f3lo lectura) a Invitado\
space_form.copyExisting=Copiar Espacio Existente
space_form.createFresh=crear desde cero
-space_form.description=Descripci\xF3n
+space_form.description=Descripci\u00f3n
space_form.displayName=Nombre a Mostrar
space_form.error.prefixCode.exists=Un Espacio con esta clave ya existe.
-space_form.error.prefixCode.invalid=Solo may\xFAsculas y n\xFAmeros est\xE1n permitidos
+space_form.error.prefixCode.invalid=Solo may\u00fasculas y n\u00fameros est\u00e1n permitidos
space_form.error.prefixCode.tooLong=La longitud no debe superar los 10 caracteres.
space_form.error.prefixCode.tooShort=La logitud debe ser de al menos 3 caracteres.
-space_form.makePublic=Convertir a P\xFAblico
+space_form.makePublic=Convertir a P\u00fablico
# space_form
space_form.spaceDetails=Detalles del Espacio
space_form.spaceKey=Clave del Espacio (Nombre Corto)
space_list.createNewSpace=Crear un Espacio
-space_list.description=Descripci\xF3n
+space_list.description=Descripci\u00f3n
space_list.edit=Editar
space_list.key=Clave
space_list.name=Nombre
@@ -318,25 +320,25 @@
# space_role_delete
space_role_delete.confirm=Confirmar el Borrado del Rol
space_role_delete.line1=Hay ({0}) usuarios asignados a este espacio con este Rol.
-space_role_delete.line2=\xBFEst\xE1 seguro que desea borrar este Rol?
-space_role_delete.line3=No puede deshacer operaciones de actualizaci\xF3n en la base de datos para esta operaci\xF3n.
+space_role_delete.line2=\u00bfEst\u00e1 seguro que desea borrar este Rol?
+space_role_delete.line3=No puede deshacer operaciones de actualizaci\u00f3n en la base de datos para esta operaci\u00f3n.
# space_role_form
space_role_form.editRoleName=Editar el Nombre del Rol
space_role_form.error.role.exists=Ya existe un Rol con ese nombre
-space_role_form.error.role.invalid=El nombre del Rol debe ser todo en may\xFAsculas o n\xFAmeros
-space_role_form.error.role.reserved=Este nombre de Rol est\xE1 reservado para uso interno
+space_role_form.error.role.invalid=El nombre del Rol debe ser todo en may\u00fasculas o n\u00fameros
+space_role_form.error.role.reserved=Este nombre de Rol est\u00e1 reservado para uso interno
# space_role_form_confirm
space_role_form_confirm.confirm=Confirmar el Renombrado del Rol
-space_role_form_confirm.line1=\xBFEst\xE1 seguro que desea renombrar este Rol?
-space_role_form_confirm.line2=No puede deshacer operaciones de actualizaci\xF3n en la base de datos para esta operaci\xF3n.
-space_roles.addRole=A\xF1adir Rol
-space_roles.addState=A\xF1adir Estado
+space_role_form_confirm.line1=\u00bfEst\u00e1 seguro que desea renombrar este Rol?
+space_role_form_confirm.line2=No puede deshacer operaciones de actualizaci\u00f3n en la base de datos para esta operaci\u00f3n.
+space_roles.addRole=A\u00f1adir Rol
+space_roles.addState=A\u00f1adir Estado
space_roles.fieldLevelPermissions=Nivel de Permisos del Campo
space_roles.flpLegend=E=Editar, V=Ver
space_roles.mandatory=Obligatorio
space_roles.nextAllowedState=Siguiente Estado Permitido
space_roles.optional=Opcional
-space_roles.readonly=S\xF3lo lectura
+space_roles.readonly=S\u00f3lo lectura
space_roles.role=Rol
# space_roles
space_roles.spaceRoles=Roles del Espacio y Transiciones de Estados (WorkFlow) por Espacio
@@ -343,17 +345,17 @@
space_roles.state=Estado
# space_state_delete
space_state_delete.confirm=Confirmar el Borrado del Estado
-space_state_delete.line1=\xBFEst\xE1 seguro que desea borrar este Estado?
-space_state_delete.line2=N\xFAmero de registros afectados en la base de datos = (0)
-space_state_delete.line3=No puede deshacer operaciones de actualizaci\xF3n en la base de datos para esta operaci\xF3n.
+space_state_delete.line1=\u00bfEst\u00e1 seguro que desea borrar este Estado?
+space_state_delete.line2=N\u00famero de registros afectados en la base de datos = (0)
+space_state_delete.line3=No puede deshacer operaciones de actualizaci\u00f3n en la base de datos para esta operaci\u00f3n.
# space_state_form
space_state_form.editState=Editar Estado
space_state_form.error.state.exists=Ya existe un Estado con ese nombre
-space_state_form.error.state.invalid=El nombre del Estado debe empezar por may\xFAscula, con guiones ('-') para separar las palabras (p.e. "Resuelto", "En-Desarrollo"
+space_state_form.error.state.invalid=El nombre del Estado debe empezar por may\u00fascula, con guiones ('-') para separar las palabras (p.e. "Resuelto", "En-Desarrollo"
submit=Aceptar
# override default messages for spring mvc form binding errors
-typeMismatch.java.lang.Double=Por favor, introduzca un valor num\xE9rico v\xE1lido
-typeMismatch.java.util.Date=Por favor, introduzca un valor de fecha v\xE1lido. Formato: aaaa-mm-dd
+typeMismatch.java.lang.Double=Por favor, introduzca un valor num\u00e9rico v\u00e1lido
+typeMismatch.java.util.Date=Por favor, introduzca un valor de fecha v\u00e1lido. Formato: aaaa-mm-dd
user_allocate_space.allSpaces=(todos los espacios)
user_allocate_space.chooseSpace=Elegir un espacio para asignarlo a este Usuario
user_allocate_space.makeAdmin=Hacer Administrador
@@ -366,22 +368,22 @@
user_allocate_space_role.allocate=Asignar
# user_allocate_space_role
user_allocate_space_role.allocateRole=Asignar el Rol al Usuario {0} de este espacio
-user_delete.confirm=Confirmar Eliminaci\xF3n de Usuario
-user_delete.line1=\xBFEst\xE1 seguro de querer eliminar este Usuario?
-user_delete.line2=No puede deshacer las actualizaciones de base de datos para esta operaci\xF3n.
-user_delete.notPossible=Este usuario est\xE1 referencia por otros elementros y no puede ser eliminado. Puede bloquear este usuario, o eliminar primero los elementos que hacen referencia al mismo y luego volver a intentar eliminarlo.
-user_form.confirmPassword=Confirme Contrase\xF1a
+user_delete.confirm=Confirmar Eliminaci\u00f3n de Usuario
+user_delete.line1=\u00bfEst\u00e1 seguro de querer eliminar este Usuario?
+user_delete.line2=No puede deshacer las actualizaciones de base de datos para esta operaci\u00f3n.
+user_delete.notPossible=Este usuario est\u00e1 referencia por otros elementros y no puede ser eliminado. Puede bloquear este usuario, o eliminar primero los elementos que hacen referencia al mismo y luego volver a intentar eliminarlo.
+user_form.confirmPassword=Confirme Contrase\u00f1a
user_form.emailId=ID de E-Mail
user_form.fullName=Nombre Completo
user_form.language=Idioma
user_form.locked=Bloqueado
-user_form.loginId=ID de Inicio de Sesi\xF3n
-user_form.loginId.error.exists=El ID de Inicio de Sesi\xF3n ya existe
-user_form.loginId.error.invalid=S\xF3lo min\xFAsculas y n\xFAmeros est\xE1n permitidos
-user_form.mailPassword=enviar contrase\xF1a por correo (e-mail)
-user_form.password=Contrase\xF1a
-user_form.passwordConfirm.error=Confirmaci\xF3n de Contrase\xF1a Incorrecta
-user_form.passwordMessage=Una contrase\xF1a ser\xE1 generada y enviada a su e-mail predeterminado.</br>Los campos a continuaci\xF3n son opcionales
+user_form.loginId=ID de Inicio de Sesi\u00f3n
+user_form.loginId.error.exists=El ID de Inicio de Sesi\u00f3n ya existe
+user_form.loginId.error.invalid=S\u00f3lo min\u00fasculas y n\u00fameros est\u00e1n permitidos
+user_form.mailPassword=enviar contrase\u00f1a por correo (e-mail)
+user_form.password=Contrase\u00f1a
+user_form.passwordConfirm.error=Confirmaci\u00f3n de Contrase\u00f1a Incorrecta
+user_form.passwordMessage=Una contrase\u00f1a ser\u00e1 generada y enviada a su e-mail predeterminado.</br>Los campos a continuaci\u00f3n son opcionales
# user_form
user_form.userDetails=Detalles de Usuario
user_list.allocateSpaceRole=Asignar<br>Espacio / Rol
@@ -391,7 +393,7 @@
user_list.filterBy=Filtrar por
user_list.locale=Idioma
user_list.locked=Bloqueado
-user_list.loginName=Nombre de Inicio de Sesi\xF3n
+user_list.loginName=Nombre de Inicio de Sesi\u00f3n
user_list.spaceRole=Espacio (Rol)
user_list.userName=Nombre del Usuario
# user_list
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <udi...@us...> - 2023-07-30 15:26:08
|
Revision: 1484
http://sourceforge.net/p/j-trac/code/1484
Author: udittmer
Date: 2023-07-30 15:26:07 +0000 (Sun, 30 Jul 2023)
Log Message:
-----------
JTrac 2.3.2
Added Paths:
-----------
tags/jtrac-2.3.2/
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <udi...@us...> - 2023-07-30 15:22:56
|
Revision: 1483
http://sourceforge.net/p/j-trac/code/1483
Author: udittmer
Date: 2023-07-30 15:22:54 +0000 (Sun, 30 Jul 2023)
Log Message:
-----------
changes for final JTrac 2.3.2
Modified Paths:
--------------
trunk/jtrac/doc/src/index.xml
trunk/jtrac/doc/styles/fopdf.xsl
trunk/jtrac/pom.xml
trunk/jtrac/src/test/java/info/jtrac/htmlunit/BasicTest.java
Modified: trunk/jtrac/doc/src/index.xml
===================================================================
--- trunk/jtrac/doc/src/index.xml 2023-07-20 16:24:49 UTC (rev 1482)
+++ trunk/jtrac/doc/src/index.xml 2023-07-30 15:22:54 UTC (rev 1483)
@@ -219,6 +219,7 @@
<para>
jTrac 2.3.2 has only small improvements, like an option to allow user-supplied HTML in the wiki, showing the ticket RefId
in the HTML page title when viewing or editing a ticket, and improved error reporting during ticket import from Excel files.
+ A few dependencies have also been updated.
Instructions on how to upgrade are available in the "<link linkend="upgrading">upgrading</link>" section of this document.
</para>
<para>
Modified: trunk/jtrac/doc/styles/fopdf.xsl
===================================================================
--- trunk/jtrac/doc/styles/fopdf.xsl 2023-07-20 16:24:49 UTC (rev 1482)
+++ trunk/jtrac/doc/styles/fopdf.xsl 2023-07-30 15:22:54 UTC (rev 1483)
@@ -57,7 +57,7 @@
<fo:table-row>
<fo:table-cell text-align="center">
<fo:block font-family="Helvetica" font-size="12pt" padding="10mm">
- <xsl:text>Copyright ©right; 2004-2022 </xsl:text>
+ <xsl:text>Copyright ©right; 2004-2023 </xsl:text>
<xsl:for-each select="bookinfo/authorgroup/author">
<xsl:if test="position() > 1">
<xsl:text>, </xsl:text>
Modified: trunk/jtrac/pom.xml
===================================================================
--- trunk/jtrac/pom.xml 2023-07-20 16:24:49 UTC (rev 1482)
+++ trunk/jtrac/pom.xml 2023-07-30 15:22:54 UTC (rev 1483)
@@ -67,7 +67,7 @@
<dependency>
<groupId>org.htmlunit</groupId>
<artifactId>htmlunit</artifactId>
- <version>3.3.0</version>
+ <version>3.4.0</version>
<scope>test</scope>
</dependency>
<dependency>
Modified: trunk/jtrac/src/test/java/info/jtrac/htmlunit/BasicTest.java
===================================================================
--- trunk/jtrac/src/test/java/info/jtrac/htmlunit/BasicTest.java 2023-07-20 16:24:49 UTC (rev 1482)
+++ trunk/jtrac/src/test/java/info/jtrac/htmlunit/BasicTest.java 2023-07-30 15:22:54 UTC (rev 1483)
@@ -71,7 +71,7 @@
((HtmlElement) page.getElementByName("detail")).type("Test Detail");
((HtmlSelect) page.getElementByName("hideAssignedTo:border:assignedTo")).getOptionByText("Admin").setSelected(true);
page = ((HtmlElement) page.getFirstByXPath("//input[@value='Submit']")).click();
- WebAssert.assertTextPresent(page, "TEST-1");
+ WebAssert.assertTitleContains(page, "TEST-1");
}
@Test
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <udi...@us...> - 2023-07-20 16:24:50
|
Revision: 1482
http://sourceforge.net/p/j-trac/code/1482
Author: udittmer
Date: 2023-07-20 16:24:49 +0000 (Thu, 20 Jul 2023)
Log Message:
-----------
plugin update
Modified Paths:
--------------
trunk/jtrac/pom.xml
Modified: trunk/jtrac/pom.xml
===================================================================
--- trunk/jtrac/pom.xml 2023-06-25 11:30:49 UTC (rev 1481)
+++ trunk/jtrac/pom.xml 2023-07-20 16:24:49 UTC (rev 1482)
@@ -488,7 +488,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
- <version>3.0.0</version>
+ <version>3.1.2</version>
<configuration>
<excludes>
<exclude>info/jtrac/test/**</exclude>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <udi...@us...> - 2023-06-25 11:30:56
|
Revision: 1481
http://sourceforge.net/p/j-trac/code/1481
Author: udittmer
Date: 2023-06-25 11:30:49 +0000 (Sun, 25 Jun 2023)
Log Message:
-----------
prepare 2.3.2 release, update dependencies
Modified Paths:
--------------
trunk/jtrac/doc/src/index.xml
trunk/jtrac/pom.xml
Modified: trunk/jtrac/doc/src/index.xml
===================================================================
--- trunk/jtrac/doc/src/index.xml 2023-06-15 14:25:52 UTC (rev 1480)
+++ trunk/jtrac/doc/src/index.xml 2023-06-25 11:30:49 UTC (rev 1481)
@@ -5,7 +5,7 @@
<bookinfo>
<title>JTrac</title>
<subtitle>User / Developer Guide</subtitle>
- <releaseinfo>2.3.1</releaseinfo>
+ <releaseinfo>2.3.2</releaseinfo>
<authorgroup>
<author>
<firstname>Peter</firstname>
@@ -213,6 +213,18 @@
For details see <ulink url="https://sourceforge.net/p/j-trac/wiki/NewFeatures231">NewFeatures231</ulink> on SourceForge.
</para>
</sect1>
+
+ <sect1 id="introduction-releasenotes-2_3_2">
+ <title>Release Notes: Version 2.3.2</title>
+ <para>
+ jTrac 2.3.2 has only small improvements, like an option to allow user-supplied HTML in the wiki, showing the ticket RefId
+ in the HTML page title when viewing or editing a ticket, and improved error reporting during ticket import from Excel files.
+ Instructions on how to upgrade are available in the "<link linkend="upgrading">upgrading</link>" section of this document.
+ </para>
+ <para>
+ For details see <ulink url="https://sourceforge.net/p/j-trac/wiki/NewFeatures232">NewFeatures232</ulink> on SourceForge.
+ </para>
+ </sect1>
</chapter>
<chapter id="features">
Modified: trunk/jtrac/pom.xml
===================================================================
--- trunk/jtrac/pom.xml 2023-06-15 14:25:52 UTC (rev 1480)
+++ trunk/jtrac/pom.xml 2023-06-25 11:30:49 UTC (rev 1481)
@@ -4,7 +4,7 @@
<groupId>info.jtrac</groupId>
<artifactId>jtrac</artifactId>
<packaging>war</packaging>
- <version>2.3.1</version>
+ <version>2.3.2</version>
<name>JTrac</name>
<description>
JTrac is a generic issue-tracking web-application that can be easily customized by adding custom fields
@@ -67,7 +67,7 @@
<dependency>
<groupId>org.htmlunit</groupId>
<artifactId>htmlunit</artifactId>
- <version>3.2.0</version>
+ <version>3.3.0</version>
<scope>test</scope>
</dependency>
<dependency>
@@ -164,7 +164,7 @@
<dependency>
<groupId>org.ocpsoft.prettytime</groupId>
<artifactId>prettytime</artifactId>
- <version>5.0.6.Final</version>
+ <version>5.0.7.Final</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <udi...@us...> - 2023-06-15 14:25:54
|
Revision: 1480
http://sourceforge.net/p/j-trac/code/1480
Author: udittmer
Date: 2023-06-15 14:25:52 +0000 (Thu, 15 Jun 2023)
Log Message:
-----------
fix issues with Excel import, update site content
Modified Paths:
--------------
trunk/jtrac/src/main/java/info/jtrac/domain/ExcelFile.java
trunk/jtrac/src/main/java/info/jtrac/wicket/ExcelImportPage.java
trunk/jtrac/src/main/resources/messages.properties
trunk/jtrac/src/main/resources/messages_cs.properties
trunk/jtrac/src/main/resources/messages_de.properties
trunk/jtrac/src/main/resources/messages_en.properties
trunk/jtrac/src/main/resources/messages_es_MX.properties
trunk/jtrac/src/main/resources/messages_no.properties
trunk/jtrac/src/main/resources/messages_uk.properties
trunk/jtrac/src/site/apt/index.apt
trunk/jtrac/src/site/resources/template/maven-site.vm
Modified: trunk/jtrac/src/main/java/info/jtrac/domain/ExcelFile.java
===================================================================
--- trunk/jtrac/src/main/java/info/jtrac/domain/ExcelFile.java 2023-06-08 09:49:27 UTC (rev 1479)
+++ trunk/jtrac/src/main/java/info/jtrac/domain/ExcelFile.java 2023-06-15 14:25:52 UTC (rev 1480)
@@ -525,8 +525,15 @@
if (value == null || value.trim().length() == 0) {
break;
}
- Column column = new Column(value.trim());
- logger.debug("adding column "+value.trim());
+ value = value.trim();
+ Column column = new Column(value);
+ switch (value) {
+ case "summary": column.setColumnHeading(new ColumnHeading(SUMMARY)); break;
+ case "detail": column.setColumnHeading(new ColumnHeading(DETAIL)); break;
+ case "loggedBy": column.setColumnHeading(new ColumnHeading(LOGGED_BY)); break;
+ case "assignedTo": column.setColumnHeading(new ColumnHeading(ASSIGNED_TO)); break;
+ }
+ logger.debug("adding column '"+value+"'");
columns.add(column);
col++;
}
Modified: trunk/jtrac/src/main/java/info/jtrac/wicket/ExcelImportPage.java
===================================================================
--- trunk/jtrac/src/main/java/info/jtrac/wicket/ExcelImportPage.java 2023-06-08 09:49:27 UTC (rev 1479)
+++ trunk/jtrac/src/main/java/info/jtrac/wicket/ExcelImportPage.java 2023-06-15 14:25:52 UTC (rev 1480)
@@ -77,7 +77,7 @@
Form uploadForm = new Form("uploadForm") {
@Override
public void onSubmit() {
- if(fileUploadField.getFileUpload() == null) {
+ if (fileUploadField.getFileUpload() == null) {
return;
}
InputStream is = null;
@@ -102,13 +102,13 @@
Form form = new Form("form") {
@Override
public void onSubmit() {
- if(action == 0) {
+ if (action == 0) {
error(localize("excel_view.error.noActionSelected"));
return;
}
switch(action) {
case 1: // delete
- if(!excelFile.isColumnSelected() && !excelFile.isRowSelected()) {
+ if (!excelFile.isColumnSelected() && !excelFile.isRowSelected()) {
error(localize("excel_view.error.noColumnOrRowSelected"));
return;
}
@@ -115,7 +115,7 @@
excelFile.deleteSelectedRowsAndColumns();
break;
case 2: // convert to date
- if(!excelFile.isColumnSelected()) {
+ if (!excelFile.isColumnSelected()) {
error(localize("excel_view.error.noColumnSelected"));
return;
}
@@ -122,7 +122,7 @@
excelFile.convertSelectedColumnsToDate();
break;
case 3: // concatenate
- if(excelFile.getSelectedColumns().size() < 2) {
+ if (excelFile.getSelectedColumns().size() < 2) {
error(localize("excel_view.error.atLeastTwoColumns"));
return;
}
@@ -129,7 +129,7 @@
excelFile.concatenateSelectedColumns();
break;
case 4: // extract summary into new column
- if(!excelFile.isColumnSelected()) {
+ if (!excelFile.isColumnSelected()) {
error(localize("excel_view.error.noColumnSelected"));
return;
}
@@ -136,7 +136,7 @@
excelFile.extractSummaryFromSelectedColumn();
break;
case 5: // duplicate column
- if(!excelFile.isColumnSelected()) {
+ if (!excelFile.isColumnSelected()) {
error(localize("excel_view.error.noColumnSelected"));
return;
}
@@ -143,11 +143,11 @@
excelFile.duplicateSelectedColumn();
break;
case 6: // map column
- if(space == null) {
+ if (space == null) {
error(localize("excel_view.error.noSpaceSelected"));
return;
}
- if(!excelFile.isColumnSelected()) {
+ if (!excelFile.isColumnSelected()) {
error(localize("excel_view.error.noColumnSelected"));
return;
}
@@ -163,19 +163,19 @@
setResponsePage(new ExcelImportRowPage(ExcelImportPage.this, rowIndex));
break;
case 8: // import !
- if(space == null) {
+ if (space == null) {
error(localize("excel_view.error.noSpaceSelected"));
return;
}
Map<Name, String> labelsMap = BasePage.getLocalizedLabels(ExcelImportPage.this);
ColumnHeading duplicate = excelFile.getDuplicatedColumnHeadings();
- if(duplicate != null) {
+ if (duplicate != null) {
error(localize("excel_view.error.duplicateMapping", labelsMap.get(duplicate.getName())));
return;
}
List<ColumnHeading> unMapped = excelFile.getUnMappedColumnHeadings();
- if(unMapped.size() > 0) {
- for(ColumnHeading ch : unMapped) {
+ if (unMapped.size() > 0) {
+ for (ColumnHeading ch : unMapped) {
error(localize("excel_view.error.notMapped", labelsMap.get(ch.getName())));
}
return;
@@ -199,7 +199,7 @@
form.add(new Label("selectedSpace", new AbstractReadOnlyModel() {
public Object getObject() {
- if(space == null) {
+ if (space == null) {
return localize("excel_view.noSpaceSelected");
}
return space.getName() + " [" + space.getPrefixCode() + "]";
@@ -279,7 +279,7 @@
protected void populateItem(Item item) {
final Column column = (Column) item.getModelObject();
- if(column.getColumnHeading() != null) {
+ if (column.getColumnHeading() != null) {
item.add(CLASS_SELECTED);
}
Label label = new Label("cell", new PropertyModel(column, "label"));
@@ -300,7 +300,7 @@
}
protected void populateItem(Item rowItem) {
- if(rowItem.getIndex() % 2 == 1) {
+ if (rowItem.getIndex() % 2 == 1) {
rowItem.add(CLASS_ALT);
}
rowItem.add(new Check("check", new PropertyModel(rowItem, "index")));
Modified: trunk/jtrac/src/main/resources/messages.properties
===================================================================
--- trunk/jtrac/src/main/resources/messages.properties 2023-06-08 09:49:27 UTC (rev 1479)
+++ trunk/jtrac/src/main/resources/messages.properties 2023-06-15 14:25:52 UTC (rev 1480)
@@ -253,8 +253,8 @@
excel_view.error.noRowSelected = Please select a row
excel_view.error.noColumnOrRowSelected = Please select columns / rows
excel_view.error.atLeastTwoColumns = Please select at least two columns
-excel_view.error.duplicateMapping = Field mapped more than once: '{0}'
-excel_view.error.notMapped = Field has to be mapped: '{0}'
+excel_view.error.duplicateMapping = Field mapped more than once: {0}
+excel_view.error.notMapped = Field has to be mapped: {0}
excel_view.error.invalidValue = Some cells have invalid data
excel_view.selectSpace = Choose Space
Modified: trunk/jtrac/src/main/resources/messages_cs.properties
===================================================================
--- trunk/jtrac/src/main/resources/messages_cs.properties 2023-06-08 09:49:27 UTC (rev 1479)
+++ trunk/jtrac/src/main/resources/messages_cs.properties 2023-06-15 14:25:52 UTC (rev 1480)
@@ -219,8 +219,8 @@
excel_view.error.noRowSelected = Pros\u00EDm, vyberte \u0159adu
excel_view.error.noColumnOrRowSelected = Pros\u00EDm, vyberte sloupce / \u0159ady
excel_view.error.atLeastTwoColumns = Pros\u00EDm, vyberte alespo\u0148 dva sloupce
-excel_view.error.duplicateMapping = Pole zmapov\u00E1no v\u00EDce ne\u017E jednou: '{0}'
-excel_view.error.notMapped = Pole mus\u00ED b\u00FDt zmapov\u00E1no: '{0}'
+excel_view.error.duplicateMapping = Pole zmapov\u00E1no v\u00EDce ne\u017E jednou: {0}
+excel_view.error.notMapped = Pole mus\u00ED b\u00FDt zmapov\u00E1no: {0}
excel_view.error.invalidValue = N\u011Bkter\u00E9 skl\u00EDpky obsahuj\u00ED \u0161patn\u00E1 data.
excel_view.selectSpace = Zvol Projekt
Modified: trunk/jtrac/src/main/resources/messages_de.properties
===================================================================
--- trunk/jtrac/src/main/resources/messages_de.properties 2023-06-08 09:49:27 UTC (rev 1479)
+++ trunk/jtrac/src/main/resources/messages_de.properties 2023-06-15 14:25:52 UTC (rev 1480)
@@ -253,8 +253,8 @@
excel_view.error.noRowSelected = Bitte eine Zeile w\u00E4hlen
excel_view.error.noColumnOrRowSelected = Bitte eine Zeile / Spalte w\u00E4hlen
excel_view.error.atLeastTwoColumns = Bitte mindestens zwei Spalten w\u00E4hlen
-excel_view.error.duplicateMapping = Das Feld wurde mehr als einmal gemappt: '{0}'
-excel_view.error.notMapped = Feld muss gemappt werden: '{0}'
+excel_view.error.duplicateMapping = Das Feld wurde mehr als einmal gemappt: {0}
+excel_view.error.notMapped = Feld muss gemappt werden: {0}
excel_view.error.invalidValue = Einige Zellen haben ung\u00FCltige Daten
excel_view.selectSpace = Projekt w\u00E4hlen
Modified: trunk/jtrac/src/main/resources/messages_en.properties
===================================================================
--- trunk/jtrac/src/main/resources/messages_en.properties 2023-06-08 09:49:27 UTC (rev 1479)
+++ trunk/jtrac/src/main/resources/messages_en.properties 2023-06-15 14:25:52 UTC (rev 1480)
@@ -253,8 +253,8 @@
excel_view.error.noRowSelected = Please select a row
excel_view.error.noColumnOrRowSelected = Please select columns / rows
excel_view.error.atLeastTwoColumns = Please select at least two columns
-excel_view.error.duplicateMapping = Field mapped more than once: '{0}'
-excel_view.error.notMapped = Field has to be mapped: '{0}'
+excel_view.error.duplicateMapping = Field mapped more than once: {0}
+excel_view.error.notMapped = Field has to be mapped: {0}
excel_view.error.invalidValue = Some cells have invalid data
excel_view.selectSpace = Choose Space
Modified: trunk/jtrac/src/main/resources/messages_es_MX.properties
===================================================================
--- trunk/jtrac/src/main/resources/messages_es_MX.properties 2023-06-08 09:49:27 UTC (rev 1479)
+++ trunk/jtrac/src/main/resources/messages_es_MX.properties 2023-06-15 14:25:52 UTC (rev 1480)
@@ -59,7 +59,7 @@
excel_view.duplicateColumn=Duplicar Columna Seleccionada
excel_view.editRow=Editar Datos de Rengl\xF3n Seleccionada
excel_view.error.atLeastTwoColumns=Por favor seleccione al menos dos columnas
-excel_view.error.duplicateMapping=Campo mapeado m\xE1s de una vez: '{0}'
+excel_view.error.duplicateMapping=Campo mapeado m\xE1s de una vez: {0}
excel_view.error.invalidValue=Algunas celdas tienen datos inv\xE1lidos
excel_view.error.noActionSelected=Por favor seleccione una acci\xF3n a realizar
excel_view.error.noColumnOrRowSelected=Por favor seleccione columnas / renglones
@@ -66,7 +66,7 @@
excel_view.error.noColumnSelected=Por favor seleccione una columna
excel_view.error.noRowSelected=Por favor seleccione un rengl\xF3n
excel_view.error.noSpaceSelected=Por favor elija un espacio primero
-excel_view.error.notMapped=Campo tiene que ser mapeado: '{0}'
+excel_view.error.notMapped=Campo tiene que ser mapeado: {0}
excel_view.extractFirstEighty=Extraer los Primeros 80 Caracteres a una nueva Columna
excel_view.import=Importar en el Espacio Seleccionado
excel_view.importSuccess=Elementos Importados Exitosamente
Modified: trunk/jtrac/src/main/resources/messages_no.properties
===================================================================
--- trunk/jtrac/src/main/resources/messages_no.properties 2023-06-08 09:49:27 UTC (rev 1479)
+++ trunk/jtrac/src/main/resources/messages_no.properties 2023-06-15 14:25:52 UTC (rev 1480)
@@ -222,8 +222,8 @@
excel_view.error.noRowSelected = Velg en rad
excel_view.error.noColumnOrRowSelected = Velg kolonner/rader
excel_view.error.atLeastTwoColumns = Velg minst to kolonner
-excel_view.error.duplicateMapping = Feltet er brukt mer enn to ganger: '{0}'
-excel_view.error.notMapped = Feltet m\u00e5 knyttes opp mot noe: '{0}'
+excel_view.error.duplicateMapping = Feltet er brukt mer enn to ganger: {0}
+excel_view.error.notMapped = Feltet m\u00e5 knyttes opp mot noe: {0}
excel_view.error.invalidValue = Noen celler har ugyldige data
excel_view.selectSpace = Velg omr\u00e5de
Modified: trunk/jtrac/src/main/resources/messages_uk.properties
===================================================================
--- trunk/jtrac/src/main/resources/messages_uk.properties 2023-06-08 09:49:27 UTC (rev 1479)
+++ trunk/jtrac/src/main/resources/messages_uk.properties 2023-06-15 14:25:52 UTC (rev 1480)
@@ -179,8 +179,8 @@
excel_view.error.noRowSelected = \u041F\u0440\u043E\u0448\u0443 \u0432\u0438\u0431\u0440\u0430\u0442\u0438 \u0440\u044F\u0434\u043E\u043A
excel_view.error.noColumnOrRowSelected = \u041F\u0440\u043E\u0448\u0443 \u0432\u0438\u0431\u0440\u0430\u0442\u0438 \u0441\u0442\u043E\u0432\u043F\u0447\u0438\u043A\u0438 / \u0440\u044F\u0434\u043A\u0438
excel_view.error.atLeastTwoColumns = \u041F\u0440\u043E\u0448\u0443 \u0432\u0438\u0431\u0440\u0430\u0442\u0438 \u0449\u043E\u043D\u0430\u0439\u043C\u0435\u043D\u0448\u0435 \u0434\u0432\u0430 \u0441\u0442\u043E\u0432\u043F\u0447\u0438\u043A\u0438
-excel_view.error.duplicateMapping = \u041F\u043E\u043B\u0435 '{0}' \u0432\u0456\u0434\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0435 \u0431\u0456\u043B\u044C\u0448\u0435 \u043D\u0456\u0436 \u043E\u0434\u0438\u043D \u0440\u0430\u0437
-excel_view.error.notMapped = \u041F\u043E\u043B\u0435 '{0}' \u043C\u0443\u0441\u0438\u0442\u044C \u0431\u0443\u0442\u0438 \u0432\u0456\u0434\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0435
+excel_view.error.duplicateMapping = \u041F\u043E\u043B\u0435 {0} \u0432\u0456\u0434\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0435 \u0431\u0456\u043B\u044C\u0448\u0435 \u043D\u0456\u0436 \u043E\u0434\u0438\u043D \u0440\u0430\u0437
+excel_view.error.notMapped = \u041F\u043E\u043B\u0435 {0} \u043C\u0443\u0441\u0438\u0442\u044C \u0431\u0443\u0442\u0438 \u0432\u0456\u0434\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0435
excel_view.error.invalidValue = \u0414\u0435\u044F\u043A\u0456 \u043A\u043B\u0456\u0442\u0438\u043D\u043A\u0438 \u043C\u0456\u0441\u0442\u044F\u0442\u044C \u043D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0434\u0430\u043D\u0456
excel_view.selectSpace = \u0412\u0438\u0431\u0440\u0430\u0442\u0438 \u0440\u043E\u0437\u0434\u0456\u043B
excel_view.selectedSpace = \u0412\u0438\u0431\u0440\u0430\u043D\u0438\u0439 \u0440\u043E\u0437\u0434\u0456\u043B
Modified: trunk/jtrac/src/site/apt/index.apt
===================================================================
--- trunk/jtrac/src/site/apt/index.apt 2023-06-08 09:49:27 UTC (rev 1479)
+++ trunk/jtrac/src/site/apt/index.apt 2023-06-15 14:25:52 UTC (rev 1480)
@@ -1,47 +1,47 @@
- -----
- open source and customizable issue-tracking in Java
-
-JTrac
-
- JTrac is an open source and highly customizable issue-tracking web-application written in Java.
-
-* Features
-
- * Extremely easy to install
-
- * Unlimited project spaces per installation
-
- * Custom fields and drop-downs for each project
-
- * Customizable workflow per project
-
- * Field-level permissions
-
- * Detailed history view
-
- * E-mail notifications
-
- * File attachments
-
- * Full text search
-
- * Filter searches even by custom fields
-
- * Detailed dashboard view of statistics
-
- * Export data and search results to Excel
-
- * Support for anonymous browsing of projects
-
- * Cross-reference items to each other, e.g. 'duplicate of', 'depends on' etc.
-
- * Translated into 19 languages (Spanish, French, German, Russian, Japanese, Chinese and more)
-
- * Platform independent and various databases supported
-
- * Support for LDAP, Active Directory or CAS based authentication
-
- * Embedded database and web-app server - download and start using right away!
-
- Please see the {{{doc/html/features.html}feature documentation}} for more. Also see {{{http://j-trac.wiki.sourceforge.net/references}what users are saying about JTrac}}.
-
+ -----
+ open source and customizable issue-tracking in Java
+
+JTrac
+
+ JTrac is an open source and highly customizable issue-tracking web-application written in Java.
+
+* Features
+
+ * Extremely easy to install
+
+ * Unlimited project spaces per installation
+
+ * Custom fields and drop-downs for each project
+
+ * Customizable workflow per project
+
+ * Field-level permissions
+
+ * Detailed history view
+
+ * E-mail notifications
+
+ * File attachments
+
+ * Full text search
+
+ * Filter searches even by custom fields
+
+ * Detailed dashboard view of statistics
+
+ * Export data and search results to Excel
+
+ * Support for anonymous browsing of projects
+
+ * Cross-reference items to each other, e.g. 'duplicate of', 'depends on' etc.
+
+ * Translated into 19 languages (Spanish, French, German, Russian, Japanese, Chinese and more)
+
+ * Platform independent and various databases supported
+
+ * Support for LDAP, Active Directory or CAS based authentication
+
+ * Embedded database and web-app server - download and start using right away!
+
+ Please see the {{{doc/html/features.html}feature documentation}} for more.
+
Modified: trunk/jtrac/src/site/resources/template/maven-site.vm
===================================================================
--- trunk/jtrac/src/site/resources/template/maven-site.vm 2023-06-08 09:49:27 UTC (rev 1479)
+++ trunk/jtrac/src/site/resources/template/maven-site.vm 2023-06-15 14:25:52 UTC (rev 1480)
@@ -1,375 +1,353 @@
-#macro ( banner $banner $id )
- #if ( $banner )
- #if( $banner.href )
- <a href="$banner.href" id="$id">
- #else
- <span id="$id">
- #end
-
- #if( $banner.src )
- #set ( $src = $banner.src )
- #if ( ! ( $src.toLowerCase().startsWith("http") || $src.toLowerCase().startsWith("https") ) )
- #set ( $src = $PathTool.calculateLink( $src, $relativePath ) )
- #set ( $src = $src.replaceAll( "\\", "/" ) )
- #end
- #if ( $banner.alt )
- #set ( $alt = $banner.alt )
- #else
- #set ( $alt = "" )
- #end
- <img src="$src" alt="$alt" />
- #else
- $banner.name
- #end
-
- #if( $banner.href )
- </a>
- #else
- </span>
- #end
- #end
-#end
-
-#macro ( links $links )
- #set ( $counter = 0 )
- #foreach( $item in $links )
- #set ( $counter = $counter + 1 )
- #set ( $currentItemHref = $PathTool.calculateLink( $item.href, $relativePath ) )
- #set ( $currentItemHref = $currentItemHref.replaceAll( "\\", "/" ) )
- <a href="$currentItemHref">$item.name</a>
- #if ( $links.size() > $counter )
- |
- #end
- #end
-#end
-
-#macro ( breadcrumbs $breadcrumbs )
- #set ( $counter = 0 )
- #foreach( $item in $breadcrumbs )
- #set ( $counter = $counter + 1 )
- #set ( $currentItemHref = $PathTool.calculateLink( $item.href, $relativePath ) )
- #set ( $currentItemHref = $currentItemHref.replaceAll( "\\", "/" ) )
-
- #if ( $currentItemHref == $alignedFileName || $currentItemHref == "" )
- $item.name
- #else
- <a href="$currentItemHref">$item.name</a>
- #end
- #if ( $breadcrumbs.size() > $counter )
- >
- #end
- #end
-#end
-
-#macro ( displayTree $display $item )
- #if ( $item && $item.items && $item.items.size() > 0 )
- #foreach( $subitem in $item.items )
- #set ( $subitemHref = $PathTool.calculateLink( $subitem.href, $relativePath ) )
- #set ( $subitemHref = $subitemHref.replaceAll( "\\", "/" ) )
-
- #if ( $alignedFileName == $subitemHref )
- #set ( $display = true )
- #end
-
- #displayTree( $display $subitem )
- #end
- #end
-#end
-
-#macro ( menuItem $item )
- #set ( $collapse = "none" )
- #set ( $currentItemHref = $PathTool.calculateLink( $item.href, $relativePath ) )
- #set ( $currentItemHref = $currentItemHref.replaceAll( "\\", "/" ) )
-
- #if ( $item && $item.items && $item.items.size() > 0 )
- #if ( $item.collapse == false )
- #set ( $collapse = "expanded" )
- #else
- ## By default collapsed
- #set ( $collapse = "collapsed" )
- #end
-
- #set ( $display = false )
- #displayTree( $display $item )
-
- #if ( $alignedFileName == $currentItemHref || $display )
- #set ( $collapse = "expanded" )
- #end
- #end
- <li class="$collapse">
- #if ( $item.img )
- #if ( ! ( $item.img.toLowerCase().startsWith("http") || $item.img.toLowerCase().startsWith("https") ) )
- #set ( $src = $PathTool.calculateLink( $item.img, $relativePath ) )
- #set ( $src = $item.img.replaceAll( "\\", "/" ) )
- <img src="$src"/>
- #else
- <img src="$item.img" align="absbottom" style="border-width: 0"/>
- #end
- #end
- #if ( $alignedFileName == $currentItemHref )
- <strong>$item.name</strong>
- #else
- <a href="$currentItemHref">$item.name</a>
- #end
- #if ( $item && $item.items && $item.items.size() > 0 )
- #if ( $collapse == "expanded" )
- <ul>
- #foreach( $subitem in $item.items )
- #menuItem( $subitem )
- #end
- </ul>
- #end
- #end
- </li>
-#end
-
-#macro ( mainMenu $menus )
- #foreach( $menu in $menus )
- #if ( $menu.name )
- <h5>$menu.name</h5>
- #end
- <ul>
- #foreach( $item in $menu.items )
- #menuItem( $item )
- #end
- </ul>
- #end
-#end
-
-#macro ( copyright )
- #if ( $project )
- #set ( $currentYear = ${currentDate.year} + 1900 )
-
- #if ( ${project.inceptionYear} && ( ${project.inceptionYear} != ${currentYear.toString()} ) )
- ${project.inceptionYear}-${currentYear}
- #else
- ${currentYear}
- #end
-
- #if ( ${project.organization} && ${project.organization.name} )
- ${project.organization.name}
- #end
- #end
-#end
-
-#macro ( publishDate $position $publishDate $version )
- #if ( $publishDate && $publishDate.format )
- #set ( $format = $publishDate.format )
- #else
- #set ( $format = "MM/dd/yyyy" )
- #end
-
- $dateFormat.applyPattern( $format )
-
- #set ( $dateToday = $dateFormat.format( $currentDate ) )
-
- #if ( $publishDate && $publishDate.position )
- #set ( $datePosition = $publishDate.position )
- #else
- #set ( $datePosition = "left" )
- #end
-
- #if ( $version )
- #if ( $version.position )
- #set ( $versionPosition = $version.position )
- #else
- #set ( $versionPosition = "left" )
- #end
- #end
-
- #set ( $breadcrumbs = $decoration.body.breadcrumbs )
-
- #if ( $datePosition.equalsIgnoreCase( $position ) )
- #if ( ( $datePosition.equalsIgnoreCase( "right" ) ) || ( $datePosition.equalsIgnoreCase( "bottom" ) ) )
- | $i18n.getString( "site-renderer", $locale, "template.lastpublished" ): $dateToday
- #if ( $versionPosition.equalsIgnoreCase( $position ) )
- | $i18n.getString( "site-renderer", $locale, "template.version" ): ${project.version}
- #end
- #elseif ( ( $datePosition.equalsIgnoreCase( "navigation-bottom" ) ) || ( $datePosition.equalsIgnoreCase( "navigation-top" ) ) )
- <div id="lastPublished">
- $i18n.getString( "site-renderer", $locale, "template.lastpublished" ): $dateToday
- #if ( $versionPosition.equalsIgnoreCase( $position ) )
- | $i18n.getString( "site-renderer", $locale, "template.version" ): ${project.version}
- #end
- </div>
- #elseif ( $datePosition.equalsIgnoreCase("left") )
- <div class="xleft">
- $i18n.getString( "site-renderer", $locale, "template.lastpublished" ): $dateToday
- #if ( $versionPosition.equalsIgnoreCase( $position ) )
- | $i18n.getString( "site-renderer", $locale, "template.version" ): ${project.version}
- #end
- #if ( $breadcrumbs && $breadcrumbs.size() > 0 )
- | #breadcrumbs( $breadcrumbs )
- #end
- </div>
- #end
- #elseif ( $versionPosition.equalsIgnoreCase( $position ) )
- #if ( ( $versionPosition.equalsIgnoreCase( "right" ) ) || ( $versionPosition.equalsIgnoreCase( "bottom" ) ) )
- | $i18n.getString( "site-renderer", $locale, "template.version" ): ${project.version}
- #elseif ( ( $versionPosition.equalsIgnoreCase( "navigation-bottom" ) ) || ( $versionPosition.equalsIgnoreCase( "navigation-top" ) ) )
- <div id="lastPublished">
- $i18n.getString( "site-renderer", $locale, "template.version" ): ${project.version}
- </div>
- #elseif ( $versionPosition.equalsIgnoreCase("left") )
- <div class="xleft">
- $i18n.getString( "site-renderer", $locale, "template.version" ): ${project.version}
- #if ( $breadcrumbs && $breadcrumbs.size() > 0 )
- | #breadcrumbs( $breadcrumbs )
- #end
- </div>
- #end
- #elseif ( $position.equalsIgnoreCase( "left" ) )
- #if ( $breadcrumbs && $breadcrumbs.size() > 0 )
- <div class="xleft">
- #breadcrumbs( $breadcrumbs )
- </div>
- #end
- #end
-#end
-
-#macro ( poweredByLogo $poweredBy )
- #if( $poweredBy )
- #foreach ($item in $poweredBy)
- #if( $item.href )
- #set ( $href = $PathTool.calculateLink( $item.href, $relativePath ) )
- #set ( $href = $href.replaceAll( "\\", "/" ) )
- #else
- #set ( $href="http://maven.apache.org/" )
- #end
-
- #if( $item.name )
- #set ( $name = $item.name )
- #else
- #set ( $name = $i18n.getString( "site-renderer", $locale, "template.builtby" ) )
- #set ( $name = "${name} Maven" )
- #end
-
- #if( $item.img )
- #set ( $img = $item.img )
- #else
- #set ( $img = "images/logos/maven-feather.png" )
- #end
-
- <a href="$href" title="$name" id="poweredBy">
- #set ( $img = $PathTool.calculateLink( $img, $relativePath ) )
- #set ( $img = $img.replaceAll( "\\", "/" ) )
- <img alt="$name" src="$img" />
- </a>
- #end
- #if( $poweredBy.isEmpty() )
- <a href="http://maven.apache.org/" title="$i18n.getString( "site-renderer", $locale, "template.builtby" ) Maven" id="poweredBy">
- <img alt="$i18n.getString( "site-renderer", $locale, "template.builtby" ) Maven" src="$relativePath/images/logos/maven-feather.png"></img>
- </a>
- #end
- #else
- <a href="http://maven.apache.org/" title="$i18n.getString( "site-renderer", $locale, "template.builtby" ) Maven" id="poweredBy">
- <img alt="$i18n.getString( "site-renderer", $locale, "template.builtby" ) Maven" src="$relativePath/images/logos/maven-feather.png"></img>
- </a>
- #end
-#end
-
-<html>
- <head>
- <title>$title</title>
- <style type="text/css" media="all">
- @import url("$relativePath/template/maven-base.css");
- @import url("$relativePath/css/maven-theme.css");
- </style>
- <link rel="stylesheet" href="$relativePath/css/print.css" type="text/css" media="print" />
- <link rel="shortcut icon" type="image/x-icon" href="template/favicon.ico"/>
- #foreach( $author in $authors )
- <meta name="author" content="$author" />
- #end
- <meta name="verify-v1" content="otD4JR1njRiR5O87EaE14/GUQMVjC1Lg5QKBOdD+N+Y=" />
- <meta name="description" content="JTrac is a generic issue-tracking web-application that can be easily customized by adding custom fields and drop-downs. Features include customizable workflow, field level permissions, e-mail integration, file attachments and a detailed history view."/>
- <meta name="keywords" content="bug tracker, issue tracker, bug tracking, issue tracking, open source, free, opensource"/>
- <meta http-equiv="Content-Type" content="text/html; charset=${outputEncoding}" />
- #if ( $decoration.body.head )
- #foreach( $item in $decoration.body.head.getChildren() )
- #if ( $item.name == "script" )
- $item.toUnescapedString()
- #else
- $item.toString()
- #end
- #end
- #end
- </head>
- <body class="composite" onload="javascript:urchinTracker(document.referrer);">
- <div id="banner">
- #banner( $decoration.bannerLeft "bannerLeft" )
- #banner( $decoration.bannerRight "bannerRight" )
- <div class="clear">
- <hr/>
- </div>
- </div>
- <div id="breadcrumbs">
- #publishDate( "left" $decoration.publishDate $decoration.version )
- <div class="xright">#links( $decoration.body.links )#publishDate( "right" $decoration.publishDate $decoration.version )</div>
- <div class="clear">
- <hr/>
- </div>
- </div>
- <div id="leftColumn">
- <div id="navcolumn">
- #publishDate( "navigation-top" $decoration.publishDate $decoration.version )
- #mainMenu( $decoration.body.menus )
- <br/>
- <a href="http://wicket.apache.org/" title="Apache Wicket">
- <img src="template/wicket-logo.png" style="margin:0px 0px 15px 16px; border: 1px solid grey;"/>
- </a>
- <a href="http://www.springframework.org/" title="Spring">
- <img src="http://www.springframework.org/buttons/spring_80x15.png" style="margin:0px 0px 15px 16px"/>
- </a>
- <a href="http://www.hibernate.org/" title="Hibernate">
- <img src="template/hibernate-logo.png" style="margin:0px 0px 15px 16px; border: 1px solid grey;"/>
- </a>
- <a href="http://www.mortbay.org/" title="Jetty">
- <img src="template/jetty-logo.png" style="margin:0px 0px 15px 16px; border: 1px solid grey;"/>
- </a>
- <a href="http://hsqldb.org/" title="HSQLDB">
- <img src="template/hsqldb-logo.png" style="margin:0px 0px 15px 16px"/>
- </a>
- <a href="http://www.cenqua.com/fisheye" title="Perspective by Fisheye">
- <img src="http://www.cenqua.com/images/fisheyed2.gif" style="margin:0px 0px 15px 16px"/>
- </a>
- #publishDate( "navigation-bottom" $decoration.publishDate $decoration.version )
- </div>
- </div>
- <div id="bodyColumn">
- <div id="contentBox">
- $bodyContent
- </div>
- </div>
- <div id="footer">
- <div class="xright">©#copyright()#publishDate( "bottom" $decoration.publishDate $decoration.version ) The JTrac Project</div>
- <div style="padding-top:1em"><br/></div>
- <div class="xright">
- <!-- start eXTReMe tracking -->
- <div id="eXTReMe"><a href="http://extremetracking.com/open?login=jtrac">
- <img src="http://t1.extreme-dm.com/i.gif" style="border: 0;"
- height="38" width="41" id="EXim" alt="eXTReMe Tracker" /></a>
- <script type="text/javascript"><!--
- var EXlogin='jtrac' // Login
- var EXvsrv='s10' // VServer
- EXs=screen;EXw=EXs.width;navigator.appName!="Netscape"?
- EXb=EXs.colorDepth:EXb=EXs.pixelDepth;
- navigator.javaEnabled()==1?EXjv="y":EXjv="n";
- EXd=document;EXw?"":EXw="na";EXb?"":EXb="na";
- EXd.write("<img src=http://e1.extreme-dm.com",
- "/"+EXvsrv+".g?login="+EXlogin+"&",
- "jv="+EXjv+"&j=y&srw="+EXw+"&srb="+EXb+"&",
- "l="+escape(EXd.referrer)+" height=1 width=1>");//-->
- </script><noscript><div id="neXTReMe"><img height="1" width="1" alt=""
- src="http://e1.extreme-dm.com/s10.g?login=jtrac&j=n&jv=n" />
- </div></noscript></div>
- <!-- end eXTReMe tracking -->
- </div>
- </div>
- <script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
- </script>
- <script type="text/javascript">
- _uacct = "UA-1312289-1";
- urchinTracker();
- </script>
- </body>
-</html>
+#macro ( banner $banner $id )
+ #if ( $banner )
+ #if( $banner.href )
+ <a href="$banner.href" id="$id">
+ #else
+ <span id="$id">
+ #end
+
+ #if( $banner.src )
+ #set ( $src = $banner.src )
+ #if ( ! ( $src.toLowerCase().startsWith("http") || $src.toLowerCase().startsWith("https") ) )
+ #set ( $src = $PathTool.calculateLink( $src, $relativePath ) )
+ #set ( $src = $src.replaceAll( "\\", "/" ) )
+ #end
+ #if ( $banner.alt )
+ #set ( $alt = $banner.alt )
+ #else
+ #set ( $alt = "" )
+ #end
+ <img src="$src" alt="$alt" />
+ #else
+ $banner.name
+ #end
+
+ #if( $banner.href )
+ </a>
+ #else
+ </span>
+ #end
+ #end
+#end
+
+#macro ( links $links )
+ #set ( $counter = 0 )
+ #foreach( $item in $links )
+ #set ( $counter = $counter + 1 )
+ #set ( $currentItemHref = $PathTool.calculateLink( $item.href, $relativePath ) )
+ #set ( $currentItemHref = $currentItemHref.replaceAll( "\\", "/" ) )
+ <a href="$currentItemHref">$item.name</a>
+ #if ( $links.size() > $counter )
+ |
+ #end
+ #end
+#end
+
+#macro ( breadcrumbs $breadcrumbs )
+ #set ( $counter = 0 )
+ #foreach( $item in $breadcrumbs )
+ #set ( $counter = $counter + 1 )
+ #set ( $currentItemHref = $PathTool.calculateLink( $item.href, $relativePath ) )
+ #set ( $currentItemHref = $currentItemHref.replaceAll( "\\", "/" ) )
+
+ #if ( $currentItemHref == $alignedFileName || $currentItemHref == "" )
+ $item.name
+ #else
+ <a href="$currentItemHref">$item.name</a>
+ #end
+ #if ( $breadcrumbs.size() > $counter )
+ >
+ #end
+ #end
+#end
+
+#macro ( displayTree $display $item )
+ #if ( $item && $item.items && $item.items.size() > 0 )
+ #foreach( $subitem in $item.items )
+ #set ( $subitemHref = $PathTool.calculateLink( $subitem.href, $relativePath ) )
+ #set ( $subitemHref = $subitemHref.replaceAll( "\\", "/" ) )
+
+ #if ( $alignedFileName == $subitemHref )
+ #set ( $display = true )
+ #end
+
+ #displayTree( $display $subitem )
+ #end
+ #end
+#end
+
+#macro ( menuItem $item )
+ #set ( $collapse = "none" )
+ #set ( $currentItemHref = $PathTool.calculateLink( $item.href, $relativePath ) )
+ #set ( $currentItemHref = $currentItemHref.replaceAll( "\\", "/" ) )
+
+ #if ( $item && $item.items && $item.items.size() > 0 )
+ #if ( $item.collapse == false )
+ #set ( $collapse = "expanded" )
+ #else
+ ## By default collapsed
+ #set ( $collapse = "collapsed" )
+ #end
+
+ #set ( $display = false )
+ #displayTree( $display $item )
+
+ #if ( $alignedFileName == $currentItemHref || $display )
+ #set ( $collapse = "expanded" )
+ #end
+ #end
+ <li class="$collapse">
+ #if ( $item.img )
+ #if ( ! ( $item.img.toLowerCase().startsWith("http") || $item.img.toLowerCase().startsWith("https") ) )
+ #set ( $src = $PathTool.calculateLink( $item.img, $relativePath ) )
+ #set ( $src = $item.img.replaceAll( "\\", "/" ) )
+ <img src="$src"/>
+ #else
+ <img src="$item.img" align="absbottom" style="border-width: 0"/>
+ #end
+ #end
+ #if ( $alignedFileName == $currentItemHref )
+ <strong>$item.name</strong>
+ #else
+ <a href="$currentItemHref">$item.name</a>
+ #end
+ #if ( $item && $item.items && $item.items.size() > 0 )
+ #if ( $collapse == "expanded" )
+ <ul>
+ #foreach( $subitem in $item.items )
+ #menuItem( $subitem )
+ #end
+ </ul>
+ #end
+ #end
+ </li>
+#end
+
+#macro ( mainMenu $menus )
+ #foreach( $menu in $menus )
+ #if ( $menu.name )
+ <h5>$menu.name</h5>
+ #end
+ <ul>
+ #foreach( $item in $menu.items )
+ #menuItem( $item )
+ #end
+ </ul>
+ #end
+#end
+
+#macro ( copyright )
+ #if ( $project )
+ #set ( $currentYear = ${currentDate.year} + 1900 )
+
+ #if ( ${project.inceptionYear} && ( ${project.inceptionYear} != ${currentYear.toString()} ) )
+ ${project.inceptionYear}-${currentYear}
+ #else
+ ${currentYear}
+ #end
+
+ #if ( ${project.organization} && ${project.organization.name} )
+ ${project.organization.name}
+ #end
+ #end
+#end
+
+#macro ( publishDate $position $publishDate $version )
+ #if ( $publishDate && $publishDate.format )
+ #set ( $format = $publishDate.format )
+ #else
+ #set ( $format = "MM/dd/yyyy" )
+ #end
+
+ $dateFormat.applyPattern( $format )
+
+ #set ( $dateToday = $dateFormat.format( $currentDate ) )
+
+ #if ( $publishDate && $publishDate.position )
+ #set ( $datePosition = $publishDate.position )
+ #else
+ #set ( $datePosition = "left" )
+ #end
+
+ #if ( $version )
+ #if ( $version.position )
+ #set ( $versionPosition = $version.position )
+ #else
+ #set ( $versionPosition = "left" )
+ #end
+ #end
+
+ #set ( $breadcrumbs = $decoration.body.breadcrumbs )
+
+ #if ( $datePosition.equalsIgnoreCase( $position ) )
+ #if ( ( $datePosition.equalsIgnoreCase( "right" ) ) || ( $datePosition.equalsIgnoreCase( "bottom" ) ) )
+ | $i18n.getString( "site-renderer", $locale, "template.lastpublished" ): $dateToday
+ #if ( $versionPosition.equalsIgnoreCase( $position ) )
+ | $i18n.getString( "site-renderer", $locale, "template.version" ): ${project.version}
+ #end
+ #elseif ( ( $datePosition.equalsIgnoreCase( "navigation-bottom" ) ) || ( $datePosition.equalsIgnoreCase( "navigation-top" ) ) )
+ <div id="lastPublished">
+ $i18n.getString( "site-renderer", $locale, "template.lastpublished" ): $dateToday
+ #if ( $versionPosition.equalsIgnoreCase( $position ) )
+ | $i18n.getString( "site-renderer", $locale, "template.version" ): ${project.version}
+ #end
+ </div>
+ #elseif ( $datePosition.equalsIgnoreCase("left") )
+ <div class="xleft">
+ $i18n.getString( "site-renderer", $locale, "template.lastpublished" ): $dateToday
+ #if ( $versionPosition.equalsIgnoreCase( $position ) )
+ | $i18n.getString( "site-renderer", $locale, "template.version" ): ${project.version}
+ #end
+ #if ( $breadcrumbs && $breadcrumbs.size() > 0 )
+ | #breadcrumbs( $breadcrumbs )
+ #end
+ </div>
+ #end
+ #elseif ( $versionPosition.equalsIgnoreCase( $position ) )
+ #if ( ( $versionPosition.equalsIgnoreCase( "right" ) ) || ( $versionPosition.equalsIgnoreCase( "bottom" ) ) )
+ | $i18n.getString( "site-renderer", $locale, "template.version" ): ${project.version}
+ #elseif ( ( $versionPosition.equalsIgnoreCase( "navigation-bottom" ) ) || ( $versionPosition.equalsIgnoreCase( "navigation-top" ) ) )
+ <div id="lastPublished">
+ $i18n.getString( "site-renderer", $locale, "template.version" ): ${project.version}
+ </div>
+ #elseif ( $versionPosition.equalsIgnoreCase("left") )
+ <div class="xleft">
+ $i18n.getString( "site-renderer", $locale, "template.version" ): ${project.version}
+ #if ( $breadcrumbs && $breadcrumbs.size() > 0 )
+ | #breadcrumbs( $breadcrumbs )
+ #end
+ </div>
+ #end
+ #elseif ( $position.equalsIgnoreCase( "left" ) )
+ #if ( $breadcrumbs && $breadcrumbs.size() > 0 )
+ <div class="xleft">
+ #breadcrumbs( $breadcrumbs )
+ </div>
+ #end
+ #end
+#end
+
+#macro ( poweredByLogo $poweredBy )
+ #if( $poweredBy )
+ #foreach ($item in $poweredBy)
+ #if( $item.href )
+ #set ( $href = $PathTool.calculateLink( $item.href, $relativePath ) )
+ #set ( $href = $href.replaceAll( "\\", "/" ) )
+ #else
+ #set ( $href="http://maven.apache.org/" )
+ #end
+
+ #if( $item.name )
+ #set ( $name = $item.name )
+ #else
+ #set ( $name = $i18n.getString( "site-renderer", $locale, "template.builtby" ) )
+ #set ( $name = "${name} Maven" )
+ #end
+
+ #if( $item.img )
+ #set ( $img = $item.img )
+ #else
+ #set ( $img = "images/logos/maven-feather.png" )
+ #end
+
+ <a href="$href" title="$name" id="poweredBy">
+ #set ( $img = $PathTool.calculateLink( $img, $relativePath ) )
+ #set ( $img = $img.replaceAll( "\\", "/" ) )
+ <img alt="$name" src="$img" />
+ </a>
+ #end
+ #if( $poweredBy.isEmpty() )
+ <a href="http://maven.apache.org/" title="$i18n.getString( "site-renderer", $locale, "template.builtby" ) Maven" id="poweredBy">
+ <img alt="$i18n.getString( "site-renderer", $locale, "template.builtby" ) Maven" src="$relativePath/images/logos/maven-feather.png"></img>
+ </a>
+ #end
+ #else
+ <a href="http://maven.apache.org/" title="$i18n.getString( "site-renderer", $locale, "template.builtby" ) Maven" id="poweredBy">
+ <img alt="$i18n.getString( "site-renderer", $locale, "template.builtby" ) Maven" src="$relativePath/images/logos/maven-feather.png"></img>
+ </a>
+ #end
+#end
+
+<html>
+ <head>
+ <title>$title</title>
+ <style type="text/css" media="all">
+ @import url("$relativePath/template/maven-base.css");
+ @import url("$relativePath/css/maven-theme.css");
+ </style>
+ <link rel="stylesheet" href="$relativePath/css/print.css" type="text/css" media="print" />
+ <link rel="shortcut icon" type="image/x-icon" href="template/favicon.ico"/>
+ #foreach( $author in $authors )
+ <meta name="author" content="$author" />
+ #end
+ <meta name="verify-v1" content="otD4JR1njRiR5O87EaE14/GUQMVjC1Lg5QKBOdD+N+Y=" />
+ <meta name="description" content="JTrac is a generic issue-tracking web-application that can be easily customized by adding custom fields and drop-downs. Features include customizable workflow, field level permissions, e-mail integration, file attachments and a detailed history view."/>
+ <meta name="keywords" content="bug tracker, issue tracker, bug tracking, issue tracking, open source, free, opensource"/>
+ <meta http-equiv="Content-Type" content="text/html; charset=${outputEncoding}" />
+ #if ( $decoration.body.head )
+ #foreach( $item in $decoration.body.head.getChildren() )
+ #if ( $item.name == "script" )
+ $item.toUnescapedString()
+ #else
+ $item.toString()
+ #end
+ #end
+ #end
+ <!-- Google tag (gtag.js) -->
+ <script async src="https://www.googletagmanager.com/gtag/js?id=G-FV9ZJ0SGVW"></script>
+ <script>
+ window.dataLayer = window.dataLayer || [];
+ function gtag(){dataLayer.push(arguments);}
+ gtag('js', new Date());
+ gtag('set', { 'anonymize_ip': true, 'force_ssl': true });
+ gtag('config', 'G-FV9ZJ0SGVW');
+ </script>
+ </head>
+ <body class="composite">
+ <div id="banner">
+ #banner( $decoration.bannerLeft "bannerLeft" )
+ #banner( $decoration.bannerRight "bannerRight" )
+ <div class="clear">
+ <hr/>
+ </div>
+ </div>
+ <div id="breadcrumbs">
+ #publishDate( "left" $decoration.publishDate $decoration.version )
+ <div class="xright">#links( $decoration.body.links )#publishDate( "right" $decoration.publishDate $decoration.version )</div>
+ <div class="clear">
+ <hr/>
+ </div>
+ </div>
+ <div id="leftColumn">
+ <div id="navcolumn">
+ #publishDate( "navigation-top" $decoration.publishDate $decoration.version )
+ #mainMenu( $decoration.body.menus )
+ <br/>
+ <a href="http://wicket.apache.org/" title="Apache Wicket">
+ <img src="template/wicket-logo.png" style="margin:0px 0px 15px 16px; border: 1px solid grey;"/>
+ </a>
+ <a href="http://www.springframework.org/" title="Spring">
+ <img src="https://docs.spring.io/images/spring.png" style="margin:0px 0px 15px 16px" width="32" height="32/>
+ </a>
+ <a href="http://www.hibernate.org/" title="Hibernate">
+ <img src="template/hibernate-logo.png" style="margin:0px 0px 15px 16px; border: 1px solid grey;"/>
+ </a>
+ <a href="http://www.mortbay.org/" title="Jetty">
+ <img src="template/jetty-logo.png" style="margin:0px 0px 15px 16px; border: 1px solid grey;"/>
+ </a>
+ <a href="http://hsqldb.org/" title="HSQLDB">
+ <img src="template/hsqldb-logo.png" style="margin:0px 0px 15px 16px"/>
+ </a>
+ #publishDate( "navigation-bottom" $decoration.publishDate $decoration.version )
+ </div>
+ </div>
+ <div id="bodyColumn">
+ <div id="contentBox">
+ $bodyContent
+ </div>
+ </div>
+ <div id="footer">
+ <div class="xright">©#copyright()#publishDate( "bottom" $decoration.publishDate $decoration.version ) The JTrac Project</div>
+ </div>
+ </body>
+</html>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <udi...@us...> - 2023-06-08 09:49:29
|
Revision: 1479
http://sourceforge.net/p/j-trac/code/1479
Author: udittmer
Date: 2023-06-08 09:49:27 +0000 (Thu, 08 Jun 2023)
Log Message:
-----------
update Hsqldb, show ticket ID in title
Modified Paths:
--------------
trunk/jtrac/pom.xml
trunk/jtrac/src/main/java/info/jtrac/wicket/BasePage.html
trunk/jtrac/src/main/java/info/jtrac/wicket/BasePage.java
trunk/jtrac/src/main/java/info/jtrac/wicket/ItemFormPage.java
trunk/jtrac/src/main/java/info/jtrac/wicket/ItemViewPage.java
Modified: trunk/jtrac/pom.xml
===================================================================
--- trunk/jtrac/pom.xml 2023-06-01 08:06:21 UTC (rev 1478)
+++ trunk/jtrac/pom.xml 2023-06-08 09:49:27 UTC (rev 1479)
@@ -362,7 +362,7 @@
<dependency>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
- <version>2.7.1</version>
+ <version>2.7.2</version>
<classifier>jdk8</classifier>
<!-- 2.x can apparently not read DBs created with 1.8
<version>1.8.0.10</version>
Modified: trunk/jtrac/src/main/java/info/jtrac/wicket/BasePage.html
===================================================================
--- trunk/jtrac/src/main/java/info/jtrac/wicket/BasePage.html 2023-06-01 08:06:21 UTC (rev 1478)
+++ trunk/jtrac/src/main/java/info/jtrac/wicket/BasePage.html 2023-06-08 09:49:27 UTC (rev 1479)
@@ -1,7 +1,7 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
- <title>JTrac</title>
+ <title wicket:id="title"></title>
<link rel="stylesheet" type="text/css" href="resources/jtrac.css"/>
<link rel="shortcut icon" type="image/x-icon" href="favicon.ico"/>
<link rel="icon" type="image/x-icon" href="favicon.ico"/>
Modified: trunk/jtrac/src/main/java/info/jtrac/wicket/BasePage.java
===================================================================
--- trunk/jtrac/src/main/java/info/jtrac/wicket/BasePage.java 2023-06-01 08:06:21 UTC (rev 1478)
+++ trunk/jtrac/src/main/java/info/jtrac/wicket/BasePage.java 2023-06-08 09:49:27 UTC (rev 1479)
@@ -82,6 +82,7 @@
add(new HeaderPanel().setRenderBodyOnly(true));
String jtracVersion = getJtrac().getReleaseVersion();
add(new Label("version", jtracVersion));
+ add(new Label("title", "JTrac"));
add(WebUtils.getColorChangeHeaderContributor());
}
}
Modified: trunk/jtrac/src/main/java/info/jtrac/wicket/ItemFormPage.java
===================================================================
--- trunk/jtrac/src/main/java/info/jtrac/wicket/ItemFormPage.java 2023-06-01 08:06:21 UTC (rev 1478)
+++ trunk/jtrac/src/main/java/info/jtrac/wicket/ItemFormPage.java 2023-06-08 09:49:27 UTC (rev 1479)
@@ -30,6 +30,7 @@
import org.apache.wicket.markup.html.IHeaderContributor;
import org.apache.wicket.markup.html.IHeaderResponse;
import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Button;
import org.apache.wicket.markup.html.form.CheckBox;
import org.apache.wicket.markup.html.form.DropDownChoice;
@@ -67,6 +68,7 @@
*/
public ItemFormPage(long itemId) {
Item item = getJtrac().loadItem(itemId);
+ addOrReplace(new Label("title", "JTrac "+item.getRefId()));
add(new ItemForm("form", item));
}
@@ -93,11 +95,11 @@
feedback.setFilter(filter);
add(feedback);
version = item.getVersion();
-
+
if (item.getId() > 0) {
editMode = true;
}
-
+
BoundCompoundPropertyModel model = null;
if (editMode) {
/*
Modified: trunk/jtrac/src/main/java/info/jtrac/wicket/ItemViewPage.java
===================================================================
--- trunk/jtrac/src/main/java/info/jtrac/wicket/ItemViewPage.java 2023-06-01 08:06:21 UTC (rev 1478)
+++ trunk/jtrac/src/main/java/info/jtrac/wicket/ItemViewPage.java 2023-06-08 09:49:27 UTC (rev 1479)
@@ -31,6 +31,7 @@
import org.apache.wicket.PageParameters;
import org.apache.wicket.RestartResponseAtInterceptPageException;
import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.markup.html.list.ListView;
@@ -57,9 +58,10 @@
item = getJtrac().loadItem(Long.parseLong(refId));
}
itemId = item.getId(); // required for itemRelatePanel
+ addOrReplace(new Label("title", "JTrac "+item.getRefId()));
addComponents(item);
- }
-
+ }
+
private void addComponents(final Item item) {
final ItemSearch itemSearch = JtracSession.get().getItemSearch();
add(new ItemRelatePanel("relate", true, itemSearch));
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <udi...@us...> - 2023-06-01 08:06:23
|
Revision: 1478
http://sourceforge.net/p/j-trac/code/1478
Author: udittmer
Date: 2023-06-01 08:06:21 +0000 (Thu, 01 Jun 2023)
Log Message:
-----------
JTrac 2.3.1
Added Paths:
-----------
tags/jtrac-2.3.1/
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <udi...@us...> - 2023-06-01 07:59:44
|
Revision: 1477
http://sourceforge.net/p/j-trac/code/1477
Author: udittmer
Date: 2023-06-01 07:59:43 +0000 (Thu, 01 Jun 2023)
Log Message:
-----------
added option to allow the wiki to accept user-provided HTML IF the wiki is not public
Modified Paths:
--------------
trunk/jtrac/src/main/java/info/jtrac/domain/Config.java
trunk/jtrac/src/main/java/info/jtrac/wiki/ClassicToHTMLFilter.java
trunk/jtrac/src/main/java/info/jtrac/wiki/WikiServlet.java
trunk/jtrac/src/main/resources/messages.properties
trunk/jtrac/src/main/resources/messages_de.properties
trunk/jtrac/src/main/resources/messages_en.properties
Modified: trunk/jtrac/src/main/java/info/jtrac/domain/Config.java
===================================================================
--- trunk/jtrac/src/main/java/info/jtrac/domain/Config.java 2023-05-23 08:40:46 UTC (rev 1476)
+++ trunk/jtrac/src/main/java/info/jtrac/domain/Config.java 2023-06-01 07:59:43 UTC (rev 1477)
@@ -72,6 +72,7 @@
PARAMS.add("attachments.openNewWindow");
PARAMS.add("items.search.num");
PARAMS.add("wiki.public");
+ PARAMS.add("wiki.markdown.html");
PARAMS.add("wiki.maxChangeLogSize");
BOOLEAN_PARAMS = new LinkedHashSet<String>();
@@ -82,6 +83,7 @@
BOOLEAN_PARAMS.add("attachments.openNewWindow");
BOOLEAN_PARAMS.add("jtrac.comment.closed");
BOOLEAN_PARAMS.add("wiki.public");
+ BOOLEAN_PARAMS.add("wiki.markdown.html");
NUMBER_PARAMS = new LinkedHashSet<String>();
NUMBER_PARAMS.add("mail.server.port");
Modified: trunk/jtrac/src/main/java/info/jtrac/wiki/ClassicToHTMLFilter.java
===================================================================
--- trunk/jtrac/src/main/java/info/jtrac/wiki/ClassicToHTMLFilter.java 2023-05-23 08:40:46 UTC (rev 1476)
+++ trunk/jtrac/src/main/java/info/jtrac/wiki/ClassicToHTMLFilter.java 2023-06-01 07:59:43 UTC (rev 1477)
@@ -1,5 +1,7 @@
package info.jtrac.wiki;
+import info.jtrac.wicket.JtracApplication;
+
import java.io.*;
import java.util.*;
import java.util.regex.Matcher;
@@ -31,7 +33,7 @@
private LucenePageRepository repository;
private String baseUrl;
- public ClassicToHTMLFilter (LucenePageRepository repository, String baseUrl)
+ public ClassicToHTMLFilter (LucenePageRepository repository, String baseUrl, boolean enableMarkdownHtml)
{
this.repository = repository;
this.baseUrl = baseUrl;
@@ -68,7 +70,7 @@
};
}
})
- .escapeHtml(true)
+ .escapeHtml(!enableMarkdownHtml)
.sanitizeUrls(true)
.build();
}
Modified: trunk/jtrac/src/main/java/info/jtrac/wiki/WikiServlet.java
===================================================================
--- trunk/jtrac/src/main/java/info/jtrac/wiki/WikiServlet.java 2023-05-23 08:40:46 UTC (rev 1476)
+++ trunk/jtrac/src/main/java/info/jtrac/wiki/WikiServlet.java 2023-06-01 07:59:43 UTC (rev 1477)
@@ -1,5 +1,8 @@
package info.jtrac.wiki;
+import info.jtrac.Jtrac;
+import info.jtrac.domain.User;
+import info.jtrac.wicket.JtracSession;
import info.jtrac.wiki.events.*;
import java.io.*;
@@ -24,10 +27,6 @@
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
-import info.jtrac.Jtrac;
-import info.jtrac.domain.User;
-import info.jtrac.wicket.JtracSession;
-
import org.apache.wicket.Application;
import org.apache.wicket.Session;
@@ -118,8 +117,10 @@
driver.setPolicy(policy);
LucenePageRepository repository = new LucenePageRepository(driver, Integer.parseInt(jtrac.loadConfig("wiki.maxChangeLogSize", "-1")));
+ boolean isPublic = "true".equals(jtrac.loadConfig("wiki.public", "false"));
+ boolean allowsHtml = "true".equals(jtrac.loadConfig("wiki.markdown.html", "false"));
- ClassicToHTMLFilter filter = new ClassicToHTMLFilter(repository, baseUrl);
+ ClassicToHTMLFilter filter = new ClassicToHTMLFilter(repository, baseUrl, !isPublic && allowsHtml);
HTMLRenderer renderer = new HTMLRenderer(filter);
model = new Model(repository, renderer, filter, policy);
Modified: trunk/jtrac/src/main/resources/messages.properties
===================================================================
--- trunk/jtrac/src/main/resources/messages.properties 2023-05-23 08:40:46 UTC (rev 1476)
+++ trunk/jtrac/src/main/resources/messages.properties 2023-06-01 07:59:43 UTC (rev 1477)
@@ -221,6 +221,7 @@
config.attachments.openNewWindow = Open text and image attachments in a new tab/window, rather than downloading them (default is true)
config.items.search.num = Number of entries per page (default is 25)
config.wiki.public = Wiki pages are publicly visible (default is false)
+config.wiki.markdown.html = Wiki pages accept user-provided HTML IF the wiki is not public (default is false)
config.wiki.maxChangeLogSize = Maximum length of Wiki change log (RecentChanges). (default is -1) Use -1 for no-limit
# config_list (config_form does not have any extra messages)
Modified: trunk/jtrac/src/main/resources/messages_de.properties
===================================================================
--- trunk/jtrac/src/main/resources/messages_de.properties 2023-05-23 08:40:46 UTC (rev 1476)
+++ trunk/jtrac/src/main/resources/messages_de.properties 2023-06-01 07:59:43 UTC (rev 1477)
@@ -37,7 +37,7 @@
header.wiki = WIKI
# dashboard
-dashboard.noSpaces = Sie sind keinem Projekt Zugeordnet
+dashboard.noSpaces = Sie sind keinem Projekt zugeordnet
dashboard.space = Projekt
dashboard.action = Aktion
dashboard.status = Status
@@ -221,6 +221,7 @@
config.attachments.openNewWindow = Text- und Bild-Anh\u00e4nge in neuem Fenster \u00f6ffnen statt sie herunterzuladen (Default ist true)
config.items.search.num = Anzahl der Eintr\u00e4ge pro Seite (Default 25)
config.wiki.public = Wiki Seiten sind \u00f6ffentlich (Default ist false)
+config.wiki.markdown.html = Wiki Seiten akzeptieren HTML (nur falls das Wiki nicht \u00f6ffentlich ist; Default ist false)
config.wiki.maxChangeLogSize = Maximale L\u00e4nge der Wiki \u00c4nderungsseite (RecentChanges). (Default ist -1, d.h. kein Limit)
# config_list (config_form does not have any extra messages)
Modified: trunk/jtrac/src/main/resources/messages_en.properties
===================================================================
--- trunk/jtrac/src/main/resources/messages_en.properties 2023-05-23 08:40:46 UTC (rev 1476)
+++ trunk/jtrac/src/main/resources/messages_en.properties 2023-06-01 07:59:43 UTC (rev 1477)
@@ -221,6 +221,7 @@
config.attachments.openNewWindow = Open text and image attachments in a new tab/window, rather than downloading them (default is true)
config.items.search.num = Number of entries per page (default is 25)
config.wiki.public = Wiki pages are publicly visible (default is false)
+config.wiki.markdown.html = Wiki pages accept user-provided HTML IF the wiki is not public (default is false)
config.wiki.maxChangeLogSize = Maximum length of Wiki change log (RecentChanges). (default is -1) Use -1 for no-limit
# config_list (config_form does not have any extra messages)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <udi...@us...> - 2023-05-23 08:40:53
|
Revision: 1476
http://sourceforge.net/p/j-trac/code/1476
Author: udittmer
Date: 2023-05-23 08:40:46 +0000 (Tue, 23 May 2023)
Log Message:
-----------
fix wiki indexing bug, prepare docs for release, HtmlUnit update
Modified Paths:
--------------
trunk/jtrac/doc/src/index.xml
trunk/jtrac/pom.xml
trunk/jtrac/src/main/java/info/jtrac/wiki/LucenePageRepository.java
Modified: trunk/jtrac/doc/src/index.xml
===================================================================
--- trunk/jtrac/doc/src/index.xml 2023-04-19 09:40:29 UTC (rev 1475)
+++ trunk/jtrac/doc/src/index.xml 2023-05-23 08:40:46 UTC (rev 1476)
@@ -5,7 +5,7 @@
<bookinfo>
<title>JTrac</title>
<subtitle>User / Developer Guide</subtitle>
- <releaseinfo>2.3.0</releaseinfo>
+ <releaseinfo>2.3.1</releaseinfo>
<authorgroup>
<author>
<firstname>Peter</firstname>
@@ -87,8 +87,8 @@
<sect1 id="introduction-releasenotes-2_2">
<title>Release Notes: Version 2.2.0</title>
<para>
- There is a new table in the database in 2.2.0 to accommodate the new saved link/bookmark feature. Instructions
- on how to upgrade are available in the "<link linkend="upgrading">upgrading</link>" section of this document.
+ A new table in the database accommodates the new saved link/bookmark feature.
+ Instructions on how to upgrade are available in the "<link linkend="upgrading">upgrading</link>" section of this document.
</para>
<para>
There where a number of new features, changes and bugfixes:
@@ -100,7 +100,7 @@
<para>All dates and times can optionally be displayed in a "pretty" format like "10 minutes ago", "2 months ago" etc.</para>
</listitem>
<listitem>
- <para>It's now possible to bookmarks searches, as all relevant parameters are part of the URL.</para>
+ <para>It's now possible to bookmark searches, as all relevant parameters are part of the URL.</para>
</listitem>
<listitem>
<para>The dashboard can be configured to show a number of links that are relevant to the project,
@@ -127,7 +127,7 @@
</itemizedlist>
</para>
<para>
- For details see this <ulink url="https://sourceforge.net/p/j-trac/wiki/NewFeatures220">wiki page</ulink> on SourceForge.
+ For details see <ulink url="https://sourceforge.net/p/j-trac/wiki/NewFeatures220">NewFeatures220</ulink> on SourceForge.
</para>
</sect1>
@@ -134,7 +134,7 @@
<sect1 id="introduction-releasenotes-2_2_1">
<title>Release Notes: Version 2.2.1</title>
<para>
- There are a couple of new database attributes (in the Space and the StoredSearch tables) in 2.2.1.
+ A couple of new database attributes have been added (in the Space and the StoredSearch tables).
Instructions on how to upgrade are available in the "<link linkend="upgrading">upgrading</link>" section of this document.
</para>
<para>
@@ -164,7 +164,7 @@
</itemizedlist>
</para>
<para>
- For details see this <ulink url="https://sourceforge.net/p/j-trac/wiki/NewFeatures221">wiki page</ulink> on SourceForge.
+ For details see <ulink url="https://sourceforge.net/p/j-trac/wiki/NewFeatures221">NewFeatures221</ulink> on SourceForge.
</para>
</sect1>
@@ -199,9 +199,20 @@
</itemizedlist>
</para>
<para>
- For details see this <ulink url="https://sourceforge.net/p/j-trac/wiki/NewFeatures230">wiki page</ulink> on SourceForge.
+ For details see <ulink url="https://sourceforge.net/p/j-trac/wiki/NewFeatures230">NewFeatures230</ulink> on SourceForge.
</para>
</sect1>
+
+ <sect1 id="introduction-releasenotes-2_3_1">
+ <title>Release Notes: Version 2.3.1</title>
+ <para>
+ jTrac 2.3.1 has no new features, but fixes a couple of bugs and updates a few dependencies.
+ Instructions on how to upgrade are available in the "<link linkend="upgrading">upgrading</link>" section of this document.
+ </para>
+ <para>
+ For details see <ulink url="https://sourceforge.net/p/j-trac/wiki/NewFeatures231">NewFeatures231</ulink> on SourceForge.
+ </para>
+ </sect1>
</chapter>
<chapter id="features">
@@ -1401,12 +1412,6 @@
At this point, we would rather not get into the details of hosting an instance of JTrac on the internet.
</para>
</sect1>
- <sect1 id="faq-references">
- <title>Do you have a list of users or references?</title>
- <para>
- Plenty. Have a look at this page: <ulink url="https://j-trac.wiki.sourceforge.net/references">https://j-trac.wiki.sourceforge.net/references</ulink>
- </para>
- </sect1>
</chapter>
<chapter id="roadmap">
@@ -1423,9 +1428,9 @@
<ulink url="https://lists.sourceforge.net/lists/listinfo/j-trac-users">mailing-list</ulink>.
</para>
<para>
- Note that this roadmap dates all the way back to the 2.1.0 days, and no longer reflects the priorities of the current
- development team. Much of this will likely not be implemented, whereas other features not mentioned here will see
- the light of the day. If you're missing something in particular (or found a bug), file a ticket in the
+ <emphasis>Note that this roadmap dates all the way back to the 2.1.0 days, and no longer reflects the priorities of the
+ current development team. Much of this will likely not be implemented, whereas other features not mentioned here may see
+ the light of the day.</emphasis> If you're missing something in particular (or found a bug), file a ticket in the
<ulink url="https://sourceforge.net/p/j-trac/_list/tickets">appropriate ticket tracker</ulink>, and we'll take it from there.
</para>
<sect1 id="roadmap-hide">
@@ -1480,6 +1485,7 @@
<title>Wiki Engine</title>
<para>
There is a plan to embed a wiki-engine into JTrac. This will supplement the requirements management road map.
+ This has been partially implemented in 2.3.0.
</para>
</sect1>
<sect1 id="roadmap-svn">
@@ -1486,9 +1492,9 @@
<title>Subversion Integration</title>
<para>
Integration with <ulink url="https://subversion.apache.org/">Subversion</ulink> has already been implemented
- using the <ulink url="https://tmate.org/svn/">JavaSVN</ulink> library and this will enable effective
- integration of bug reports with commit history in the future. You can try out the existing experimental
- support by going to the following url of your JTrac installation: http://[hostname]/jtrac/app/svn
+ using the <ulink url="https://web.archive.org/web/20061106191343/https://tmate.org/svn/">JavaSVN</ulink> library
+ and this will enable effective integration of bug reports with commit history in the future. You can try out the
+ existing experimental support by going to the following url of your JTrac installation: http://[hostname]/jtrac/app/svn
</para>
<para>
<mediaobject>
@@ -1912,6 +1918,11 @@
which is also in the "resources" folder. You can easily customize the fonts, colors and icons used across
JTrac by just editing a single CSS file.
</para>
+ <para>
+ Recent versions of jTrac have a number of customization options built in under OPTIONS -> Manage Settings.
+ There it's possible to change the top-left image, the header text, and the colors used throughout jTrac
+ without having to jump through the hoops mentioned above, or having to know CSS.
+ </para>
</sect1>
<sect1 id="dev-translating">
<title>Adding a language translation for JTrac</title>
Modified: trunk/jtrac/pom.xml
===================================================================
--- trunk/jtrac/pom.xml 2023-04-19 09:40:29 UTC (rev 1475)
+++ trunk/jtrac/pom.xml 2023-05-23 08:40:46 UTC (rev 1476)
@@ -67,7 +67,7 @@
<dependency>
<groupId>org.htmlunit</groupId>
<artifactId>htmlunit</artifactId>
- <version>3.1.0</version>
+ <version>3.2.0</version>
<scope>test</scope>
</dependency>
<dependency>
Modified: trunk/jtrac/src/main/java/info/jtrac/wiki/LucenePageRepository.java
===================================================================
--- trunk/jtrac/src/main/java/info/jtrac/wiki/LucenePageRepository.java 2023-04-19 09:40:29 UTC (rev 1475)
+++ trunk/jtrac/src/main/java/info/jtrac/wiki/LucenePageRepository.java 2023-05-23 08:40:46 UTC (rev 1476)
@@ -185,7 +185,7 @@
List<SearchResult> ret = new ArrayList<>();
if (pattern != null && pattern.length() > 0) try {
- logger.info("searching for: " + pattern);
+ logger.debug("searching for: " + pattern);
pattern = pattern.replaceAll("\\\"|\\?|\\*|\\(|\\)|\\[|\\]|:|\\+|\\-|\\{|\\}|\\*|~|!|\"|\\\\|\\&", " ");
@@ -217,7 +217,7 @@
// also search for the pattern in content directly
queryString.append(")");
queryString.append(" OR contents:\"").append(pattern.trim()).append("\"");
- logger.info("query:"+queryString.toString());
+ logger.debug("query:"+queryString.toString());
IndexSearcher searcher = new IndexSearcher(dir);
QueryParser parser = new QueryParser("contents", analyzer);
@@ -225,11 +225,11 @@
Hits hits = searcher.search(query);
int numDocs = hits.length();
- logger.info(numDocs+" matching documents");
+ logger.debug(numDocs+" matching documents");
for (int i = 0; i < numDocs; i++) {
Document doc = hits.doc(i);
if (doc.get("title") != null) {
- //logger.info(doc.get("title"));
+ //logger.debug(doc.get("title"));
Tract tract = get(doc.get("title"));
String content = tract.getContent();
String lcContent = content.toLowerCase();
@@ -273,7 +273,6 @@
}
} catch (Exception ex) {
logger.error("matchingPages: " + ex.getMessage());
- //ex.printStackTrace();
}
ret.sort((o1, o2) -> {
@@ -286,94 +285,91 @@
}
protected void addPageToIndex (String name, Tract page) {
+ if (page == null)
+ return;
+
try {
+ Term term = new Term("uniqueTitle", ":"+name+":");
+ IndexReader reader = IndexReader.open(dir);
+ int deleted = reader.deleteDocuments(term);
+ reader.close();
+
IndexWriter writer = new IndexWriter(dir, analyzer, false);
- if (page != null) {
- String content = page.getContent();
- Document doc = new Document();
+ String content = page.getContent();
+ Document doc = new Document();
- doc.add(new Field("title", name, Field.Store.YES, Field.Index.TOKENIZED));
- if (page.get("seo.name") != null)
- doc.add(new Field("altTitle", (String) page.get("seo.name"), Field.Store.YES, Field.Index.TOKENIZED));
- doc.add(new Field("uniqueTitle", ":"+name+":", Field.Store.YES, Field.Index.UN_TOKENIZED));
- doc.add(new Field("contents", content, Field.Store.NO, Field.Index.TOKENIZED));
+ doc.add(new Field("title", name, Field.Store.YES, Field.Index.TOKENIZED));
+ if (page.get("seo.name") != null)
+ doc.add(new Field("altTitle", (String) page.get("seo.name"), Field.Store.YES, Field.Index.TOKENIZED));
+ doc.add(new Field("uniqueTitle", ":"+name+":", Field.Store.YES, Field.Index.UN_TOKENIZED));
+ doc.add(new Field("contents", content, Field.Store.NO, Field.Index.TOKENIZED));
- Term term = new Term("uniqueTitle", ":"+name+":");
- int deleted = IndexReader.open(dir).deleteDocuments(term);
- logger.info("indexing "+name+", deleted "+deleted);
+ logger.info("indexing "+name+", deleted "+deleted);
- writer.addDocument(doc);
- }
-
+ writer.addDocument(doc);
writer.close();
- } catch (Exception e) {
- logger.warn("addPageToIndex: " + e.getMessage());
+ } catch (Exception ex) {
+ logger.warn("addPageToIndex: " + ex.getMessage());
}
}
protected void createIndex() {
- (new Thread(() -> {
- try {
- // set the priority of indexing to minimum, so as not to interrupt other processes
- Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
- Thread.currentThread().setName("Lucene indexer");
+ try {
+ IndexWriter writer = new IndexWriter(dir, analyzer, true);
- IndexWriter writer = new IndexWriter(dir, analyzer, true);
+ int numPages = 0;
- int numPages = 0;
+ Iterator all = allPageNames();
+ while (all.hasNext()) {
+ String name = (String) all.next();
+ // don't index the read and write logs
+ if (name.equals("RecentChanges"))
+ continue;
- Iterator all = allPageNames();
- while (all.hasNext()) {
- String name = (String) all.next();
- // don't index the read and write logs
- if (name.equals("RecentChanges"))
+ Tract tract = get(name);
+ if (tract != null) {
+ // there's no point indexing a page that isn't displayed
+ String redirectTo = tract.getAttribute("redirect.to");
+ if (redirectTo != null && redirectTo.length() > 0)
continue;
- Tract tract = get(name);
- if (tract != null) {
- // there's no point indexing a page that isn't displayed
- String redirectTo = tract.getAttribute("redirect.to");
- if (redirectTo != null && redirectTo.length() > 0)
- continue;
+ //logger.debug("indexing " + name);
+ String content = tract.getContent();
+ if (content != null) {
+ Document doc = new Document();
- //logger.debug("indexing " + name);
- String content = tract.getContent();
- if (content != null) {
- Document doc = new Document();
+ // Add the title of the page as a field named "title". Use a Text field,
+ // so that the index stores the title, and it becomes searchable
+ doc.add(new Field("title", name, Field.Store.YES, Field.Index.TOKENIZED));
+ doc.add(new Field("title", new StringBuilder(name).reverse().toString(), Field.Store.YES, Field.Index.TOKENIZED));
- // Add the title of the page as a field named "title". Use a Text field,
- // so that the index stores the title, and it becomes searchable
- doc.add(new Field("title", name, Field.Store.YES, Field.Index.TOKENIZED));
- doc.add(new Field("title", new StringBuilder(name).reverse().toString(), Field.Store.YES, Field.Index.TOKENIZED));
+ // If a better title exists, put it in the index so we can display it instead of the raw page name
+ if (tract.get("seo.name") != null)
+ doc.add(new Field("altTitle", (String) tract.get("seo.name"), Field.Store.YES, Field.Index.TOKENIZED));
- // If a better title exists, put it in the index so we can display it instead of the raw page name
- if (tract.get("seo.name") != null)
- doc.add(new Field("altTitle", (String) tract.get("seo.name"), Field.Store.YES, Field.Index.TOKENIZED));
+ // A pseudo-unique ID of the document is stored along with it.
+ // That way we have a sure way of finding and deleting it from
+ // the index when the page is updated.
+ doc.add(new Field("uniqueTitle", ":"+name+":", Field.Store.YES, Field.Index.UN_TOKENIZED));
- // A pseudo-unique ID of the document is stored along with it.
- // That way we have a sure way of finding and deleting it from
- // the index when the page is updated.
- doc.add(new Field("uniqueTitle", ":"+name+":", Field.Store.YES, Field.Index.UN_TOKENIZED));
+ // Add the contents of the file a field named "contents". Use an UnStored field,
+ // so that the contents are indexed, but not actually stored in the index.
+ doc.add(new Field("contents", content, Field.Store.NO, Field.Index.TOKENIZED));
- // Add the contents of the file a field named "contents". Use an UnStored field,
- // so that the contents are indexed, but not actually stored in the index.
- doc.add(new Field("contents", content, Field.Store.NO, Field.Index.TOKENIZED));
-
- writer.addDocument(doc);
- }
- numPages++;
+ writer.addDocument(doc);
}
+ numPages++;
}
- logger.info("finished indexing " + numPages + " pages");
+ }
+ logger.info("finished indexing " + numPages + " pages");
- writer.optimize();
- writer.close();
- } catch (Exception ex) {
- logger.error("createIndex: " + ex.getMessage());
- ex.printStackTrace();
- }
- })).start();
+ writer.optimize();
+ writer.close();
+ } catch (Exception ex) {
+ logger.error("createIndex: " + ex.getMessage());
+ ex.printStackTrace();
+ }
}
public class SearchResult {
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <udi...@us...> - 2023-04-19 09:40:30
|
Revision: 1475
http://sourceforge.net/p/j-trac/code/1475
Author: udittmer
Date: 2023-04-19 09:40:29 +0000 (Wed, 19 Apr 2023)
Log Message:
-----------
update dependency
Modified Paths:
--------------
trunk/jtrac/pom.xml
Modified: trunk/jtrac/pom.xml
===================================================================
--- trunk/jtrac/pom.xml 2023-04-18 09:37:40 UTC (rev 1474)
+++ trunk/jtrac/pom.xml 2023-04-19 09:40:29 UTC (rev 1475)
@@ -67,32 +67,14 @@
<dependency>
<groupId>org.htmlunit</groupId>
<artifactId>htmlunit</artifactId>
- <version>3.0.0</version>
+ <version>3.1.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>jaxen</groupId>
<artifactId>jaxen</artifactId>
- <version>1.2.0</version>
+ <version>2.0.0</version>
<scope>runtime</scope>
- <exclusions>
- <exclusion>
- <groupId>jdom</groupId>
- <artifactId>jdom</artifactId>
- </exclusion>
- <exclusion>
- <groupId>xom</groupId>
- <artifactId>xom</artifactId>
- </exclusion>
- <exclusion>
- <groupId>xerces</groupId>
- <artifactId>xmlParserAPIs</artifactId>
- </exclusion>
- <exclusion>
- <groupId>xerces</groupId>
- <artifactId>xercesImpl</artifactId>
- </exclusion>
- </exclusions>
</dependency>
<dependency>
<groupId>org.acegisecurity</groupId>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <udi...@us...> - 2023-04-18 09:37:42
|
Revision: 1474
http://sourceforge.net/p/j-trac/code/1474
Author: udittmer
Date: 2023-04-18 09:37:40 +0000 (Tue, 18 Apr 2023)
Log Message:
-----------
don't use JDBC driver class name when initializing HikariCP
Modified Paths:
--------------
trunk/jtrac/src/main/java/info/jtrac/config/DataSourceFactoryBean.java
Modified: trunk/jtrac/src/main/java/info/jtrac/config/DataSourceFactoryBean.java
===================================================================
--- trunk/jtrac/src/main/java/info/jtrac/config/DataSourceFactoryBean.java 2023-04-15 10:51:10 UTC (rev 1473)
+++ trunk/jtrac/src/main/java/info/jtrac/config/DataSourceFactoryBean.java 2023-04-18 09:37:40 UTC (rev 1474)
@@ -155,18 +155,18 @@
dataSource = (DataSource) factoryBean.getObject();
} else if(url.startsWith("jdbc:hsqldb:file")) {
logger.info("embedded HSQLDB mode detected, using Spring single connection data source");
+
SingleConnectionDataSource ds = new SingleConnectionDataSource();
ds.setUrl(url);
- ds.setDriverClassName(driverClassName);
ds.setUsername(username);
ds.setPassword(password);
ds.setSuppressClose(true);
+
dataSource = ds;
} else {
logger.info("Not using embedded HSQLDB or JNDI datasource, using HikariCP connection pool");
HikariConfig config = new HikariConfig();
- config.setDriverClassName(driverClassName);
config.setJdbcUrl(url);
config.setUsername(username);
config.setPassword(password);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <udi...@us...> - 2023-04-15 10:51:13
|
Revision: 1473
http://sourceforge.net/p/j-trac/code/1473
Author: udittmer
Date: 2023-04-15 10:51:10 +0000 (Sat, 15 Apr 2023)
Log Message:
-----------
handle null (i.e., empty) cells during Excel import
Modified Paths:
--------------
trunk/jtrac/src/main/java/info/jtrac/domain/ExcelFile.java
trunk/jtrac/src/main/java/info/jtrac/wicket/ExcelImportPage.java
Modified: trunk/jtrac/src/main/java/info/jtrac/domain/ExcelFile.java
===================================================================
--- trunk/jtrac/src/main/java/info/jtrac/domain/ExcelFile.java 2023-04-14 07:03:55 UTC (rev 1472)
+++ trunk/jtrac/src/main/java/info/jtrac/domain/ExcelFile.java 2023-04-15 10:51:10 UTC (rev 1473)
@@ -503,8 +503,8 @@
Workbook wb = null;
try {
wb = WorkbookFactory.create(is);
- } catch (Exception e) {
- throw new RuntimeException(e);
+ } catch (Exception ex) {
+ throw new RuntimeException(ex);
}
Sheet sheet = wb.getSheetAt(0);
Row r = null;
@@ -526,6 +526,7 @@
break;
}
Column column = new Column(value.trim());
+ logger.debug("adding column "+value.trim());
columns.add(column);
col++;
}
@@ -541,18 +542,22 @@
boolean isEmptyRow = true;
for(col = 0; col < columns.size(); col++) {
c = r.getCell((short) col);
- Object value = null;
- switch (c.getCellType()) {
- case STRING :
- value = c.getStringCellValue(); break;
- case NUMERIC :
- // value = c.getDateCellValue();
- value = c.getNumericCellValue();
- break;
- case BLANK :
- break;
- default: // do nothing
- }
+ Object value = null;
+ if (c != null) {
+ switch (c.getCellType()) {
+ case STRING :
+ value = c.getStringCellValue(); break;
+ case NUMERIC :
+ // value = c.getDateCellValue();
+ value = c.getNumericCellValue();
+ break;
+ case BLANK :
+ break;
+ default: // do nothing
+ }
+ } else {
+ // the cell may just be empty
+ }
if (value != null && value.toString().length() > 0) {
isEmptyRow = false;
rowData.add(new Cell(value));
Modified: trunk/jtrac/src/main/java/info/jtrac/wicket/ExcelImportPage.java
===================================================================
--- trunk/jtrac/src/main/java/info/jtrac/wicket/ExcelImportPage.java 2023-04-14 07:03:55 UTC (rev 1472)
+++ trunk/jtrac/src/main/java/info/jtrac/wicket/ExcelImportPage.java 2023-04-15 10:51:10 UTC (rev 1473)
@@ -22,11 +22,13 @@
import info.jtrac.domain.ExcelFile.Cell;
import info.jtrac.domain.ExcelFile.Column;
import info.jtrac.domain.Space;
+
import java.io.InputStream;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
+
import org.apache.wicket.behavior.SimpleAttributeModifier;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Check;
@@ -43,10 +45,15 @@
import org.apache.wicket.model.AbstractReadOnlyModel;
import org.apache.wicket.model.PropertyModel;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
/**
* excel import and cleanup
*/
-public class ExcelImportPage extends BasePage {
+public class ExcelImportPage extends BasePage {
+
+ private static final Logger logger = LoggerFactory.getLogger(ExcelImportPage.class);
private ExcelFile excelFile;
private int action;
@@ -77,12 +84,13 @@
try {
is = fileUploadField.getFileUpload().getInputStream();
excelFile = new ExcelFile(is);
- } catch(Exception e) {
+ } catch (Exception ex) {
+ ex.printStackTrace();
error(localize("excel_upload.error.invalidFile"));
return;
}
}
-
+
@Override
public boolean isVisible() {
return excelFile == null;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <udi...@us...> - 2023-04-14 07:03:56
|
Revision: 1472
http://sourceforge.net/p/j-trac/code/1472
Author: udittmer
Date: 2023-04-14 07:03:55 +0000 (Fri, 14 Apr 2023)
Log Message:
-----------
Spotbugs suggestions, generalize Excel code to handle XLSX as well as XLS
Modified Paths:
--------------
trunk/jtrac/src/main/java/info/jtrac/domain/ColumnHeading.java
trunk/jtrac/src/main/java/info/jtrac/domain/ExcelFile.java
trunk/jtrac/src/main/java/info/jtrac/domain/Field.java
trunk/jtrac/src/main/java/info/jtrac/domain/State.java
trunk/jtrac/src/main/java/info/jtrac/lucene/ItemIdHitExtractor.java
trunk/jtrac/src/main/java/info/jtrac/util/ExcelUtils.java
Modified: trunk/jtrac/src/main/java/info/jtrac/domain/ColumnHeading.java
===================================================================
--- trunk/jtrac/src/main/java/info/jtrac/domain/ColumnHeading.java 2023-03-24 09:07:58 UTC (rev 1471)
+++ trunk/jtrac/src/main/java/info/jtrac/domain/ColumnHeading.java 2023-04-14 07:03:55 UTC (rev 1472)
@@ -1,12 +1,12 @@
/*
* Copyright 2002-2005 the original author or authors.
- *
+ *
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -50,12 +50,12 @@
* used to render columns in the search results table
* and also in the search filter screen
*/
-public class ColumnHeading implements Serializable {
+public class ColumnHeading implements Serializable {
- protected static final Logger logger = LoggerFactory.getLogger(ColumnHeading.class);
-
+ protected static final Logger logger = LoggerFactory.getLogger(ColumnHeading.class);
+
private static final Map<String, Name> NAMES_MAP;
-
+
// set up a static Map to resolve a String to our ColumnHeading.Name enum value
static {
NAMES_MAP = new HashMap<String, Name>();
@@ -62,8 +62,8 @@
for (Name n : Name.values()) {
NAMES_MAP.put(n.text, n);
}
- }
-
+ }
+
/**
* Resolve a String to a valid enum value for ColumnHeading.Name
*/
@@ -74,18 +74,18 @@
}
return n;
}
-
+
/**
* test if a given string is a valid column heading name
*/
public static boolean isValidName(String text) {
return NAMES_MAP.containsKey(text);
- }
-
+ }
+
public static boolean isValidFieldOrColumnName(String text) {
return isValidName(text) || Field.isValidName(text);
}
-
+
public enum Name {
ID("id"),
@@ -99,54 +99,54 @@
LAST_CHANGED("lastChanged");
private String text;
-
- Name(String text) {
+
+ Name(String text) {
this.text = text;
- }
-
+ }
+
public String getText() {
return text;
- }
-
+ }
+
@Override
public String toString() {
return text;
- }
-
+ }
+
}
-
+
private Field field;
- private Name name;
+ private Name name;
private String label;
private boolean visible = true;
private Processor processor;
-
- private FilterCriteria filterCriteria = new FilterCriteria();
-
+
+ private FilterCriteria filterCriteria = new FilterCriteria();
+
public ColumnHeading(Name name) {
- this.name = name;
+ this.name = name;
if(name == DETAIL || name == SPACE) {
visible = false;
- }
+ }
processor = getProcessor();
}
-
+
public ColumnHeading(Field field) {
- this.field = field;
+ this.field = field;
this.label = field.getLabel();
processor = getProcessor();
- }
-
+ }
+
public boolean isField() {
return field != null;
}
-
+
public boolean isDropDownType() {
if(isField()) {
return field.isDropDownType();
} else {
- return name == LOGGED_BY
- || name == ASSIGNED_TO
+ return name == LOGGED_BY
+ || name == ASSIGNED_TO
|| name == STATUS;
}
}
@@ -154,11 +154,11 @@
public static List<ColumnHeading> getColumnHeadings(Space s) {
List<ColumnHeading> list = new ArrayList<ColumnHeading>();
list.add(new ColumnHeading(ID));
- list.add(new ColumnHeading(SUMMARY));
- list.add(new ColumnHeading(DETAIL));
+ list.add(new ColumnHeading(SUMMARY));
+ list.add(new ColumnHeading(DETAIL));
list.add(new ColumnHeading(STATUS));
list.add(new ColumnHeading(LOGGED_BY));
- list.add(new ColumnHeading(ASSIGNED_TO));
+ list.add(new ColumnHeading(ASSIGNED_TO));
for(Field f : s.getMetadata().getFieldList()) {
list.add(new ColumnHeading(f));
}
@@ -170,58 +170,58 @@
public static List<ColumnHeading> getColumnHeadings() {
List<ColumnHeading> list = new ArrayList<ColumnHeading>();
list.add(new ColumnHeading(ID));
- list.add(new ColumnHeading(SPACE));
- list.add(new ColumnHeading(SUMMARY));
- list.add(new ColumnHeading(DETAIL));
+ list.add(new ColumnHeading(SPACE));
+ list.add(new ColumnHeading(SUMMARY));
+ list.add(new ColumnHeading(DETAIL));
list.add(new ColumnHeading(LOGGED_BY));
list.add(new ColumnHeading(ASSIGNED_TO));
- list.add(new ColumnHeading(TIME_STAMP));
- list.add(new ColumnHeading(LAST_CHANGED));
+ list.add(new ColumnHeading(TIME_STAMP));
+ list.add(new ColumnHeading(LAST_CHANGED));
return list;
}
-
+
public List<Expression> getValidFilterExpressions() {
return processor.getValidFilterExpressions();
}
-
+
public Fragment getFilterUiFragment(MarkupContainer container, User user, Space space, Jtrac jtrac) {
- return processor.getFilterUiFragment(container, user, space, jtrac);
- }
-
+ return processor.getFilterUiFragment(container, user, space, jtrac);
+ }
+
public void addRestrictions(DetachedCriteria criteria) {
processor.addRestrictions(criteria);
}
-
+
public String getAsQueryString() {
return processor.getAsQueryString();
}
-
+
public void loadFromQueryString(String s, User user, Jtrac jtrac) {
processor.loadFromQueryString(s, user, jtrac);
- }
-
+ }
+
/**
* also see description below for the private getProcessor() method
*/
- private abstract class Processor implements Serializable {
-
+ private abstract class Processor implements Serializable {
+
/* return the possible expressions (equals, greater-than etc) to show on filter UI for selection */
abstract List<Expression> getValidFilterExpressions();
-
+
/* return the wicket ui fragment that will be shown over ajax (based on selected expression) */
abstract Fragment getFilterUiFragment(MarkupContainer container, User user, Space space, Jtrac jtrac);
-
+
/* get as hibernate restriction and append to passed in criteria that will be used to query the database */
abstract void addRestrictions(DetachedCriteria criteria);
-
+
/* return a querystring representation of the filter criteria to create a bookmarkable url */
- abstract String getAsQueryString();
-
+ abstract String getAsQueryString();
+
/* load a querystring representation and initialize filter critera when acting on a bookmarkable url */
- abstract void loadFromQueryString(String s, User user, Jtrac jtrac);
-
- }
-
+ abstract void loadFromQueryString(String s, User user, Jtrac jtrac);
+
+ }
+
/**
* this routine is a massive if-then construct that acts as a factory for the
* right implementation of the responsibilities defined in the "Processor" class (above)
@@ -230,17 +230,17 @@
* logic of each of the methods are closely interdependent for a given column type
* for e.g. the kind of hibernate criteria needed depends on what is made available on the UI
*/
- private Processor getProcessor() {
- if(isField()) {
+ private Processor getProcessor() {
+ if(isField()) {
switch(field.getName().getType()) {
//==============================================================
case 1:
case 2:
- case 3:
- return new Processor() {
+ case 3:
+ return new Processor() {
List<Expression> getValidFilterExpressions() {
return getAsList(IN);
- }
+ }
Fragment getFilterUiFragment(MarkupContainer container, User user, Space space, Jtrac jtrac) {
Fragment fragment = new Fragment("fragParent", "multiSelect", container);
final Map<String, String> options = field.getOptions();
@@ -251,34 +251,34 @@
public String getIdValue(Object o, int i) {
return o.toString();
}
- });
+ });
fragment.add(choice);
choice.setModel(new PropertyModel(filterCriteria, "values"));
return fragment;
}
void addRestrictions(DetachedCriteria criteria) {
- if(filterHasValueList()) {
+ if(filterHasValueList()) {
List values = filterCriteria.getValues();
List<Integer> keys = new ArrayList<Integer>(values.size());
for(Object o : values) {
- keys.add(new Integer(o.toString()));
+ keys.add(Integer.valueOf(o.toString()));
}
criteria.add(Restrictions.in(getNameText(), keys));
}
}
- String getAsQueryString() {
- return getQueryStringFromValueList();
+ String getAsQueryString() {
+ return getQueryStringFromValueList();
}
void loadFromQueryString(String s, User user, Jtrac jtrac) {
setValueListFromQueryString(s);
- }
+ }
};
//==============================================================
- case 4: // decimal number
- return new Processor() {
+ case 4: // decimal number
+ return new Processor() {
List<Expression> getValidFilterExpressions() {
return getAsList(EQ, NOT_EQ, GT, LT, BETWEEN);
- }
+ }
Fragment getFilterUiFragment(MarkupContainer container, User user, Space space, Jtrac jtrac) {
Fragment fragment = new Fragment("fragParent", "textField", container);
TextField textField = new TextField("value", Double.class);
@@ -287,7 +287,7 @@
if(filterCriteria.getExpression() == BETWEEN) {
TextField textField2 = new TextField("value2", Double.class);
textField.setModel(new PropertyModel(filterCriteria, "value2"));
- fragment.add(textField2);
+ fragment.add(textField2);
} else {
fragment.add(new WebMarkupContainer("value2").setVisible(false));
}
@@ -301,12 +301,12 @@
case NOT_EQ: criteria.add(Restrictions.not(Restrictions.eq(name.text, value))); break;
case GT: criteria.add(Restrictions.gt(getNameText(), value)); break;
case LT: criteria.add(Restrictions.lt(getNameText(), value)); break;
- case BETWEEN:
+ case BETWEEN:
criteria.add(Restrictions.gt(getNameText(), value));
criteria.add(Restrictions.lt(getNameText(), filterCriteria.getValue2()));
break;
- default:
- }
+ default:
+ }
}
}
String getAsQueryString() {
@@ -315,16 +315,16 @@
void loadFromQueryString(String s, User user, Jtrac jtrac) {
setValueFromQueryString(s, Double.class);
}
-
- };
+
+ };
//==============================================================
case 6: // date
- return new Processor() {
+ return new Processor() {
List<Expression> getValidFilterExpressions() {
return getAsList(EQ, NOT_EQ, GT, LT, BETWEEN);
}
Fragment getFilterUiFragment(MarkupContainer container, User user, Space space, Jtrac jtrac) {
- Fragment fragment = new Fragment("fragParent", "dateField", container);
+ Fragment fragment = new Fragment("fragParent", "dateField", container);
DateField dateField = new DateField("value", new PropertyModel(filterCriteria, "value"));
fragment.add(dateField);
@@ -333,7 +333,7 @@
fragment.add(dateField2);
} else {
fragment.add(new WebMarkupContainer("value2").setVisible(false));
- }
+ }
return fragment;
}
void addRestrictions(DetachedCriteria criteria) {
@@ -344,12 +344,12 @@
case NOT_EQ: criteria.add(Restrictions.not(Restrictions.eq(getNameText(), value))); break;
case GT: criteria.add(Restrictions.gt(getNameText(), value)); break;
case LT: criteria.add(Restrictions.lt(getNameText(), value)); break;
- case BETWEEN:
+ case BETWEEN:
criteria.add(Restrictions.gt(getNameText(), value));
criteria.add(Restrictions.lt(getNameText(), filterCriteria.getValue2()));
break;
- default:
- }
+ default:
+ }
}
}
String getAsQueryString() {
@@ -357,10 +357,10 @@
}
void loadFromQueryString(String s, User user, Jtrac jtrac) {
setValueFromQueryString(s, Date.class);
- }
- };
+ }
+ };
//==============================================================
- case 5: // free text
+ case 5: // free text
return new Processor() {
List<Expression> getValidFilterExpressions() {
return getAsList(CONTAINS);
@@ -370,7 +370,7 @@
}
void addRestrictions(DetachedCriteria criteria) {
if(filterHasValue()) {
- criteria.add(Restrictions.ilike(getNameText(),
+ criteria.add(Restrictions.ilike(getNameText(),
(String) filterCriteria.getValue(), MatchMode.ANYWHERE));
}
}
@@ -379,13 +379,13 @@
}
void loadFromQueryString(String s, User user, Jtrac jtrac) {
setValueFromQueryString(s, String.class);
- }
- };
+ }
+ };
//==============================================================
default:
throw new RuntimeException("Unknown Column Heading " + name);
- }
- } else { // this is not a custom field but one of the "built-in" columns
+ }
+ } else { // this is not a custom field but one of the "built-in" columns
switch(name) {
//==============================================================
case ID:
@@ -396,7 +396,7 @@
Fragment getFilterUiFragment(MarkupContainer container, User user, Space space, Jtrac jtrac) {
return getTextFieldFragment(container);
}
- void addRestrictions(DetachedCriteria criteria) {
+ void addRestrictions(DetachedCriteria criteria) {
if(filterHasValue()) {
// should never come here for criteria: see ItemSearch#getRefId()
throw new RuntimeException("should not come here for 'id'");
@@ -407,10 +407,10 @@
}
void loadFromQueryString(String s, User user, Jtrac jtrac) {
setValueFromQueryString(s, String.class);
- }
- };
+ }
+ };
//==============================================================
- case SUMMARY:
+ case SUMMARY:
return new Processor() {
List<Expression> getValidFilterExpressions() {
return getAsList(CONTAINS);
@@ -429,7 +429,7 @@
void loadFromQueryString(String s, User user, Jtrac jtrac) {
setValueFromQueryString(s, String.class);
}
- };
+ };
//==============================================================
case DETAIL:
return new Processor() {
@@ -457,7 +457,7 @@
return getAsList(IN);
}
Fragment getFilterUiFragment(MarkupContainer container, User user, Space space, Jtrac jtrac) {
- Fragment fragment = new Fragment("fragParent", "multiSelect", container);
+ Fragment fragment = new Fragment("fragParent", "multiSelect", container);
// status selectable only when context space is not null
final Map<Integer, String> options = space.getMetadata().getStatesMap();
options.remove(State.NEW);
@@ -468,9 +468,9 @@
public String getIdValue(Object o, int i) {
return o.toString();
}
- });
+ });
fragment.add(choice);
- choice.setModel(new PropertyModel(filterCriteria, "values"));
+ choice.setModel(new PropertyModel(filterCriteria, "values"));
return fragment;
}
void addRestrictions(DetachedCriteria criteria) {
@@ -479,23 +479,23 @@
}
}
String getAsQueryString() {
- return getQueryStringFromValueList();
+ return getQueryStringFromValueList();
}
void loadFromQueryString(String s, User user, Jtrac jtrac) {
setStatusListFromQueryString(s);
}
- };
+ };
//==============================================================
case ASSIGNED_TO:
- case LOGGED_BY:
- return new Processor() {
+ case LOGGED_BY:
+ return new Processor() {
List<Expression> getValidFilterExpressions() {
return getAsList(IN);
}
Fragment getFilterUiFragment(MarkupContainer container, User user, Space space, Jtrac jtrac) {
Fragment fragment = new Fragment("fragParent", "multiSelect", container);
- List<User> users = null;
- if(space == null) {
+ List<User> users = null;
+ if(space == null) {
users = jtrac.findUsersForUser(user);
} else {
users = jtrac.findUsersForSpace(space.getId());
@@ -509,9 +509,9 @@
}
});
fragment.add(choice);
- choice.setModel(new PropertyModel(filterCriteria, "values"));
+ choice.setModel(new PropertyModel(filterCriteria, "values"));
return fragment;
- }
+ }
void addRestrictions(DetachedCriteria criteria) {
if (filterHasValueList()) {
criteria.add(Restrictions.in(getNameText(), filterCriteria.getValues()));
@@ -522,8 +522,8 @@
}
void loadFromQueryString(String s, User user, Jtrac jtrac) {
setUserListFromQueryString(s, jtrac);
- }
- };
+ }
+ };
//==============================================================
case TIME_STAMP:
case LAST_CHANGED:
@@ -532,7 +532,7 @@
return getAsList(BETWEEN, GT, LT);
}
Fragment getFilterUiFragment(MarkupContainer container, User user, Space space, Jtrac jtrac) {
- Fragment fragment = new Fragment("fragParent", "dateField", container);
+ Fragment fragment = new Fragment("fragParent", "dateField", container);
DateField dateField = new DateField("value", new PropertyModel(filterCriteria, "value"));
fragment.add(dateField);
if (filterCriteria.getExpression() == BETWEEN) {
@@ -540,7 +540,7 @@
fragment.add(dateField2);
} else {
fragment.add(new WebMarkupContainer("value2").setVisible(false));
- }
+ }
return fragment;
}
void addRestrictions(DetachedCriteria criteria) {
@@ -549,16 +549,16 @@
switch(filterCriteria.getExpression()) {
case GT: criteria.add(Restrictions.gt(getNameText(), value)); break;
case LT: criteria.add(Restrictions.lt(getNameText(), value)); break;
- case BETWEEN:
+ case BETWEEN:
criteria.add(Restrictions.gt(getNameText(), value));
criteria.add(Restrictions.lt(getNameText(), filterCriteria.getValue2()));
break;
- default:
- }
+ default:
+ }
}
}
String getAsQueryString() {
- return getQueryStringFromValue(Date.class);
+ return getQueryStringFromValue(Date.class);
}
void loadFromQueryString(String s, User user, Jtrac jtrac) {
setValueFromQueryString(s, Date.class);
@@ -582,10 +582,10 @@
}
});
fragment.add(choice);
- choice.setModel(new PropertyModel(filterCriteria, "values"));
+ choice.setModel(new PropertyModel(filterCriteria, "values"));
return fragment;
}
- void addRestrictions(DetachedCriteria criteria) {
+ void addRestrictions(DetachedCriteria criteria) {
// already handled space as special case, see ItemSearch#getSelectedSpaces()
}
String getAsQueryString() {
@@ -593,57 +593,57 @@
}
void loadFromQueryString(String s, User user, Jtrac jtrac) {
setSpaceListFromQueryString(s, user, jtrac);
- }
+ }
};
//==============================================================
default:
- throw new RuntimeException("Unknown Column Heading " + name);
+ throw new RuntimeException("Unknown Column Heading " + name);
}
- }
+ }
}
-
+
private List<Expression> getAsList(Expression... expressions) {
- List<Expression> list = new ArrayList<Expression>();
+ List<Expression> list = new ArrayList<Expression>();
for(Expression e : expressions) {
list.add(e);
}
return list;
- }
-
+ }
+
private Fragment getTextFieldFragment(MarkupContainer container) {
Fragment fragment = new Fragment("fragParent", "textField", container);
TextField textField = new TextField("value", String.class);
textField.setModel(new PropertyModel(filterCriteria, "value"));
fragment.add(textField);
- fragment.add(new WebMarkupContainer("value2").setVisible(false));
+ fragment.add(new WebMarkupContainer("value2").setVisible(false));
return fragment;
}
-
- private boolean filterHasValueList() {
+
+ private boolean filterHasValueList() {
if(filterCriteria.getExpression() != null
- && filterCriteria.getValues() != null
+ && filterCriteria.getValues() != null
&& filterCriteria.getValues().size() > 0) {
return true;
}
- return false;
+ return false;
}
-
- private boolean filterHasValue() {
+
+ private boolean filterHasValue() {
Object value = filterCriteria.getValue();
if(filterCriteria.getExpression() != null && value != null && value.toString().trim().length() > 0) {
return true;
- }
+ }
return false;
- }
-
+ }
+
private String prependExpression(String s) {
return filterCriteria.getExpression().getKey() + "_" + s;
}
-
+
private String getQueryStringFromValueList() {
if(!filterHasValueList()) {
return null;
- }
+ }
String temp = "";
for(Object o : filterCriteria.getValues()) {
if(temp.length() > 0) {
@@ -651,19 +651,19 @@
}
temp = temp + o;
}
- return prependExpression(temp);
+ return prependExpression(temp);
}
-
- private String getQueryStringFromValue(Class clazz) {
+
+ private String getQueryStringFromValue(Class clazz) {
if(!filterHasValue()) {
return null;
- }
- String temp = "";
+ }
+ String temp = "";
if(clazz.equals(Date.class)) {
temp = DateUtils.format((Date) filterCriteria.getValue(), true);
if(filterCriteria.getValue2() != null) {
temp = temp + "_" + DateUtils.format((Date) filterCriteria.getValue2(), true);
- }
+ }
} else {
temp = filterCriteria.getValue() + "";
if(filterCriteria.getValue2() != null) {
@@ -672,12 +672,12 @@
}
return prependExpression(temp);
}
-
+
// TODO refactor code duplication
private String getQueryStringFromUserList() {
if(!filterHasValueList()) {
return null;
- }
+ }
String temp = "";
for(User u : (List<User>) filterCriteria.getValues()) {
if(temp.length() > 0) {
@@ -685,14 +685,14 @@
}
temp = temp + u.getId();
}
- return prependExpression(temp);
- }
-
+ return prependExpression(temp);
+ }
+
// TODO refactor code duplication
private String getQueryStringFromSpaceList() {
if(!filterHasValueList()) {
return null;
- }
+ }
String temp = "";
for(Space s : (List<Space>) filterCriteria.getValues()) {
if(temp.length() > 0) {
@@ -700,9 +700,9 @@
}
temp = temp + s.getId();
}
- return prependExpression(temp);
- }
-
+ return prependExpression(temp);
+ }
+
private List<String> setExpressionAndGetRemainingTokens(String s) {
String [] tokens = s.split("_");
filterCriteria.setExpression(FilterCriteria.convertToExpression(tokens[0]));
@@ -709,49 +709,49 @@
List<String> remainingTokens = new ArrayList<String>();
// ignore first token, this has been parsed as Expression above
for(int i = 1; i < tokens.length; i++ ) {
- remainingTokens.add(tokens[i]);
+ remainingTokens.add(tokens[i]);
}
return remainingTokens;
- }
-
- private void setValueListFromQueryString(String raw) {
- filterCriteria.setValues(setExpressionAndGetRemainingTokens(raw));
}
-
+
+ private void setValueListFromQueryString(String raw) {
+ filterCriteria.setValues(setExpressionAndGetRemainingTokens(raw));
+ }
+
// TODO refactor with more methods in filtercriteria
- private void setValueFromQueryString(String raw, Class clazz) {
+ private void setValueFromQueryString(String raw, Class clazz) {
List<String> tokens = setExpressionAndGetRemainingTokens(raw);
String v1 = tokens.get(0);
- String v2 = tokens.size() > 1 ? tokens.get(1) : null;
+ String v2 = tokens.size() > 1 ? tokens.get(1) : null;
if(clazz.equals(Double.class)) {
- filterCriteria.setValue(new Double(v1));
+ filterCriteria.setValue(Double.valueOf(v1));
if(v2 != null) {
- filterCriteria.setValue2(new Double(v2));
+ filterCriteria.setValue2(Double.valueOf(v2));
}
} else if(clazz.equals(Date.class)) {
filterCriteria.setValue(DateUtils.convert(v1));
if(v2 != null) {
filterCriteria.setValue2(DateUtils.convert(v2));
- }
+ }
} else { // String
filterCriteria.setValue(v1);
if(v2 != null) {
filterCriteria.setValue2(v2);
- }
+ }
}
-
+
}
-
+
private void setUserListFromQueryString(String raw, Jtrac jtrac) {
- List<String> tokens = setExpressionAndGetRemainingTokens(raw);
+ List<String> tokens = setExpressionAndGetRemainingTokens(raw);
List<User> users = jtrac.findUsersWhereIdIn(getAsListOfLong(tokens));
- filterCriteria.setValues(users);
- }
-
+ filterCriteria.setValues(users);
+ }
+
private void setSpaceListFromQueryString(String raw, User user, Jtrac jtrac) {
- List<String> tokens = setExpressionAndGetRemainingTokens(raw);
+ List<String> tokens = setExpressionAndGetRemainingTokens(raw);
List<Space> temp = jtrac.findSpacesWhereIdIn(getAsListOfLong(tokens));
- // for security, prevent URL spoofing to show spaces not allocated to user
+ // for security, prevent URL spoofing to show spaces not allocated to user
List<Space> spaces = new ArrayList<Space>();
for(Space s : temp) {
if(user.isAllocatedToSpace(s.getId())) {
@@ -758,28 +758,28 @@
spaces.add(s);
}
}
- filterCriteria.setValues(spaces);
- }
-
+ filterCriteria.setValues(spaces);
+ }
+
private void setStatusListFromQueryString(String raw) {
- List<String> tokens = setExpressionAndGetRemainingTokens(raw);
+ List<String> tokens = setExpressionAndGetRemainingTokens(raw);
List<Integer> statuses = new ArrayList<Integer>();
for(String s : tokens) {
- statuses.add(new Integer(s));
+ statuses.add(Integer.valueOf(s));
}
- filterCriteria.setValues(statuses);
- }
-
- private List<Long> getAsListOfLong(List<String> tokens) {
+ filterCriteria.setValues(statuses);
+ }
+
+ private List<Long> getAsListOfLong(List<String> tokens) {
List<Long> ids = new ArrayList<Long>();
for(String s : tokens) {
- ids.add(new Long(s));
- }
+ ids.add(Long.valueOf(s));
+ }
return ids;
}
-
+
/* custom accessor */
- public void setName(String nameAsString) {
+ public void setName(String nameAsString) {
name = convertToName(nameAsString);
}
@@ -790,15 +790,15 @@
return name.text;
}
- //==========================================================================
-
+ //==========================================================================
+
public Name getName() {
return name;
- }
-
+ }
+
public Field getField() {
return field;
- }
+ }
public String getLabel() {
return label;
@@ -810,7 +810,7 @@
public void setFilterCriteria(FilterCriteria filterCriteria) {
this.filterCriteria = filterCriteria;
- }
+ }
public boolean isVisible() {
return visible;
@@ -819,15 +819,15 @@
public void setVisible(boolean visible) {
this.visible = visible;
}
-
+
@Override
public int hashCode() {
if(isField()) {
return field.hashCode();
- }
+ }
return name.hashCode();
}
-
+
@Override
public boolean equals(Object o) {
if (this == o) {
@@ -842,14 +842,14 @@
}
return ch.name.equals(name);
}
-
+
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
- sb.append("name [").append(name);
+ sb.append("name [").append(name);
sb.append("]; filterCriteria [").append(filterCriteria);
sb.append("]");
return sb.toString();
}
-
+
}
Modified: trunk/jtrac/src/main/java/info/jtrac/domain/ExcelFile.java
===================================================================
--- trunk/jtrac/src/main/java/info/jtrac/domain/ExcelFile.java 2023-03-24 09:07:58 UTC (rev 1471)
+++ trunk/jtrac/src/main/java/info/jtrac/domain/ExcelFile.java 2023-04-14 07:03:55 UTC (rev 1472)
@@ -20,7 +20,9 @@
import static info.jtrac.domain.ColumnHeading.Name.*;
import info.jtrac.util.DateUtils;
import info.jtrac.util.ItemUtils;
+
import java.io.InputStream;
+import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
@@ -28,65 +30,60 @@
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
-import org.apache.poi.hssf.usermodel.HSSFCell;
-import org.apache.poi.hssf.usermodel.HSSFRow;
-import org.apache.poi.hssf.usermodel.HSSFSheet;
-import org.apache.poi.hssf.usermodel.HSSFWorkbook;
-import org.apache.poi.poifs.filesystem.POIFSFileSystem;
-import org.apache.poi.ss.usermodel.CellType.*;
+
+import org.apache.poi.ss.usermodel.*;
+
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
- * Class that encapsulates an Excel Sheet / Workbook
- * and is used to process, cleanse and import contents of an
- * uploaded excel file into JTrac
+ * Class that encapsulates an Excel Sheet / Workbook and is used
+ * to process, cleanse and import contents of an uploaded excel file into JTrac
*/
-public class ExcelFile implements Serializable {
-
- private static final Logger logger = LoggerFactory.getLogger(ExcelFile.class);
-
+public class ExcelFile implements Serializable {
+
+ private static final Logger logger = LoggerFactory.getLogger(ExcelFile.class);
+
/**
* represents a column heading and mapping to a Space built-in / custom field
*/
- public class Column implements Serializable {
-
+ public class Column implements Serializable {
+
private String label;
- private ColumnHeading columnHeading;
-
- public Column(String label) {
+ private ColumnHeading columnHeading;
+
+ public Column(String label) {
this.label = label;
}
public String getLabel() {
return label;
- }
-
+ }
+
public void setLabel(String label) {
this.label = label;
- }
-
+ }
+
public void setColumnHeading(ColumnHeading columnHeading) {
this.columnHeading = columnHeading;
- }
-
+ }
+
public ColumnHeading getColumnHeading() {
return columnHeading;
- }
-
+ }
+
public Column getClone() {
Column column = new Column(label);
column.setColumnHeading(columnHeading);
return column;
}
-
}
-
+
/**
* represents a cell value, acts as object holder
- */
+ */
public class Cell implements Serializable {
-
+
private Object value;
// internal key value for cells mapped to drop downs
private Object key;
@@ -98,7 +95,7 @@
private boolean isEmpty() {
return value == null || value.toString().trim().length() == 0;
}
-
+
public boolean isValid(ColumnHeading ch) {
if(ch.isField()) {
switch(ch.getField().getName().getType()) {
@@ -109,13 +106,13 @@
return true;
}
break;
- case 4:
+ case 4:
if(value == null || value instanceof Double) {
return true;
}
break;
case 5:
- return true;
+ return true;
case 6:
if(value == null || value instanceof Date) {
return true;
@@ -122,7 +119,7 @@
}
break;
}
-
+
} else {
switch(ch.getName()) {
case SUMMARY:
@@ -152,7 +149,7 @@
}
return false;
}
-
+
public void setValue(Object value) {
this.value = value;
}
@@ -159,8 +156,8 @@
public Object getValue() {
return value;
- }
-
+ }
+
public void setKey(Object key) {
this.key = key;
}
@@ -167,8 +164,8 @@
public Object getKey() {
return key;
- }
-
+ }
+
public String getValueAsString() {
if (value == null) {
return "";
@@ -181,18 +178,17 @@
}
return value.toString();
}
-
+
public Cell getClone() {
Cell cell = new Cell(value);
cell.setKey(key);
return cell;
}
-
}
-
+
//==========================================================================
// grid data
-
+
private List<Column> columns;
private List<List<Cell>> rows;
@@ -203,10 +199,10 @@
public List<Column> getColumns() {
return columns;
}
-
+
//==========================================================================
// form binding
-
+
private List<Integer> selectedColumns = new ArrayList<Integer>();
private List<Integer> selectedRows = new ArrayList<Integer>();
@@ -216,7 +212,7 @@
public void setSelectedColumns(List<Integer> selectedColumns) {
this.selectedColumns = selectedColumns;
- }
+ }
public List<Integer> getSelectedRows() {
return selectedRows;
@@ -225,18 +221,18 @@
public void setSelectedRows(List<Integer> selectedRows) {
this.selectedRows = selectedRows;
}
-
+
//==========================================================================
// operations
-
+
public boolean isColumnSelected() {
return selectedColumns.size() > 0;
}
-
+
public boolean isRowSelected() {
return selectedRows.size() > 0;
- }
-
+ }
+
public Column getFirstSelectedColumn() {
if(selectedColumns.size() == 0) {
return null;
@@ -244,20 +240,20 @@
int index = selectedColumns.get(0);
return columns.get(index);
}
-
+
public List<Cell> getFirstSelectedRow() {
if(selectedRows.size() == 0) {
return null;
}
int index = selectedRows.get(0);
- return rows.get(index);
+ return rows.get(index);
}
-
+
public void clearSelected() {
selectedColumns = new ArrayList<Integer>();
selectedRows = new ArrayList<Integer>();
- }
-
+ }
+
public List<ColumnHeading> getMappedColumnHeadings() {
List<ColumnHeading> list = new ArrayList<ColumnHeading>();
for(Column c : columns) {
@@ -267,7 +263,7 @@
}
return list;
}
-
+
public ColumnHeading getDuplicatedColumnHeadings() {
Set<ColumnHeading> set = new HashSet<ColumnHeading>();
for(ColumnHeading ch : getMappedColumnHeadings()) {
@@ -278,13 +274,13 @@
}
return null;
}
-
+
public List<ColumnHeading> getUnMappedColumnHeadings() {
// status will default to Open
// timestamp will default to now
// custom field mandatory check will be ignored if any
// the following 4 are the only MANDATORY fields for import
- Set<ColumnHeading> set = new HashSet<ColumnHeading>();
+ Set<ColumnHeading> set = new HashSet<ColumnHeading>();
ColumnHeading summary = new ColumnHeading(Name.SUMMARY);
ColumnHeading detail = new ColumnHeading(Name.DETAIL);
ColumnHeading loggedBy = new ColumnHeading(Name.LOGGED_BY);
@@ -296,7 +292,7 @@
set.removeAll(getMappedColumnHeadings());
return new ArrayList(set);
}
-
+
public List<Cell> getColumnCells(int index) {
List<Cell> list = new ArrayList<Cell>(rows.size());
for(List<Cell> rowCells : rows) {
@@ -304,15 +300,15 @@
}
return list;
}
-
+
public List<Cell> getColumnCellsCloned(int index) {
List<Cell> list = new ArrayList<Cell>(rows.size());
for(List<Cell> rowCells : rows) {
list.add(rowCells.get(index).getClone());
}
- return list;
+ return list;
}
-
+
public void setColumnCells(int index, List<Cell> columnCells) {
int count = 0;
for(List<Cell> rowCells : rows) {
@@ -320,7 +316,7 @@
count++;
}
}
-
+
public List<Cell> getRowCellsCloned(int index) {
List<Cell> list = new ArrayList<Cell>(columns.size());
List<Cell> rowCells = rows.get(index);
@@ -329,11 +325,11 @@
}
return list;
}
-
+
public void setRowCells(int index, List<Cell> rowCells) {
rows.set(index, rowCells);
}
-
+
public List<String> getColumnDistinctCellValues(int index) {
Set<String> set = new TreeSet<String>();
for(List<Cell> rowCells : rows) {
@@ -341,7 +337,7 @@
}
return new ArrayList(set);
}
-
+
public List<Item> getAsItems(Space s) {
List<Item> items = new ArrayList<Item>(rows.size());
for(List<Cell> rowCells : rows) {
@@ -353,7 +349,7 @@
continue;
}
Cell cell = rowCells.get(i);
- if(ch.isField()) {
+ if(ch.isField()) {
Field field = ch.getField();
if(field.isDropDownType()) {
if(cell.key != null) {
@@ -364,19 +360,19 @@
item.setValue(field.getName(), cell.value);
}
}
- } else {
+ } else {
switch(ch.getName()) {
- // next 4 are the only MANDATORY fields in import
- case SUMMARY:
+ // next 4 are the only MANDATORY fields in import
+ case SUMMARY:
item.setSummary(cell.value.toString());
break;
- case DETAIL:
+ case DETAIL:
item.setDetail(cell.value.toString());
break;
- case LOGGED_BY:
+ case LOGGED_BY:
item.setLoggedBy((User) cell.key);
break;
- case ASSIGNED_TO:
+ case ASSIGNED_TO:
item.setAssignedTo((User) cell.key);
break;
case STATUS:
@@ -391,7 +387,7 @@
}
break;
}
- }
+ }
}
// if no status, assume Open
if(item.getStatus() == null) {
@@ -398,46 +394,48 @@
item.setStatus(State.OPEN);
}
items.add(item);
- }
+ }
return items;
}
-
+
//==========================================================================
// edits
-
+
public void deleteSelectedRowsAndColumns() {
- int cursor = 0;
+ int cursor = 0;
for(int i : selectedRows) {
rows.remove(i - cursor);
cursor++;
- }
- cursor = 0;
+ }
+ cursor = 0;
for(int i : selectedColumns) {
columns.remove(i - cursor);
- for(List<Cell> cells : rows) {
+ for(List<Cell> cells : rows) {
cells.remove(i - cursor);
}
cursor++;
- }
+ }
}
-
+
public void convertSelectedColumnsToDate() {
// could not find a better way to convert excel number to date
- HSSFWorkbook wb = new HSSFWorkbook();
- HSSFSheet sheet = wb.createSheet();
- HSSFRow row = sheet.createRow(0);
- HSSFCell cell = row.createCell((short) 0);
- for(int i : selectedColumns) {
- for(List<Cell> cells : rows) {
- Cell c = cells.get(i);
- if (c != null && c.value instanceof Double) {
- cell.setCellValue((Double) c.value);
- c.value = cell.getDateCellValue();
- }
- }
- }
- }
-
+ try {
+ Workbook wb = WorkbookFactory.create(false);
+ Sheet sheet = wb.createSheet();
+ Row row = sheet.createRow(0);
+ org.apache.poi.ss.usermodel.Cell cell = row.createCell((short) 0);
+ for(int i : selectedColumns) {
+ for(List<Cell> cells : rows) {
+ Cell c = cells.get(i);
+ if (c != null && c.value instanceof Double) {
+ cell.setCellValue((Double) c.value);
+ c.value = cell.getDateCellValue();
+ }
+ }
+ }
+ } catch (IOException ioex) { /* shouldn't happen */ }
+ }
+
public void concatenateSelectedColumns() {
List<Cell> list = new ArrayList<Cell>(rows.size());
for(List<Cell> rowCells : rows) {
@@ -447,18 +445,18 @@
for(int i : selectedColumns) {
int rowIndex = 0;
for(List<Cell> cells : rows) {
- Cell c = cells.get(i);
+ Cell c = cells.get(i);
if (c != null) {
- String s = (String) list.get(rowIndex).value;
+ String s = (String) list.get(rowIndex).value;
if (s == null) {
- s = (String) c.value;
+ s = (String) c.value;
} else {
s += "\n\n" + c.value;
- }
+ }
list.set(rowIndex, new Cell(s));
}
rowIndex++;
- }
+ }
}
// update the first column
int rowIndex = 0;
@@ -467,24 +465,24 @@
rowIndex++;
}
}
-
+
public void extractSummaryFromSelectedColumn() {
- int first = selectedColumns.get(0);
+ int first = selectedColumns.get(0);
for(List<Cell> cells : rows) {
- Cell c = cells.get(first);
+ Cell c = cells.get(first);
if (c != null && c.value != null) {
String s = c.value.toString();
if (s.length() > 80) {
s = s.substring(0, 80);
}
- cells.add(first, new Cell(s));
+ cells.add(first, new Cell(s));
} else {
cells.add(first, new Cell(null));
- }
- }
- columns.add(first, new Column("---"));
+ }
+ }
+ columns.add(first, new Column("---"));
}
-
+
public void duplicateSelectedColumn() {
int first = selectedColumns.get(0);
for(List<Cell> cells : rows) {
@@ -498,21 +496,19 @@
}
columns.add(first, new Column("---"));
}
-
- //==========================================================================
-
+
+ //==========================================================================
+
public ExcelFile(InputStream is) {
- POIFSFileSystem fs = null;
- HSSFWorkbook wb = null;
+ Workbook wb = null;
try {
- fs = new POIFSFileSystem(is);
- wb = new HSSFWorkbook(fs);
+ wb = WorkbookFactory.create(is);
} catch (Exception e) {
throw new RuntimeException(e);
- }
- HSSFSheet sheet = wb.getSheetAt(0);
- HSSFRow r = null;
- HSSFCell c = null;
+ }
+ Sheet sheet = wb.getSheetAt(0);
+ Row r = null;
+ org.apache.poi.ss.usermodel.Cell c = null;
int row = 0;
int col = 0;
columns = new ArrayList<Column>();
@@ -519,10 +515,10 @@
//========================== HEADER ====================================
// column headings are important, this routine assumes that the first
// row is a header row and that reaching an empty cell means end of data
- r = sheet.getRow(row);
- while(true) {
+ r = sheet.getRow(row);
+ while(true) {
c = r.getCell((short) col);
- if (c == null) {
+ if (c == null) {
break;
}
String value = c.getStringCellValue();
@@ -536,7 +532,7 @@
//============================ DATA ====================================
rows = new ArrayList<List<Cell>>();
while(true) {
- row++;
+ row++;
r = sheet.getRow(row);
if (r == null) {
break;
@@ -551,7 +547,7 @@
value = c.getStringCellValue(); break;
case NUMERIC :
// value = c.getDateCellValue();
- value = c.getNumericCellValue();
+ value = c.getNumericCellValue();
break;
case BLANK :
break;
@@ -570,5 +566,5 @@
rows.add(rowData);
}
}
-
+
}
Modified: trunk/jtrac/src/main/java/info/jtrac/domain/Field.java
===================================================================
--- trunk/jtrac/src/main/java/info/jtrac/domain/Field.java 2023-03-24 09:07:58 UTC (rev 1471)
+++ trunk/jtrac/src/main/java/info/jtrac/domain/Field.java 2023-04-14 07:03:55 UTC (rev 1472)
@@ -1,12 +1,12 @@
/*
* Copyright 2002-2005 the original author or authors.
- *
+ *
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -34,15 +34,15 @@
* that represent each of the custom fields that may be
* used within an item
*/
-public class Field implements Serializable {
-
+public class Field implements Serializable {
+
private Name name;
private String label;
private boolean optional;
- private Map<String, String> options;
-
+ private Map<String, String> options;
+
private static final Map<String, Name> NAMES_MAP;
-
+
// set up a static Map to resolve a String to our Field.Name enum value
static {
NAMES_MAP = new HashMap<String, Name>();
@@ -50,7 +50,7 @@
NAMES_MAP.put(n.text, n);
}
}
-
+
/**
* Resolve a String to a valid enum value for Field.Name
*/
@@ -61,7 +61,7 @@
}
return n;
}
-
+
/**
* test if a given string is a valid field name
*/
@@ -74,55 +74,55 @@
* world - e.g. the XML representation of the metadata that is
* persisted to the database
*/
- public enum Name {
- SEVERITY (1, "severity"),
+ public enum Name {
+ SEVERITY (1, "severity"),
PRIORITY (2, "priority"),
- CUS_INT_01 (3, "cusInt01"),
- CUS_INT_02 (3, "cusInt02"),
- CUS_INT_03 (3, "cusInt03"),
- CUS_INT_04 (3, "cusInt04"),
+ CUS_INT_01 (3, "cusInt01"),
+ CUS_INT_02 (3, "cusInt02"),
+ CUS_INT_03 (3, "cusInt03"),
+ CUS_INT_04 (3, "cusInt04"),
CUS_INT_05 (3, "cusInt05"),
- CUS_INT_06 (3, "cusInt06"),
- CUS_INT_07 (3, "cusInt07"),
- CUS_INT_08 (3, "cusInt08"),
- CUS_INT_09 (3, "cusInt09"),
- CUS_INT_10 (3, "cusInt10"),
- CUS_DBL_01 (4, "cusDbl01"),
- CUS_DBL_02 (4, "cusDbl02"),
+ CUS_INT_06 (3, "cusInt06"),
+ CUS_INT_07 (3, "cusInt07"),
+ CUS_INT_08 (3, "cusInt08"),
+ CUS_INT_09 (3, "cusInt09"),
+ CUS_INT_10 (3, "cusInt10"),
+ CUS_DBL_01 (4, "cusDbl01"),
+ CUS_DBL_02 (4, "cusDbl02"),
CUS_DBL_03 (4, "cusDbl03"),
- CUS_STR_01 (5, "cusStr01"),
- CUS_STR_02 (5, "cusStr02"),
- CUS_STR_03 (5, "cusStr03"),
- CUS_STR_04 (5, "cusStr04"),
+ CUS_STR_01 (5, "cusStr01"),
+ CUS_STR_02 (5, "cusStr02"),
+ CUS_STR_03 (5, "cusStr03"),
+ CUS_STR_04 (5, "cusStr04"),
CUS_STR_05 (5, "cusStr05"),
- CUS_TIM_01 (6, "cusTim01"),
- CUS_TIM_02 (6, "cusTim02"),
+ CUS_TIM_01 (6, "cusTim01"),
+ CUS_TIM_02 (6, "cusTim02"),
CUS_TIM_03 (6, "cusTim03");
-
+
private final int type;
private final String text;
-
+
Name(int type, String text) {
this.type = type;
this.text = text;
- }
-
+ }
+
public int getType() {
...
[truncated message content] |
|
From: <udi...@us...> - 2023-03-24 09:07:59
|
Revision: 1471
http://sourceforge.net/p/j-trac/code/1471
Author: udittmer
Date: 2023-03-24 09:07:58 +0000 (Fri, 24 Mar 2023)
Log Message:
-----------
update dependencies, fix #169
Modified Paths:
--------------
trunk/jtrac/pom.xml
trunk/jtrac/src/main/java/info/jtrac/wiki/HTMLRenderer.java
trunk/jtrac/src/main/java/info/jtrac/wiki/Utils.java
trunk/jtrac/src/test/java/info/jtrac/htmlunit/BasicTest.java
Modified: trunk/jtrac/pom.xml
===================================================================
--- trunk/jtrac/pom.xml 2023-02-23 08:35:24 UTC (rev 1470)
+++ trunk/jtrac/pom.xml 2023-03-24 09:07:58 UTC (rev 1471)
@@ -4,7 +4,7 @@
<groupId>info.jtrac</groupId>
<artifactId>jtrac</artifactId>
<packaging>war</packaging>
- <version>2.3.0</version>
+ <version>2.3.1</version>
<name>JTrac</name>
<description>
JTrac is a generic issue-tracking web-application that can be easily customized by adding custom fields
@@ -65,9 +65,9 @@
<scope>test</scope>
</dependency>
<dependency>
- <groupId>net.sourceforge.htmlunit</groupId>
+ <groupId>org.htmlunit</groupId>
<artifactId>htmlunit</artifactId>
- <version>2.70.0</version>
+ <version>3.0.0</version>
<scope>test</scope>
</dependency>
<dependency>
@@ -479,7 +479,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
- <version>3.10.1</version>
+ <version>3.11.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
@@ -506,7 +506,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
- <version>3.0.0-M8</version>
+ <version>3.0.0</version>
<configuration>
<excludes>
<exclude>info/jtrac/test/**</exclude>
@@ -530,7 +530,7 @@
<timestamp>${maven.build.timestamp}</timestamp>
<maven.build.timestamp.format>yyyy-MM-dd HH:mm z</maven.build.timestamp.format>
<commonmark.version>0.21.0</commonmark.version>
- <log4j2.version>2.19.0</log4j2.version>
- <slf4j.version>2.0.6</slf4j.version>
+ <log4j2.version>2.20.0</log4j2.version>
+ <slf4j.version>2.0.7</slf4j.version>
</properties>
</project>
Modified: trunk/jtrac/src/main/java/info/jtrac/wiki/HTMLRenderer.java
===================================================================
--- trunk/jtrac/src/main/java/info/jtrac/wiki/HTMLRenderer.java 2023-02-23 08:35:24 UTC (rev 1470)
+++ trunk/jtrac/src/main/java/info/jtrac/wiki/HTMLRenderer.java 2023-03-24 09:07:58 UTC (rev 1471)
@@ -97,9 +97,6 @@
} catch (PatternSyntaxException psex) {
logger.error("Can't construct regular expression - " + psex.getMessage());
}
- } else if (mode.startsWith("view")) {
- // dollar signs lead to errors in the regexps
- content = content.replace("$", "$");
}
Map<String,String> tokens = new HashMap<>();
Modified: trunk/jtrac/src/main/java/info/jtrac/wiki/Utils.java
===================================================================
--- trunk/jtrac/src/main/java/info/jtrac/wiki/Utils.java 2023-02-23 08:35:24 UTC (rev 1470)
+++ trunk/jtrac/src/main/java/info/jtrac/wiki/Utils.java 2023-03-24 09:07:58 UTC (rev 1471)
@@ -188,36 +188,5 @@
return sb.toString();
}
-
- /** This method runs about 20 times faster than java.lang.String.toLowerCase
- * (and doesn't waste any storage when the result is equal to the input).
- * Warning: Don't use this method when your default locale is Turkey.
- * java.lang.String.toLowerCase is slow because (a) it uses a
- * StringBuffer (which has synchronized methods), (b) it initializes
- * the StringBuffer to the default size, and (c) it gets the default
- * locale every time to test for name equal to "tr".
- * @author Peter Norvig (www.norvig.com) **/
-
- public static String toLowerCase (String str) {
- if (str == null) return null;
- int len = str.length();
- int different = -1;
- for (int i = len-1; i >= 0; i--) {
- char ch = str.charAt(i);
- if (Character.toLowerCase(ch) != ch) {
- different = i;
- break;
- }
- }
- if (different == -1) {
- return str;
- } else {
- char[] chars = new char[len];
- str.getChars(0, len, chars, 0);
- for (int j = different; j >= 0; j--)
- chars[j] = Character.toLowerCase(chars[j]);
- return new String(chars);
- }
- }
}
Modified: trunk/jtrac/src/test/java/info/jtrac/htmlunit/BasicTest.java
===================================================================
--- trunk/jtrac/src/test/java/info/jtrac/htmlunit/BasicTest.java 2023-02-23 08:35:24 UTC (rev 1470)
+++ trunk/jtrac/src/test/java/info/jtrac/htmlunit/BasicTest.java 2023-03-24 09:07:58 UTC (rev 1471)
@@ -5,8 +5,8 @@
import org.junit.*;
import org.junit.runners.MethodSorters;
-import com.gargoylesoftware.htmlunit.*;
-import com.gargoylesoftware.htmlunit.html.*;
+import org.htmlunit.*;
+import org.htmlunit.html.*;
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class BasicTest {
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <udi...@us...> - 2023-02-23 08:35:28
|
Revision: 1470
http://sourceforge.net/p/j-trac/code/1470
Author: udittmer
Date: 2023-02-23 08:35:24 +0000 (Thu, 23 Feb 2023)
Log Message:
-----------
JTrac 2.3.0
Added Paths:
-----------
tags/jtrac-2.3.0/
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <udi...@us...> - 2023-02-11 16:48:17
|
Revision: 1469
http://sourceforge.net/p/j-trac/code/1469
Author: udittmer
Date: 2023-02-11 16:48:15 +0000 (Sat, 11 Feb 2023)
Log Message:
-----------
adapt web unit tests for 2.3.0
Modified Paths:
--------------
trunk/jtrac/pom.xml
trunk/jtrac/src/main/java/info/jtrac/wicket/HeaderPanel.java
trunk/jtrac/src/main/java/info/jtrac/wicket/RoleAllocatePanel.java
trunk/jtrac/src/main/java/info/jtrac/wiki/WikiServlet.java
trunk/jtrac/src/test/java/info/jtrac/htmlunit/BasicTest.java
trunk/jtrac/src/test/java/info/jtrac/util/ItemUtilsTest.java
Modified: trunk/jtrac/pom.xml
===================================================================
--- trunk/jtrac/pom.xml 2023-02-11 13:18:09 UTC (rev 1468)
+++ trunk/jtrac/pom.xml 2023-02-11 16:48:15 UTC (rev 1469)
@@ -381,7 +381,6 @@
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<version>2.7.1</version>
- <!-- 2.6 and newer are built for Java 11 -->
<classifier>jdk8</classifier>
<!-- 2.x can apparently not read DBs created with 1.8
<version>1.8.0.10</version>
Modified: trunk/jtrac/src/main/java/info/jtrac/wicket/HeaderPanel.java
===================================================================
--- trunk/jtrac/src/main/java/info/jtrac/wicket/HeaderPanel.java 2023-02-11 13:18:09 UTC (rev 1468)
+++ trunk/jtrac/src/main/java/info/jtrac/wicket/HeaderPanel.java 2023-02-11 16:48:15 UTC (rev 1469)
@@ -61,7 +61,9 @@
});
String base = configMap.get("jtrac.url.base");
- if (! base.endsWith("/")) {
+ if (base == null) {
+ base = "/";
+ } else if (! base.endsWith("/")) {
base = base + "/";
}
add(new ExternalLink("wiki", base+"wiki/view"));
Modified: trunk/jtrac/src/main/java/info/jtrac/wicket/RoleAllocatePanel.java
===================================================================
--- trunk/jtrac/src/main/java/info/jtrac/wicket/RoleAllocatePanel.java 2023-02-11 13:18:09 UTC (rev 1468)
+++ trunk/jtrac/src/main/java/info/jtrac/wicket/RoleAllocatePanel.java 2023-02-11 16:48:15 UTC (rev 1469)
@@ -36,11 +36,11 @@
public void setChoices(List<String> choices) {
this.choices = choices;
}
-
+
public List<String> getSelected() {
return selected;
}
-
+
public RoleAllocatePanel(String id) {
super(id);
CheckGroup checkGroup = new CheckGroup("checkGroup", new PropertyModel(this, "selected"));
Modified: trunk/jtrac/src/main/java/info/jtrac/wiki/WikiServlet.java
===================================================================
--- trunk/jtrac/src/main/java/info/jtrac/wiki/WikiServlet.java 2023-02-11 13:18:09 UTC (rev 1468)
+++ trunk/jtrac/src/main/java/info/jtrac/wiki/WikiServlet.java 2023-02-11 16:48:15 UTC (rev 1469)
@@ -135,7 +135,9 @@
jtrac = (Jtrac) applicationContext.getBean("jtrac");
String baseDir = jtrac.getJtracHome();
baseUrl = jtrac.loadConfig("jtrac.url.base");
- if (! baseUrl.endsWith("/"))
+ if (baseUrl == null) {
+ baseUrl = "/";
+ } else if (! baseUrl.endsWith("/"))
baseUrl = baseUrl + "/";
policy = new Policy(new File(baseDir));
Modified: trunk/jtrac/src/test/java/info/jtrac/htmlunit/BasicTest.java
===================================================================
--- trunk/jtrac/src/test/java/info/jtrac/htmlunit/BasicTest.java 2023-02-11 13:18:09 UTC (rev 1468)
+++ trunk/jtrac/src/test/java/info/jtrac/htmlunit/BasicTest.java 2023-02-11 16:48:15 UTC (rev 1469)
@@ -49,8 +49,9 @@
WebAssert.assertTextPresent(page, "Space Details");
((HtmlElement) page.getElementByName("space.name")).type("Test Space");
((HtmlElement) page.getElementByName("space.prefixCode")).type("TEST");
+ ((HtmlCheckBoxInput) page.getFirstByXPath("//input[@name='space.isActive']")).click();
page = ((HtmlElement) page.getFirstByXPath("//input[@value='Next']")).click();
- WebAssert.assertTextPresent(page, "Custom Fields for Space:");
+ WebAssert.assertTextPresent(page, "Custom Fields for Space");
page = ((HtmlElement) page.getFirstByXPath("//input[@value='Next']")).click();
WebAssert.assertTextPresent(page, "Space Roles");
page = ((HtmlElement) page.getFirstByXPath("//input[@value='Save']")).click();
@@ -111,7 +112,7 @@
page = ((HtmlElement) page.getFirstByXPath("//a[text()[normalize-space(.) = 'OPTIONS']]")).click();
WebAssert.assertTextPresent(page, "Options Menu");
page = ((HtmlElement) page.getFirstByXPath("//a[text()[normalize-space(.) = 'Configure Links']]")).click();
- WebAssert.assertTextPresent(page, "Links configuration");
+ WebAssert.assertTextPresent(page, "Link configuration");
page = ((HtmlElement) page.getFirstByXPath("//a[text()[normalize-space(.) = 'Create a new link']]")).click();
WebAssert.assertTextPresent(page, "Link details");
((HtmlElement) page.getElementByName("name")).type("Test Link");
@@ -129,7 +130,20 @@
}
@Test
- public void test_J_Logout() throws Exception {
+ public void test_J_Wiki() throws IOException {
+ page = webClient.getPage("http://localhost:8888/wiki/view");
+ WebAssert.assertTitleEquals(page, "Home Page");
+ page = ((HtmlElement) page.getFirstByXPath("//a[text()[normalize-space(.) = 'SandBox']]")).click();
+ WebAssert.assertTitleEquals(page, "Sand Box");
+ ((HtmlElement) page.getElementByName("q")).type("qweqwe");
+ page = ((HtmlElement) page.getFirstByXPath("//input[@value='Search']")).click();
+ WebAssert.assertTextPresent(page, "No results for");
+ page = ((HtmlElement) page.getFirstByXPath("//a[text()[normalize-space(.) = 'Dashboard']]")).click();
+ WebAssert.assertTitleEquals(page, "JTrac");
+ }
+
+ @Test
+ public void test_K_Logout() throws Exception {
page = ((HtmlElement) page.getFirstByXPath("//a[text()[normalize-space(.) = 'LOGOUT']]")).click();
WebAssert.assertTextPresent(page, "Logout Successful");
}
Modified: trunk/jtrac/src/test/java/info/jtrac/util/ItemUtilsTest.java
===================================================================
--- trunk/jtrac/src/test/java/info/jtrac/util/ItemUtilsTest.java 2023-02-11 13:18:09 UTC (rev 1468)
+++ trunk/jtrac/src/test/java/info/jtrac/util/ItemUtilsTest.java 2023-02-11 16:48:15 UTC (rev 1469)
@@ -21,11 +21,11 @@
public void testMarkdown() {
Assert.assertEquals(null, ItemUtils.renderMarkdown(null));
Assert.assertEquals("", ItemUtils.renderMarkdown(""));
- Assert.assertEquals("<p>Hello World</p>\n", ItemUtils.renderMarkdown("Hello World"));
- Assert.assertEquals("<p><em>Hello</em> <strong>World</strong></p>\n", ItemUtils.renderMarkdown("*Hello* **World**"));
- Assert.assertEquals("<h1>Hello World</h1>\n", ItemUtils.renderMarkdown("# Hello World"));
- Assert.assertEquals("<h2>Hello World</h2>\n", ItemUtils.renderMarkdown("## Hello World"));
- Assert.assertEquals("<blockquote>\n<p>Hello World</p>\n</blockquote>\n", ItemUtils.renderMarkdown("> Hello World"));
+ Assert.assertEquals("<p>Hello World</p>", ItemUtils.renderMarkdown("Hello World"));
+ Assert.assertEquals("<p><em>Hello</em> <strong>World</strong></p>", ItemUtils.renderMarkdown("*Hello* **World**"));
+ Assert.assertEquals("<h1>Hello World</h1>", ItemUtils.renderMarkdown("# Hello World"));
+ Assert.assertEquals("<h2>Hello World</h2>", ItemUtils.renderMarkdown("## Hello World"));
+ Assert.assertEquals("<blockquote>\n<p>Hello World</p>\n</blockquote>", ItemUtils.renderMarkdown("> Hello World"));
}
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <udi...@us...> - 2023-02-11 13:18:16
|
Revision: 1468
http://sourceforge.net/p/j-trac/code/1468
Author: udittmer
Date: 2023-02-11 13:18:09 +0000 (Sat, 11 Feb 2023)
Log Message:
-----------
dependency updates, documentation updates, small code improvements
Modified Paths:
--------------
trunk/jtrac/doc/src/index.xml
trunk/jtrac/doc/styles/fopdf.xsl
trunk/jtrac/doc/styles/html.xsl
trunk/jtrac/doc/styles/html_chunk.xsl
trunk/jtrac/pom.xml
trunk/jtrac/src/main/java/info/jtrac/domain/StoredSearch.java
trunk/jtrac/src/main/java/info/jtrac/wicket/ItemFormPage.html
trunk/jtrac/src/main/java/info/jtrac/wicket/ItemListPanel.java
trunk/jtrac/src/main/java/info/jtrac/wicket/StoredSearchFormPage.java
trunk/jtrac/src/main/java/info/jtrac/wiki/ClassicToHTMLFilter.java
trunk/jtrac/src/test/java/info/jtrac/domain/RoleTest.java
Modified: trunk/jtrac/doc/src/index.xml
===================================================================
--- trunk/jtrac/doc/src/index.xml 2023-01-04 14:25:59 UTC (rev 1467)
+++ trunk/jtrac/doc/src/index.xml 2023-02-11 13:18:09 UTC (rev 1468)
@@ -5,7 +5,7 @@
<bookinfo>
<title>JTrac</title>
<subtitle>User / Developer Guide</subtitle>
- <releaseinfo>2.3</releaseinfo>
+ <releaseinfo>2.3.0</releaseinfo>
<authorgroup>
<author>
<firstname>Peter</firstname>
@@ -169,16 +169,18 @@
</sect1>
<sect1 id="introduction-releasenotes-2_3">
- <title>Release Notes: Version 2.3</title>
+ <title>Release Notes: Version 2.3.0</title>
<para>
- There is a new database attribute in the User table in 2.3 (named prettyDates).
+ There are a couple of new database attributes in the User table in 2.3.0.
Instructions on how to upgrade are available in the "<link linkend="upgrading">upgrading</link>" section of this document.
</para>
<para>
- There where a number of new features, changes and bugfixes:
+ The release contains a number of new features, changes and bugfixes:
<itemizedlist>
<listitem>
- <para>The main new feature is an integrated wiki.</para>
+ <para>The main new feature is an integrated wiki. Documentation for that can be found
+ <ulink url="https://sourceforge.net/p/j-trac/wiki/WikiDocumentation/">on this SourceForge page</ulink>
+ </para>
</listitem>
<listitem>
<para>Pretty dates are now a user option instead of a system-wide option.</para>
@@ -187,8 +189,13 @@
<para><ulink url="https://sourceforge.net/p/j-trac/feature-requests/179/">New option not to allow comments on closed tickets.</ulink></para>
</listitem>
<listitem>
- <para>A few bugs were fixed, and a number of dependencies updated.</para>
+ <para><ulink url="https://sourceforge.net/p/j-trac/feature-requests/186/">New option to add and show additional information about a user</ulink>
+ in the "assign to" and "notify by email" menus. This is most useful when there are many users in an organization.
+ </para>
</listitem>
+ <listitem>
+ <para>Various bugs were fixed, and a number of dependencies updated.</para>
+ </listitem>
</itemizedlist>
</para>
<para>
Modified: trunk/jtrac/doc/styles/fopdf.xsl
===================================================================
--- trunk/jtrac/doc/styles/fopdf.xsl 2023-01-04 14:25:59 UTC (rev 1467)
+++ trunk/jtrac/doc/styles/fopdf.xsl 2023-02-11 13:18:09 UTC (rev 1468)
@@ -1,7 +1,6 @@
<?xml version="1.0"?>
<!--
-
This is the XSL FO (PDF) stylesheet for the JTrac reference
documentation. It is adapted from the one used by the Spring Framework team.
We thank and credit the Spring Framework development and documentation team.
@@ -9,13 +8,11 @@
http://springframework.cvs.sourceforge.net/springframework/spring/docs/reference/styles/
The Spring team in turn credits Christian Bauer of the Hibernate project
- team for writing the original stylesheet upon which this one
- is based.
-
+ team for writing the original stylesheet upon which this one is based.
-->
<!DOCTYPE xsl:stylesheet [
- <!ENTITY db_xsl_path "http://docbook.sourceforge.net/release/xsl/current/">
+ <!ENTITY db_xsl_path "https://docbook.sourceforge.net/release/xsl/current/">
<!ENTITY admon_gfx_path "../images/admons/">
<!ENTITY copyright "©">
]>
Modified: trunk/jtrac/doc/styles/html.xsl
===================================================================
--- trunk/jtrac/doc/styles/html.xsl 2023-01-04 14:25:59 UTC (rev 1467)
+++ trunk/jtrac/doc/styles/html.xsl 2023-02-11 13:18:09 UTC (rev 1468)
@@ -1,7 +1,5 @@
<?xml version="1.0"?>
-
<!--
-
This is the XSL HTML configuration file for the JTrac
documentation. It is adapted from the one used by the Spring Framework team.
We thank and credit the Spring Framework development and documentation team.
@@ -9,12 +7,11 @@
http://springframework.cvs.sourceforge.net/springframework/spring/docs/reference/styles/
The Spring team in turn credits Christian Bauer of the Hibernate project
- team for writing the original stylesheet upon which this one
- is based.
-
+ team for writing the original stylesheet upon which this one is based.
-->
+
<!DOCTYPE xsl:stylesheet [
- <!ENTITY db_xsl_path "http://docbook.sourceforge.net/release/xsl/current/">
+ <!ENTITY db_xsl_path "https://docbook.sourceforge.net/release/xsl/current/">
<!ENTITY callout_gfx_path "../images/callouts/">
<!ENTITY admon_gfx_path "../images/admons/">
]>
Modified: trunk/jtrac/doc/styles/html_chunk.xsl
===================================================================
--- trunk/jtrac/doc/styles/html_chunk.xsl 2023-01-04 14:25:59 UTC (rev 1467)
+++ trunk/jtrac/doc/styles/html_chunk.xsl 2023-02-11 13:18:09 UTC (rev 1468)
@@ -1,21 +1,17 @@
<?xml version="1.0" ?>
-
<!--
-
This is the XSL HTML configuration file for the Spring
documentation. It is adapted from the one used by the Spring Framework team.
We thank and credit the Spring Framework development and documentation team.
-
+
http://springframework.cvs.sourceforge.net/springframework/spring/docs/reference/styles/
-
+
The Spring team in turn credits Christian Bauer of the Hibernate project
- team for writing the original stylesheet upon which this one
- is based.
-
+ team for writing the original stylesheet upon which this one is based.
-->
<!DOCTYPE xsl:stylesheet [
- <!ENTITY db_xsl_path "http://docbook.sourceforge.net/release/xsl/current/">
+ <!ENTITY db_xsl_path "https://docbook.sourceforge.net/release/xsl/current/">
<!ENTITY callout_gfx_path "../images/callouts/">
<!ENTITY admon_gfx_path "../images/admons/">
]>
Modified: trunk/jtrac/pom.xml
===================================================================
--- trunk/jtrac/pom.xml 2023-01-04 14:25:59 UTC (rev 1467)
+++ trunk/jtrac/pom.xml 2023-02-11 13:18:09 UTC (rev 1468)
@@ -67,7 +67,7 @@
<dependency>
<groupId>net.sourceforge.htmlunit</groupId>
<artifactId>htmlunit</artifactId>
- <version>2.68.0</version>
+ <version>2.70.0</version>
<scope>test</scope>
</dependency>
<dependency>
@@ -142,7 +142,7 @@
<dependency>
<groupId>org.jfree</groupId>
<artifactId>jfreechart</artifactId>
- <version>1.5.3</version>
+ <version>1.5.4</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
@@ -505,22 +505,9 @@
</executions>
</plugin>
<plugin>
- <groupId>org.eclipse.jetty</groupId>
- <artifactId>maven-jetty-plugin</artifactId>
- <version>9.4.49.v20220914</version>
- <configuration>
- <systemProperties>
- <systemProperty>
- <name>jtrac.home</name>
- <value>home</value>
- </systemProperty>
- </systemProperties>
- </configuration>
- </plugin>
- <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
- <version>3.0.0-M7</version>
+ <version>3.0.0-M8</version>
<configuration>
<excludes>
<exclude>info/jtrac/test/**</exclude>
Modified: trunk/jtrac/src/main/java/info/jtrac/domain/StoredSearch.java
===================================================================
--- trunk/jtrac/src/main/java/info/jtrac/domain/StoredSearch.java 2023-01-04 14:25:59 UTC (rev 1467)
+++ trunk/jtrac/src/main/java/info/jtrac/domain/StoredSearch.java 2023-02-11 13:18:09 UTC (rev 1468)
@@ -47,8 +47,8 @@
}
public Long getId() {
- if(id == null){
- return new Long(0);
+ if (id == null) {
+ return Long.valueOf(0);
}
return id;
}
Modified: trunk/jtrac/src/main/java/info/jtrac/wicket/ItemFormPage.html
===================================================================
--- trunk/jtrac/src/main/java/info/jtrac/wicket/ItemFormPage.html 2023-01-04 14:25:59 UTC (rev 1467)
+++ trunk/jtrac/src/main/java/info/jtrac/wicket/ItemFormPage.html 2023-02-11 13:18:09 UTC (rev 1468)
@@ -13,7 +13,7 @@
<font color="red">*</font>
</td>
<td>
- <input wicket:id="summary" style="width: 60em" maxlength="255"/>
+ <input wicket:id="summary" style="width: 90%" maxlength="255"/>
<input type="submit" wicket:id="delete" wicket:message="value:delete"/>
</td>
</tr>
Modified: trunk/jtrac/src/main/java/info/jtrac/wicket/ItemListPanel.java
===================================================================
--- trunk/jtrac/src/main/java/info/jtrac/wicket/ItemListPanel.java 2023-01-04 14:25:59 UTC (rev 1467)
+++ trunk/jtrac/src/main/java/info/jtrac/wicket/ItemListPanel.java 2023-02-11 13:18:09 UTC (rev 1468)
@@ -126,7 +126,7 @@
List<Integer> pageNumbers = new ArrayList<Integer>(pageCount);
for(int i = 0; i < pageCount; i++) {
- pageNumbers.add(new Integer(i));
+ pageNumbers.add(Integer.valueOf(i));
}
ListView pages = new ListView("pages", pageNumbers) {
Modified: trunk/jtrac/src/main/java/info/jtrac/wicket/StoredSearchFormPage.java
===================================================================
--- trunk/jtrac/src/main/java/info/jtrac/wicket/StoredSearchFormPage.java 2023-01-04 14:25:59 UTC (rev 1467)
+++ trunk/jtrac/src/main/java/info/jtrac/wicket/StoredSearchFormPage.java 2023-02-11 13:18:09 UTC (rev 1468)
@@ -63,7 +63,7 @@
}
public StoredSearchForm (String pageId) {
- this(pageId, new String(), new String(), false, new Long(-1));
+ this(pageId, new String(), new String(), false, Long.valueOf(-1));
}
public StoredSearchForm (String pageId, final String name, final String query, final boolean newWindow, final Long idSearchLink) {
@@ -130,7 +130,7 @@
@Override
protected void onSubmit() {
Long idLink = null;
- if(!this.idSearchLink.equals(new Long(-1))){
+ if(!this.idSearchLink.equals(Long.valueOf(-1))){
idLink = this.idSearchLink;
}
Modified: trunk/jtrac/src/main/java/info/jtrac/wiki/ClassicToHTMLFilter.java
===================================================================
--- trunk/jtrac/src/main/java/info/jtrac/wiki/ClassicToHTMLFilter.java 2023-01-04 14:25:59 UTC (rev 1467)
+++ trunk/jtrac/src/main/java/info/jtrac/wiki/ClassicToHTMLFilter.java 2023-02-11 13:18:09 UTC (rev 1468)
@@ -17,6 +17,8 @@
import org.commonmark.ext.gfm.strikethrough.StrikethroughExtension;
import org.commonmark.ext.gfm.tables.TablesExtension;
import org.commonmark.ext.ins.InsExtension;
+//import com.novocode.ornate.commonmark.SubscriptExtension;
+//import com.novocode.ornate.commonmark.SuperscriptExtension;
public class ClassicToHTMLFilter
{
@@ -39,6 +41,9 @@
extensions.add(StrikethroughExtension.create());
extensions.add(InsExtension.create());
extensions.add(TablesExtension.create());
+// extensions.add(SubscriptExtension.create());
+// extensions.add(SuperscriptExtension.create());
+
parser = Parser.builder()
.extensions(extensions)
.build();
Modified: trunk/jtrac/src/test/java/info/jtrac/domain/RoleTest.java
===================================================================
--- trunk/jtrac/src/test/java/info/jtrac/domain/RoleTest.java 2023-01-04 14:25:59 UTC (rev 1467)
+++ trunk/jtrac/src/test/java/info/jtrac/domain/RoleTest.java 2023-02-11 13:18:09 UTC (rev 1468)
@@ -30,8 +30,8 @@
Assert.assertTrue(s1.getTransitions().contains(2));
Assert.assertTrue(s1.getTransitions().contains(3));
Assert.assertEquals(2 , s1.getFields().size());
- Assert.assertEquals(new Integer(1), s1.getFields().get(Field.Name.CUS_INT_01));
- Assert.assertEquals(new Integer(2), s1.getFields().get(Field.Name.CUS_INT_02));
+ Assert.assertEquals(Integer.valueOf(1), s1.getFields().get(Field.Name.CUS_INT_01));
+ Assert.assertEquals(Integer.valueOf(2), s1.getFields().get(Field.Name.CUS_INT_02));
}
@Test
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <udi...@us...> - 2023-01-04 14:26:00
|
Revision: 1467
http://sourceforge.net/p/j-trac/code/1467
Author: udittmer
Date: 2023-01-04 14:25:59 +0000 (Wed, 04 Jan 2023)
Log Message:
-----------
updated dependencies, #186
Modified Paths:
--------------
trunk/jtrac/pom.xml
trunk/jtrac/src/main/java/info/jtrac/util/UserUtils.java
trunk/jtrac/src/main/java/info/jtrac/wicket/ItemFormPage.html
trunk/jtrac/src/main/java/info/jtrac/wicket/ItemViewFormPanel.java
Modified: trunk/jtrac/pom.xml
===================================================================
--- trunk/jtrac/pom.xml 2022-12-15 17:27:55 UTC (rev 1466)
+++ trunk/jtrac/pom.xml 2023-01-04 14:25:59 UTC (rev 1467)
@@ -67,7 +67,7 @@
<dependency>
<groupId>net.sourceforge.htmlunit</groupId>
<artifactId>htmlunit</artifactId>
- <version>2.67.0</version>
+ <version>2.68.0</version>
<scope>test</scope>
</dependency>
<dependency>
@@ -545,6 +545,6 @@
<maven.build.timestamp.format>yyyy-MM-dd HH:mm z</maven.build.timestamp.format>
<commonmark.version>0.21.0</commonmark.version>
<log4j2.version>2.19.0</log4j2.version>
- <slf4j.version>2.0.5</slf4j.version>
+ <slf4j.version>2.0.6</slf4j.version>
</properties>
</project>
Modified: trunk/jtrac/src/main/java/info/jtrac/util/UserUtils.java
===================================================================
--- trunk/jtrac/src/main/java/info/jtrac/util/UserUtils.java 2022-12-15 17:27:55 UTC (rev 1466)
+++ trunk/jtrac/src/main/java/info/jtrac/util/UserUtils.java 2023-01-04 14:25:59 UTC (rev 1467)
@@ -99,7 +99,15 @@
*/
public static void addInfoToName (User user) {
if (StringUtils.hasText(user.getInfo())) {
- user.setName(String.format("%s (%s)", user.getName(), user.getInfo()));
+ user.setName(getNameWithInfo(user));
}
}
+
+ public static String getNameWithInfo (User user) {
+ if (StringUtils.hasText(user.getInfo())) {
+ return String.format("%s (%s)", user.getName(), user.getInfo());
+ } else {
+ return user.getName();
+ }
+ }
}
Modified: trunk/jtrac/src/main/java/info/jtrac/wicket/ItemFormPage.html
===================================================================
--- trunk/jtrac/src/main/java/info/jtrac/wicket/ItemFormPage.html 2022-12-15 17:27:55 UTC (rev 1466)
+++ trunk/jtrac/src/main/java/info/jtrac/wicket/ItemFormPage.html 2023-01-04 14:25:59 UTC (rev 1467)
@@ -13,7 +13,7 @@
<font color="red">*</font>
</td>
<td>
- <input wicket:id="summary" style="width:49.7em" maxlength="255"/>
+ <input wicket:id="summary" style="width: 60em" maxlength="255"/>
<input type="submit" wicket:id="delete" wicket:message="value:delete"/>
</td>
</tr>
Modified: trunk/jtrac/src/main/java/info/jtrac/wicket/ItemViewFormPanel.java
===================================================================
--- trunk/jtrac/src/main/java/info/jtrac/wicket/ItemViewFormPanel.java 2022-12-15 17:27:55 UTC (rev 1466)
+++ trunk/jtrac/src/main/java/info/jtrac/wicket/ItemViewFormPanel.java 2023-01-04 14:25:59 UTC (rev 1467)
@@ -143,7 +143,7 @@
List<ItemUser> choices = UserUtils.convertToItemUserList(userSpaceRoles);
ListMultipleChoice itemUsers = new JtracCheckBoxMultipleChoice("itemUsers", choices, new IChoiceRenderer() {
public Object getDisplayValue(Object o) {
- return ((ItemUser) o).getUser().getName();
+ return UserUtils.getNameWithInfo(((ItemUser) o).getUser());
}
public String getIdValue(Object o, int i) {
return ((ItemUser) o).getUser().getId() + "";
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <udi...@us...> - 2022-12-15 17:27:57
|
Revision: 1466
http://sourceforge.net/p/j-trac/code/1466
Author: udittmer
Date: 2022-12-15 17:27:55 +0000 (Thu, 15 Dec 2022)
Log Message:
-----------
don't line-break other cells if a comment is really long
Modified Paths:
--------------
trunk/jtrac/src/main/java/info/jtrac/wicket/ItemViewPanel.html
Modified: trunk/jtrac/src/main/java/info/jtrac/wicket/ItemViewPanel.html
===================================================================
--- trunk/jtrac/src/main/java/info/jtrac/wicket/ItemViewPanel.html 2022-12-13 08:45:26 UTC (rev 1465)
+++ trunk/jtrac/src/main/java/info/jtrac/wicket/ItemViewPanel.html 2022-12-15 17:27:55 UTC (rev 1466)
@@ -48,20 +48,20 @@
<table class="jtrac jtrac-view" width="100%">
<tr>
- <th><wicket:message key="item_view.loggedBy"/></th>
- <th><wicket:message key="item_view.status"/></th>
- <th><wicket:message key="item_view.assignedTo"/></th>
+ <th style="white-space: nowrap;"><wicket:message key="item_view.loggedBy"/></th>
+ <th style="white-space: nowrap;"><wicket:message key="item_view.status"/></th>
+ <th style="white-space: nowrap;"><wicket:message key="item_view.assignedTo"/></th>
<th><wicket:message key="item_view.comment"/></th>
- <th><wicket:message key="item_view.timeStamp"/></th>
+ <th style="white-space: nowrap;"><wicket:message key="item_view.timeStamp"/></th>
<th wicket:id="labels"><span wicket:id="label"></span></th>
</tr>
<tr wicket:id="history" valign="top">
- <td wicket:id="loggedBy"></td>
- <td wicket:id="status"></td>
- <td wicket:id="assignedTo"></td>
+ <td wicket:id="loggedBy" style="white-space: nowrap;"></td>
+ <td wicket:id="status" style="white-space: nowrap;"></td>
+ <td wicket:id="assignedTo" style="white-space: nowrap;"></td>
<td wicket:id="comment"><span wicket:id="attachment" style="padding-right:0.5em"></span><span wicket:id="comment"></span></td>
- <td wicket:id="timeStamp"></td>
+ <td wicket:id="timeStamp" style="white-space: nowrap;"></td>
<td wicket:id="fields"><span wicket:id="field"></span></td>
</tr>
</table>
-</wicket:panel>
\ No newline at end of file
+</wicket:panel>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|