Asset-Herausgeber

Fehler bei der Verarbeitung der Vorlage.
The following has evaluated to null or missing:
==> FrontendService.media.getDMTJsonObject( coverBild.groupId?number, coverBild.uuid, locale ) [in template "252001#252047#252845" at line 132, column 37]
----
Tip: If the failing expression is known to 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: dMTJsonObject = FrontendService.media... [in template "252001#252047#252845" at line 132, column 21]
----
1<#-- used @ Veranstaltung-Detailseite Intro 
2 used @ Publikation-Detailseite Intro 
3--> 
4 
5<#-- 
6Web content templates to display teaser on thema detail page 
7 
8Generic template for detail pages Intro / Teaser element 
9--> 
10<#-- 
11Display the current page title 
12--> 
13<#include "${fullTemplatesPath}/functions/relatedContentUtil.ftl" /> 
14<#include "${fullTemplatesPath}/macros/debugging.ftl" /> 
15 
16<#include "${fullTemplatesPath}/macros/page-modules/PMIntro.ftl" /> 
17<#include "${fullTemplatesPath}/macros/atomic-modules/AMPublicationCarousel.ftl" /> 
18<#include "${fullTemplatesPath}/macros/atomic-modules/AMMetadata.ftl" /> 
19<#include "${fullTemplatesPath}/macros/atomic-modules/AMDatetime.ftl" /> 
20 
21 
22<#-- 
23 renders the Intro for nearly all Pages 
24 TODO: remove Share? (was in the designs, but not anymore?) 
25 TODO: check if languageSelect/filter are working (js) 
26 
27 - portletId 
28 - data = { 
29 "media": string (src from image), 
30 "category": string, 
31 "title": string, 
32 "author": string, 
33 "subheadline": string, 
34 "copy": string, 
35 "filter": { 
36 "id": string, 
37 "name": string, 
38 "entries": Array<Object> ({key:value}), 
39 }, 
40 "languageSelect": { 
41 "id": string, 
42 "name": string, 
43 "entries": Array<Object> ({key:value}), 
44 }, 
45 "meta": { 
46 "pos"; string (top/bottom) 
47 "date": string, 
48 "hash": string, 
49 "info": string, (url) 
50 }, 
51 "share" : { 
52 "login": string, 
53 "print": string, 
54 "mail": string, 
55 "multishare": string?? (tbd) 
56
57 - AMMetadata: macro 
58 - position: String ("top") -> defines wether the meta-data should be rendered above or below the intro-content 
59
60--> 
61 
62<#assign 
63 JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") 
64 
65 ServiceContext = staticUtil["com.liferay.portal.kernel.service.ServiceContextThreadLocal"].getServiceContext() 
66 DLAPP = serviceLocator.findService("com.liferay.document.library.kernel.service.DLAppLocalService") 
67 
68 themeDisplay = ServiceContext.getThemeDisplay() 
69 editmode = FrontendService.user.isPrivilegedUser(themeDisplay) 
70 
71 languageId = themeDisplay.getLocale() 
72 groupId = themeDisplay.getScopeGroupId() 
73 currentUrl = themeDisplay.getURLCurrent() 
74 
75 layout = themeDisplay.getLayout() 
76 layouttpl = layout.getTypeSettingsProperties().getProperty("layout-template-id") 
77/> 
78 
79<#setting locale="${languageId}"> 
80 
81<#-- get article from url --> 
82 
83<#assign entry = FrontendService.article.getArticleToUrl(currentUrl, groupId?number)! > 
84 
85 
86<#if entry?has_content> 
87 
88 <#if entry.resourcePrimKey??> 
89 <#assign primaryKey = entry.resourcePrimKey?number > 
90 <#elseif entry.classPK??> 
91 <#assign primaryKey = entry.classPK?number > 
92 </#if> 
93 
94 <#assign 
95 jsonString = FrontendService.article.getWebcontent(primaryKey) 
96 json = FrontendService.json.parseAsJson(jsonString) 
97 availablelanguages = FrontendService.article.getAssetEntryToUrl(primaryKey).getAvailableLanguageIds() 
98 
99 title = entry.getTitle(languageId) 
100 data = { 
101 "title": title 
102
103 /> 
104 <@debugJsonString jsonString "ADT_KASDE_DYNAMIC_INTRO" /> 
105 
106 <#if hasContent('untertitel', languageId, json)> 
107 <#assign data = data + { "subheadline": getValueForLanguage('untertitel', languageId, json, "first") } > 
108 </#if> 
109 
110 <#if hasValue(FrontendService.article.getFieldNameByReferenceName(primaryKey, 'detailsubtitle'), languageId, json)> 
111 <#assign data = data + { "detailsubtitle": getValueForLanguage(FrontendService.article.getFieldNameByReferenceName(primaryKey, 'detailsubtitle'), languageId, json, "first") } > 
112 </#if> 
113 
114 <#if hasContent('beschreibung', languageId, json)> 
115 <#assign data = data + { "copy": getValueForLanguage('beschreibung', languageId, json, "first") } > 
116 </#if> 
117 
118 <#-- fill meta data --> 
119 <#assign meta = {} /> 
120 
121 <#-- PUBLIKATIONEN DETAIL --> 
122 <#if layouttpl?contains("LAYOUT_KASDE_PUBLIKATIONEN_DETAIL")> 
123 
124 <#if hasContent('coverDMTKASDEMEDIUM', languageId, json)> 
125 <#assign 
126 coverBildString = getValueForLanguage('coverDMTKASDEMEDIUM', languageId, json, "first") 
127 /> 
128 
129 <#if coverBildString?has_content> 
130 <#assign 
131 coverBild = FrontendService.json.parseAsJson(coverBildString) 
132 dMTJsonObject = FrontendService.media.getDMTJsonObject( coverBild.groupId?number, coverBild.uuid, locale ) 
133 linkToDMT = FrontendService.media.getImageURLForAMConfiguration('hd-resolution',coverBild.groupId?number, coverBild.uuid ) 
134 data = data + { "media": linkToDMT, "meta" : dMTJsonObject } 
135 /> 
136 <#if dMTJsonObject.altText?? > 
137 <#assign data = data + {"alt" : dMTJsonObject.altText} /> 
138 </#if> 
139 <#if dMTJsonObject.quelle??> 
140 <#assign meta = meta + { "quelle": dMTJsonObject.quelle } /> 
141 </#if> 
142 </#if> 
143 <#-- uncomment to display pdf cover as Intro Image 
144 <#elseif hasContent('document_pdfDMTBASICDOCUMENT', languageId, json)> 
145 <#assign 
146 pdfDocument = getValueForLanguage('document_pdfDMTBASICDOCUMENT', languageId, json, "first") 
147 fileEntry = FrontendService.media.getFileEntry(pdfDocument.uuid, groupId?number)!/> 
148 <#if fileEntry?has_content> 
149 <#assign 
150 linkToThumbnail = FrontendService.link.getThumbnailSrc(fileEntry , themeDisplay) 
151 data = data + { "media": linkToThumbnail } 
152 /> 
153 </#if> 
154 --> 
155 </#if> 
156 
157 <#assign 
158 meta = meta + { "orderInfo": "true" } 
159 verbundJournalArticle = FrontendService.publication.getVerbundToPublikation( entry )!"" 
160 /> 
161 
162 
163 
164 <#if hasContent('erscheinungsdatum', languageId, json)> 
165 <#assign 
166 erscheinungsdatum = getValueForLanguage('erscheinungsdatum', languageId, json, "first") 
167 /> 
168 <#if erscheinungsdatum?has_content > 
169 <#assign 
170 erscheinungsdatumFormatted = FrontendService.date.getDateFormatLong( erscheinungsdatum, languageId ) 
171 meta = meta + { "date": erscheinungsdatumFormatted } 
172 /> 
173 </#if> 
174 </#if> 
175 
176 <#if verbundJournalArticle?has_content> 
177 <#assign 
178 verbundJsonString = FrontendService.article.getWebcontent(verbundJournalArticle.resourcePrimKey) 
179 verbundJson = FrontendService.json.parseAsJson(verbundJsonString) 
180 laufendenummer = getValueForLanguage('laufendenummer', languageId, verbundJson, "first") 
181 coverImg = getValueForLanguage('mediumDMTKASDEMEDIUM', languageId, verbundJson, "first") 
182 /> 
183 <@debugJsonString verbundJsonString "ADT_KASDE_DYNAMIC_INTRO-verbundJournalArticle" /> 
184 <#assign meta = meta + { "laufendenummer": laufendenummer } > 
185 
186 <#if coverImg?has_content && coverImg.url?has_content > 
187 <#assign meta = meta + { "coverImg": coverImg.url } > 
188 </#if> 
189 </#if> 
190 
191 
192 <#if meta?has_content> 
193 <#assign data = data + {"meta": meta } > 
194 </#if> 
195 
196 </#if> 
197 <#-- PUBLIKATIONEN DETAIL END --> 
198 
199 
200 <#-- VERANSTALTUNGEN DETAIL --> 
201 <#if layouttpl?contains("LAYOUT_KASDE_VERANSTALTUNGEN_DETAIL")> 
202 <#assign 
203 friendlyUrl = FrontendService.article.getFriendlyUrl(primaryKey, languageId, groupId)!"" 
204 links = [] 
205 /> 
206 <#if availablelanguages?has_content && friendlyUrl?has_content> 
207 <#if (availablelanguages?size > 1) > 
208 <#list availablelanguages as language> 
209 <#assign 
210 defaultLanguage = "de_DE" 
211 defaultLocale = FrontendService.language.getLocaleByKey(defaultLanguage) 
212 linkLocale = (FrontendService.language.getLocaleByKey(language))!defaultLocale 
213 langFriendlyUrl = FrontendService.article.getFriendlyUrl(primaryKey, linkLocale, groupId) 
214 
215 link = { 
216 "key": language!defaultLanguage, 
217 "value": linkLocale.getDisplayLanguage(languageId), 
218 "url": "/c/portal/update_language?p_l_id=" + 
219 layout.plid + "&redirect=" + langFriendlyUrl + 
220 "&languageId=" + language 
221
222 /> 
223 <#if language == languageId> 
224 <#assign link = link + { "selected": "true" } > 
225 </#if> 
226 <#assign links = links + [link]> 
227 </#list> 
228 <#assign 
229 data = data + { 
230 "languageSelect": { 
231 "id": "languageSelectRedirect", 
232 "name": "languageselectRedirect", 
233 "entries": links, 
234 "label": languageUtil.get(languageId, "diese.veranstaltung.ist.in.weiteren.sprachen.verfuegbar") 
235
236
237 /> 
238 </#if> 
239 </#if> 
240 </#if> 
241 
242 <#if hasContent('erscheinungsdatum', languageId, json)> 
243 <#assign 
244 startdate = getValueForLanguage('erscheinungsdatum', languageId, json, "first") 
245 meta = meta + { "start": startdate?date.iso, "end": "" } 
246 /> 
247 </#if> 
248 
249 <#if hasContent('startdatum', languageId, json)> 
250 <#assign 
251 startdate = getValueForLanguage('startdatum', languageId, json, "first") 
252 meta = meta + { "start": startdate?date.iso, "end": "" } 
253 /> 
254 </#if> 
255 
256 <#if hasValue('einfuehrungText', locale, json)> 
257 <#assign data = data + { "einfuehrungText" : getValueForLanguage('einfuehrungText', locale, json, "first") } > 
258 <#elseif hasValue(FrontendService.article.getFieldNameByReferenceName(primaryKey, 'einfuehrungText'), locale, json, "first")> 
259 <#assign data = data + { "einfuehrungText" : getValueForLanguage(FrontendService.article.getFieldNameByReferenceName(primaryKey, 'einfuehrungText'), locale, json, "first") } > 
260 </#if> 
261 
262 <#if hasContent('endedatum', languageId, json)> 
263 <#assign 
264 enddate = getValueForLanguage('endedatum', languageId, json, "first") 
265 meta = meta + { "end": enddate?date.iso } 
266 /> 
267 </#if> 
268 
269 <#if hasContent('startzeit', languageId, json)> 
270 <#assign 
271 startzeit = getValueForLanguage('startzeit', languageId, json, "first") 
272 /> 
273 <#if startzeit?has_content > 
274 <#assign meta = meta + { "startzeit": startzeit } /> 
275 </#if> 
276 </#if> 
277 
278 <#if hasContent('endezeit', languageId, json)> 
279 <#assign 
280 endezeit = getValueForLanguage('endezeit', languageId, json, "first") 
281 meta = meta + { "endezeit": endezeit } 
282 /> 
283 </#if> 
284 
285 <#if hasContent('ortWCSKASDEORT', languageId, json)> 
286 <#assign 
287 ortWCSKASDEORT = FrontendService.json.parseAsJson(getValueForLanguage('ortWCSKASDEORT', languageId, json, "first")) 
288 ortWCSKASDEORTPrimaryKey = ortWCSKASDEORT.classPK?number 
289 ortWCSKASDEORTWebContent = FrontendService.article.getWebcontentByPk(ortWCSKASDEORTPrimaryKey)!"" 
290 /> 
291 <#if ortWCSKASDEORTWebContent?has_content > 
292 <#assign 
293 ortWCSKASDEORTTitle = ortWCSKASDEORTWebContent.getTitle(languageId)!"" 
294 /> 
295 <#if ortWCSKASDEORTTitle?has_content > 
296 <#assign 
297 meta = meta + { "ortWCSKASDEORT": ortWCSKASDEORTTitle } 
298 /> 
299 </#if> 
300 </#if> 
301 </#if> 
302 
303 
304 <#if hasContent('veranstaltungsnummer', languageId, json)> 
305 <#assign 
306 verauuid = getValueForLanguage('veranstaltungsnummer', languageId, json, "first") 
307 meta = meta + { "verauuid": verauuid } 
308 /> 
309 </#if> 
310 
311 
312 <#if (data.meta)?has_content > 
313 <#assign meta = data.meta /> 
314 </#if> 
315 
316 <#if !(data.media)?has_content && hasContent('mediumDMTKASDEMEDIUM', languageId, json)> 
317 <#assign 
318 medium = getValueForLanguage('mediumDMTKASDEMEDIUM', languageId, json, "first") 
319 mediaData = getRelatedMediaObject(medium, themeDisplay, languageId, FrontendService, "hd-resolution") 
320 /> 
321 <#assign data = data + { "media": mediaData.url , "meta" : mediaData.meta} > 
322 
323 
324 <#if mediaData.meta?? && mediaData.meta.quelle??> 
325 <#assign meta = meta + data.meta + { "quelle": mediaData.meta.quelle } /> 
326 </#if> 
327 </#if> 
328 
329 
330 <#if meta?has_content> 
331 <#assign data = data + {"meta": meta } > 
332 </#if> 
333 
334 <#-- END fill meta data --> 
335 
336 <#if hasContentForSequence('autorenWCSKASDEPERSON', languageId, json)> 
337 <#assign 
338 journalArticles = getValueForLanguageAnsprechpartner('autorenWCSKASDEPERSON', languageId, json) 
339 authors = [] 
340 /> 
341 <#list journalArticles as articleString> 
342 <#assign article = FrontendService.json.parseAsJson(articleString) /> 
343 <#if article?has_content && article?is_hash && article.classPK??> 
344 <#assign articleDereferenced = FrontendService.person.resolveContactInstanceToPerson(article, languageId)!"" /> 
345 <#if articleDereferenced?has_content > 
346 <#assign 
347 author = "" 
348 articlePrimaryKey = articleDereferenced.classPK?number 
349 articleJsonString = FrontendService.article.getWebcontent(articlePrimaryKey) 
350 articleJson = FrontendService.json.parseAsJson(articleJsonString) 
351 /> 
352 <@debugJsonString articleJsonString "ADT_KASDE_DYNAMIC_INTRO-autorenWCSKASDEPERSON" /> 
353 <#if hasValue('anredetitel', languageId, articleJson)> 
354 <#assign author = author + getValueForLanguage('anredetitel', languageId, articleJson, " ") + " "> 
355 </#if> 
356 <#if hasValue('vorname', languageId, articleJson)> 
357 <#assign author = author + getValueForLanguage('vorname', languageId, articleJson, " ") + " "> 
358 </#if> 
359 <#if hasValue('nachname', languageId, articleJson)> 
360 <#assign author = author + getValueForLanguage('nachname', languageId, articleJson, " ") + " "> 
361 </#if> 
362 
363 <#attempt> 
364 <#assign href = FrontendService.article.getFriendlyUrl(articlePrimaryKey, languageId, groupId)!"#" > 
365 <#recover> 
366 <#assign href = "#" > 
367 </#attempt> 
368 <#if href?has_content && href != "#" && href != "/_404"> 
369 <#assign author = '<a href="' + href + '">' + author?trim + '</a>'> 
370 </#if> 
371 
372 <#assign authors = authors + [author?trim]> 
373 </#if> 
374 </#if> 
375 </#list> 
376 <#if authors?has_content> 
377 <#assign data = data + { "author": authors?join(", ") } > 
378 </#if> 
379 </#if> 
380 
381 <#if layouttpl?contains("LAYOUT_KASDE_VERANSTALTUNGEN_DETAIL") > 
382 <#assign categories = FrontendService.category.getCategoriesToArticle(primaryKey, "VERANSTALTUNGSTYP")! > 
383 <#if categories?has_content && categories[0]?has_content > 
384 <#assign data = data + { "category": categories[0].getTitle(languageId,true)! } > 
385 </#if> 
386 
387 <#if hasContent('ausgebucht', languageId, json)> 
388 <#assign data = data + { "ausgebucht" : getValueForLanguage('ausgebucht', languageId, json, "first") }> 
389 </#if> 
390 
391 <#if hasContent('storniert', languageId, json)> 
392 <#assign data = data + { "storniert" : getValueForLanguage('storniert', languageId, json, "first") }> 
393 </#if> 
394 
395 <#elseif layouttpl?contains("LAYOUT_KASDE_PUBLIKATIONEN_DETAIL") > 
396 <#assign categories = FrontendService.category.getCategoriesToArticle(primaryKey, "PUBLIKATIONSREIHE")! > 
397 <#if categories?has_content && categories[0]?has_content > 
398 <#assign data = data + { "category": categories[0].getTitle(languageId,true)! } > 
399 </#if> 
400 <#else> 
401 <#assign categories = FrontendService.category.getCategoriesToArticle(primaryKey, "THEMA")! > 
402 <#if categories?has_content && categories[0]?has_content > 
403 <#assign data = data + { "category": categories[0].getTitle(languageId,true)! } > 
404 </#if> 
405 </#if> 
406 
407 
408 <#assign 
409 languages = [] 
410 /> 
411 
412 <#attempt> 
413 <#if json["document_pdfDMTBASICDOCUMENT"]?? > 
414 <#if availablelanguages?has_content> 
415 <#list availablelanguages as pdf_language> 
416 <#assign 
417 docRefJson = getValueForLanguage('document_pdfDMTBASICDOCUMENT', pdf_language, json, "first") 
418 docRef = FrontendService.json.parseAsJson(docRefJson) 
419 /> 
420 <#if docRef?is_hash && pdf_language != languageId > 
421 <#assign 
422 lang = FrontendService.language.getLocaleByKey(pdf_language)!"" 
423 docGroupId = docRef["groupId"]?number 
424 docUuid = docRef["uuid"] 
425 dMTJsonObject = FrontendService.media.getDMTJsonObject( docGroupId, docUuid, locale ) 
426 dMTLink = FrontendService.media.getLinkToDMT( dMTJsonObject ) 
427 /> 
428 <#if lang?has_content> 
429 <#assign 
430 languages = languages + [ 
431
432 "key": pdf_language, 
433 "value": FrontendService.language.getLocaleByKey(pdf_language).getDisplayLanguage(), 
434 "url": dMTLink 
435 }] 
436 /> 
437 </#if> 
438 </#if> 
439 </#list> 
440 </#if> 
441 </#if> 
442 <#recover> 
443 </#attempt> 
444 
445 <#if (languages?size > 0)> 
446 <#attempt> 
447 <#assign 
448 data = data + { "languageSelect": { 
449 "id": "languageSelect", 
450 "name": "languageselect", 
451 "entries": languages, 
452 "documents": "", 
453 "button": "true" 
454 }} 
455 /> 
456 <#recover> 
457 </#attempt> 
458 </#if> 
459 
460 <@PMIntro "ADT_KASDE_DYNAMIC_INTRO" data AMMetadata AMDatetime "bottom" /> 
461 ${FrontendService.article.getEditArticleHtml(primaryKey, themeDisplay)} 
462 
463 <#if data.meta?has_content> 
464 <#if data.meta.laufendenummer?has_content !isACColorScheme() && !isVLCColorScheme() && !isDPMColorScheme()> 
465 <div>  
466 <div id="publicationVerbundPagination"> 
467 <@AMPublicationCarousel data.meta.laufendenummer data.meta.date data.meta.coverImg /> 
468 </div> 
469 </div> 
470 </#if> 
471 </#if> 
472 
473<#elseif (editmode?? && editmode)> 
474 <@errorMessage languageUtil.get(locale, "kein.journalArticle.gefunden") "ADT_KASDE_DYNAMIC_INTRO" layouttpl currentUrl /> 
475</#if> 

Asset-Herausgeber

Nach der Parlamentswahl am 14. Februar mit dem überwältigendem Wahlsieg Albin Kurtis Vetevendosje konnte am 4. April Vjosa Osmani, die im Wahlbündnis mit Kurtis Vetevendosje schon bei den Parlamentswahlen als Kandidatin für das Präsidentenamt ins Rennen ging, als neue Präsidentin gewählt werden. Die Wahl war mit Spannung erwartet worden, da für eine erfolgreiche Wahl eine 2/3 Mehrheit im Parlament benötigt wurde bzw. ein 2/3-Quorum erreicht werden musste, was im Vorfeld nicht sicher war. Bei einem Scheitern hätten erneute Neuwahlen gedroht.

Die Präsidentschaftswahl als Vorrausetzung für politische Stabilität

Mit der Wahl Vjosa Osmanis hat das kosovarische Parlament die Weichen für eine kontinuierliche Politik und Stabilität gestellt. Der an sich normal demokratische Prozess der Wahl eines Staatsoberhauptes nach den Regeln der Verfassung stand im Kosovo jedoch unter dem Damoklesschwert erneuter politischer Verwerfungen, die eine dringend benötigte politische Stabilität mit handlungsfähiger Regierung wieder gefährdet hätte.

Der kosovarische Staatspräsident/in muss gemäß der Verfassung mit einer 2/3-Mehrheit der 120 Mitglieder des Parlamentes gewählt werden. Gelingt dies in zwei Wahlgängen nicht, reicht in einem dritten Wahlgang eine einfache Mehrheit, jedoch müssen dafür 2/3 der Abgeordneten als Mindestquorum an der Wahl teilgenommen haben. Wenn in drei Wahlgängen kein Kandidat dies erreichen kann, wären Parlamentswahlen innerhalb von 45 Tagen anzusetzen. Dies hätte das Kosovo erneut in einen Wahlkampfmodus versetzt, der die ohnehin große Polarisierung im Land noch einmal verstärkt hätte und erneut die politische Gestaltung der vielfältigen Probleme des Landes verhindert hätte. Darüber hinaus steigen die Infektionszahlen aufgrund der britischen Variante von Covid19 erheblich an und angesichts des auch im vergangenem Wahlkampf teilweise sehr leichtfertigen Umgangs mit der Pandemie, wäre ein weiterer Wahlkampf auch unter Aspekten der Gesundheit unverantwortlich gewesen.

Ausgangslage

Die Parlamentswahlen vom 14. Februar gaben den inzwischen zum Ministerpräsidenten gewählten Wahlsieger Albin Kurti mit seiner Bewegung Vetevendosje und der mit ihr gemeinsam angetretenen Liste Vjosa Osmanis zwar eine überwältigende Mehrheit, aber keine 2/3-Mehrheit. Eine einfache Mehrheit im dritten Wahlgang, die 61 Stimmen erfordert, wäre möglich gewesen, doch hätten die Oppositionsparteien durch geschlossenes Fernbleiben die Erreichung des Anwesenheitsquorums von 80 Parlamentariern verhindern können, wodurch die Wahl nicht erfolgreich gewesen wäre. Daher gab es im Vorfeld vielfältige informelle Treffen zwischen Osmani, Kurti und Oppositionsvertretern, um zumindest partielle Teilnahmen einzelner Abgeordneter der Oppositionsparteien oder gar deren Übertritt zur Regierungsfraktion zu erreichen. Doch blieb dies bis zuletzt unsicher.

Die KAS-Partnerpartei LDK hatte sich nach ihrer schweren Wahlniederlage am 14. Februar neu aufgestellt und mit dem Ökonomen Lumir Abdixhiku einen neuen Parteivorsitzenden gewählt. Er war bereits Infrastrukturminister in der ersten kurzlebigen Regierung Albin Kurti. Sein Verhältnis zur ehemaligen LDK-Spitzenkandidatin und Präsidentschaftskandidatin Vjosa Osmani galt als weniger belastet als zur das der alten Parteiführung. Abdixhiku kündigte im Vorfeld der Wahl an, die Wahl Osmanis nicht durch Fernbleiben im dritten Wahlgang verhindern zu wollen. Allerdings blieb offen, ob alle 15 Parlamentsmitglieder der LDK Abdixhiku folgen würden, da unter diesen einige sind, welche ein sehr angespanntes persönliches Verhältnis mit Vjosa Osmani pflegen.

Nicht zu vergessen war allerdings bei allen Spekulationen über Wahlmodi und mögliche Abweichler und Überläufer, dass Neuwahlen für die Oppositionsparteien politisch keinesfalls opportun gewesen wären. Albin Kurtis Vetevendosje hätte Umfragen zu Folge seinen Erfolg sogar ausbauen können, da aktuell wohl kein Politiker im Kosovo über ähnlichen Rückhalt und Charisma verfügt. Ob dies in der Zukunft so bleibt, ist zwar abzuwarten, jedoch wären Neuwahlen in diesem Jahr kaum ein Nachteil für Kurti gewesen. Zudem sind nach den permanenten Wahlkämpfen der vergangenen Jahre auch die Ressourcen der Oppositionsparteien kaum noch ausreichend, um dem sehr professionellen Wahlkampfteam von Vetevendosje erfolgreich entgegen treten zu können.

Die Wahl

Am Sonntag, dem 4. April 2021, wählte das Kosovo mit 71 Stimmen Vjosa Osmani zur neuen Präsidentin des Landes. Die Wahl war wie in der Ausgangslage beschrieben dennoch spannend bis zum letzten Wahlgang, zumal Albin Kurti versuchte, die Opposition des Landes mit einer Veränderung des Wahlgesetzes unter Druck zu setzen.

​​​​​​​Am 2. April, forderte Vetevendosje Änderungen am Wahlgesetz, das u.a. die Abstimmung der kosovarischen Diaspora bei den Botschaften und Konsulaten des Kosovo ermöglichen würde. Eine mögliche Änderung in dieser Hinsicht wäre für Vetevendosje von Vorteil, da sie gerade in der Diaspora über großen Rückhalt verfügt. Die Parlamentsmehrheit Vetevendosjes beraumte die Sitzung an und versuchte in Abstimmung mit der Regierung, eine rasche Änderung des Wahlgesetzes herbeizuführen, für die 2/3 der Stimmen im Parlament erforderlich sind. Diese Vorlage wurde von Teilen der Oppositionsparteien als Erpressungsversuch angesehen, dass sie, wenn sie beschließen, die Wahl des Präsidenten zu boykottieren, vorgezogene Wahlen mit der Möglichkeit, dass die Diaspora vollständig im Ausland abstimmen kann, gegenüberstehen würden. Die LDK, die zuvor angekündigt hatte, im Raum zu bleiben und das Mindestquorum zu gewährleisten, drohte damit, dass sie auch die Wahl des Präsidenten boykottieren werden, wenn diese Gesetzesvorlage nicht zurückgezogen wird. Am 3. April zog Vetevendosje das Gesetz zurück, was jedoch auch den Grund hatte, dass es nicht möglich war, das Gesetz im beschleunigten parlamentarischen Verfahren zu verabschieden. Die LDK zog daraufhin ihre Boykottdrohung zurück. Dennoch folgten wie vermutet drei Abge-ordnete der LDK (Avdullah Hoti, ehemaliger Premierminister, Driton Selmanaj, ehemaliger stellvertretender Premierminister und Agim Veliu, ehemaliger Innenminister) der Entscheidung der Parteiführung nicht und boykottierten die Abstimmung.

Am 3. April schlug der erste Versuch, das erforderliche Quorum zu erreichen, dennoch fehl, da nur 78 Abgeordnete abstimmten und somit keine Wahlmöglichkeit bestand. Am Tag danach, den 4. April, fanden überraschende Schritte statt, die es Frau Osmani ermöglichten, gewählt zu werden. Erstens beschlossen zwei Abgeordnete nicht serbischer Minderheiten, zur Versammlung zu kommen und für Osmani zu stimmen. Auf diese Weise stimmten nun alle zehn der garantierten Parlamentssitze der nichtserbischen Minderheiten für Osmani. Unter ihnen auch, Adem Hoxha, der zuvor von Vetevendosje beschuldigt wurde, mit der Srbska-Liste Absprachen getroffen zu haben. Allerdings erscheint diese Entscheidung auch in einem anderen Licht, wenn man bedenkt, dass Vetevendosje seiner Partei wohl die Position eines stellv. Ministers anbot, was Hoxha später selbst bestätigte.

Die größte Überraschung des Tages war aber, dass mit Adeline Grainca, eine neue Abgeordnete der PDK die Seiten wechselte und beschloss, sich Vetevendosje anzuschließen. Sie trat an der Seite Kurtis ins Parlament ein und er präsentierte sie wenige Minuten später über einen Facebook-Beitrag als neues Parteimitglied. Die PDK schloss sie unverzüglich aus der Partei aus und beschuldigte Vetevendosje, ihre Stimme im Austausch für Geschäftsvorteile für ihren Onkel, einem bekannten Geschäftsmann aus Ferizaj, erkauft zu haben. Pikant ist in diesem Zusammenhang, dass Vetevendosje bei ähnlichen Vorfällen um Parteiwechsel in der Vergangenheit, dies immer scharf als Praxis der alten korrupten Kräfte kritisiert hatte.

Eine weitere überraschende Stimme aus der Opposition für Osmani kam von Albena Reshitaj, Mitglied der Fraktion der AAK. In ihrer Erklärung nach den Wahlen sagte sie, dass sie dies getan habe, um Wahlen zu vermeiden und um zu verhindern, dass das Kosovo von der Srbska-Liste abhänge, welche den Wahlprozess in allen drei Wahlgängen boykottierte. Offizielle der AAK behaupteten allerdings, dass sie einen Deal abgeschlossen habe, der finanzielle Vorteile beinhalte, wenn sie für Osmani stimmt.

Am 4. April stimmte die Versammlung dann final mit dem erforderlichen Quorum nach drei Runden ab (in den ersten beiden Runden sind 2/3 Stimmen für den Kandidaten erforderlich) und wählte Frau Osmani zur neuen Präsidentin des Landes.

Ausblick

Vjosa Osmani wird nun fünf Jahre Präsidentin sein und fast synchron zur Regierung, die für vier Jahre gewählt ist, amtieren. Laut Verfassung ist das Präsidentenamt Kosovos neutral, so dass sich Vjosa Osmani parteipolitisch neutral verhalten muss. Als Teil der Wahlliste von Vetevendosje verfügt sie über Mitglieder in Parlament und Regierung, so über Außenministerin Donika Gervalla-Schwarz. Gerüchten zufolge steht auch die Gründung einer eigenen Partei im Raum, deren Vorsitzende sie aber wegen des Neutralitätsgebotes für die Präsidentin nicht sein könnte. Gleichwohl ist bei einer politischen Persönlichkeit wie Vjosa Osmani nicht davon auszugehen, dass sie sich tagespolitischer Äußerungen oder dem Agieren „hinter den Kulissen“ enthalten wird. Mit aktuell 38 Jahren ist sie auch nach Ablauf einer Amtsperiode immer noch eine junge Politikerin mit vielen Ambitionen, so dass abzuwarten bleibt, ob das aktuelle Bündnis mit Albin Kurtis Vetevendosje reibungslos über die gesamte nächste Legislaturperiode arbeiten wird.
​​​​​​​
Unabhängig von allen politischen Inhalten, Parteipräferenzen und Entwicklungen bleibt jedoch festzuhalten, dass die Wahl Osmanis seit langem wieder die Möglichkeit stabiler politischer Verhältnisse eröffnet und der Teufelskreis permanenter Neuwahlen in den vergangenen Jahren durchbrochen werden kann. Die Herausforderungen sind innen- wie außenpolitisch gewaltig. Das demographisch jüngste Land Europas benötigt dringend eine Zukunftsperspektive. Gerade die Jugend hat Albin Kurti und Vjosa Osmani das Mandat dafür verliehen. Und auch der größte Teil der LDK hat gezeigt, dass man konstruktiv Oppositionsarbeit gestalten möchte. Es ist dem Kosovo zu wünschen, dass nun Schritte vorwärts in eine erfolgreiche Zukunft getan werden. Die Erwartungen der Kosovaren sind sehr groß.

 

Asset-Herausgeber

Kontakt

Daniel Braun

Daniel Braun

Leiter des Auslandsbüros Nordmazedonien und Kosovo

daniel.braun@kas.de +389 (2) 3217075 +389 (2) 3217076

comment-portlet

Asset-Herausgeber