Merged V3.4-BUG-FIX to HEAD

28741: Merged DEV/TEMPORARY to V3.4-BUG-FIX
      28740: ALF-8993: IMAP favourite star is not visible if imap is enabled via JMX
         The org.alfresco.repo.imap.ImapService interface was extended to expose getEnabled() and made the webscript to call ImapService.getEnabled().
   28742: ALF-8801: Broken French strings
   28745: ALF-6470: French string correction
   28746: ALF-5607: Installer deletion of directories on installation cancel.
   28756: ALF-9211: Install fails when path selected that contains accents or double byte chars (e.g. Japanese)
   - Fix from Bitrock
   - Not internationalized yet
   28758: Merged DEV to V3.4-BUG-FIX
      28743: ALF-8029: JSON returned by some audit queries not valide
             Quote user in query.get.json.ftl if it has value.
   28761: Merged DEV to V3.4-BUG-FIX
      28739: ALF-9123 : "Content URL conversion failed" error being thrown
      Note: Actually changed the implementation but the principle remains.
      In future, use a thread-safe boolean e.g. AtomicBoolean to carry data
      around about the running state; don't use a class member variable as
      it can be manipulated by competing threads, etc.
   28762: Fix ALF-9376: Typo in Version2Model
   28763: Merged DEV to V3.4-BUG-FIX
      28754: ALF-8461: Invalid property cm:source (cm:copiedFrom) causes not be become sys:incomplete
             Configurable property called 'propertiesToIgnore' was added to IncompleteNodeTagger,and configured to ignore "cm:source".
      Merge note: I fixed the stored 'propertiesToIgnore' to be a Set<QName> to prevent unnecessary conversions
   28764: ALF-9036: Fix NPE on XForm session timeout
   28765: ALF-9211: Externalized new installer message
   - Needs localizing
   28789: ALF-9407: Single quote characters in messages containing {} need to be doubled


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@28793 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Dave Ward
2011-07-04 15:00:07 +00:00
parent db4592d439
commit 5e195760fc
16 changed files with 111 additions and 60 deletions

View File

@@ -87,7 +87,7 @@ office.message.results_max.after=items
office.message.no_results=No results found office.message.no_results=No results found
office.message.confirm_delete=Are you sure you want to delete this document? office.message.confirm_delete=Are you sure you want to delete this document?
office.message.enter_workflow_details=Enter new workflow details below office.message.enter_workflow_details=Enter new workflow details below
office.message.workflow_action_complete=Workflow action '{0}' completed. office.message.workflow_action_complete=Workflow action ''{0}'' completed.
# Properties # Properties
office.property.title=Title office.property.title=Title

View File

@@ -87,7 +87,7 @@ office.message.results_max.after=Elemente
office.message.no_results=Keine Ergebnisse gefunden office.message.no_results=Keine Ergebnisse gefunden
office.message.confirm_delete=Wollen Sie dieses Dokument wirklich l\u00f6schen? office.message.confirm_delete=Wollen Sie dieses Dokument wirklich l\u00f6schen?
office.message.enter_workflow_details=Neue Details f\u00fcr den Workflow untenstehend eingeben office.message.enter_workflow_details=Neue Details f\u00fcr den Workflow untenstehend eingeben
office.message.workflow_action_complete=Aktion '{0}' des Workflows abgeschlossen. office.message.workflow_action_complete=Aktion ''{0}'' des Workflows abgeschlossen.
# Properties # Properties
office.property.title=Titel office.property.title=Titel

View File

@@ -87,7 +87,7 @@ office.message.results_max.after=elementos
office.message.no_results=Ning\u00fan resultado encontrado office.message.no_results=Ning\u00fan resultado encontrado
office.message.confirm_delete=\u00bfEst\u00e1 seguro de que quiere eliminar este documento? office.message.confirm_delete=\u00bfEst\u00e1 seguro de que quiere eliminar este documento?
office.message.enter_workflow_details=Introduzca los datos del nuevo flujo de trabajo a continuaci\u00f3n office.message.enter_workflow_details=Introduzca los datos del nuevo flujo de trabajo a continuaci\u00f3n
office.message.workflow_action_complete=Acci\u00f3n '{0}' de flujo de trabajo completada. office.message.workflow_action_complete=Acci\u00f3n ''{0}'' de flujo de trabajo completada.
# Properties # Properties
office.property.title=T\u00edtulo office.property.title=T\u00edtulo

