Errorea gertatu da txantiloia prozesatzerakoan.
Java method "net.bizkaia.bipo.gnss.service.GnssServiceImpl.getStationsData()" threw an exception when invoked on net.bizkaia.bipo.gnss.service.GnssServiceImpl object "net.bizkaia.bipo.gnss.service.GnssServiceImpl@33aff723"; see cause exception in the Java stack trace.

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign stationsData = gnssService.ge...  [in template "842907#842945#2703177" at line 6, column 1]
----
1<#-- Servicios --> 
2<#assign gnssService = serviceLocator.findService("net.bizkaia.bipo.gnss.service.GnssService")> 
3<#assign textFormatter = staticUtil["com.liferay.portal.kernel.util.TextFormatter"]> 
4 
5<#-- variables --> 
6<#assign stationsData = gnssService.getStationsData()> 
7 
8<#assign stationsMap = jsonFactoryUtil.createJSONObject() /> 
9<@liferay.silently stationsMap.put("AMUR","Amurrio") /> 
10<@liferay.silently stationsMap.put("BRZR","Barazar") /> 
11<@liferay.silently stationsMap.put("ELGE","Elgeta") /> 
12<@liferay.silently stationsMap.put("EMAZ","El Mazo") /> 
13<@liferay.silently stationsMap.put("GERN","Gernika") /> 
14<@liferay.silently stationsMap.put("IGEL","Igeldo") /> 
15<@liferay.silently stationsMap.put("ISPS","Ispaster") /> 
16<@liferay.silently stationsMap.put("KAST","Kastrexana") /> 
17<@liferay.silently stationsMap.put("LARE","Laredo") /> 
18<@liferay.silently stationsMap.put("LEMZ","Lemoiz") /> 
19<#if validator.equalsSorted([locale.getLanguage()],["es"])> 
20<#assign strCoor = "ETRS89 (ETRF2000) época 2026.0" /> 
21<@liferay.silently stationsMap.put("APBI","A.P. Bilbao") /> 
22<#else> 
23<#assign strCoor = "ETRS89 (ETRF2000) 2026.0ko garaia" /> 
24<@liferay.silently stationsMap.put("APBI","A.P. Bilbao") /> 
25</#if> 
26 
27<@liferay.silently stationsMap.put("MDPM","Medina de Pomar") /> 
28<@liferay.silently stationsMap.put("SOPU","Sopuerta") /> 
29<@liferay.silently stationsMap.put("VITO","Vitoria-Gasteiz") /> 
30 
31 
32 
33<#assign bizkaiaStations = jsonFactoryUtil.createJSONArray() /> 
34<@liferay.silently bizkaiaStations.put("BRZR") /> 
35<@liferay.silently bizkaiaStations.put("GERN") /> 
36<@liferay.silently bizkaiaStations.put("SOPU") /> 
37<@liferay.silently bizkaiaStations.put("ISPS") /> 
38<@liferay.silently bizkaiaStations.put("KAST") /> 
39<@liferay.silently bizkaiaStations.put("EMAZ") /> 
40<@liferay.silently bizkaiaStations.put("LEMZ") /> 
41<@liferay.silently bizkaiaStations.put("APBI") /> 
42 
43 
44<div class="container"> 
45 
46	<div class="row"> 
47		<div class="col-xxs-12 col-xxs-offset-0 col-xs-10 col-xs-offset-1 col-sm-10 col-sm-offset-1 col-md-10 col-md-offset-1"> 
48			<h1><span>${nombre.getData()} (${codigo.getData()})</span></h1> 
49		</div> 
50	</div> 
51 
52 
53 
54	<div class="row"> 
55		<div class="col-md-5 col-md-offset-1 col-sm-10 col-sm-offset-1 col-xs-12 col-xs-offset-0 col-xxs-12 col-xxs-offset-0"> 
56 
57			<div class="row"> 
58				<div class="col-md-12 col-sm-12 col-xs-12 col-xxs-12"> 
59					<dl class="bipo-gnss-2col-dl"> 
60 
61						<#if identificador.getData()?has_content> 
62							<dt><@liferay.language key='gns.detalle.estacion.identificador'/></dt> 
63							<dd>${identificador.getData()}</dd> 
64						</#if> 
65 
66						<#if localizacion.getData()?has_content> 
67							<dt><@liferay.language key='gns.detalle.estacion.localizacion'/></dt> 
68							<dd>${localizacion.getData()}</dd> 
69						</#if> 
70 
71						<#if receptor.getData()?has_content> 
72							<dt><@liferay.language key='gns.detalle.estacion.receptor'/></dt> 
73							<dd>${receptor.getData()}</dd> 
74						</#if> 
75 
76						<#if antena.getData()?has_content> 
77							<dt><@liferay.language key='gns.detalle.estacion.antena'/></dt> 
78							<dd>${antena.getData()}</dd> 
79						</#if> 
80 
81						<#if observaciones.getData()?has_content> 
82							<dt><@liferay.language key='gns.detalle.estacion.observaciones'/></dt> 
83							<dd>${observaciones.getData()}</dd> 
84						</#if> 
85					</dl>				 
86				</div> 
87			</div> 
88 
89			 
90			<#assign hayEnlaces = false> 
91			<#if bloqueEnlaces.getSiblings()?has_content> 
92				<#if bloqueEnlaces.getSiblings()[0].getChild('urlEnlace')?has_content 
93					&& bloqueEnlaces.getSiblings()[0].getChild('urlEnlace').getData()?has_content  
94					&& bloqueEnlaces.getSiblings()[0].getChild('tituloEnlace')?has_content 
95					&& bloqueEnlaces.getSiblings()[0].getChild('tituloEnlace').getData()?has_content> 
96						<#assign hayEnlaces =true> 
97				</#if> 
98			</#if> 
99 
100			<#if hayEnlaces> 
101			<div class="row"> 
102				<div class="col-md-12 col-sm-12 col-xs-12 col-xxs-12"> 
103					<ul class="bipo-gnss-link-panel"> 
104					<#list bloqueEnlaces.getSiblings() as curBloqueEnlace> 
105						<#if curBloqueEnlace.getChild("tituloEnlace").getData()?has_content && curBloqueEnlace.getChild('urlEnlace').getData() != ""> 
106 
107						<#assign tituloEnlace = curBloqueEnlace.getChild('tituloEnlace').getData()> 
108						<#assign urlEnlace = curBloqueEnlace.getChild('urlEnlace').getData()> 
109						<#assign enlace = replaceSpecialCharacters(urlEnlace)> 
110 
111						<li> 
112							<div class="col-xxs-12 col-xxs-offset-0 col-xs-12 col-xs-offset-0 col-sm-12 col-sm-offset-0 col-md-12"> 
113								<#if getterUtil.getBoolean(bloqueEnlaces.otraVentana.getData())> 
114									<a href="${enlace}" target="_blank" title="<@liferay.language key='opens-new-window'/>"> 
115								<#else> 
116									<a href="${enlace}" target="_self"> 
117								</#if> 
118									<div class="panel panel-default"><span class="bipoicon icon-documento"></span> ${tituloEnlace}</div> 
119								</a> 
120							</div> 
121						</li> 
122						</#if> 
123					</#list> 
124					</ul> 
125				</div> 
126			</div>			 
127			</#if> 
128 
129		</div> 
130 
131		<div class="col-md-5 col-md-offset-0 col-sm-10 col-sm-offset-1 hidden-xs hidden-xxs"> 
132			<div class="bg_gray"> 
133				<div class="row"> 
134					<div class="col-xxs-12 col-xs-12 col-sm-12 col-md-12"> 
135						<div class="bipo-gnss-map-container mini"> 
136							<#-- mediante css <img src="bipo-gnss-map.png" alt="mapa de bizkaia"/> --> 
137							<#--<h2 class="bipo-gnss-map"><span class="sr-only"><@liferay.language key='gns.detalle.estacion.listado-estaciones'/></span></h2>--> 
138							<h2 class="bipo-gnss-map sinlinea"><span class="sr-only"><@liferay.language key='gns.detalle.estacion.listado-estaciones'/></span></h2> 
139							<ul class="bipo-gnss-estaciones"> 
140								<li id="SOPU" class="bipo-gnss-sopuerta bipo-gnss-out"></li> 
141								<li id="KAST" class="bipo-gnss-kastrexana bipo-gnss-out"></li> 
142								<li id="BRZR" class="bipo-gnss-barazar bipo-gnss-out"></li> 
143								<li id="GERN" class="bipo-gnss-gernika bipo-gnss-out"></li> 
144								<li id="ISPS" class="bipo-gnss-ispaster bipo-gnss-out"></li> 
145								<li id="LARE" class="bipo-gnss-laredo bipo-gnss-out"></li> 
146								<li id="EMAZ" class="bipo-gnss-elmazo bipo-gnss-out"></li> 
147								<li id="MDPM" class="bipo-gnss-medina bipo-gnss-out"></li> 
148								<li id="AMUR" class="bipo-gnss-amurrio bipo-gnss-out"></li> 
149								<li id="ELGE" class="bipo-gnss-elgeta bipo-gnss-out"></li> 
150								<li id="IGEL" class="bipo-gnss-igeldo bipo-gnss-out"></li> 
151								<li id="VITO" class="bipo-gnss-gasteiz bipo-gnss-out"></li> 
152                               	<li id="LEMZ" class="bipo-gnss-lemoiz bipo-gnss-out"></li> 
153                               	<li id="APBI" class="bipo-gnss-apbi bipo-gnss-out"></li> 
154								 
155							</ul> 
156						</div> 
157					</div> 
158				</div> 
159			</div> 
160		</div> 
161	</div> 
162 
163	<#assign hayFotos = false> 
164	<#if bloqueFotos.getSiblings()?has_content> 
165		<#if bloqueFotos.getSiblings()[0].getChild('imagen')?has_content 
166			&& bloqueFotos.getSiblings()[0].getChild('imagen').getData()?has_content> 
167			<#assign hayFotos =true> 
168		</#if> 
169	</#if> 
170 
171	<#if hayFotos> 
172	<div class="bipo-gnss-contenedor-carousel01" data-interval="false" data-wrap="true"> 
173		<div class="row"> 
174			<div class="col-xxs-12 col-xxs-offset-0 col-xs-10 col-xs-offset-1 col-sm-10 col-sm-offset-1 col-md-10 col-md-offset-1 carousel slide"> 
175				<ul class="row carousel-inner bipo-gnss-carousel01"> 
176					<li class="visible-xxs col-xxs-1 hidden-xs hidden-sm hidden-md hidden-lg"><a class="left carousel-control" data-slide="prev" href="#" role="button"><span class="bipoicon icon-flecha_enlace_izquierda"><span class="sr-only"><@liferay.language key='gns.detalle.estacion.anterior'/></span></span> </a></li> 
177 
178					<#list bloqueFotos.getSiblings() as curBloqueFoto> 
179 
180						<#-- Solo 2 fotos --> 
181						<#if (curBloqueFoto?index < 2)> 
182 
183							<#if curBloqueFoto.getChild("imagen")?has_content && curBloqueFoto.getChild("imagen").getData()?has_content> 
184 
185								<#assign alt = ""> 
186								<#if curBloqueFoto.getChild("textoAlt")?has_content && curBloqueFoto.getChild("textoAlt").getData()?has_content && curBloqueFoto.getChild("textoAlt").getData()!=""> 
187									<#assign alt = curBloqueFoto.getChild("textoAlt").getData()> 
188								</#if> 
189 
190								<#assign foto = curBloqueFoto.getChild('imagen').getData()> 
191 
192								<#if (curBloqueFoto?index == 0)> 
193									<li class="col-xxs-12 col-xs-12 col-sm-6 col-md-4 col-md-offset-2 item carousel-item"> 
194										<div class="bipoinner"><img alt="${alt}" src="${foto}" /></div> 
195									</li> 
196								<#else> 
197									<li class="col-xxs-12 col-xs-12 col-sm-6 col-md-4 item carousel-item"> 
198										<div class="bipoinner"><img alt="${alt}" src="${foto}" /></div> 
199									</li> 
200								</#if> 
201 
202 
203							</#if> 
204						</#if> 
205 
206					</#list> 
207 
208					<li class="visible-xxs col-xxs-1 hidden-xs hidden-sm hidden-md hidden-lg"><a class="right carousel-control" data-slide="next" href="#" role="button"><span class="bipoicon icon-flecha_enlace_derecha"><span class="sr-only"><@liferay.language key='gns.detalle.estacion.siguiente'/></span></span> </a></li> 
209				</ul> 
210			</div> 
211		</div> 
212	</div> 
213	</#if> 
214 
215</div> 
216 
217 
218<div class="container"> 
219	<div class="row"> 
220		<div class="col-md-8 col-md-offset-1 col-sm-8 col-sm-offset-1 col-xs-12 col-xs-offset-0 col-xxs-12 col-xxs-offset-0"> 
221			<h2><span><@liferay.language key='gns.detalle.estacion.coordenadas'/></span>  
222			<#-- <#if validator.equalsSorted([codigo.getData()],["GERN"]) > 
223			<span class="bipo-gnss-black-M-size"><@liferay.language key='gns.detalle.estacion.coordenadas2'/></span></h2> 
224			<#else> --> 
225			<span class="bipo-gnss-black-M-size">${strCoor}</span></h2> 
226			<#--</#if> --> 
227		</div> 
228	</div> 
229 
230	<div class="row"> 
231		<div class="col-md-8 col-md-offset-1 col-sm-8 col-sm-offset-1 col-xs-12 col-xs-offset-0 col-xxs-12 col-xxs-offset-0"> 
232			<dl class="bipo-gnss-bottom-spacer bipo-gnss-1row-3col-dl"> 
233 
234			<#list bloqueCoordenadas.getSiblings() as curBloqueCoordenadas> 
235 
236				<#assign tipo = curBloqueCoordenadas.getChild('tipo').getData()> 
237				<#assign coordenadas1 = curBloqueCoordenadas.getChild('coordenadas1').getData()> 
238				<#assign coordenadas2 = curBloqueCoordenadas.getChild('coordenadas2').getData()> 
239				<#assign coordenadas3 = curBloqueCoordenadas.getChild('coordenadas3').getData()> 
240 
241				<#-- TODO: Pendiente de obtener el label de la opcion, en vez del value --> 
242				<#assign texto = ""> 
243				<#if validator.equalsSorted([locale.getLanguage()],["eu"])> 
244					<#if validator.equalsSorted([tipo],["0"])> 
245						<#assign texto = "GEOZENTRIKOAK"> 
246					<#elseif validator.equalsSorted([tipo],["1"])> 
247						<#assign texto = "GEOGRAFIKOAK"> 
248					<#elseif validator.equalsSorted([tipo],["2"])> 
249						<#assign texto = "UTM">					 
250					</#if> 
251				<#else> 
252					<#if validator.equalsSorted([tipo],["0"])> 
253						<#assign texto = "GEOCÉNTRICAS"> 
254					<#elseif validator.equalsSorted([tipo],["1"])> 
255						<#assign texto = "GEOGRÁFICAS"> 
256					<#elseif validator.equalsSorted([tipo],["2"])> 
257						<#assign texto = "UTM">					 
258					</#if> 
259				</#if> 
260 
261				<#-- ------------------------ --> 
262 
263				<dt>${texto}</dt> 
264				<#if coordenadas1?has_content> 
265					<dd>${coordenadas1}</dd> 
266				</#if> 
267				<#if coordenadas2?has_content> 
268					<dd>${coordenadas2}</dd> 
269				</#if> 
270				<#if coordenadas3?has_content> 
271					<dd>${coordenadas3}</dd> 
272				</#if> 
273			</#list> 
274			</dl> 
275		</div> 
276	</div> 
277 
278<#if ficha.getData()?has_content > 
279    <#assign fileEntry = getFileEntry(ficha.getData()) > 
280    <#assign extension = fileEntry.extension?upper_case> 
281    <#assign size =textFormatter.formatStorageSize(fileEntry.size, locale)?upper_case> 
282    <div class="row"> 
283        <div class="col-md-6 col-md-offset-1"> 
284            <#--<p class="bipo-gnss-download"><a href="${ficha.getData()}" title="<@liferay.language key='opens-new-window'/>" target="blank">--> 
285            <p class="bipo-krk_listas listasPDF mt-3"><a href="${ficha.getData()}" title="<@liferay.language key='opens-new-window'/>" target="blank"> 
286            <span class="bipoicon icon-descargar">${extension}</span> <@liferay.language key='download'/> <@liferay.language key='gns.detalle.ficha'/> (${extension} ${size})</a></p> 
287        </div> 
288    </div> 
289 </#if> 
290 
291	 
292	<input type="hidden" id="stationCode" name="stationCode" value="${codigo.getData()}"/> 
293 
294</div> 
295 
296<#function replaceSpecialCharacters(url)> 
297    <#return htmlUtil.escapeHREF(url?replace("|","%7C")) /> 
298</#function> 
299<#function getFileEntry url > 
300  <#assign parts = url?split("/")> 
301	<#attempt> 
302		<#assign group_id = getterUtil.getLong(parts[4])> 
303		<#assign uuid = parts[7]?split("?")[0]> 
304	<#recover> 
305		<#assign group_id = getterUtil.getLong(parts[2])> 
306		<#assign uuid = parts[5]?split("?")[0]> 
307	</#attempt> 
308  <#assign fileEntryService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryLocalService") > 
309  <#return fileEntryService.getDLFileEntryByUuidAndGroupId(uuid?string, group_id) /> 
310</#function> 
311<script type="text/javascript"> 
312 
313	var stationsDataJson; 
314	var stationsMapJson; 
315	var bizkaiaStationsJson; 
316	 
317	$(document).ready(function () { 
318 
319		//Para el carrousel 
320 
321		$("ul.row.carousel-inner.bipo-gnss-carousel01 li:nth-child(2)").addClass('active'); 
322 
323		$(".bipo-gnss-contenedor-carousel01").carousel(); 
324 
325		$(".bipo-gnss-contenedor-carousel01 .left").click(function(e) {    
326			e.preventDefault();       
327			$(".bipo-gnss-contenedor-carousel01").carousel("prev");      
328		}); 
329 
330		$(".bipo-gnss-contenedor-carousel01 .right").click(function(e) {     
331			e.preventDefault();       
332			$(".bipo-gnss-contenedor-carousel01").carousel("next");     
333		}); 
334 
335		//------------------------------------------------------------ 
336	 
337		//Obtenemos los datos de las estaciones para el mapa 
338		stationsMapJson = ${stationsMap}; 
339		stationsDataJson = ${stationsData}; 
340		bizkaiaStationsJson = ${bizkaiaStations}; 
341		station = $('#stationCode').val(); 
342		 
343		//Se itera sobre cada estacion 
344		$.each(stationsDataJson.sites, function (key, data) { 
345			 
346			//Se definene las variables 
347			var siteCode = data.name; 
348			var siteName = stationsMapJson[siteCode]; 
349			console.log("nombre estacion:"+siteName); 
350		//	var siteName = "${municipio.getData()}"; 
351			var siteTracking = data.tracking; 
352			var siteStatus = data.status; 
353			var siteConnected = (siteStatus.connected =="true"); 
354			var htmlSrt = "<span class='bipo-gnss-name'><span class='sr-only'>"; 
355			var totalSatelites=0; 
356			var elementoRaiz = $(".bipo-gnss-estaciones li#"+siteCode); 
357			 
358			htmlSrt = htmlSrt + "<liferay-ui:message key='mapa.estacion-de'/> </span>"+siteName+"</span> "; 
359 
360			//Si es la estacion del detalle, se elimina la clase desconectado 
361			if (siteCode == station){ 
362				elementoRaiz.removeClass("bipo-gnss-out"); 
363			} 
364 
365			//Se añade al elemento li de la estacion correspondiente la clase css para conectado/desconectado 
366			if (siteConnected){ 
367				elementoRaiz.addClass("bipo-gnss-connected"); 
368				htmlSrt = htmlSrt + "<span class='bipo-gnss-button'><span class='sr-only'><liferay-ui:message key='mapa.emitiendo'/></span></span> "; 
369			}else{ 
370				elementoRaiz.addClass("bipo-gnss-disconnected"); 
371				htmlSrt = htmlSrt + "<span class='bipo-gnss-button'><span class='sr-only'><liferay-ui:message key='mapa.sin-conexion'/></span></span> "; 
372			} 
373			 
374			//Solo aparece si es una estacion de fuera de bizkaia 
375			if (bizkaiaStationsJson.indexOf(siteCode)==-1){ 
376				htmlSrt = htmlSrt + "<span class='sr-only'><liferay-ui:message key='mapa.alrededores'/></span>"; 
377			} 
378			 
379			//Añadimos al elemento li correspondiente 
380			elementoRaiz.append(htmlSrt); 
381 
382		}); 
383		 
384	}); 
385 
386</script>