001    /**
002     * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
014    
015    package com.liferay.portal.verify;
016    
017    import com.liferay.portal.kernel.log.Log;
018    import com.liferay.portal.kernel.log.LogFactoryUtil;
019    import com.liferay.portal.kernel.util.ListUtil;
020    import com.liferay.portal.kernel.util.PropsKeys;
021    import com.liferay.portal.kernel.util.StringPool;
022    import com.liferay.portal.kernel.util.StringUtil;
023    import com.liferay.portal.kernel.util.SystemProperties;
024    import com.liferay.portal.kernel.util.UnicodeProperties;
025    import com.liferay.portal.security.ldap.LDAPSettingsUtil;
026    import com.liferay.portal.service.CompanyLocalServiceUtil;
027    import com.liferay.portal.util.PortalInstances;
028    import com.liferay.portal.util.PrefsPropsUtil;
029    import com.liferay.portal.util.PropsUtil;
030    import com.liferay.portlet.documentlibrary.store.StoreFactory;
031    
032    import java.io.File;
033    import java.io.FileInputStream;
034    import java.io.FileNotFoundException;
035    import java.io.IOException;
036    import java.io.InputStream;
037    
038    import java.util.List;
039    import java.util.Properties;
040    
041    /**
042     * @author Brian Wing Shun Chan
043     */
044    public class VerifyProperties extends VerifyProcess {
045    
046            @Override
047            protected void doVerify() throws Exception {
048    
049                    // system.properties
050    
051                    for (String[] keys : _MIGRATED_SYSTEM_KEYS) {
052                            String oldKey = keys[0];
053                            String newKey = keys[1];
054    
055                            verifyMigratedSystemProperty(oldKey, newKey);
056                    }
057    
058                    for (String[] keys : _RENAMED_SYSTEM_KEYS) {
059                            String oldKey = keys[0];
060                            String newKey = keys[1];
061    
062                            verifyRenamedSystemProperty(oldKey, newKey);
063                    }
064    
065                    for (String key : _OBSOLETE_SYSTEM_KEYS) {
066                            verifyObsoleteSystemProperty(key);
067                    }
068    
069                    // portal.properties
070    
071                    Properties portalProperties = loadPortalProperties();
072    
073                    for (String[] keys : _MIGRATED_PORTAL_KEYS) {
074                            String oldKey = keys[0];
075                            String newKey = keys[1];
076    
077                            verifyMigratedPortalProperty(portalProperties, oldKey, newKey);
078                    }
079    
080                    for (String[] keys : _RENAMED_PORTAL_KEYS) {
081                            String oldKey = keys[0];
082                            String newKey = keys[1];
083    
084                            verifyRenamedPortalProperty(portalProperties, oldKey, newKey);
085                    }
086    
087                    for (String key : _OBSOLETE_PORTAL_KEYS) {
088                            verifyObsoletePortalProperty(portalProperties, key);
089                    }
090    
091                    for (String[] keys : _MODULARIZED_PORTAL_KEYS) {
092                            String oldKey = keys[0];
093                            String newKey = keys[1];
094                            String moduleName = keys[2];
095    
096                            verifyModularizedPortalProperty(
097                                    portalProperties, oldKey, newKey, moduleName);
098                    }
099    
100                    // Document library
101    
102                    StoreFactory.checkProperties();
103    
104                    // LDAP
105    
106                    verifyLDAPProperties();
107            }
108    
109            protected InputStream getPropertiesResourceAsStream(String resourceName)
110                    throws FileNotFoundException {
111    
112                    File propertyFile = new File(resourceName);
113    
114                    if (propertyFile.exists()) {
115                            return new FileInputStream(propertyFile);
116                    }
117    
118                    ClassLoader classLoader = VerifyProperties.class.getClassLoader();
119    
120                    return classLoader.getResourceAsStream(resourceName);
121            }
122    
123            protected Properties loadPortalProperties() {
124                    Properties properties = new Properties();
125    
126                    List<String> propertiesResourceNames = ListUtil.fromArray(
127                            PropsUtil.getArray("include-and-override"));
128    
129                    propertiesResourceNames.add(0, "portal.properties");
130    
131                    for (String propertyResourceName : propertiesResourceNames) {
132                            try (InputStream inputStream = getPropertiesResourceAsStream(
133                                    propertyResourceName)) {
134    
135                                    if (inputStream != null) {
136                                            properties.load(inputStream);
137                                    }
138                            }
139                            catch (IOException ioe) {
140                                    _log.error(
141                                            "Unable to load property " + propertyResourceName, ioe);
142                            }
143                    }
144    
145                    return properties;
146            }
147    
148            protected void verifyLDAPProperties() throws Exception {
149                    long[] companyIds = PortalInstances.getCompanyIdsBySQL();
150    
151                    for (long companyId : companyIds) {
152                            UnicodeProperties properties = new UnicodeProperties();
153    
154                            long[] ldapServerIds = StringUtil.split(
155                                    PrefsPropsUtil.getString(companyId, "ldap.server.ids"), 0L);
156    
157                            for (long ldapServerId : ldapServerIds) {
158                                    String postfix = LDAPSettingsUtil.getPropertyPostfix(
159                                            ldapServerId);
160    
161                                    for (String key : _LDAP_KEYS) {
162                                            String value = PrefsPropsUtil.getString(
163                                                    companyId, key + postfix, null);
164    
165                                            if (value == null) {
166                                                    properties.put(key + postfix, StringPool.BLANK);
167                                            }
168                                    }
169                            }
170    
171                            if (!properties.isEmpty()) {
172                                    CompanyLocalServiceUtil.updatePreferences(
173                                            companyId, properties);
174                            }
175                    }
176            }
177    
178            protected void verifyMigratedPortalProperty(
179                            Properties portalProperties, String oldKey, String newKey)
180                    throws Exception {
181    
182                    if (portalProperties.containsKey(oldKey)) {
183                            _log.error(
184                                    "Portal property \"" + oldKey +
185                                            "\" was migrated to the system property \"" + newKey +
186                                                    "\"");
187                    }
188            }
189    
190            protected void verifyMigratedSystemProperty(String oldKey, String newKey)
191                    throws Exception {
192    
193                    String value = SystemProperties.get(oldKey);
194    
195                    if (value != null) {
196                            _log.error(
197                                    "System property \"" + oldKey +
198                                            "\" was migrated to the portal property \"" + newKey +
199                                                    "\"");
200                    }
201            }
202    
203            protected void verifyModularizedPortalProperty(
204                            Properties portalProperties, String oldKey, String newKey,
205                            String moduleName)
206                    throws Exception {
207    
208                    if (portalProperties.containsKey(oldKey)) {
209                            _log.error(
210                                    "Portal property \"" + oldKey + "\" was modularized to " +
211                                            moduleName + " as \"" + newKey);
212                    }
213            }
214    
215            protected void verifyObsoletePortalProperty(
216                            Properties portalProperties, String key)
217                    throws Exception {
218    
219                    if (portalProperties.containsKey(key)) {
220                            _log.error("Portal property \"" + key + "\" is obsolete");
221                    }
222            }
223    
224            protected void verifyObsoleteSystemProperty(String key) throws Exception {
225                    String value = SystemProperties.get(key);
226    
227                    if (value != null) {
228                            _log.error("System property \"" + key + "\" is obsolete");
229                    }
230            }
231    
232            protected void verifyRenamedPortalProperty(
233                            Properties portalProperties, String oldKey, String newKey)
234                    throws Exception {
235    
236                    if (portalProperties.containsKey(oldKey)) {
237                            _log.error(
238                                    "Portal property \"" + oldKey + "\" was renamed to \"" +
239                                            newKey + "\"");
240                    }
241            }
242    
243            protected void verifyRenamedSystemProperty(String oldKey, String newKey)
244                    throws Exception {
245    
246                    String value = SystemProperties.get(oldKey);
247    
248                    if (value != null) {
249                            _log.error(
250                                    "System property \"" + oldKey + "\" was renamed to \"" +
251                                            newKey + "\"");
252                    }
253            }
254    
255            private static final String[] _LDAP_KEYS = {
256                    PropsKeys.LDAP_CONTACT_CUSTOM_MAPPINGS, PropsKeys.LDAP_CONTACT_MAPPINGS,
257                    PropsKeys.LDAP_USER_CUSTOM_MAPPINGS
258            };
259    
260            private static final String[][] _MIGRATED_PORTAL_KEYS = new String[][] {
261                    new String[] {
262                            "cookie.http.only.names.excludes", "cookie.http.only.names.excludes"
263                    },
264                    new String[] {
265                            "finalize.manager.thread.enabled",
266                            "com.liferay.portal.kernel.memory.FinalizeManager.thread.enabled"
267                    }
268            };
269    
270            private static final String[][] _MIGRATED_SYSTEM_KEYS = new String[][] {
271                    new String[] {
272                            "com.liferay.filters.compression.CompressionFilter",
273                            "com.liferay.portal.servlet.filters.gzip.GZipFilter"
274                    },
275                    new String[] {
276                            "com.liferay.filters.strip.StripFilter",
277                            "com.liferay.portal.servlet.filters.strip.StripFilter"
278                    },
279                    new String[] {
280                            "com.liferay.util.Http.max.connections.per.host",
281                            "com.liferay.portal.util.HttpImpl.max.connections.per.host"
282                    },
283                    new String[] {
284                            "com.liferay.util.Http.max.total.connections",
285                            "com.liferay.portal.util.HttpImpl.max.total.connections"
286                    },
287                    new String[] {
288                            "com.liferay.util.Http.proxy.auth.type",
289                            "com.liferay.portal.util.HttpImpl.proxy.auth.type"
290                    },
291                    new String[] {
292                            "com.liferay.util.Http.proxy.ntlm.domain",
293                            "com.liferay.portal.util.HttpImpl.proxy.ntlm.domain"
294                    },
295                    new String[] {
296                            "com.liferay.util.Http.proxy.ntlm.host",
297                            "com.liferay.portal.util.HttpImpl.proxy.ntlm.host"
298                    },
299                    new String[] {
300                            "com.liferay.util.Http.proxy.password",
301                            "com.liferay.portal.util.HttpImpl.proxy.password"
302                    },
303                    new String[] {
304                            "com.liferay.util.Http.proxy.username",
305                            "com.liferay.portal.util.HttpImpl.proxy.username"
306                    },
307                    new String[] {
308                            "com.liferay.util.Http.timeout",
309                            "com.liferay.portal.util.HttpImpl.timeout"
310                    },
311                    new String[] {
312                            "com.liferay.util.format.PhoneNumberFormat",
313                            "phone.number.format.impl"
314                    },
315                    new String[] {
316                            "com.liferay.util.servlet.UploadServletRequest.max.size",
317                            "com.liferay.portal.upload.UploadServletRequestImpl.max.size"
318                    },
319                    new String[] {
320                            "com.liferay.util.servlet.UploadServletRequest.temp.dir",
321                            "com.liferay.portal.upload.UploadServletRequestImpl.temp.dir"
322                    },
323                    new String[] {
324                            "com.liferay.util.servlet.fileupload.LiferayFileItem." +
325                                    "threshold.size",
326                            "com.liferay.portal.upload.LiferayFileItem.threshold.size"
327                    },
328                    new String[] {
329                            "com.liferay.util.servlet.fileupload.LiferayInputStream." +
330                                    "threshold.size",
331                            "com.liferay.portal.upload.LiferayInputStream.threshold.size"
332                    }
333            };
334    
335            private static final String[][] _MODULARIZED_PORTAL_KEYS = {
336    
337                    // Asset
338    
339                    new String[] {
340                            "asset.browser.search.with.database", "search.with.database",
341                            "com.liferay.asset.browser.web"
342                    },
343                    new String[] {
344                            "asset.categories.navigation.display.templates.config",
345                            "display.templates.config",
346                            "com.liferay.asset.categories.navigation.web"
347                    },
348                    new String[] {
349                            "asset.publisher.check.interval", "check.interval",
350                            "com.liferay.asset.publisher.web"
351                    },
352                    new String[] {
353                            "asset.publisher.email.from.name", "email.from.name",
354                            "com.liferay.asset.publisher.web"
355                    },
356                    new String[] {
357                            "asset.publisher.email.from.address", "email.from.address",
358                            "com.liferay.asset.publisher.web"
359                    },
360                    new String[] {
361                            "asset.publisher.email.asset.entry.added.enabled",
362                            "email.asset.entry.added.enabled", "com.liferay.asset.publisher.web"
363                    },
364                    new String[] {
365                            "asset.publisher.email.asset.entry.added.subject",
366                            "email.asset.entry.added.subject", "com.liferay.asset.publisher.web"
367                    },
368                    new String[] {
369                            "asset.publisher.email.asset.entry.added.body",
370                            "email.asset.entry.added.body", "com.liferay.asset.publisher.web"
371                    },
372                    new String[] {
373                            "asset.publisher.display.style.default", "display.style.default",
374                            "com.liferay.asset.publisher.web"
375                    },
376                    new String[] {
377                            "asset.publisher.display.styles", "display.styles",
378                            "com.liferay.asset.publisher.web"
379                    },
380                    new String[] {
381                            "asset.publisher.display.templates.config",
382                            "display.templates.config", "com.liferay.asset.publisher.web"
383                    },
384                    new String[] {
385                            "asset.publisher.dynamic.subscription.limit",
386                            "dynamic.subscription.limit", "com.liferay.asset.publisher.web"
387                    },
388                    new String[] {
389                            "asset.publisher.permission.checking.configurable",
390                            "permission.checking.configurable",
391                            "com.liferay.asset.publisher.web"
392                    },
393                    new String[] {
394                            "asset.publisher.query.form.configuration",
395                            "query.form.configuration", "com.liferay.asset.publisher.web"
396                    },
397                    new String[] {
398                            "asset.publisher.search.with.index", "search.with.index",
399                            "com.liferay.asset.publisher.web"
400                    },
401                    new String[] {
402                            "asset.tags.navigation.display.templates.config",
403                            "display.templates.config", "com.liferay.asset.tags.navigation.web"
404                    },
405    
406                    // Authentication Verifier
407    
408                    new String[] {
409                            "auth.verifier.BasicAuthHeaderAutoLogin.basic_auth",
410                            "auth.verifier.BasicAuthHeaderAuthVerifier.basic_auth",
411                            "com.liferay.portal.security.auth.verifier"
412                    },
413                    new String[] {
414                            "auth.verifier.BasicAuthHeaderAutoLogin.hosts.allowed",
415                            "auth.verifier.BasicAuthHeaderAuthVerifier.hosts.allowed",
416                            "com.liferay.portal.security.auth.verifier"
417                    },
418                    new String[] {
419                            "auth.verifier.BasicAuthHeaderAutoLogin.urls.excludes",
420                            "auth.verifier.BasicAuthHeaderAuthVerifier.urls.excludes",
421                            "com.liferay.portal.security.auth.verifier"
422                    },
423                    new String[] {
424                            "auth.verifier.BasicAuthHeaderAutoLogin.urls.includes",
425                            "auth.verifier.BasicAuthHeaderAuthVerifier.urls.includes",
426                            "com.liferay.portal.security.auth.verifier"
427                    },
428    
429                    new String[] {
430                            "auth.verifier.DigestAuthenticationAuthVerifier.digest_auth",
431                            "auth.verifier.DigestAuthenticationAuthVerifier.digest_auth",
432                            "com.liferay.portal.security.auth.verifier"
433                    },
434                    new String[] {
435                            "auth.verifier.DigestAuthenticationAuthVerifier.hosts.allowed",
436                            "auth.verifier.DigestAuthenticationAuthVerifier.hosts.allowed",
437                            "com.liferay.portal.security.auth.verifier"
438                    },
439                    new String[] {
440                            "auth.verifier.DigestAuthenticationAuthVerifier.urls.excludes",
441                            "auth.verifier.DigestAuthenticationAuthVerifier.urls.excludes",
442                            "com.liferay.portal.security.auth.verifier"
443                    },
444                    new String[] {
445                            "auth.verifier.DigestAuthenticationAuthVerifier.urls.includes",
446                            "auth.verifier.DigestAuthenticationAuthVerifier.urls.includes",
447                            "com.liferay.portal.security.auth.verifier"
448                    },
449    
450                    new String[] {
451                            "auth.verifier.ParameterAutoLogin.hosts.allowed",
452                            "auth.verifier.RequestParameterAuthVerifier.hosts.allowed",
453                            "com.liferay.portal.security.auth.verifier"
454                    },
455                    new String[] {
456                            "auth.verifier.ParameterAutoLogin.urls.excludes",
457                            "auth.verifier.RequestParameterAuthVerifier.urls.excludes",
458                            "com.liferay.portal.security.auth.verifier"
459                    },
460                    new String[] {
461                            "auth.verifier.ParameterAutoLogin.urls.includes",
462                            "auth.verifier.RequestParameterAuthVerifier.urls.includes",
463                            "com.liferay.portal.security.auth.verifier"
464                    },
465    
466                    new String[] {
467                            "auth.verifier.PortalSessionAuthVerifier.hosts.allowed",
468                            "auth.verifier.PortalSessionAuthVerifier.hosts.allowed",
469                            "com.liferay.portal.security.auth.verifier"
470                    },
471                    new String[] {
472                            "auth.verifier.PortalSessionAuthVerifier.urls.excludes",
473                            "auth.verifier.PortalSessionAuthVerifier.urls.excludes",
474                            "com.liferay.portal.security.auth.verifier"
475                    },
476                    new String[] {
477                            "auth.verifier.PortalSessionAuthVerifier.urls.includes",
478                            "auth.verifier.PortalSessionAuthVerifier.urls.includes",
479                            "com.liferay.portal.security.auth.verifier"
480                    },
481    
482                    new String[] {
483                            "auth.verifier.TunnelingServletAuthVerifier.hosts.allowed",
484                            "auth.verifier.TunnelingServletAuthVerifier.hosts.allowed",
485                            "com.liferay.portal.security.auth.verifier"
486                    },
487                    new String[] {
488                            "auth.verifier.TunnelingServletAuthVerifier.urls.excludes",
489                            "auth.verifier.TunnelingServletAuthVerifier.urls.excludes",
490                            "com.liferay.portal.security.auth.verifier"
491                    },
492                    new String[] {
493                            "auth.verifier.TunnelingServletAuthVerifier.urls.includes",
494                            "auth.verifier.TunnelingServletAuthVerifier.urls.includes",
495                            "com.liferay.portal.security.auth.verifier"
496                    },
497    
498                    // Bookmarks
499    
500                    new String[] {
501                            "bookmarks.email.entry.added.body", "email.entry.added.body",
502                            "com.liferay.bookmarks.service"
503                    },
504                    new String[] {
505                            "bookmarks.email.entry.added.enabled", "email.entry.added.enabled",
506                            "com.liferay.bookmarks.service"
507                    },
508                    new String[] {
509                            "bookmarks.email.entry.added.subject", "email.entry.added.subject",
510                            "com.liferay.bookmarks.service"
511                    },
512                    new String[] {
513                            "bookmarks.email.entry.updated.body", "email.entry.updated.body",
514                            "com.liferay.bookmarks.service"
515                    },
516                    new String[] {
517                            "bookmarks.email.entry.updated.enabled",
518                            "email.entry.updated.enabled", "com.liferay.bookmarks.service"
519                    },
520                    new String[] {
521                            "bookmarks.email.entry.updated.subject",
522                            "email.entry.updated.subject", "com.liferay.bookmarks.service"
523                    },
524                    new String[] {
525                            "bookmarks.email.from.address", "email.from.address",
526                            "com.liferay.bookmarks.service"
527                    },
528                    new String[] {
529                            "bookmarks.email.from.name", "email.from.name",
530                            "com.liferay.bookmarks.service"
531                    },
532                    new String[] {
533                            "bookmarks.entry.columns", "entry.columns",
534                            "com.liferay.bookmarks.service"
535                    },
536                    new String[] {
537                            "bookmarks.folder.columns", "folder.columns",
538                            "com.liferay.bookmarks.service"
539                    },
540                    new String[] {
541                            "bookmarks.folders.search.visible", "folders.search.visible",
542                            "com.liferay.bookmarks.service"
543                    },
544                    new String[] {
545                            "bookmarks.related.assets.enabled", "related.assets.enabled",
546                            "com.liferay.bookmarks.service"
547                    },
548                    new String[] {
549                            "bookmarks.subfolders.visible", "subfolders.visible",
550                            "com.liferay.bookmarks.service"
551                    },
552    
553                    // Breadcrumb
554    
555                    new String[] {
556                            "breadcrumb.display.style.default", "ddm.template.key.default",
557                            "com.liferay.site.navigation.breadcrumb.web"
558                    },
559                    new String[] {
560                            "breadcrumb.display.templates.config", "display.templates.config",
561                            "com.liferay.site.navigation.breadcrumb.web"
562                    },
563                    new String[] {
564                            "breadcrumb.show.guest.group", "show.guest.group",
565                            "com.liferay.site.navigation.breadcrumb.web"
566                    },
567                    new String[] {
568                            "breadcrumb.show.parent.groups", "show.parent.groups",
569                            "com.liferay.site.navigation.breadcrumb.web"
570                    },
571    
572                    // CAS
573    
574                    new String[] {
575                            "cas.auth.enabled", "enabled", "com.liferay.portal.security.sso.cas"
576                    },
577                    new String[] {
578                            "cas.import.from.ldap", "import.from.ldap",
579                            "com.liferay.portal.security.sso.cas"
580                    },
581                    new String[] {
582                            "cas.login.url", "login.url", "com.liferay.portal.security.sso.cas"
583                    },
584                    new String[] {
585                            "cas.logout.on.session.expiration", "logout.on.session.expiration",
586                            "com.liferay.portal.security.sso.cas"
587                    },
588                    new String[] {
589                            "cas.logout.url", "logout.url",
590                            "com.liferay.portal.security.sso.cas"
591                    },
592                    new String[] {
593                            "cas.no.such.user.redirect.url", "no.such.user.redirect.url",
594                            "com.liferay.portal.security.sso.cas"
595                    },
596                    new String[] {
597                            "cas.server.name", "server.name",
598                            "com.liferay.portal.security.sso.cas"
599                    },
600                    new String[] {
601                            "cas.server.url", "server.url",
602                            "com.liferay.portal.security.sso.cas"
603                    },
604                    new String[] {
605                            "cas.service.url", "service.url",
606                            "com.liferay.portal.security.sso.cas"
607                    },
608    
609                    // Currency Converter
610    
611                    new String[] {
612                            "currency.converter.symbols", "symbols",
613                            "com.liferay.currency.converter.web"
614                    },
615    
616                    // Facebook Connect
617    
618                    new String[] {
619                            "facebook.connect.auth.enabled", "enabled",
620                            "com.liferay.portal.security.sso.facebook.connect"
621                    },
622                    new String[] {
623                            "facebook.connect.app.id", "app.id",
624                            "com.liferay.portal.security.sso.facebook.connect"
625                    },
626                    new String[] {
627                            "facebook.connect.app.secret", "app.secret",
628                            "com.liferay.portal.security.sso.facebook.connect"
629                    },
630                    new String[] {
631                            "facebook.connect.graph.url", "graph.url",
632                            "com.liferay.portal.security.sso.facebook.connect"
633                    },
634                    new String[] {
635                            "facebook.connect.oauth.auth.url", "oauth.auth.url",
636                            "com.liferay.portal.security.sso.facebook.connect"
637                    },
638                    new String[] {
639                            "facebook.connect.oauth.redirect.url", "oauth.redirect.url",
640                            "com.liferay.portal.security.sso.facebook.connect"
641                    },
642                    new String[] {
643                            "facebook.connect.oauth.token.url", "oauth.token.url",
644                            "com.liferay.portal.security.sso.facebook.connect"
645                    },
646                    new String[] {
647                            "facebook.connect.verified.account.required",
648                            "verified.account.required",
649                            "com.liferay.portal.security.sso.facebook.connect"
650                    },
651    
652                    // FreeMarker Engine
653    
654                    new String[] {
655                            "freemarker.engine.localized.lookup", "localized.lookup",
656                            "com.liferay.portal.template.freemarker"
657                    },
658                    new String[] {
659                            "freemarker.engine.macro.library", "macro.library",
660                            "com.liferay.portal.template.freemarker"
661                    },
662                    new String[] {
663                            "freemarker.engine.resource.modification.check.interval",
664                            "resource.modification.check",
665                            "com.liferay.portal.template.freemarker"
666                    },
667                    new String[] {
668                            "freemarker.engine.restricted.classes", "restricted.classes",
669                            "com.liferay.portal.template.freemarker"
670                    },
671                    new String[] {
672                            "freemarker.engine.restricted.packages", "restricted.packages",
673                            "com.liferay.portal.template.freemarker"
674                    },
675                    new String[] {
676                            "freemarker.engine.template.exception.handler",
677                            "template.exception.handler",
678                            "com.liferay.portal.template.freemarker"
679                    },
680                    new String[] {
681                            "freemarker.engine.template.parsers", "template.parsers",
682                            "com.liferay.portal.template.freemarker"
683                    },
684                    new String[] {
685                            "journal.template.freemarker.restricted.variables",
686                            "restricted.variables", "com.liferay.portal.template.freemarker"
687                    },
688    
689                    // IFrame
690    
691                    new String[] {"iframe.auth", "auth", "com.liferay.iframe.web"},
692                    new String[] {
693                            "iframe.auth-type", "auth.type", "com.liferay.iframe.web"
694                    },
695                    new String[] {
696                            "iframe.form-method", "form.method", "com.liferay.iframe.web"
697                    },
698                    new String[] {
699                            "iframe.hidden-variables", "hidden.variables",
700                            "com.liferay.iframe.web"
701                    },
702    
703                    // Journal
704    
705                    new String[] {
706                            "journal.article.check.interval", "check.interval",
707                            "com.liferay.journal.web"
708                    },
709                    new String[] {
710                            "journal.article.force.autogenerate.id",
711                            "journal.article.force.autogenerate.id", "com.liferay.journal.web"
712                    },
713                    new String[] {
714                            "journal.article.form.add", "journal.article.form.add",
715                            "com.liferay.journal.web"
716                    },
717                    new String[] {
718                            "journal.article.form.default.values",
719                            "journal.article.form.default.values", "com.liferay.journal.web"
720                    },
721                    new String[] {
722                            "journal.article.form.update", "journal.article.form.update",
723                            "com.liferay.journal.web"
724                    },
725                    new String[] {
726                            "journal.articles.search.with.index",
727                            "journal.articles.search.with.index", "com.liferay.journal.web"
728                    },
729                    new String[] {
730                            "journal.content.publish.to.live.by.default",
731                            "publish.to.live.by.default", "com.liferay.journal.content.web"
732                    },
733                    new String[] {
734                            "journal.content.search.show.listed", "show.listed",
735                            "com.liferay.journal.content.search.web"
736                    },
737                    new String[] {
738                            "journal.default.display.view", "default.display.view",
739                            "com.liferay.journal.web"
740                    },
741                    new String[] {
742                            "journal.display.views", "display.views", "com.liferay.journal.web"
743                    },
744                    new String[] {
745                            "journal.feed.force.autogenerate.id",
746                            "journal.feed.force.autogenerate.id", "com.liferay.journal.web"
747                    },
748                    new String[] {
749                            "journal.publish.to.live.by.default", "publish.to.live.by.defaul",
750                            "com.liferay.journal.web"
751                    },
752                    new String[] {
753                            "journal.publish.version.history.by.default",
754                            "publish.version.history.by.default", "com.liferay.journal.web"
755                    },
756                    new String[] {
757                            "journal.template.language.content[css]",
758                            "journal.article.template.language.content[css]",
759                            "com.liferay.journal.web"
760                    },
761                    new String[] {
762                            "journal.template.language.content[ftl]",
763                            "journal.article.template.language.content[ftl]",
764                            "com.liferay.journal.web"
765                    },
766                    new String[] {
767                            "journal.template.language.content[vm]",
768                            "journal.article.template.language.content[vm]",
769                            "com.liferay.journal.web"
770                    },
771                    new String[] {
772                            "journal.template.language.content[xsl]",
773                            "journal.article.template.language.content[xsl]",
774                            "com.liferay.journal.web"
775                    },
776    
777                    // Language
778    
779                    new String[] {
780                            "language.display.style.default", "ddm.template.key.default",
781                            "com.liferay.site.navigation.language.web"
782                    },
783                    new String[] {
784                            "language.display.templates.config", "display.templates.config",
785                            "com.liferay.site.navigation.language.web"
786                    },
787    
788                    // LDAP
789    
790                    new String[] {
791                            "ldap.auth.enabled", "enabled",
792                            "com.liferay.portal.authenticator.ldap"
793                    },
794                    new String[] {
795                            "ldap.auth.method", "method",
796                            "com.liferay.portal.authenticator.ldap"
797                    },
798                    new String[] {
799                            "ldap.auth.password.encryption.algorithm",
800                            "passwordEncryptionAlgorithm",
801                            "com.liferay.portal.authenticator.ldap"
802                    },
803                    new String[] {
804                            "ldap.auth.required", "required",
805                            "com.liferay.portal.authenticator.ldap"
806                    },
807                    new String[] {
808                            "ldap.export.enabled", "export.enabled", "com.liferay.portal.ldap"
809                    },
810                    new String[] {
811                            "ldap.export.group.enabled", "export.group.enabled",
812                            "com.liferay.portal.ldap"
813                    },
814                    new String[] {
815                            "ldap.factory.initial", "factory.initial", "com.liferay.portal.ldap"
816                    },
817                    new String[] {
818                            "ldap.import.create.role.per.group", "import.create.role.per.group",
819                            "com.liferay.portal.ldap"
820                    },
821                    new String[] {
822                            "ldap.import.enabled", "import.enabled", "com.liferay.portal.ldap"
823                    },
824                    new String[] {
825                            "ldap.import.group.cache.enabled", "import.group.cache.enabled",
826                            "com.liferay.portal.ldap"
827                    },
828                    new String[] {
829                            "ldap.import.group.search.filter.enabled",
830                            "import.group.search.filter.enabled", "com.liferay.portal.ldap"
831                    },
832                    new String[] {
833                            "ldap.import.interval", "import.interval", "com.liferay.portal.ldap"
834                    },
835                    new String[] {
836                            "ldap.import.lock.expiration.time", "import.lock.expiration.time",
837                            "com.liferay.portal.ldap"
838                    },
839                    new String[] {
840                            "ldap.import.method", "import.method", "com.liferay.portal.ldap"
841                    },
842                    new String[] {
843                            "ldap.import.on.startup", "import.on.startup",
844                            "com.liferay.portal.ldap"
845                    },
846                    new String[] {
847                            "ldap.import.user.password.autogenerated",
848                            "import.user.password.autogenerated", "com.liferay.portal.ldap"
849                    },
850                    new String[] {
851                            "ldap.import.user.password.default", "import.user.password.default",
852                            "com.liferay.portal.ldap"
853                    },
854                    new String[] {
855                            "ldap.import.user.password.enabled", "import.user.password.enabled",
856                            "com.liferay.portal.ldap"
857                    },
858                    new String[] {"ldap.page.size", "page.size", "com.liferay.portal.ldap"},
859                    new String[] {
860                            "ldap.password.policy.enabled", "password.policy.enabled",
861                            "com.liferay.portal.ldap"
862                    },
863                    new String[] {
864                            "ldap.range.size", "range.size", "com.liferay.portal.ldap"
865                    },
866                    new String[] {"ldap.referral", "referral", "com.liferay.portal.ldap"},
867                    new String[] {
868                            "ldap.user.ignore.attributes", "user.ignore.attributes",
869                            "com.liferay.portal.ldap"
870                    },
871    
872                    // Lucene
873    
874                    new String[] {
875                            "lucene.analyzer.max.tokens", "analyzer.max.tokens",
876                            "com.liferay.portal.search.lucene"
877                    },
878                    new String[] {
879                            "lucene.buffer.size", "buffer.size",
880                            "com.liferay.portal.search.lucene"
881                    },
882                    new String[] {
883                            "lucene.commit.batch.size", "commit.batch.size",
884                            "com.liferay.portal.search.lucene"
885                    },
886                    new String[] {
887                            "lucene.commit.time.interval", "commit.time.interval",
888                            "com.liferay.portal.search.lucene"
889                    },
890                    new String[] {"lucene.dir", "dir", "com.liferay.portal.search.lucene"},
891                    new String[] {
892                            "lucene.merge.factor", "merge.factor",
893                            "com.liferay.portal.search.lucene"
894                    },
895                    new String[] {
896                            "lucene.merge.policy", "merge.policy",
897                            "com.liferay.portal.search.lucene"
898                    },
899                    new String[] {
900                            "lucene.merge.scheduler", "merge.scheduler",
901                            "com.liferay.portal.search.lucene"
902                    },
903                    new String[] {
904                            "lucene.store.type", "store.type",
905                            "com.liferay.portal.search.lucene"
906                    },
907                    new String[] {
908                            "lucene.store.type.file.force.mmap", "store.type.file.force.mmp",
909                            "com.liferay.portal.search.lucene"
910                    },
911    
912                    // Monitoring
913    
914                    new String[] {
915                            "monitoring.portal.request", "monitor.portal.request",
916                            "com.liferay.portal.monitoring"
917                    },
918                    new String[] {
919                            "monitoring.portlet.action.request",
920                            "monitor.portlet.action.request", "com.liferay.portal.monitoring"
921                    },
922                    new String[] {
923                            "monitoring.portlet.event.request", "monitor.portlet.event.request",
924                            "com.liferay.portal.monitoring"
925                    },
926                    new String[] {
927                            "monitoring.portlet.render.request",
928                            "monitor.portlet.render.request", "com.liferay.portal.monitoring"
929                    },
930                    new String[] {
931                            "monitoring.portlet.resource.request",
932                            "monitor.portlet.resource.request", "com.liferay.portal.monitoring"
933                    },
934                    new String[] {
935                            "monitoring.show.per.request.data.sample",
936                            "show.per.request.data.sample", "com.liferay.portal.monitoring"
937                    },
938    
939                    // Navigation
940    
941                    new String[] {
942                            "navigation.display.style", "display.style",
943                            "com.liferay.site.navigation.menu.web"
944                    },
945                    new String[] {
946                            "navigation.display.style.default", "display.style.default",
947                            "com.liferay.site.navigation.menu.web"
948                    },
949                    new String[] {
950                            "navigation.display.style.options", "display.style.options",
951                            "com.liferay.site.navigation.menu.web"
952                    },
953    
954                    // Nested Portlets
955    
956                    new String[] {
957                            "nested.portlets.layout.template.default",
958                            "layout.template.default", "com.liferay.nested.portlets.web"
959                    },
960                    new String[] {
961                            "nested.portlets.layout.template.unsupported",
962                            "layout.template.unsupported", "com.liferay.nested.portlets.web"
963                    },
964    
965                    // NTLM
966    
967                    new String[] {
968                            "ntlm.auth.enabled", "enabled",
969                            "com.liferay.portal.security.sso.ntlm"
970                    },
971                    new String[] {
972                            "ntlm.auth.domain", "domain", "com.liferay.portal.security.sso.ntlm"
973                    },
974                    new String[] {
975                            "ntlm.auth.domain.controller", "domain.controller",
976                            "com.liferay.portal.security.sso.ntlm"
977                    },
978                    new String[] {
979                            "ntlm.auth.domain.controller.name", "domain.controller.name",
980                            "com.liferay.portal.security.sso.ntlm"
981                    },
982                    new String[] {
983                            "ntlm.auth.negotiate.flags", "negotiate.flags",
984                            "com.liferay.portal.security.sso.ntlm"
985                    },
986                    new String[] {
987                            "ntlm.auth.service.account", "service.account",
988                            "com.liferay.portal.security.sso.ntlm"
989                    },
990                    new String[] {
991                            "ntlm.auth.service.password", "service.password",
992                            "com.liferay.portal.security.sso.ntlm"
993                    },
994    
995                    // OpenID
996    
997                    new String[] {
998                            "open.id.auth.enabled", "enabled",
999                            "com.liferay.portal.security.sso.openid"
1000                    },
1001                    new String[] {
1002                            "open.id.providers", "providers",
1003                            "com.liferay.portal.security.sso.openid"
1004                    },
1005                    new String[] {
1006                            "open.id.ax.schema[default]", "ax.schema",
1007                            "com.liferay.portal.security.sso.openid"
1008                    },
1009                    new String[] {
1010                            "open.id.ax.type.email[default]", "ax.type.email",
1011                            "com.liferay.portal.security.sso.openid"
1012                    },
1013                    new String[] {
1014                            "open.id.ax.type.firstname[default]", "ax.type.firstname",
1015                            "com.liferay.portal.security.sso.openid"
1016                    },
1017                    new String[] {
1018                            "open.id.ax.type.lastname[default]", "ax.type.lastname",
1019                            "com.liferay.portal.security.sso.openid"
1020                    },
1021                    new String[] {
1022                            "open.id.ax.schema[yahoo]", "ax.schema",
1023                            "com.liferay.portal.security.sso.openid"
1024                    },
1025                    new String[] {
1026                            "open.id.ax.type.email[yahoo]", "ax.type.email",
1027                            "com.liferay.portal.security.sso.openid"
1028                    },
1029                    new String[] {
1030                            "open.id.ax.type.fullname[yahoo]", "ax.type.fullname",
1031                            "com.liferay.portal.security.sso.openid"
1032                    },
1033                    new String[] {
1034                            "open.id.url[yahoo]", "url",
1035                            "com.liferay.portal.security.sso.openid"
1036                    },
1037    
1038                    // OpenSSO
1039    
1040                    new String[] {
1041                            "open.sso.auth.enabled", "enabled",
1042                            "com.liferay.portal.security.sso.opensso"
1043                    },
1044                    new String[] {
1045                            "open.sso.email.address.attr", "email.address.attr",
1046                            "com.liferay.portal.security.sso.opensso"
1047                    },
1048                    new String[] {
1049                            "open.sso.first.name.attr", "first.name.attr",
1050                            "com.liferay.portal.security.sso.opensso"
1051                    },
1052                    new String[] {
1053                            "open.sso.last.name.attr", "last.name.attr",
1054                            "com.liferay.portal.security.sso.opensso"
1055                    },
1056                    new String[] {
1057                            "open.sso.import.from.ldap", "import.from.ldap",
1058                            "com.liferay.portal.security.sso.opensso"
1059                    },
1060                    new String[] {
1061                            "open.sso.login.url", "login.url",
1062                            "com.liferay.portal.security.sso.opensso"
1063                    },
1064                    new String[] {
1065                            "open.sso.logout.on.session.expiration",
1066                            "logout.on.session.expiration",
1067                            "com.liferay.portal.security.sso.opensso"
1068                    },
1069                    new String[] {
1070                            "open.sso.logout.url", "logout.url",
1071                            "com.liferay.portal.security.sso.opensso"
1072                    },
1073                    new String[] {
1074                            "open.sso.screen.name.attr", "screen.name.attr",
1075                            "com.liferay.portal.security.sso.opensso"
1076                    },
1077                    new String[] {
1078                            "open.sso.service.url", "service.url",
1079                            "com.liferay.portal.security.sso.opensso"
1080                    },
1081    
1082                    // Polls
1083    
1084                    new String[] {
1085                            "polls.publish.to.live.by.default", "publish.to.live.by.default",
1086                            "com.liferay.polls.service"
1087                    },
1088    
1089                    // Request Header
1090    
1091                    new String[] {
1092                            "request.header.auth.hosts.allowed", "authHostsAllowed",
1093                            "com.liferay.portal.security.auto.login.request.header"
1094                    },
1095    
1096                    new String[] {
1097                            "request.header.auth.import.from.ldap", "importFromLDAP",
1098                            "com.liferay.portal.security.auto.login.request.header"
1099                    },
1100    
1101                    // RSS
1102    
1103                    new String[] {
1104                            "rss.display.templates.config", "display.templates.config",
1105                            "com.liferay.rss.web"
1106                    },
1107    
1108                    // Scripting
1109    
1110                    new String[] {
1111                            "scripting.forbidden.classes", "forbidden.classes",
1112                            "com.liferay.portal.scripting.javascript"
1113                    },
1114    
1115                    // Search
1116    
1117                    new String[] {
1118                            "search.facet.configuration", "facet.configuration",
1119                            "com.liferay.search.web"
1120                    },
1121    
1122                    // Site Map
1123    
1124                    new String[] {
1125                            "sitemap.display.templates.config", "display.templates.config",
1126                            "com.liferay.site.navigation.site.map.web"
1127                    },
1128    
1129                    // Tags Compiler
1130    
1131                    new String[] {
1132                            "tags.compiler.enabled", "enabled",
1133                            "com.liferay.asset.tags.compiler.web"
1134                    },
1135    
1136                    // Translator
1137    
1138                    new String[] {
1139                            "translator.default.languages", "translation.id",
1140                            "com.liferay.translator.web"
1141                    },
1142                    new String[] {
1143                            "translator.languages", "language.ids", "com.liferay.translator.web"
1144                    },
1145    
1146                    // Velocity Engine
1147    
1148                    new String[] {
1149                            "velocity.engine.directive.if.to.string.null.check",
1150                            "directive.if.to.string.null.check",
1151                            "com.liferay.portal.template.velocity"
1152                    },
1153                    new String[] {
1154                            "velocity.engine.resource.parsers", "resource.parsers",
1155                            "com.liferay.portal.template.velocity"
1156                    },
1157                    new String[] {
1158                            "velocity.engine.resource.modification.check.interval",
1159                            "resource.modification.check.interval",
1160                            "com.liferay.portal.template.velocity"
1161                    },
1162                    new String[] {
1163                            "velocity.engine.restricted.classes", "restricted.classes",
1164                            "com.liferay.portal.template.velocity"
1165                    },
1166                    new String[] {
1167                            "velocity.engine.restricted.packages", "restricted.packages",
1168                            "com.liferay.portal.template.velocity"
1169                    },
1170                    new String[] {
1171                            "velocity.engine.restricted.variables", "restricted.variables",
1172                            "com.liferay.portal.template.velocity"
1173                    },
1174                    new String[] {
1175                            "velocity.engine.velocimacro.library", "macro.library",
1176                            "com.liferay.portal.template.velocity"
1177                    },
1178                    new String[] {
1179                            "velocity.engine.logger", "logger",
1180                            "com.liferay.portal.template.velocity"
1181                    },
1182                    new String[] {
1183                            "velocity.engine.logger.category", "logger.category",
1184                            "com.liferay.portal.template.velocity"
1185                    },
1186    
1187                    // XSL Content
1188    
1189                    new String[] {
1190                            "xsl.content.valid.url.prefixes", "valid.url.prefixes",
1191                            "com.liferay.xsl.content.web"
1192                    },
1193                    new String[] {
1194                            "xsl.content.xml.doctype.declaration.allowed",
1195                            "xml.doctype.declaration.allowed", "com.liferay.xsl.content.web"
1196                    },
1197                    new String[] {
1198                            "xsl.content.xml.external.general.entities.allowed",
1199                            "xml.external.general.entities.allowed",
1200                            "com.liferay.xsl.content.web"
1201                    },
1202                    new String[] {
1203                            "xsl.content.xml.external.parameter.entities.allowed",
1204                            "xml.external.parameter.entities.allowed",
1205                            "com.liferay.xsl.content.web"
1206                    },
1207                    new String[] {
1208                            "xsl.content.xsl.secure.processing.enabled",
1209                            "xsl.secure.processing.enabled", "com.liferay.xsl.content.web"
1210                    },
1211    
1212                    // XSL Engine
1213    
1214                    new String[] {
1215                            "xsl.template.secure.processing.enabled",
1216                            "secure.processing.enabled", "com.liferay.portal.template.xsl"
1217                    }
1218            };
1219    
1220            private static final String[] _OBSOLETE_PORTAL_KEYS = new String[] {
1221                    "amazon.access.key.id", "amazon.associate.tag",
1222                    "amazon.secret.access.key",
1223                    "asset.entry.increment.view.counter.enabled",
1224                    "asset.publisher.asset.entry.query.processors",
1225                    "asset.publisher.filter.unlistable.entries",
1226                    "asset.tag.permissions.enabled", "asset.tag.properties.default",
1227                    "asset.tag.properties.enabled", "auth.max.failures.limit",
1228                    "breadcrumb.display.style.options",
1229                    "buffered.increment.parallel.queue.size",
1230                    "buffered.increment.serial.queue.size", "cas.validate.url",
1231                    "cluster.executor.heartbeat.interval",
1232                    "com.liferay.filters.doubleclick.DoubleClickFilter",
1233                    "com.liferay.portal.servlet.filters.doubleclick.DoubleClickFilter",
1234                    "com.liferay.portal.servlet.filters.charbufferpool." +
1235                            "CharBufferPoolFilter",
1236                    "com.liferay.portal.servlet.filters.monitoring.MonitoringFilter",
1237                    "com.liferay.portal.servlet.filters.validhtml.ValidHtmlFilter",
1238                    "commons.pool.enabled", "company.settings.form.configuration",
1239                    "company.settings.form.identification",
1240                    "company.settings.form.miscellaneous", "company.settings.form.social",
1241                    "convert.processes", "discussion.thread.view",
1242                    "dl.file.entry.read.count.enabled",
1243                    "dynamic.data.lists.template.language.parser[ftl]",
1244                    "dynamic.data.lists.template.language.parser[vm]",
1245                    "dynamic.data.lists.template.language.parser[xsl]",
1246                    "dynamic.data.mapping.structure.private.field.names",
1247                    "dynamic.data.mapping.structure.private.field.datatype[_fieldsDisplay]",
1248                    "dynamic.data.mapping.structure.private.field.repeatable[" +
1249                            "_fieldsDisplay]",
1250                    "dynamic.data.mapping.template.language.types",
1251                    "editor.inline.editing.enabled",
1252                    "editor.wysiwyg.portal-web.docroot.html.portlet.asset_publisher." +
1253                            "configuration.jsp",
1254                    "editor.wysiwyg.portal-web.docroot.html.portlet.blogs.configuration." +
1255                            "jsp",
1256                    "editor.wysiwyg.portal-web.docroot.html.portlet.bookmarks." +
1257                            "configuration.jsp",
1258                    "editor.wysiwyg.portal-web.docroot.html.portlet.document_library." +
1259                    "editor.wysiwyg.portal-web.docroot.html.portlet.invitation." +
1260                            "configuration.jsp",
1261                    "editor.wysiwyg.portal-web.docroot.html.portlet.journal." +
1262                            "configuration.jsp",
1263                    "editor.wysiwyg.portal-web.docroot.html.portlet.login.configuration." +
1264                            "jsp",
1265                    "editor.wysiwyg.portal-web.docroot.html.portlet.message_boards." +
1266                            "configuration.jsp",
1267                    "editor.wysiwyg.portal-web.docroot.html.portlet.portal_settings." +
1268                            "email_notifications.jsp",
1269                    "ehcache.cache.manager.statistics.thread.pool.size",
1270                    "ehcache.statistics.enabled",
1271                    "hot.deploy.hook.custom.jsp.verification.enabled",
1272                    "hibernate.cache.region.factory_class",
1273                    "hibernate.cache.use_minimal_puts", "hibernate.cache.use_query_cache",
1274                    "hibernate.cache.use_second_level_cache",
1275                    "hibernate.cache.use_structured_entries", "index.filter.search.limit",
1276                    "invitation.email.max.recipients", "invitation.email.message.body",
1277                    "invitation.email.message.subject", "javax.persistence.validation.mode",
1278                    "jbi.workflow.url", "json.deserializer.strict.mode",
1279                    "journal.article.form.translate", "journal.article.types",
1280                    "journal.articles.page.delta.values",
1281                    "journal.template.language.parser[css]",
1282                    "journal.template.language.parser[ftl]",
1283                    "journal.template.language.parser[vm]",
1284                    "journal.template.language.parser[xsl]",
1285                    "journal.template.language.types", "jpa.configs",
1286                    "jpa.database.platform", "jpa.database.type", "jpa.load.time.weaver",
1287                    "jpa.provider", "jpa.provider.property.eclipselink.allow-zero-id",
1288                    "jpa.provider.property.eclipselink.logging.level",
1289                    "jpa.provider.property.eclipselink.logging.timestamp",
1290                    "language.display.style.options", "layout.form.add",
1291                    "layout.form.update", "layout.reset.portlet.ids",
1292                    "layout.set.form.update", "layout.types", "lucene.analyzer",
1293                    "lucene.cluster.index.loading.sync.timeout", "lucene.file.extractor",
1294                    "lucene.file.extractor.regexp.strip", "lucene.replicate.write",
1295                    "lucene.store.jdbc.auto.clean.up",
1296                    "lucene.store.jdbc.auto.clean.up.enabled",
1297                    "lucene.store.jdbc.auto.clean.up.interval",
1298                    "lucene.store.jdbc.dialect.db2", "lucene.store.jdbc.dialect.derby",
1299                    "lucene.store.jdbc.dialect.hsqldb", "lucene.store.jdbc.dialect.jtds",
1300                    "lucene.store.jdbc.dialect.microsoft",
1301                    "lucene.store.jdbc.dialect.mysql", "lucene.store.jdbc.dialect.oracle",
1302                    "lucene.store.jdbc.dialect.postgresql",
1303                    "memory.cluster.scheduler.lock.cache.enabled",
1304                    "message.boards.email.message.added.signature",
1305                    "message.boards.email.message.updated.signature",
1306                    "message.boards.thread.locking.enabled",
1307                    "multicast.group.address[\"hibernate\"]",
1308                    "multicast.group.port[\"hibernate\"]",
1309                    "net.sf.ehcache.configurationResourceName",
1310                    "net.sf.ehcache.configurationResourceName.peerProviderProperties",
1311                    "organizations.form.add.identification", "organizations.form.add.main",
1312                    "organizations.form.add.miscellaneous",
1313                    "organizations.form.update.identification",
1314                    "organizations.form.update.main",
1315                    "organizations.form.update.miscellaneous", "portal.ctx",
1316                    "portal.security.manager.enable", "permissions.list.filter",
1317                    "permissions.thread.local.cache.max.size",
1318                    "permissions.user.check.algorithm", "persistence.provider",
1319                    "ratings.max.score", "ratings.min.score", "scheduler.classes",
1320                    "schema.run.minimal", "search.container.page.iterator.page.values",
1321                    "service.builder.service.read.only.prefixes", "shard.available.names",
1322                    "siteminder.auth.enabled", "siteminder.import.from.ldap",
1323                    "siteminder.user.header", "sites.form.add.advanced",
1324                    "sites.form.add.main", "sites.form.add.miscellaneous",
1325                    "sites.form.add.seo", "sites.form.update.advanced",
1326                    "sites.form.update.main", "sites.form.update.miscellaneous",
1327                    "sites.form.update.seo", "staging.lock.enabled",
1328                    "table.mapper.cacheless.mapping.table.names", "tck.url",
1329                    "users.form.add.identification", "users.form.add.main",
1330                    "users.form.add.miscellaneous", "users.form.my.account.identification",
1331                    "users.form.my.account.main", "users.form.my.account.miscellaneous",
1332                    "users.form.update.identification", "users.form.update.main",
1333                    "users.form.update.miscellaneous", "webdav.storage.class",
1334                    "webdav.storage.show.edit.url", "webdav.storage.show.view.url",
1335                    "webdav.storage.tokens", "wiki.email.page.added.signature",
1336                    "wiki.email.page.updated.signature", "xss.allow"
1337            };
1338    
1339            private static final String[] _OBSOLETE_SYSTEM_KEYS = new String[] {
1340                    "com.liferay.util.Http.proxy.host", "com.liferay.util.Http.proxy.port",
1341                    "com.liferay.util.XSSUtil.regexp.pattern"
1342            };
1343    
1344            private static final String[][] _RENAMED_PORTAL_KEYS = new String[][] {
1345                    new String[] {
1346                            "amazon.license.0", "amazon.access.key.id"
1347                    },
1348                    new String[] {"amazon.license.1", "amazon.access.key.id"},
1349                    new String[] {"amazon.license.2", "amazon.access.key.id"},
1350                    new String[] {"amazon.license.3", "amazon.access.key.id"},
1351                    new String[] {"cdn.host", "cdn.host.http"},
1352                    new String[] {
1353                            "cluster.executor.debug.enabled", "cluster.link.debug.enabled"
1354                    },
1355                    new String[] {
1356                            "com.liferay.portal.servlet.filters.compression.CompressionFilter",
1357                            "com.liferay.portal.servlet.filters.gzip.GZipFilter"
1358                    },
1359                    new String[] {
1360                            "default.guest.friendly.url",
1361                            "default.guest.public.layout.friendly.url"
1362                    },
1363                    new String[] {
1364                            "default.guest.layout.column", "default.guest.public.layout.column"
1365                    },
1366                    new String[] {
1367                            "default.guest.layout.name", "default.guest.public.layout.name"
1368                    },
1369                    new String[] {
1370                            "default.guest.layout.template.id",
1371                            "default.guest.public.layout.template.id"
1372                    },
1373                    new String[] {
1374                            "default.user.layout.column", "default.user.public.layout.column"
1375                    },
1376                    new String[] {
1377                            "default.user.layout.name", "default.user.public.layout.name"
1378                    },
1379                    new String[] {
1380                            "default.user.layout.template.id",
1381                            "default.user.public.layout.template.id"
1382                    },
1383                    new String[] {
1384                            "default.user.private.layout.lar",
1385                            "default.user.private.layouts.lar"
1386                    },
1387                    new String[] {
1388                            "default.user.public.layout.lar", "default.user.public.layouts.lar"
1389                    },
1390                    new String[] {
1391                            "dl.hook.cmis.credentials.password",
1392                            "dl.store.cmis.credentials.password"
1393                    },
1394                    new String[] {
1395                            "dl.hook.cmis.credentials.username",
1396                            "dl.store.cmis.credentials.username"
1397                    },
1398                    new String[] {
1399                            "dl.hook.cmis.repository.url", "dl.store.cmis.repository.url"
1400                    },
1401                    new String[] {
1402                            "dl.hook.cmis.system.root.dir", "dl.store.cmis.system.root.dir"
1403                    },
1404                    new String[] {
1405                            "dl.hook.file.system.root.dir", "dl.store.file.system.root.dir"
1406                    },
1407                    new String[] {"dl.hook.impl", "dl.store.impl"},
1408                    new String[] {"dl.hook.jcr.fetch.delay", "dl.store.jcr.fetch.delay"},
1409                    new String[] {
1410                            "dl.hook.jcr.fetch.max.failures", "dl.store.jcr.fetch.max.failures"
1411                    },
1412                    new String[] {
1413                            "dl.hook.jcr.move.version.labels",
1414                            "dl.store.jcr.move.version.labels"
1415                    },
1416                    new String[] {"dl.hook.s3.access.key", "dl.store.s3.access.key"},
1417                    new String[] {"dl.hook.s3.bucket.name", "dl.store.s3.bucket.name"},
1418                    new String[] {"dl.hook.s3.secret.key", "dl.store.s3.secret.key"},
1419                    new String[] {
1420                            "editor.wysiwyg.portal-web.docroot.html.portlet.calendar." +
1421                                    "edit_configuration.jsp",
1422                            "editor.wysiwyg.portal-web.docroot.html.portlet.calendar." +
1423                                    "configuration.jsp"
1424                    },
1425                    new String[] {
1426                            "editor.wysiwyg.portal-web.docroot.html.portlet.invitation." +
1427                                    "edit_configuration.jsp",
1428                            "editor.wysiwyg.portal-web.docroot.html.portlet.invitation." +
1429                                    "configuration.jsp"
1430                    },
1431                    new String[] {
1432                            "editor.wysiwyg.portal-web.docroot.html.portlet.journal." +
1433                                    "edit_configuration.jsp",
1434                            "editor.wysiwyg.portal-web.docroot.html.portlet.journal." +
1435                                    "configuration.jsp"
1436                    },
1437                    new String[] {
1438                            "editor.wysiwyg.portal-web.docroot.html.portlet.message_boards." +
1439                                    "edit_configuration.jsp",
1440                            "editor.wysiwyg.portal-web.docroot.html.portlet.message_boards." +
1441                                    "configuration.jsp"
1442                    },
1443                    new String[] {
1444                            "editor.wysiwyg.portal-web.docroot.html.portlet.shopping." +
1445                                    "edit_configuration.jsp",
1446                            "editor.wysiwyg.portal-web.docroot.html.portlet.shopping." +
1447                                    "configuration.jsp"
1448                    },
1449                    new String[] {
1450                            "field.editable.com.liferay.portal.model.User.emailAddress",
1451                            "field.editable.user.types"
1452                    },
1453                    new String[] {
1454                            "field.editable.com.liferay.portal.model.User.screenName",
1455                            "field.editable.user.types"
1456                    },
1457                    new String[] {"icon.menu.max.display.items", "menu.max.display.items"},
1458                    new String[] {
1459                            "journal.error.template.freemarker", "journal.error.template[ftl]"
1460                    },
1461                    new String[] {
1462                            "journal.error.template.velocity", "journal.error.template[vm]"
1463                    },
1464                    new String[] {
1465                            "journal.error.template.xsl", "journal.error.template[xsl]"
1466                    },
1467                    new String[] {
1468                            "journal.template.velocity.restricted.variables",
1469                            "velocity.engine.restricted.variables"
1470                    },
1471                    new String[] {
1472                            "passwords.passwordpolicytoolkit.charset.lowercase",
1473                            "passwords.passwordpolicytoolkit.validator.charset.lowercase"
1474                    },
1475                    new String[] {
1476                            "passwords.passwordpolicytoolkit.charset.numbers",
1477                            "passwords.passwordpolicytoolkit.validator.charset.numbers"
1478                    },
1479                    new String[] {
1480                            "passwords.passwordpolicytoolkit.charset.symbols",
1481                            "passwords.passwordpolicytoolkit.validator.charset.symbols"
1482                    },
1483                    new String[] {
1484                            "passwords.passwordpolicytoolkit.charset.uppercase",
1485                            "passwords.passwordpolicytoolkit.validator.charset.uppercase"
1486                    },
1487                    new String[] {
1488                            "permissions.inline.sql.resource.block.query.threshhold",
1489                            "permissions.inline.sql.resource.block.query.threshold"
1490                    },
1491                    new String[] {
1492                            "portal.instance.http.port", "portal.instance.http.socket.address"
1493                    },
1494                    new String[] {
1495                            "portal.instance.https.port", "portal.instance.http.socket.address"
1496                    },
1497                    new String[] {
1498                            "referer.url.domains.allowed", "redirect.url.domains.allowed"
1499                    },
1500                    new String[] {"referer.url.ips.allowed", "redirect.url.ips.allowed"},
1501                    new String[] {
1502                            "referer.url.security.mode", "redirect.url.security.mode"
1503                    },
1504                    new String[] {
1505                            "tags.asset.increment.view.counter.enabled",
1506                            "asset.entry.increment.view.counter.enabled"
1507                    }
1508            };
1509    
1510            private static final String[][] _RENAMED_SYSTEM_KEYS = new String[][] {
1511                    new String[] {
1512                            "com.liferay.portal.kernel.util.StringBundler.unsafe.create." +
1513                                    "threshold",
1514                            "com.liferay.portal.kernel.util.StringBundler.threadlocal.buffer." +
1515                                    "limit"
1516                    }
1517            };
1518    
1519            private static final Log _log = LogFactoryUtil.getLog(
1520                    VerifyProperties.class);
1521    
1522    }