View File

@@ -87,7 +87,7 @@ office.message.results_max.after=elementi
office.message.no_results=Nessun risultato trovato office.message.no_results=Nessun risultato trovato
office.message.confirm_delete=Eliminare questo documento? office.message.confirm_delete=Eliminare questo documento?
office.message.enter_workflow_details=Immettere i dettagli del nuovo workflow di seguito office.message.enter_workflow_details=Immettere i dettagli del nuovo workflow di seguito
office.message.workflow_action_complete=L'azione del workflow '{0}' \u00e8 stata completata. office.message.workflow_action_complete=L''azione del workflow ''{0}'' \u00e8 stata completata.
# Properties # Properties
office.property.title=Titolo office.property.title=Titolo

View File

@@ -87,7 +87,7 @@ office.message.results_max.after=\u30A2\u30A4\u30C6\u30E0
office.message.no_results=\u691C\u7D22\u7D50\u679C\u304C\u3042\u308A\u307E\u305B\u3093\u3002 office.message.no_results=\u691C\u7D22\u7D50\u679C\u304C\u3042\u308A\u307E\u305B\u3093\u3002
office.message.confirm_delete=\u3053\u306E\u6587\u66F8\u3092\u524A\u9664\u3057\u307E\u3059\u304B\uFF1F office.message.confirm_delete=\u3053\u306E\u6587\u66F8\u3092\u524A\u9664\u3057\u307E\u3059\u304B\uFF1F
office.message.enter_workflow_details=\u65B0\u3057\u3044\u30EF\u30FC\u30AF\u30D5\u30ED\u30FC\u8A73\u7D30\u3092\u4E0B\u306B\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044 office.message.enter_workflow_details=\u65B0\u3057\u3044\u30EF\u30FC\u30AF\u30D5\u30ED\u30FC\u8A73\u7D30\u3092\u4E0B\u306B\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044
office.message.workflow_action_complete=\u30EF\u30FC\u30AF\u30D5\u30ED\u30FC\u30FB\u30A2\u30AF\u30B7\u30E7\u30F3'{0}'\u304C\u5B8C\u4E86\u3057\u307E\u3057\u305F\u3002 office.message.workflow_action_complete=\u30EF\u30FC\u30AF\u30D5\u30ED\u30FC\u30FB\u30A2\u30AF\u30B7\u30E7\u30F3''{0}''\u304C\u5B8C\u4E86\u3057\u307E\u3057\u305F\u3002
# Properties # Properties
office.property.title=\u30BF\u30A4\u30C8\u30EB office.property.title=\u30BF\u30A4\u30C8\u30EB

View File

@@ -64,8 +64,8 @@ portlets.mytaskspanel.manage_task=G\u00e9rer la t\u00e2che
portlets.mytaskspanel.workflow_action=Action de workflow portlets.mytaskspanel.workflow_action=Action de workflow
portlets.mytaskspanel.workflow_complited=achev\u00e9 portlets.mytaskspanel.workflow_complited=achev\u00e9
portlets.checkin.item_working_copy_of_name_has_been_checked_in=L'\u00e9l\u00e9ment \\\"Copie de travail de {0}\\\" a \u00e9t\u00e9 lib\u00e9r\u00e9. portlets.checkin.item_working_copy_of_name_has_been_checked_in=L''\u00e9l\u00e9ment \\\"Copie de travail de {0}\\\" a \u00e9t\u00e9 lib\u00e9r\u00e9.
portlets.checkout.working_copy_for_the_checked_out=Une copie de travail pour l'\u00e9l\u00e9ment r\u00e9serv\u00e9 \\\"Copie de travail de {0}\\\" a \u00e9t\u00e9 cr\u00e9\u00e9e. portlets.checkout.working_copy_for_the_checked_out=Une copie de travail pour l''\u00e9l\u00e9ment r\u00e9serv\u00e9 \\\"Copie de travail de {0}\\\" a \u00e9t\u00e9 cr\u00e9\u00e9e.
task_summary_panel.close=Fermer task_summary_panel.close=Fermer
task_summary_panel.type=Type task_summary_panel.type=Type

