Java method "com.ch5finland.genelec.cms.service.impl.CMSContentFormatterServiceImpl.getMarkdown(String)" threw an exception when invoked on com.ch5finland.genelec.cms.service.impl.CMSContentFormatterServiceImpl object "com.ch5finland.genelec.cms.service.impl.CMSContentFormatterServiceImpl@61e9ea58"; see cause exception in the Java stack trace.
----
FTL stack trace ("~" means nesting-related):
- Failed at: #assign summary = cmsContentFormatter... [in template "20116#20152#301848" at line 43, column 9]
----
1<#include "${templatesPath}/300307" />
2
3<#assign portletId = "p_p_id_" + themeDisplay.getPortletDisplay().getId() + "_">
4
5<#list entities as cmsEntity>
6 <#assign name = "">
7 <#if cmsEntity.getLocalizedField(profile, "/entity/fields/title")?has_content>
8 <#assign name = cmsEntity.getLocalizedField(profile, "/entity/fields/title")>
9 <#else>
10 <#if cmsEntity.getLocalizedField(profile, "/entity/fields/name")?has_content>
11 <#assign name = cmsEntity.getLocalizedField(profile, "/entity/fields/name")>
12 </#if>
13 </#if>
14
15 <#if cmsEntity.getField(profile, "/entity/relationships/video")?has_content>
16 <#if cmsEntity.getField(profile, "/entity/relationships/video/properties/url")?has_content >
17 <#assign bgVideo = cmsEntity.getField(profile, "/entity/relationships/video/properties/url") >
18 </#if>
19 <#if cmsEntity.getField(profile, "/entity/relationships/video/assets/videoFiles")?has_content >
20 <#assign videoFiles = cmsEntity.getField(profile, "/entity/relationships/video/assets/videoFiles") >
21 <#assign bgVideo = videoFiles.get(0).url >
22 </#if>
23 </#if>
24
25 <#if cmsEntity.getLocalizedField(profile, "/entity/assets/mainImage")?has_content>
26 <#assign mainImage = cmsEntity.getLocalizedField(profile, "/entity/assets/mainImage")>
27 <#elseif cmsEntity.getField(profile, "/entity/assets/image")?has_content>
28 <#assign mainImage = cmsEntity.getField(profile, "/entity/assets/image/url")>
29 <#else>
30 <#assign mainImage = "">
31 </#if>
32
33 <#assign mobileImg = "">
34 <#if cmsEntity.getLocalizedField(profile, "/entity/assets/mobileMainImage")?has_content>
35 <#assign mobileMainImage = cmsEntity.getLocalizedField(profile, "/entity/assets/mobileMainImage") >
36 <#if mobileMainImage.url?has_content>
37 <#assign mobileImg = mobileMainImage.url>
38 </#if>
39 </#if>
40
41 <#assign entity = cmsEntity.getField(profile, "/entity") >
42 <#if cmsEntity.getField(profile, "/entity/fields/summary")?has_content>
43 <#assign summary = cmsContentFormatterService.getMarkdown(cmsEntity.getLocalizedField(profile, "/entity/fields/summary"))>
44 </#if>
45 <#if url?has_content>
46 <#assign pageUrl = url>
47 <#elseif cmsContentService.getUrlForEntity(themeDisplay, entity.id)?has_content>
48 <#assign pageUrl = cmsContentService.getUrlForEntity(themeDisplay, entity.id)>
49 <#elseif cmsEntity.getField(profile, "/entity/fields/url")?has_content>
50 <#assign pageUrl = cmsEntity.getField(profile, "/entity/fields/url")>
51 <#else>
52 <#assign pageUrl = "">
53 </#if>
54</#list>
55
56<div class="parallax-window <#if bgVideo??>d-xl-none</#if>" data-parallax="scroll"></div>
57<div class="gradient-layer-black-left <#if bgVideo??>d-xl-none</#if>"></div>
58
59
60 <section class="background">
61 <div class="container container-1440 container-padding <#if bgVideo??>d-xl-none</#if>">
62 <div class="row">
63 <div class="col-lg-6">
64 <h1 class="text-light product-page-heading">${name}</h1>
65
66 <#if cmsEntity.getField(profile, "/entity/fields/summary")?has_content>
67 <div class="product-page-intro text-light">${summary}</div>
68 </#if>
69 <#if pageUrl?has_content && callToAction?has_content>
70 <a class="btn btn-light btn-medium" href="${pageUrl}" role="button">
71 ${callToAction}
72 </a>
73 </#if>
74
75 </div>
76 </div>
77 </div>
78
79 <#if bgVideo??>
80 <div class="bg-video d-none d-xl-block">
81 <#if bgVideo?contains("youtube") || bgVideo?contains("youtu.be")>
82 <#if bgVideo?contains("youtu.be")>
83 <#-- ie. youtu.be/x_ptCvAzbKI -->
84 <#assign videoId = bgVideo?keep_after("youtu.be/") >
85 <#else>
86 <#-- ie. https://www.youtube.com/watch?v=x_ptCvAzbKI -->
87 <#assign videoId = bgVideo?replace("^.*\\?v=([\\w-_]*).*", "$1", "r") >
88 </#if>
89
90 <iframe frameborder="0" style="width: 100%; aspect-ratio: 16 / 9; border: none;" src="https://www.youtube-nocookie.com/embed/${videoId}?autoplay=1&controls=0&loop=1&mute=1&playlist=${videoId}"></iframe>
91 <#else>
92 <video muted="" playsinline="" autoplay="" loop="" style="background-image: url('${mainImage.url}');" >
93 <source src="${bgVideo}">
94 </video>
95 </#if>
96 <div class="video-content-container">
97 <div class="container container-1440 container-padding">
98 <div class="row">
99 <div class="col-lg-6">
100 <h1 class="text-light product-page-heading">${name}</h1>
101
102 <#if cmsEntity.getField(profile, "/entity/fields/summary")?has_content>
103 <div class="product-page-intro text-light">${summary}</div>
104 </#if>
105 <#if pageUrl?has_content && callToAction?has_content>
106 <a class="btn btn-light btn-medium" href="${pageUrl}" role="button">
107 ${callToAction}
108 </a>
109 </#if>
110
111 </div>
112 </div>
113 </div>
114 </div>
115
116 </div>
117
118 </#if>
119 </section>
120
121<@parallaxBackground url="${mainImage.url}" speed="0.4" mobileUrl="${mobileImg}" portletId="${portletId}" />
Travel deeper into global music
United by our love for celebrating and shining a light on the world’s many different interpretations of musical art, Genelec and Helsinki’s prestigious Sibelius Academy are delighted to join forces for this special series of podcasts.
Full of inspiring interviews, live performances and extraordinary instruments, this first series is set to offer you ten unique and fascinating musical stories – with a new instrumentalist featured each month.
Enjoy exclusive live performances
Not only will you discover the diverse histories, learning journeys and creative processes of musicians with a rare level of skill, you will have the opportunity to experience their personal sound and exceptional playing – as each performs a piece of their choice.
So, come and feed your passion for global music and culture! Scroll down the page and press play to start watching Uncovering Music IDs.
Meet your host – Mehrnoosh Zolfaghari
Mehrnoosh is an internationally recognised composer, musician and player of the santoor (Persian hammered dulcimer) based in Finland. She graduated with a Master’s in Music Performance in Iranian Classical Music at the University of Tehran in Iran and also at Finland’s UNIARTS/Sibelius Academy with a Master’s in Global Music.
Rooted in Persian music and inspired by global and jazz traditions, her music blends heritage and innovation through storytelling, improvisation and cross-cultural collaboration. As a part-time teacher of Persian music at Sibelius Academy, she brings her musical world into dialogue with others – bridging musical heritage and culture through music, creative interaction and diverse community.
More about her work: https://www.youtube.com/@MehrnooshZolfaghari/featured
Follow Mehrnoosh on Instagram: https://www.instagram.com/mehrnoosh_zolfaghari/#
The following has evaluated to null or missing:
==> cmsEntity.getLocalizedField(profile, "/entity/fields/title") [in template "20116#20152#893963" at line 69, column 76]
----
Tip: If the failing expression is known to be legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----
----
FTL stack trace ("~" means nesting-related):
- Failed at: ${cmsEntity.getLocalizedField(profile... [in template "20116#20152#893963" at line 69, column 74]
----
1<#include "${templatesPath}/227209" />
2
3<#-----------------------------------------------------------------------------
4 INIT
5------------------------------------------------------------------------------>
6<#assign assetPublisherInstanceId = themeDisplay.getPortletDisplay().getInstanceId()>
7<#assign portletId = "p_p_id_" + themeDisplay.getPortletDisplay().getId() + "_">
8<#assign portletTitle = themeDisplay.getPortletDisplay().getTitle() >
9<#assign useCustomTitle = themeDisplay.getPortletDisplay().getPortletSetup().getValue("portletSetupUseCustomTitle", "") >
10
11<#assign cmsContentService = serviceLocator.findService("com.ch5finland.genelec.cms.service.CMSContentService") >
12<#assign cmsContentFormatterService = serviceLocator.findService("com.ch5finland.genelec.cms.service.CMSContentFormatterService") >
13<#assign profileService = serviceLocator.findService("com.ch5finland.genelec.cms.service.ProfileService") >
14<#assign profile = profileService.getProfile(request) >
15
16<#-----------------------------------------------------------------------------
17 LOOP ENTRIES
18------------------------------------------------------------------------------>
19
20<section class="latest-posts-container" >
21
22<#if useCustomTitle == "true">
23 <div class="row">
24 <div class="col-12 mb-4">
25 <h2 class="h2">${portletTitle}</h2>
26 </div>
27 </div>
28</#if>
29
30 <div class="row flex-container flex-columns-3">
31
32 <#if entries?has_content>
33 <#list entries as curEntry>
34
35 <#assign articleIdAsString = curEntry.getAssetRenderer().getArticle().getArticleId() >
36 <#assign cmsEntity = cmsContentService.getEntityByArticleId(profile, articleIdAsString) >
37
38 <#assign id = cmsEntity.getField("/entity/id")>
39 <#if cmsEntity.getField("/entity/fields/url")??>
40 <#assign videoID = "" >
41 <#assign videoURL = cmsEntity.getField("/entity/fields/url")>
42 <#assign videoType = ""> <#-- Youtube or vimeo -->
43
44 <#if videoURL?contains("youtu.be")>
45 <#assign videoID = videoURL?split("/")?last />
46 <#assign videoType = "youtube">
47 <#elseif videoURL?contains("youtube")>
48 <#assign videoID = videoURL?replace("^.*\\?v=([\\w-_]*).*", "$1", "r") />
49 <#assign videoType = "youtube">
50 <#elseif videoURL?contains("vimeo")>
51 <#assign videoID = videoURL?split("/")?last />
52 <#assign videoType = "vimeo">
53 </#if>
54
55
56 <div class="card card-img flex-item">
57 <div class="aspect-ratio aspect-ratio-16-to-9 aspect-ratio-bg-cover">
58 <div data-slide-id="video-${id}"
59 class="btn zoom-gallery-slide-video video-slide responsive-wrapper active ${videoType}-pop"
60 data-embed="${videoID}"
61 id="video-${id}"
62 aria-labelledby="video-title-header-${id}">
63 <span class="icon-play"></span>
64 <span class="round-button"></span>
65 </div>
66 </div>
67 <div class="card-padding card-content">
68
69 <h3 id="video-title-header-${id}" class="h3">${cmsEntity.getLocalizedField(profile, "/entity/fields/title")}</h3>
70
71 </div>
72 </div>
73
74 </#if>
75 </#list>
76 </#if>
77
78 </div>
79
80</section>
81<script>
82
83
84$('#${portletId} .vimeo-pop').on('click',function() {
85 var id = $(this).data('embed');
86 var thumb = $(this).find("img"); // we assume thumb ratio is same as video's
87 loadAndOpenVimeoVideo(id, thumb.width(), thumb.height());
88});
89
90$(document).ready(function() {
91 $( "#${portletId} .vimeo-pop" ).each(function(index){
92 var url = createVimeoUrl(this.dataset.embed);
93 loadVimeoJson(url,this.dataset.embed,'thumbnail');
94 });
95});
96
97$(document).ready(function() {
98
99 var youtube = document.querySelectorAll( ".youtube-pop" );
100
101 $( "#${portletId} .youtube-pop" ).each(function(index){
102 if($(this).attr("data-embed") !== undefined){
103 var source = "https://img.youtube.com/vi/"+ this.dataset.embed +"/maxresdefault.jpg";
104 var videoContainer = this;
105
106 var image = new Image();
107 image.src = source;
108 image.className = "poster-image";
109 image.addEventListener( "load", function() {
110 videoContainer.appendChild( image );
111 }( index ) );
112 videoContainer.addEventListener( "click", function() {
113 var iframe = document.createElement( "iframe" );
114 iframe.setAttribute( "frameborder", "0" );
115 iframe.setAttribute( "allowfullscreen", "" );
116 iframe.setAttribute( "allow", "autoplay" );
117 iframe.setAttribute( "src", "https://www.youtube.com/embed/"+ videoContainer.dataset.embed +"?rel=0&autoplay=1" );
118 iframe.setAttribute( "width", "100%" );
119 iframe.setAttribute( "height", "100%" );
120
121 var videoContainerSize = maxVideoSize();
122 var videoSize = calcPreferredVideoSize(
123 videoContainerSize.width,
124 videoContainerSize.height,
125 image.width,
126 image.height
127 );
128 openVideo(this, iframe.outerHTML, videoSize.width, videoSize.height);
129
130 } );
131 };
132 });
133
134});
135
136
137$( window ).on( "load", function() {
138 if (window.location.href.includes("?video=") && typeof genelec_videoPopupOpened == 'undefined') {
139 genelec_videoPopupOpened = true;
140 var urlParts = window.location.href.split("video=");
141 if (urlParts.length > 1) {
142 var videoId = 'video-' + urlParts[1];
143 $('#' + videoId).first().click()
144 }
145 }
146});
147
148
149</script>