Leadership
- Home
- Who we are
- Leadership
Leadership
Red Sea Global is led by an experienced, multi-national team of real estate developers, engineering professionals, environmental specialists, experienced designers and project finance experts.
Chairman
H.R.H. Crown Prince Mohammad bin Salman bin Abdulaziz Al Saud
Board Members
Board Members
HH Prince Badr Al-Saud
Minister of Culture
H.E. Dr. Majid Al-Qassabi
Minister of Commerce
H.E. Mr. Ahmed Al-Khateeb
Minister of Tourism
H.E. Eng. Abdulrahman Al-Fadley
Minister of Environment, Water and Agriculture
H.E. Mr. Majed Al-Hogail
Minister of Municipalities and Housing
H.E. Mr. Yasir Al-Rumayyan
Governor of the Public Investment Fund
H.E. Dr. Fahad Toonsi
Secretary General of the Board, Adviser at Saudi Royal Court
Aiman M. Al-Mudaifer
NEOM CEO
John Pagano
Group Chief Executive Officer
Advisory Board Members
Java method "com.sun.proxy.$Proxy926.getLatestArticle(long)" threw an exception when invoked on com.sun.proxy.$Proxy926 object "hu.webtown.liferay.service.wrapper.redsea.journal.article.JournalArticleLocalServiceOverride@36be531a"; see cause exception in the Java stack trace.
----
FTL stack trace ("~" means nesting-related):
- Failed at: #assign journalArticle = journalArtic... [in template "20097#20123#45335" in macro "getPersonCard" at line 93, column 9]
- Reached through: @getPersonCard webContentData.classPK... [in template "20097#20123#45335" at line 43, column 37]
----
1<#if serviceLocator??>
2 <#assign journalArticleService=serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") />
3 <#assign cssClass = "peopleSlider" />
4 <#if (theme.getData())??>
5 <#assign cssClass = cssClass + " peopleSlider--" + theme.getData() />
6 </#if>
7 <#if getterUtil.getBoolean(decorativeBackground.getData())>
8 <#assign cssClass = cssClass + " peopleSlider--bgOverflow peopleSlider--bgImage" />
9 </#if>
10 <!-- begin sections/peopleSlider -->
11 <section class="${cssClass}">
12 <#if getterUtil.getBoolean(decorativeBackground.getData())>
13 <img
14 class="peopleSlider__bg peopleSlider__bg--1"
15 src="${themeDisplay.getPathThemeImages()}/../crafton-frontend/public/images/bg-01-l.svg"
16 alt="background"
17 loading="lazy"
18 role="none" />
19 <img
20 class="peopleSlider__bg peopleSlider__bg--2"
21 src="${themeDisplay.getPathThemeImages()}/../crafton-frontend/public/images/bg-01-r.svg"
22 alt="background"
23 loading="lazy"
24 role="none" />
25 </#if>
26 <div class="peopleSlider__inner wrapper">
27 <!-- begin components/heading -->
28 <div
29 class="heading heading--large <#if (theme.getData())?? && theme.getData() == 'navy'>heading--white</#if> peopleSlider__heading">
30 <h1 class="heading__subtitle">${title.getData()}</h1>
31 </div>
32 <!-- end components/heading -->
33 <div class="peopleSlider__sliderWrapper" data-people-slider>
34 <div class="peopleSlider__slider swiper" data-people-slider-slider>
35 <div class="peopleSlider__items swiper-wrapper" data-people-slider-item>
36 <#if person.getSiblings()?has_content>
37 <#list person.getSiblings() as cur_person>
38 <#assign
39 webContentData = jsonFactoryUtil.createJSONObject(cur_person.getData())
40 />
41
42 <#if webContentData?? && webContentData.classPK??>
43 <@getPersonCard webContentData.classPK?number cur_person?index/>
44 </#if>
45 </#list>
46 </#if>
47 </div>
48 </div>
49 </div>
50 </div>
51 <script type="text/template" data-popup-id="${randomNamespace}board-members" data-popup-theme="full" data-popup-props="{"onMountEvents":[["PeoplePopupSliderCreateNew"]
52 ]}">
53 <!-- begin components/popup/peoplePopup -->
54 <div class="peoplePopup">
55 <div class="peoplePopup__sliderWrapper" data-people-popup-slider="${randomNamespace}board-members">
56 <div class="peoplePopup__slider swiper" data-people-popup-slider-slider>
57 <div class="peoplePopup__items swiper-wrapper">
58 <#if person.getSiblings()?has_content>
59 <#list person.getSiblings() as cur_person>
60 <#assign
61 webContentData = jsonFactoryUtil.createJSONObject(cur_person.getData())
62 />
63
64 <#if webContentData?? && webContentData.classPK??>
65 <@getPopup webContentData.classPK?number />
66 </#if>
67 </#list>
68 </#if>
69 </div>
70 </div>
71 <!-- begin components/sliderNav -->
72 <div class="sliderNav peoplePopup__nav" data-people-popup-slider-nav data-slider-nav>
73 <!-- begin components/arrowButton -->
74 <button class="arrowButton arrowButton--prev arrowButton--default sliderNav__arrow sliderNav__arrow--prev" data-slider-nav-prev>
75 <span class="arrowButton__arrow"></span>
76 </button>
77 <!-- end components/arrowButton -->
78 <!-- begin components/arrowButton -->
79 <button class="arrowButton arrowButton--next arrowButton--default sliderNav__arrow sliderNav__arrow--next" data-slider-nav-next>
80 <span class="arrowButton__arrow"></span>
81 </button>
82 <!-- end components/arrowButton -->
83 </div>
84 <!-- end components/sliderNav -->
85 </div>
86 </div>
87 <!-- end components/popup/peoplePopup -->
88 </script>
89 </section>
90 <!-- end sections/peopleSlider -->
91
92 <#macro getPersonCard classPK index>
93 <#assign journalArticle = journalArticleService.getLatestArticle(classPK) />
94 <#assign description = journalArticle.getDescription(themeDisplay.getLocale()) />
95 <#assign title = journalArticle.getTitle(themeDisplay.getLocale()) />
96
97 <#assign document = saxReaderUtil.read(journalArticle.getContentByLocale(locale.toString())) />
98 <#assign rootElement = document.getRootElement()>
99 <#assign contentXPathSelector = saxReaderUtil.createXPath("dynamic-element[@field-reference='content']")>
100
101 <#assign hasContent = false />
102
103 <#if (contentXPathSelector.selectSingleNode(rootElement))?has_content>
104 <#assign hasContent = (htmlUtil.stripHtml(contentXPathSelector.selectSingleNode(rootElement).getStringValue())?trim?length > 0) />
105 </#if>
106
107 <#attempt>
108 <#assign imgUrl = journalArticle.getArticleImageURL(themeDisplay) />
109 <#recover>
110 <#assign imgUrl = "" />
111 </#attempt>
112
113 <#assign buttonColorCss = "moreButton--gold" />
114 <#if (theme.getData())?? && theme.getData() == 'navy'>
115 <#assign buttonColorCss = "moreButton--white" />
116 </#if>
117
118 <div class="peopleSlider__item swiper-slide" style="<#if (numberOfPersons.getData())?? && numberOfPersons.getData() == '4'> width:25%;</#if>">
119 <!-- begin components/personCard -->
120 <div class="personCard <#if (theme.getData())?? && theme.getData() == 'navy'>personCard--white</#if> peopleSlider__card">
121 <div class="personCard__avatar">
122 <img
123 class="personCard__avatarImg"
124 src="${imgUrl}"
125 loading="lazy"
126 alt="avatar" />
127 </div>
128 <div class="personCard__info">
129 <h4 class="personCard__name">${title}</h4>
130 <div class="personCard__role">${description}</div>
131 <#if hasContent?? && hasContent>
132 <!-- begin components/moreButton -->
133 <button class="moreButton ${buttonColorCss} personCard__more" target="_self" data-popup-target="${randomNamespace}board-members" data-popup-data="{"onMountEvents":[["PeoplePopupSliderSetSlide",{"id":"${randomNamespace}board-members","index":${index}}]]}">
134 <span class="moreButton__text"><@liferay.language key="buttons.read-more" /></span>
135 </button>
136 <!-- end components/moreButton -->
137 </#if>
138 </div>
139 </div>
140 <!-- end components/personCard -->
141 </div>
142 </#macro>
143
144 <#macro getPopup classPK>
145 <#assign journalArticle = journalArticleService.getLatestArticle(classPK) />
146 <#assign document = saxReaderUtil.read(journalArticle.getContentByLocale(locale.toString())) />
147 <#assign rootElement = document.getRootElement()>
148
149 <#assign contentXPathSelector = saxReaderUtil.createXPath("dynamic-element[@field-reference='content']")>
150
151 <#assign content = "" />
152 <#if (contentXPathSelector.selectSingleNode(rootElement))?has_content>
153 <#assign content = contentXPathSelector.selectSingleNode(rootElement).getStringValue() />
154 </#if>
155
156 <#assign description = journalArticle.getDescription(themeDisplay.getLocale()) />
157 <#assign title = journalArticle.getTitle(themeDisplay.getLocale()) />
158
159 <#attempt>
160 <#assign imgUrl = journalArticle.getArticleImageURL(themeDisplay) />
161 <#recover>
162 <#assign imgUrl = "" />
163 </#attempt>
164
165 <div class="peoplePopup__item swiper-slide">
166 <!-- begin components/customScroll -->
167 <div
168 class="customScroll peoplePopup__scroll"
169 data-custom-scroll>
170 <div class="customScroll__scroll">
171 <div class="peoplePopup__person wrapper">
172 <div class="peoplePopup__avatar">
173 <img
174 class="peoplePopup__avatarImg"
175 src="${imgUrl}"
176 loading="lazy"
177 alt="avatar" />
178 </div>
179 <div class="peoplePopup__info">
180 <h4 class="peoplePopup__name">${title}</h4>
181 <div class="peoplePopup__role">${description}</div>
182 <div class="peoplePopup__description">${content}</div>
183 </div>
184 </div>
185 </div>
186 </div>
187 <!-- end components/customScroll -->
188 </div>
189 </#macro>
190</#if>
Executive Management
Executive Management
John Pagano
Group Chief Executive Officer
Eng. Ahmad G. Darwish
Group Chief Administrative Officer
Dr. Maryam Ali Ficociello
Group Chief Governance Officer
Raed Albasseet
Group Chief Environment and Sustainability Officer
Tareq Musmali
Group Chief Internal Audit Officer
Greg Djerejian
Group Chief Legal Officer and Group Head of Investments
Martin Greenslade
Group Chief Financial Officer
Benjamin Edwards
Group Head of Cost, Commercial, and Procurement
John Dunne
Group Head of Health & Safety
Sébastien Carre
Group Head of Hospitality
Get in touch
To learn more about Red Sea Global, please get in touch.