View File

@@ -64,8 +64,8 @@ portlets.mytaskspanel.manage_task=Gestisci compito
portlets.mytaskspanel.workflow_action=Azione workflow portlets.mytaskspanel.workflow_action=Azione workflow
portlets.mytaskspanel.workflow_complited=completato portlets.mytaskspanel.workflow_complited=completato
portlets.checkin.item_working_copy_of_name_has_been_checked_in=\u00c8 stato eseguito il Check In dell'elemento \\\"Copia di lavoro di {0}\\\". portlets.checkin.item_working_copy_of_name_has_been_checked_in=\u00c8 stato eseguito il Check In dell''elemento \\\"Copia di lavoro di {0}\\\".
portlets.checkout.working_copy_for_the_checked_out=\u00c8 stata creata una copia di lavoro per l'elemento sottoposto a Check Out \\\"Copia di lavoro di {0}\\\". portlets.checkout.working_copy_for_the_checked_out=\u00c8 stata creata una copia di lavoro per l''elemento sottoposto a Check Out \\\"Copia di lavoro di {0}\\\".
task_summary_panel.close=Chiudi task_summary_panel.close=Chiudi
task_summary_panel.type=Tipo task_summary_panel.type=Tipo

View File

@@ -1821,8 +1821,8 @@ current_repo_people=Current Alfresco People
toggle_options=Toggle Options toggle_options=Toggle Options
no_results=No results no_results=No results
of=of of=of
failed_gen_url=Failed to generate url for search engine '{0}'.\\n\\nThis is probably caused by missing required parameters, check the template url for the search engine. failed_gen_url=Failed to generate url for search engine ''{0}''.\\n\\nThis is probably caused by missing required parameters, check the template url for the search engine.
failed_search=Failed to retrieve search results for '{0}' failed_search=Failed to retrieve search results for ''{0}''
# UI Page Titles # UI Page Titles
title_about=About Alfresco title_about=About Alfresco

View File

@@ -1821,8 +1821,8 @@ current_repo_people=Aktuelle Alfresco Mitarbeiter
toggle_options=Optionen umschalten toggle_options=Optionen umschalten
no_results=Keine Ergebnisse. no_results=Keine Ergebnisse.
of=von of=von
failed_gen_url=F\u00fcr Suchmaschine '{0}' konnte Url nicht erzeugt werden. \\n\\nDas wird vermutlich durch fehlende erforderliche Parameter verursacht. Mustervorlagen-Url f\u00fcr Suchmaschine pr\u00fcfen. failed_gen_url=F\u00fcr Suchmaschine ''{0}'' konnte Url nicht erzeugt werden. \\n\\nDas wird vermutlich durch fehlende erforderliche Parameter verursacht. Mustervorlagen-Url f\u00fcr Suchmaschine pr\u00fcfen.
failed_search=Konnte Suchergebnisse f\u00fcr '{0}' nicht abrufen. failed_search=Konnte Suchergebnisse f\u00fcr ''{0}'' nicht abrufen.
# UI Page Titles # UI Page Titles
title_about=\u00dcber Alfresco title_about=\u00dcber Alfresco

View File

@@ -1821,8 +1821,8 @@ current_repo_people=Personas actuales de Alfresco
toggle_options=Activar/desactivar opciones toggle_options=Activar/desactivar opciones
no_results=Sin resultados no_results=Sin resultados
of=de of=de
failed_gen_url=No se pudo generar url para el motor de b\u00fasqueda para '{0}'.\\n\\nEsto se debe probablemente a que faltan par\u00e1metros requeridos, verifique el motor de b\u00fasqueda en la direcci\u00f3n URL de la plantilla. failed_gen_url=No se pudo generar url para el motor de b\u00fasqueda para ''{0}''.\\n\\nEsto se debe probablemente a que faltan par\u00e1metros requeridos, verifique el motor de b\u00fasqueda en la direcci\u00f3n URL de la plantilla.
failed_search=No se pudieron recuperar los resultados de b\u00fasqueda para '{0}' failed_search=No se pudieron recuperar los resultados de b\u00fasqueda para ''{0}''
# UI Page Titles # UI Page Titles
title_about=Acerca de Alfresco title_about=Acerca de Alfresco

