Se ha producido un error al procesar la plantilla.
For "." left-hand operand: Expected a hash, but this has evaluated to a sequence (wrapper: f.t.SimpleSequence):
==> supporters  [in template "10154#10192#null" at line 98, column 36]

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign success = supporters.add(rela...  [in template "10154#10192#null" at line 98, column 17]
----
1<#--##--> 
2<#--#### Scripts--> 
3<#--##--> 
4<script type="text/javascript" src="http://sadmin.brightcove.com/js/BrightcoveExperiences.js"></script> 
5<script type="text/javascript" src="http://sadmin.brightcove.com/js/BrightcoveExperiences_all.js"></script> 
6 
7<#--##--> 
8<#--#### Incluir plantilla de configuración--> 
9<#--##--> 
10<#-- Clave de la plantilla UrlConfiguration asignada en el módulo de configuración --> 
11<#assign templateKey = coleccionesUtils.getUrlTemplateKey(groupId) /> 
12<#include templatesPath + '/' + templateKey /> 
13 
14<#--#################################--> 
15<#--#####--> 
16<#--####### Carga de clases y datos--> 
17<#--#####--> 
18<#--#################################--> 
19 
20<#--##--> 
21<#--#### Carga de servicios--> 
22<#--##--> 
23<#assign assetLinkLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetLinkLocalService")  /> 
24<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") /> 
25<#assign assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") /> 
26<#assign classNameLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.ClassNameLocalService") /> 
27<#assign assetTagLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetTagLocalService") /> 
28<#assign artworkLocalService = serviceLocator.findService("com.vass.collection.common.service.ArtWorkLocalService") /> 
29<#assign artworkArtistLocalService = serviceLocator.findService("com.vass.collection.common.service.ArtWorkArtistLocalService") /> 
30<#assign groupLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.GroupLocalService") /> 
31<#assign dlFileEntryTypeLocalService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryTypeLocalService") /> 
32<#assign dLFileEntryMetadataLocalService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryMetadataLocalService") /> 
33<#assign dlFileEntryService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryLocalService") /> 
34 
35<#--<#assign storageEngineUtil = portal.getClass().forName("com.liferay.portlet.dynamicdatamapping.storage.StorageEngineUtil").newInstance() />--> 
36<#--<#assign collectionsUtil = objectUtil("com.vass.collection.common.util.ColeccionesConfigurationUtil") />--> 
37<#assign journalArticleClassName = "com.liferay.journal.model.JournalArticle" /> 
38<#assign journalArticleClassNameId = classNameLocalService.getClassNameId(journalArticleClassName) /> 
39<#assign globalGroup = groupLocalService.getCompanyGroup(companyId) /> 
40<#assign supporters = [] /> 
41<#assign activities = [] /> 
42 
43<#--##--> 
44<#--#### Inicialización del Search Context--> 
45<#--##--> 
46<#assign searchContext = objectUtil("com.liferay.portal.kernel.search.SearchContext") /> 
47<#assign searchContext = searchContext.setCompanyId(companyId) /> 
48<#--<#assign searchContext = searchContext.setLocale(locale) />--> 
49 
50<#--##--> 
51<#--#### Inicializacion de un theme display a partir del falso theme display que viene en la falsa request--> 
52<#--##--> 
53<#--<#assign themedisplay = request.get("themeDisplay") />--> 
54<#--<#assign themeDisplay = objectUtil("com.liferay.portal.kernel.theme.ThemeDisplay") />--> 
55<#--<#assign themeDisplay = themeDisplay.setPathThemeImages(themeDisplay.getPathThemeImages()) />--> 
56<#--<#assign themeDisplay = themeDisplay.setPortalURL(themeDisplay.getURLPortal()) />--> 
57<#--<#assign themeDisplay = themeDisplay.setPathContext(themeDisplay.getPathContext()) />--> 
58<#--<#assign themeDisplay = themeDisplay.setScopeGroupId(groupId) />--> 
59 
60<#--##--> 
61<#--#### Carga de assets relacionados--> 
62<#--##--> 
63<#assign journalArticle = journalArticleLocalService.getArticle(groupId, .vars['reserved-article-id'].data) /> 
64<#assign assetEntry = assetEntryLocalService.getEntry(journalArticleClassName, journalArticle.getResourcePrimKey()) /> 
65<#assign relatedItems = assetLinkLocalService.getDirectLinks(getterUtil.getLong(assetEntry.getEntryId())) /> 
66 
67<#list relatedItems as relatedItem> 
68    <#assign relatedAsset = assetEntryLocalService.getAssetEntry(relatedItem.getEntryId2()) /> 
69    <#--## En este caso, sólo tendran que mostrarse los JournalArticles asociados. Dependiendo de la estructura ocuparán un lugar u otro.--> 
70    <#--## 1 - ACTIVIDAD: Actividades relacionadas (0..*)--> 
71    <#--## 2 - COLABORADOR: Entidad colaboradora (0..*)--> 
72    <#--## 3 - ITINERANCIA: (1..1)--> 
73    <#--## 4 - UBICACION: Está relacionado con ITINERANCIA (1..1)-->     
74    <#if relatedAsset.getClassNameId() == journalArticleClassNameId> 
75        <#assign relatedArticle = journalArticleLocalService.getLatestArticle(relatedAsset.getClassPK()) /> 
76        <#if relatedArticle?has_content> 
77            <#if relatedArticle.getStructureId() =="ITINERANCIA"> 
78                <#assign roaming = relatedArticle />             
79                <#-- ## Si existe ITINERANCIA, es necesario localizar su UBICACION--> 
80                <#-- ## Se recorren todos los AssetLinks para localizarla--> 
81                <#if roaming??> 
82                    <#assign roamingRelatedItems = assetLinkLocalService.getDirectLinks(getterUtil.getLong(relatedItem.getEntryId2())) /> 
83                    <#list roamingRelatedItems as roamingRelatedItem> 
84                        <#assign roamingRelatedAsset = assetEntryLocalService.getAssetEntry(roamingRelatedItem.getEntryId2()) /> 
85                        <#if roamingRelatedAsset.getClassNameId() == journalArticleClassNameId > 
86                            <#assign roamingRelatedArticle = journalArticleLocalService.getLatestArticle(roamingRelatedAsset.getClassPK()) /> 
87                            <#if roamingRelatedArticle?? && roamingRelatedArticle.getStructureId() == "UBICACION"> 
88                                <#assign location = roamingRelatedArticle /> 
89                            </#if> 
90                        </#if> 
91                    </#list> 
92                </#if> 
93            <#elseif relatedArticle.getStructureId() =="ACTIVIDAD"> 
94            <#-- ## Se almacena el resultado de la operación de añadir para que no lo pinte en pantalla--> 
95                <#assign success = activities.add(relatedArticle) />         
96            <#elseif relatedArticle.getStructureId() == "COLABORADOR"> 
97            <#-- ## Se almacena el resultado de la operación de añadir para que no lo pinte en pantalla--> 
98                <#assign success = supporters.add(relatedArticle)> 
99            </#if> 
100        </#if> 
101    </#if> 
102</#list> 
103 
104<#--#################################--> 
105<#--#####--> 
106<#--####### Plantilla--> 
107<#--#####--> 
108<#--#################################--> 
109<#assign node = saxReaderUtil.read(roaming.getContentByLocale("${locale}")) /> 
110<#assign roamingStartDate = node.selectSingleNode("//dynamic-element[@name='startDate']/dynamic-content").data /> 
111<#assign roamingEndDate = node.selectSingleNode("//dynamic-element[@name='endDate']/dynamic-content").data /> 
112 
113<#assign startDateCalendar = roamingStartDate?date("dd/MM/yyyy") /> 
114<#assign endDateCalendar = roamingEndDate?date("dd/MM/yyyy") /> 
115<#assign nowCalendar = .now?string["dd/MM/yyyy"]?date("dd/MM/yyyy") /> 
116 
117<#if startDateCalendar gt nowCalendar> 
118    <#assign backURL= backFutureExhibitionURL /> 
119<#elseif endDateCalendar lt nowCalendar> 
120    <#assign backURL= backOldExhibitionURL /> 
121<#else> 
122    <#assign backURL= backCurrentExhibitionURL /> 
123</#if> 
124 
125<#if backURL??> 
126    <span class="volver"> 
127        <a href="${backURL}"> <@liferay.language key="es.colecciones.back" /> </a> 
128    </span> 
129</#if> 
130 
131 
132<div class="activity detail" itemscope itemtype="http://schema.org/Event"> 
133    <h2 itemprop="name"> ${title.data} </h2> 
134    <p class="when"> 
135        <#if roamingStartDate??> 
136            <span itemprop="startDate">${roamingStartDate}</span> - 
137        </#if> 
138 
139        <#if roamingEndDate??> 
140            <span itemprop="endDate">${roamingEndDate}</span> 
141        </#if> 
142    </p> 
143 
144    <p class="where" itemprop="location" itemscope itemtype="http://schema.org/Place"> 
145        <#assign node = saxReaderUtil.read(location.getContentByLocale("${locale}")) /> 
146        <#assign locationName = node.selectSingleNode("//dynamic-element[@name='title']/dynamic-content").data /> 
147 
148        <#if locationName??> 
149            <span itemprop="name">${locationName}</span> 
150        </#if> 
151    </p> 
152 
153    <div class="info"> 
154        <div class="description" itemprop="description"> 
155            <#if desc?has_content> 
156                ${desc.getData()} 
157            </#if> 
158        </div> 
159 
160        <#if document?has_content || activities?has_content> 
161            <div class="details"> 
162                <#--## Material asociado--> 
163                <#if document?has_content> 
164                    <ul> 
165                        <#list document.siblings as doc> 
166                            <#--##Trocear url documento--> 
167                            <#assign segments = doc.getData()?split("/") /> 
168                            <#--##uuid file--> 
169                            <#if segments?size gt 1> 
170	                            <#assign item = segments[5] /> 
171	                            <#assign position = item?string?index_of("?") -1 /> 
172	                            <#assign uuid = item[0..position] /> 
173	                            <#--##Documento--> 
174	                            <#assign fileEntry = dlFileEntryService.getDLFileEntryByUuidAndGroupId(uuid, groupId) /> 
175	                            <#if fileEntry??> 
176	                                <li><a href="${doc.getData()}"><@liferay.language key="read-more" /></a></li> 
177	                            </#if> 
178	                          </#if> 
179                        </#list> 
180                    </ul> 
181                </#if> 
182 
183                <#--## Actividades relacionadas--> 
184                <#if activities?has_content> 
185                    <ul class="relatedActivities"> 
186                        <#list activities as activity> 
187                            <#assign node = saxReaderUtil.read(activity.getContentByLocale("${locale}")) /> 
188                            <#assign activityName = node.selectSingleNode("//dynamic-element[@name='title']/dynamic-content").data /> 
189                            <#assign activityUrl = "${exhibitionDetailURL}/${groupId}/${activity.getArticleId()}" /> 
190         
191                            <li><a href="${activityUrl}">${activityName}</a></li> 
192                        </#list> 
193                    </ul> 
194                </#if>                 
195            </div> 
196        </#if> 
197 
198        <#--## Entidades colaboradoras--> 
199        <#if supporters?has_content> 
200            <div class="supporters"> 
201                <h3><@liferay.language key="ca.supporters" /></h3> 
202                <ul itemscope itemtype="http://schema.org/Organization"> 
203                    <#list supporters as supporter> 
204                        <#assign node = saxReaderUtil.read($supporter.getContentByLocale("${locale}")) /> 
205                        <#assign supporterTitle = node.selectSingleNode("//dynamic-element[@name='title']/dynamic-content").data /> 
206                        <#assign supporterUrl = node.selectSingleNode("//dynamic-element[@name='url_']/dynamic-content").data /> 
207                        <#assign supporterLogo = node.selectSingleNode("//dynamic-element[@name='logo']/dynamic-content").data /> 
208                        <li> 
209                            <span class="name" itemprop="name">${supporterTitle}</span> 
210                            <a itemprop="url" href="${supporterUrl}"> 
211                                <img itemprop="image" src="${supporterLogo}" alt="${supporterTitle}" /> 
212                            </a> 
213                        </li> 
214                    </#list> 
215                </ul> 
216            </div> 
217        </#if> 
218    </div> 
219 
220    <#--##--> 
221    <#--#### Los campos video e imagen, en la estructura, son repetibles.--> 
222    <#--#### Según el diseño acordado, unicamente se muestra un video o una imagen--> 
223    <#--#### por lo que se coge el primero y se ignoran el resto--> 
224    <#--##--> 
225    <div class="media"> 
226        <#if video?has_content && video.getData() != ""> 
227            <#--##Tipo de fichero Video--> 
228            <#assign dlFileEntryType = dlFileEntryTypeLocalService.getFileEntryType(groupId,'Video') /> 
229            <#assign listDDMStructures = dlFileEntryType.getDDMStructures() /> 
230            <#--##Trocear url documento--> 
231            <#assign trozosVideo = video.getData()?split("/") /> 
232            <#--##uuid file--> 
233            <#if trozosVideo?size gt 1> 
234	            <#assign item = trozosVideo[5] /> 
235	            <#assign position = item?string?index_of("?") -1 /> 
236	            <#assign trozo = item[0..position] /> 
237	            <#--##Documento--> 
238	            <#assign fileEntry = dlFileEntryService.getDLFileEntryByUuidAndGroupId(trozo, groupId) /> 
239	            <#list listDDMStructures as item> 
240	                <#assign fileEntryMetadata = dLFileEntryMetadataLocalService.getFileEntryMetadata(item.getStructureId(), fileEntry.getFileVersion().getFileVersionId()) /> 
241	                <#assign fieldCode = coleccionesUtils.getDdmMetaFieldValue(fileEntryMetadata.getDDMStorageId(), themeDisplay, "fileId") /> 
242	            </#list> 
243	            <#-- ##Brightcove--> 
244	            <object id="<@portlet.namespace />_videoplayer" class="BrightcoveExperience"> 
245	                <param name="bgcolor" value="#FFFFFF" /> 
246	                <param name="width" value="300" /> 
247	                <param name="height" value="200" /> 
248	                <param name="playerID" value="1822475294001" /> 
249	                <param name="playerKey" value="${keyBrightcove}" /> 
250	                <param name="isVid" value="true" /> 
251	                <param name="isUI" value="true" /> 
252	                <param name="dynamicStreaming" value="true" /> 
253	                <param name="wmode" value="transparent" /> 
254	                <param name="secureConnections" value="true" /> 
255	                <param name="secureHTMLConnections" value="true" /> 
256	                <param name="@videoPlayer" value="${fieldCode}" /> 
257	            </object> 
258	         </#if> 
259        <#else> 
260            <#if image?has_content> 
261                <img itemprop="image" src="${image.getData()}&imageThumbnail=3" alt="${title.getData()}" /> 
262                <#--##Incluir pie de imagen--> 
263                <#assign array = image.getData()?split("/") /> 
264                <#-- Plantilla "Pie Foto" --> 
265                <#-- Clave de la plantilla Pie Foto asignada en el módulo de configuración --> 
266                <#assign templateKey = coleccionesUtils.captionTemplateKey(groupId) /> 
267                <#include templatesPath + '/' + templateKey /> 
268            </#if> 
269        </#if> 
270 
271        <#--##--> 
272        <#--#### Carrusel de Obras de la exposición--> 
273        <#--#### Las obras se obtienen de los tags del contenidos--> 
274        <#--#### La etiqueta se corresponde con el identificador de la obra--> 
275        <#--##--> 
276        <#assign tags = assetTagLocalService.getTagNames(journalArticleClassNameId, journalArticle.getResourcePrimKey()) /> 
277        <#if tags?has_content> 
278            <h2><@liferay.language key="ca.artworks.exhibition" /></h2> 
279            <div class="suggestion"> 
280                <a class="buttons prev" href="javascript:void(0)">left</a> 
281                <div class="viewport"> 
282                    <ul class="overview"> 
283                        <#list tags as tag> 
284                            <#--## Obra--> 
285                            <#assign artwork = artworkLocalService.getArtworkByInventoryId(groupId, companyId, tag) /> 
286                            <#--## Miniatura--> 
287                            <#assign artworkThumbnail = coleccionesUtils.getMiniatureArtworkURL(artwork, themeDisplay, request, globalGroup) /> 
288                            <#--## Artistas--> 
289                            <#assign artists = artworkArtistLocalService.getArtist(artwork.companyId, artwork.groupId, artwork.inventoryId) /> 
290                            <li itemscope itemtype="http://schema.org/CreativeWork"> 
291                                <a itemprop="url" href="${artworkDetailURL}/${artwork.inventoryId}/${coleccionesUtils.getName(artwork.getTitle(locale))}"> 
292                                    <img itemprop="image" src="${artworkThumbnail}" alt="${artwork.getTitle(locale)}"/> 
293                                </a> 
294                                <#if artists?has_content> 
295                                    <#list artists as artist> 
296                                        <div itemscope itemtype="http://schema.org/Person"> 
297                                            <p class="artist"> 
298                                                <a itemprop="url" href="${artistDetailURL}/${artist.constituentId}/${coleccionesUtils.getName(artist.getFullName())}"> 
299                                                    <span itemprop="name">${artist.getFullName()}</span> 
300                                                </a> 
301                                            </p> 
302                                        </div> 
303                                    </#list> 
304                                </#if> 
305                                <p itemprop="name" class="title"> 
306                                    <#assign artworkTitle = artwork.getTitle(locale) /> 
307                                    <#if artworkTitle??> 
308                                        <#if artworkTitle?length < 50> 
309                                            ${artworkTitle} 
310                                        <#else> 
311                                            ${artworkTitle[0..49]} ... 
312                                        </#if> 
313                                    </#if> 
314                                    <span class="date"> 
315                                        <#if artwork.getStartDate()??> 
316                                            <span itemprop="dateCreated">/ ${artwork.getStartDate()}</span> 
317                                        </#if> 
318                                        <#if artwork.getEndDate()?? && artwork.getEndDate() != artwork.getStartDate()> 
319                                            -  <span itemprop="datePublished">${artwork.getEndDate()}</span> 
320                                        </#if> 
321                                    </span> 
322                                </p> 
323                            </li> 
324                        </#list> 
325                    </ul> 
326                </div> 
327                <a class="buttons next" href="javascript:void(0)">right</a> 
328            </div> 
329        </#if> 
330    </div> 
331</div>