Locations

 

From a single office in London in 1817, we've built a global presence with significant operations globally. 

We support our customers' needs from manufacturing sites all around the globe, providing consistency and quality wherever they are. We invest in our footprint when it adds value, ensuring we're best positioned to serve our customers and future demand.

 

View contact details of our sites around the world

 

Clear All

Sort

An error occurred while processing the template.
The following has evaluated to null or missing:
==> xPathSelector.selectSingleNode(rootElement)  [in template "161555#161602#337340" at line 63, column 25]

----
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: #assign cityNode = xPathSelector.sele...  [in template "161555#161602#337340" at line 63, column 5]
----
1<#assign namespace = renderResponse.getNamespace()> 
2<#assign journalService = serviceLocator.findService('com.liferay.journal.service.JournalArticleService')/> 
3<#assign hits = searchResultsPortletDisplayContext.getDocuments()> 
4 
5<div class="search__results search--locresults" id="search__results-${namespace}"> 
6    <div class="explore__right"> 
7        <div class="explore__rightinner"> 
8            <h2 class="explore__heading"> 
9                <span>Global locations</span> 
10				<span class="explore__filtericon"></span> 
11            </h2> 
12            <div class="explore__results"> 
13                <div class="accordion" id="accordion-${namespace}"> 
14                <#if entries?has_content> 
15 
16                    <#assign locationDetails = [] /> 
17                    <#assign renderingCountry = "--NULL--" /> 
18 
19                	<#list entries as entry> 
20                	    <#if !entry.isTemporarilyUnavailable()> 
21												<#assign hit = hits[entry?index] /> 
22 
23<#if hit?? && hit.articleId?? && hit.articleId?has_content> 
24 
25    <#assign 
26        journalArticle = journalService.getArticle( 
27            getterUtil.getLong(hit.groupId), 
28            hit.articleId 
29
30        document = saxReaderUtil.read( 
31            journalArticle.getContentByLocale(locale.toString()) 
32
33        rootElement = document.getRootElement() 
34    /> 
35 
36    <#-- Country --> 
37   Article ID : ${hit.articleId!''}<br> 
38 
39<#if rootElement??> 
40    ROOT ELEMENT FOUND<br> 
41<#else> 
42    ROOT ELEMENT IS NULL<br> 
43</#if> 
44 
45<#assign xPathSelector = saxReaderUtil.createXPath("dynamic-element[@name='Country']") /> 
46 
47<#if xPathSelector??> 
48    XPATH FOUND<br> 
49<#else> 
50    XPATH NULL<br> 
51</#if> 
52 
53<#attempt> 
54    <#assign countryNode = xPathSelector.selectSingleNode(rootElement) /> 
55    Country Node Found<br> 
56<#recover> 
57    Country Node Failed for Article ${hit.articleId!''}<br> 
58</#recover> 
59 
60 
61    <#-- City --> 
62    <#assign xPathSelector = saxReaderUtil.createXPath("dynamic-element[@name='City']") /> 
63    <#assign cityNode = xPathSelector.selectSingleNode(rootElement) /> 
64    <#assign city = cityNode?? ? then(cityNode.getStringValue()?trim, "") /> 
65 
66    <#-- Address --> 
67    <#assign xPathSelector = saxReaderUtil.createXPath("dynamic-element[@name='Address']") /> 
68    <#assign addressNode = xPathSelector.selectSingleNode(rootElement) /> 
69    <#assign address = addressNode?? ? then(addressNode.getStringValue()?trim?replace("\n","<br/>"), "") /> 
70 
71    <#-- ContactDetails --> 
72    <#assign xPathSelector = saxReaderUtil.createXPath("dynamic-element[@name='ContactDetails']") /> 
73    <#assign contactNode = xPathSelector.selectSingleNode(rootElement) /> 
74    <#assign contactDetails = contactNode?? ? then(contactNode.getStringValue()?trim?replace("\n","<br/>"), "") /> 
75 
76    <#-- MapLink --> 
77    <#assign xPathSelector = saxReaderUtil.createXPath("dynamic-element[@name='MapLink_TitleFieldSet']//dynamic-element[@name='MapLink_External']") /> 
78    <#assign mapNode = xPathSelector.selectSingleNode(rootElement) /> 
79    <#assign mapLink = mapNode?? ? then(mapNode.getStringValue()?trim, "") /> 
80 
81    <#assign locationDetail = { 
82        'country': country, 
83        'city': city, 
84        'address': address, 
85        'contactDetails': contactDetails, 
86        'mapLink': mapLink 
87    } /> 
88 
89</#if> 
90                            <#if country == renderingCountry || renderingCountry == '--NULL--' > 
91                                <#assign 
92                                    renderingCountry = country 
93                                    locationDetails = locationDetails + [locationDetail] 
94                                /> 
95                            <#else> 
96                                <@renderCountryLocations countryName=renderingCountry locationDetails=locationDetails /> 
97                                <#assign 
98                                    renderingCountry = country 
99                                    locationDetails = [locationDetail] 
100                                /> 
101                            </#if> 
102                            <#if entry?is_last> 
103                                <@renderCountryLocations countryName=country locationDetails=locationDetails /> 
104                            </#if> 
105    					</#if> 
106                	</#list> 
107                </#if> 
108                </div> 
109            </div> 
110        </div> 
111    </div> 
112</div> 
113 
114<#macro renderCountryLocations countryName locationDetails> 
115    <#assign sectionId = random.nextInt() /> 
116    <div class="jmaccrdn__section"> 
117        <div class="jmaccrdn__title" role="button" tabindex="0" data-toggle="collapse" data-target="#section${namespace}${sectionId}" 
118            aria-expanded="true" aria-controls="section${namespace}${sectionId}"> 
119        	<p> 
120        	    ${countryName} 
121        	    <span class="jmaccrdn__arrow"></span> 
122        	</p> 
123        </div> 
124        <div id="section${namespace}${sectionId}" class="jmaccrdn__body collapse" data-parent="#accordion-${namespace}"> 
125            <div class="jmaccrdn__answer-sec"> 
126                <#list locationDetails as locationDetail> 
127                    <div class="row country-locations"> 
128                        <div class="col-md-4"> 
129                            <div class="jmcountry-title">City</div> 
130                            <div>${locationDetail.city}</div> 
131                        </div> 
132                        <div class="col-md-4"> 
133                            <div class="jmcountry-title">Address</div> 
134                            <div>${locationDetail.address}</div> 
135                        </div> 
136                        <div class="col-md-4"> 
137                            <div class="jmcountry-title">Contact Details</div> 
138                            <div>${locationDetail.contactDetails}</div> 
139                            <div class="map-link-cont"> 
140                                <a class="map-link" href="${locationDetail.mapLink}" target="_blank">Map Link</a> 
141                            </div> 
142                        </div> 
143                    </div> 
144                </#list> 
145            </div> 
146        </div> 
147    </div> 
148</#macro> 
149 
150<script> 
151$(function() { 
152    $("#search__results-${namespace}").parent().find(".pagination-bar").hide(); 
153	  $('button.dropdown-toggle.page-link[role="combobox"]').attr('aria-label', 'Select number of entries per page'); 
154}); 
155</script> 
156 
157<style> 
158     
159@media (min-width: 320px) and (max-width: 650px) { 
160    .search__results .explore__right { 
161        margin-top: -16%; 
162
163    .search--locresults .jmaccrdn__title p { 
164        font-size: 20px !important; 
165
166	.explore__heading{ 
167	  padding-left: 14.2px !important; 
168    padding-right: 14px !important; 
169
170	.search--locresults .jmaccrdn__title p { 
171	   padding: 25px 25px 25px 18px; 
172
173
174</style>