View File

@@ -207,7 +207,7 @@ has_following_categories_space=Les cat\u00e9gories suivantes sont d\u00e9finies
moved=d\u00e9plac\u00e9 moved=d\u00e9plac\u00e9
copied=copi\u00e9 copied=copi\u00e9
clipboard=Presse-papiers clipboard=Presse-papiers
node_added_clipboard=Un \u00e9l\u00e9ment a \u00e9t\u00e9 ajout\u00e9 au presse-papier. Il y a actuellement {0} \u00e9l\u00e9ment(s) dans le presse-papier. Pour coller tous les \u00e9l\u00e9ments collect\u00e9s, se placer dans l'Espace d\u00e9sir\u00e9 puis dans le menu ''Actions Suppl\u00e9mentaires'' s\u00e9lectionner ''Tout coller''. node_added_clipboard=Un \u00e9l\u00e9ment a \u00e9t\u00e9 ajout\u00e9 au presse-papier. Il y a actuellement {0} \u00e9l\u00e9ment(s) dans le presse-papier. Pour coller tous les \u00e9l\u00e9ments collect\u00e9s, se placer dans l''Espace d\u00e9sir\u00e9 puis dans le menu ''Actions Suppl\u00e9mentaires'' s\u00e9lectionner ''Tout coller''.
recent_spaces=Espaces r\u00e9cents recent_spaces=Espaces r\u00e9cents
shortcuts=Raccourcis shortcuts=Raccourcis
company_home=Espace racine company_home=Espace racine
@@ -1821,8 +1821,8 @@ current_repo_people=Personnes du serveur Alfresco courant
toggle_options=Basculer les Options toggle_options=Basculer les Options
no_results=Pas de r\u00e9sultat no_results=Pas de r\u00e9sultat
of=sur of=sur
failed_gen_url=Impossible de g\u00e9n\u00e9rer d''URL pour le moteur de recherche '{0}'.\\n\\nCela est probablement d\u00fb \u00e0 des param\u00e8tres requis manquants. V\u00e9rifiez l''URL mod\u00e8le pour le moteur de recherche. failed_gen_url=Impossible de g\u00e9n\u00e9rer d''URL pour le moteur de recherche ''{0}''.\\n\\nCela est probablement d\u00fb \u00e0 des param\u00e8tres requis manquants. V\u00e9rifiez l''URL mod\u00e8le pour le moteur de recherche.
failed_search=\u00c9chec dans l''obtention des r\u00e9sultats de recherche de '{0}' failed_search=\u00c9chec dans l''obtention des r\u00e9sultats de recherche de ''{0}''
# UI Page Titles # UI Page Titles
title_about=A propos de Alfresco title_about=A propos de Alfresco

View File

@@ -1821,8 +1821,8 @@ current_repo_people=Persone Alfresco attuali
toggle_options=Opzioni di toggle toggle_options=Opzioni di toggle
no_results=Nessun risultato no_results=Nessun risultato
of=di of=di
failed_gen_url=Impossibile generare l''URL per il motore di ricerca '{0}'.\\n\\n\u00c8 probabile che manchino alcuni parametri richiesti. Verificare l''URL modello per il motore di ricerca. failed_gen_url=Impossibile generare l''URL per il motore di ricerca ''{0}''.\\n\\n\u00c8 probabile che manchino alcuni parametri richiesti. Verificare l''URL modello per il motore di ricerca.
failed_search=Impossibile recuperare i risultati della ricerca per '{0}' failed_search=Impossibile recuperare i risultati della ricerca per ''{0}''
# UI Page Titles # UI Page Titles
title_about=Informazioni su Alfresco title_about=Informazioni su Alfresco

View File

