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. |