@@ -1014,7 +1014,7 @@ condition_is_subtype_not=\u30a2\u30a4\u30c6\u30e0\u306f ''{0}'' \u306e\u30b5\u30
condition_compare_mime_type=\u30a2\u30a4\u30c6\u30e0\u306f ''{0}'' \u306eMIME\u30bf\u30a4\u30d7\u3092\u542b\u307f\u307e\u3059\u3002 condition_compare_mime_type=\u30a2\u30a4\u30c6\u30e0\u306f ''{0}'' \u306eMIME\u30bf\u30a4\u30d7\u3092\u542b\u307f\u307e\u3059\u3002
condition_compare_mime_type_not=\u30a2\u30a4\u30c6\u30e0\u306f ''{0}'' \u306eMIME\u30bf\u30a4\u30d7\u3092\u542b\u307f\u307e\u305b\u3093\u3002 condition_compare_mime_type_not=\u30a2\u30a4\u30c6\u30e0\u306f ''{0}'' \u306eMIME\u30bf\u30a4\u30d7\u3092\u542b\u307f\u307e\u305b\u3093\u3002
condition_in_category=\u30a2\u30a4\u30c6\u30e0\u306f\u30ab\u30c6\u30b4\u30ea ''{0}'' \u306b\u5165\u3063\u3066\u3044\u307e\u3059\u3002 condition_in_category=\u30a2\u30a4\u30c6\u30e0\u306f\u30ab\u30c6\u30b4\u30ea ''{0}'' \u306b\u5165\u3063\u3066\u3044\u307e\u3059\u3002
condition_in_category_not=\u30a2\u30a4\u30c6\u30e0\u306f\u30ab\u30c6\u30b4\u30ea ''{0}'\u306b\u5165\u3063\u3066\u3044\u307e\u305b\u3093\u3002 condition_in_category_not=\u30a2\u30a4\u30c6\u30e0\u306f\u30ab\u30c6\u30b4\u30ea ''{0}''\u306b\u5165\u3063\u3066\u3044\u307e\u305b\u3093\u3002
condition_compare_property_value=''{0}'' \u3068\u30de\u30c3\u30c1\u3059\u308b\u30cd\u30fc\u30e0\u30d7\u30ed\u30d1\u30c6\u30a3 condition_compare_property_value=''{0}'' \u3068\u30de\u30c3\u30c1\u3059\u308b\u30cd\u30fc\u30e0\u30d7\u30ed\u30d1\u30c6\u30a3
condition_compare_property_value_not=''{0}'' \u3068\u30de\u30c3\u30c1\u3057\u306a\u3044\u30cd\u30fc\u30e0\u30d7\u30ed\u30d1\u30c6\u30a3 condition_compare_property_value_not=''{0}'' \u3068\u30de\u30c3\u30c1\u3057\u306a\u3044\u30cd\u30fc\u30e0\u30d7\u30ed\u30d1\u30c6\u30a3
action_add_features=\u30a2\u30b9\u30da\u30af\u30c8 ''{0}''\u306e\u8ffd\u52a0 action_add_features=\u30a2\u30b9\u30da\u30af\u30c8 ''{0}''\u306e\u8ffd\u52a0
@@ -1821,8 +1821,8 @@ current_repo_people=\u73fe\u5728\u306eAlfresco\u5229\u7528\u8005
toggle_options=\u30aa\u30d7\u30b7\u30e7\u30f3\u306e\u5207\u66ff toggle_options=\u30aa\u30d7\u30b7\u30e7\u30f3\u306e\u5207\u66ff
no_results=\u7d50\u679c\u306a\u3057 no_results=\u7d50\u679c\u306a\u3057
of=\u306e\u3000 of=\u306e\u3000
failed_gen_url=\u691c\u7d22\u30a8\u30f3\u30b8\u30f3'{0}'\u306eURL\u306e\u751f\u6210\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002\\n\\n\u5fc5\u9808\u30d1\u30e9\u30fc\u30e1\u30fc\u30bf\u304c\u4e0d\u8db3\u3057\u3066\u3044\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u306e\u691c\u7d22\u30a8\u30f3\u30b8\u30f3\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8URL\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002 failed_gen_url=\u691c\u7d22\u30a8\u30f3\u30b8\u30f3''{0}''\u306eURL\u306e\u751f\u6210\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002\\n\\n\u5fc5\u9808\u30d1\u30e9\u30fc\u30e1\u30fc\u30bf\u304c\u4e0d\u8db3\u3057\u3066\u3044\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u306e\u691c\u7d22\u30a8\u30f3\u30b8\u30f3\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8URL\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002
failed_search={0}'\u306e\u691c\u7d22\u7d50\u679c\u306e\u53d6\u5f97\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002 failed_search={0}''\u306e\u691c\u7d22\u7d50\u679c\u306e\u53d6\u5f97\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002
# UI Page Titles # UI Page Titles
title_about=Alfresco\u306b\u3064\u3044\u3066 title_about=Alfresco\u306b\u3064\u3044\u3066

View File

@@ -81,7 +81,7 @@ public class AjaxServlet extends BaseServlet
// dump the request headers // dump the request headers
if (headersLogger.isDebugEnabled()) if (headersLogger.isDebugEnabled())
{ {
final Enumeration headers = request.getHeaderNames(); final Enumeration<?> headers = request.getHeaderNames();
while (headers.hasMoreElements()) while (headers.hasMoreElements())
{ {
final String name = (String)headers.nextElement(); final String name = (String)headers.nextElement();
@@ -190,9 +190,15 @@ public class AjaxServlet extends BaseServlet
{ {
msg = cause.toString(); msg = cause.toString();
} }
// ALF-9036. We need to trap incomplete sessions
// send the error if (cause instanceof IllegalStateException)
response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, msg); {
response.sendError(HttpServletResponse.SC_UNAUTHORIZED, cause.getMessage());
}
else
{
response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, msg);
}
} }
else else
{ {

View File

@@ -107,7 +107,7 @@ public class InvokeCommand extends BaseAjaxCommand
// all the objects in the session to find the bean we want. // all the objects in the session to find the bean we want.
String beanNameSuffix = "?" + variableName; String beanNameSuffix = "?" + variableName;
Enumeration enumNames = request.getSession().getAttributeNames(); Enumeration<?> enumNames = request.getSession().getAttributeNames();
while (enumNames.hasMoreElements()) while (enumNames.hasMoreElements())
{ {
String name = (String)enumNames.nextElement(); String name = (String)enumNames.nextElement();
@@ -156,35 +156,56 @@ public class InvokeCommand extends BaseAjaxCommand
public Object execute() throws Throwable public Object execute() throws Throwable
{ {
// invoke the method // invoke the method
method.invoke(beanFinal); try
return null; {
method.invoke(beanFinal);
return null;
}
// Let's prevent RuntimeExceptions being wrapped twice by unwrapping InvocationTargetExceptions
catch (InvocationTargetException e)
{
if (e.getCause() != null)
{
throw e.getCause();
}
throw e;
}
} }
}; };
txnHelper.doInTransaction(callback); txnHelper.doInTransaction(callback);
} }
catch (Throwable err) catch (EvaluationException e)
{ {
if (err instanceof EvaluationException) Throwable err = e.getCause();
if (err == null)
{ {
final Throwable cause = ((EvaluationException)err).getCause(); logger.error("Failed to execute method " + expression + ": " + e.getMessage(), e);
if (cause != null) throw e;
}
else
{
logger.error("Failed to execute method " + expression + ": " + err.getMessage(), err);
if (err instanceof RuntimeException)
{ {
err = cause; throw (RuntimeException)err;
} }
} else
else if (err instanceof InvocationTargetException) {
{ throw new AlfrescoRuntimeException("Failed to execute method " + expression + ": " + err.getMessage(), err);
final Throwable cause = ((InvocationTargetException)err).getCause();
if (cause != null)
{
err = cause;
} }
} }
}
catch (RuntimeException err)
{
logger.error("Failed to execute method " + expression + ": " + err.getMessage(), logger.error("Failed to execute method " + expression + ": " + err.getMessage(), err);
err); throw err;
throw new AlfrescoRuntimeException("Failed to execute method " + expression + }
": " + err.getMessage(), err); catch (Exception err)
{
logger.error("Failed to execute method " + expression + ": " + err.getMessage(), err);
throw new AlfrescoRuntimeException("Failed to execute method " + expression + ": " + err.getMessage(), err);
} }
// force the output back to the client // force the output back to the client

View File

@@ -166,6 +166,21 @@ public class XFormsBean implements Serializable
{ {
return this.formInstanceDataName; return this.formInstanceDataName;
} }
public Schema2XForms getSchema2XForms()
{
return this.schema2XForms;
}
public ChibaBean getChibaBean()
{
return this.chibaBean;
}
public List<XMLEvent> getEventLog()
{
return this.eventLog;
}
} }
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@@ -183,6 +198,15 @@ public class XFormsBean implements Serializable
public static String BEAN_NAME = "XFormsBean"; public static String BEAN_NAME = "XFormsBean";
public XFormsSession getXformsSession()
{
if (this.xformsSession == null)
{
throw new IllegalStateException("Incomplete user session. Please restart the form.");
}
return this.xformsSession;
}
/** /**
* @param schema2XFormsProperties the schema2XFormsProperties to set. * @param schema2XFormsProperties the schema2XFormsProperties to set.
*/ */
@@ -332,7 +356,7 @@ public class XFormsBean implements Serializable
readLock.lock(); readLock.lock();
try try
{ {
final ChibaBean chibaBean = this.xformsSession.chibaBean; final ChibaBean chibaBean = this.getXformsSession().getChibaBean();
final Node xformsDocument = chibaBean.getXMLContainer(); final Node xformsDocument = chibaBean.getXMLContainer();
XMLUtil.print(xformsDocument, out); XMLUtil.print(xformsDocument, out);
} }
@@ -358,7 +382,7 @@ public class XFormsBean implements Serializable
writeLock.lock(); writeLock.lock();
try try
{ {
final ChibaBean chibaBean = this.xformsSession.chibaBean; final ChibaBean chibaBean = this.getXformsSession().getChibaBean();
if (chibaBean.getContainer().lookup(id) instanceof Upload) if (chibaBean.getContainer().lookup(id) instanceof Upload)
{ {
@@ -397,7 +421,7 @@ public class XFormsBean implements Serializable
final int index = Integer.parseInt((String)requestParameters.get(id)); final int index = Integer.parseInt((String)requestParameters.get(id));
if (LOGGER.isDebugEnabled()) if (LOGGER.isDebugEnabled())
LOGGER.debug(this + ".setRepeatIndex(" + id + ", " + index + ")"); LOGGER.debug(this + ".setRepeatIndex(" + id + ", " + index + ")");
final ChibaBean chibaBean = this.xformsSession.chibaBean; final ChibaBean chibaBean = this.getXformsSession().getChibaBean();
chibaBean.updateRepeatIndex(id, index); chibaBean.updateRepeatIndex(id, index);
} }
final ResponseWriter out = context.getResponseWriter(); final ResponseWriter out = context.getResponseWriter();
@@ -425,7 +449,7 @@ public class XFormsBean implements Serializable
writeLock.lock(); writeLock.lock();
try try
{ {
final ChibaBean chibaBean = this.xformsSession.chibaBean; final ChibaBean chibaBean = this.getXformsSession().getChibaBean();
chibaBean.dispatch(id, DOMEventNames.ACTIVATE); chibaBean.dispatch(id, DOMEventNames.ACTIVATE);
final ResponseWriter out = context.getResponseWriter(); final ResponseWriter out = context.getResponseWriter();
@@ -452,7 +476,7 @@ public class XFormsBean implements Serializable
context.getExternalContext().getRequest(); context.getExternalContext().getRequest();
final Document result = XMLUtil.parse(request.getInputStream()); final Document result = XMLUtil.parse(request.getInputStream());
this.handleSubmit(result); this.handleSubmit(result);
final Document instanceData = this.xformsSession.getFormInstanceData(); final Document instanceData = this.getXformsSession().getFormInstanceData();
final ResponseWriter out = context.getResponseWriter(); final ResponseWriter out = context.getResponseWriter();
XMLUtil.print(instanceData, out, false); XMLUtil.print(instanceData, out, false);
out.close(); out.close();
@@ -465,7 +489,7 @@ public class XFormsBean implements Serializable
public void handleSubmit(Node result) public void handleSubmit(Node result)
{ {
final Document instanceData = this.xformsSession.getFormInstanceData(); final Document instanceData = this.getXformsSession().getFormInstanceData();
Element documentElement = instanceData.getDocumentElement(); Element documentElement = instanceData.getDocumentElement();
if (documentElement != null) if (documentElement != null)
{ {
@@ -497,16 +521,16 @@ public class XFormsBean implements Serializable
writeLock.lock(); writeLock.lock();
try try
{ {
final ChibaBean chibaBean = this.xformsSession.chibaBean; final ChibaBean chibaBean = this.getXformsSession().getChibaBean();
final RepeatItem from = (RepeatItem)chibaBean.getContainer().lookup(fromItemId); final RepeatItem from = (RepeatItem)chibaBean.getContainer().lookup(fromItemId);
if (from == null) if (from == null)
{ {
throw new NullPointerException("unable to find source repeat item " + fromItemId); throw new IllegalArgumentException("unable to find source repeat item " + fromItemId);
} }
final RepeatItem to = (RepeatItem)chibaBean.getContainer().lookup(toItemId); final RepeatItem to = (RepeatItem)chibaBean.getContainer().lookup(toItemId);
if (to == null) if (to == null)
{ {
throw new NullPointerException("unable to find destination repeat item " + toItemId); throw new IllegalArgumentException("unable to find destination repeat item " + toItemId);
} }
this.swapRepeatItems(from, to); this.swapRepeatItems(from, to);
@@ -683,7 +707,7 @@ public class XFormsBean implements Serializable
final Element eventsElement = result.createElement("events"); final Element eventsElement = result.createElement("events");
result.appendChild(eventsElement); result.appendChild(eventsElement);
for (XMLEvent xfe : this.xformsSession.eventLog) for (XMLEvent xfe : this.getXformsSession().getEventLog())
{ {
final String type = xfe.getType(); final String type = xfe.getType();
if (LOGGER.isDebugEnabled()) if (LOGGER.isDebugEnabled())
@@ -724,7 +748,7 @@ public class XFormsBean implements Serializable
LOGGER.debug("performing full revalidate"); LOGGER.debug("performing full revalidate");
try try
{ {
final Model model = this.xformsSession.chibaBean.getContainer().getDefaultModel(); final Model model = this.getXformsSession().getChibaBean().getContainer().getDefaultModel();
final Instance instance = model.getDefaultInstance(); final Instance instance = model.getDefaultInstance();
model.getValidator().validate(instance, "/", new DefaultValidatorMode()); model.getValidator().validate(instance, "/", new DefaultValidatorMode());
final Iterator<ModelItem> it = instance.iterateModelItems("/"); final Iterator<ModelItem> it = instance.iterateModelItems("/");
@@ -785,7 +809,7 @@ public class XFormsBean implements Serializable
throws FormBuilderException throws FormBuilderException
{ {
String path = null; String path = null;
if (this.xformsSession.form.isWebForm()) if (this.getXformsSession().getForm().isWebForm())
{ {
path = this.getCurrentAVMPath(); path = this.getCurrentAVMPath();
} }
@@ -812,7 +836,7 @@ public class XFormsBean implements Serializable
XFormsBean.rewriteInlineURIs(schemaDocument, path); XFormsBean.rewriteInlineURIs(schemaDocument, path);
final String rootElementName = this.xformsSession.form.getSchemaRootElementName(); final String rootElementName = this.xformsSession.form.getSchemaRootElementName();
final Pair<Document, XSModel> result = final Pair<Document, XSModel> result =
this.xformsSession.schema2XForms.buildXForm(this.xformsSession.formInstanceData, this.getXformsSession().getSchema2XForms().buildXForm(this.getXformsSession().getFormInstanceData(),
schemaDocument, schemaDocument,
rootElementName, rootElementName,
resourceBundle); resourceBundle);