protected void addTrigger( SchedulerEntry schedulerEntry, ServiceReference<SchedulerEntry> serviceReference) { String propertyKey = schedulerEntry.getPropertyKey(); if (Validator.isNull(propertyKey)) { return; } long bundleId = GetterUtil.getLong(serviceReference.getProperty("bundle.id"), -1); String triggerValue = null; if (bundleId != 0) { Class<?> clazz = schedulerEntry.getClass(); ClassLoader classloader = clazz.getClassLoader(); triggerValue = getPluginPropertyValue(classloader, propertyKey); } else { triggerValue = PrefsPropsUtil.getString(propertyKey); } if (_log.isDebugEnabled()) { _log.debug("Scheduler property key " + propertyKey + " has trigger value " + triggerValue); } if (Validator.isNotNull(triggerValue)) { schedulerEntry.setTriggerValue(triggerValue); } }
@Override public SchedulerEntry addingService(ServiceReference<SchedulerEntry> serviceReference) { Registry registry = RegistryUtil.getRegistry(); SchedulerEntry schedulerEntry = registry.getService(serviceReference); StorageType storageType = StorageType.MEMORY_CLUSTERED; if (schedulerEntry instanceof StorageTypeAware) { StorageTypeAware storageTypeAware = (StorageTypeAware) schedulerEntry; storageType = storageTypeAware.getStorageType(); } addTrigger(schedulerEntry, serviceReference); String portletId = (String) serviceReference.getProperty("javax.portlet.name"); try { SchedulerEngineHelperUtil.schedule(schedulerEntry, storageType, portletId, 0); return schedulerEntry; } catch (SchedulerException e) { _log.error(e, e); } return null; }
@Override public IndexerPostProcessor addingService( ServiceReference<IndexerPostProcessor> serviceReference) { Registry registry = RegistryUtil.getRegistry(); IndexerPostProcessor indexerPostProcessor = registry.getService(serviceReference); List<String> indexerClassNames = StringPlus.asList(serviceReference.getProperty("indexer.class.name")); for (String indexerClassName : indexerClassNames) { Indexer indexer = IndexerRegistryUtil.getIndexer(indexerClassName); if (indexer == null) { _log.error("No indexer for " + indexerClassName + " was found"); continue; } indexer.registerIndexerPostProcessor(indexerPostProcessor); } return indexerPostProcessor; }
@Override public ResourceBundle addingService(ServiceReference<ResourceBundle> serviceReference) { Registry registry = RegistryUtil.getRegistry(); ResourceBundle resourceBundle = registry.getService(serviceReference); String languageId = GetterUtil.getString(serviceReference.getProperty("language.id"), StringPool.BLANK); Map<String, String> languageMap = new HashMap<>(); Locale locale = null; if (Validator.isNotNull(languageId)) { locale = LocaleUtil.fromLanguageId(languageId, true); } else { locale = new Locale(StringPool.BLANK); } Enumeration<String> keys = resourceBundle.getKeys(); while (keys.hasMoreElements()) { String key = keys.nextElement(); String value = ResourceBundleUtil.getString(resourceBundle, key); languageMap.put(key, value); } Map<String, String> oldLanguageMap = _putLanguageMap(locale, languageMap); _oldLanguageMaps.put(serviceReference, oldLanguageMap); return resourceBundle; }
@Override public Object addingService(ServiceReference<Object> serviceReference) { List<String> authTokenIgnoreActions = StringPlus.asList(serviceReference.getProperty(PropsKeys.AUTH_TOKEN_IGNORE_ACTIONS)); _portletCSRFWhitelistActions.addAll(authTokenIgnoreActions); Registry registry = RegistryUtil.getRegistry(); return registry.getService(serviceReference); }
@Override public void removedService( ServiceReference<ResourceBundle> serviceReference, ResourceBundle resourceBundle) { Registry registry = RegistryUtil.getRegistry(); registry.ungetService(serviceReference); String languageId = (String) serviceReference.getProperty("language.id"); _resourceBundles.remove(languageId); }
@Override public ResourceBundle addingService(ServiceReference<ResourceBundle> serviceReference) { Registry registry = RegistryUtil.getRegistry(); ResourceBundle resourceBundle = registry.getService(serviceReference); String languageId = (String) serviceReference.getProperty("language.id"); _resourceBundles.put(languageId, resourceBundle); return resourceBundle; }
@Override public void removedService( ServiceReference<CustomJspBag> serviceReference, CustomJspBag customJspBag) { Registry registry = RegistryUtil.getRegistry(); registry.ungetService(serviceReference); String contextId = GetterUtil.getString(serviceReference.getProperty("context.id")); for (String customJsp : customJspBag.getCustomJsps()) { String customJspDir = customJspBag.getCustomJspDir(); int pos = customJsp.indexOf(customJspDir); String portalJsp = customJsp.substring(pos + customJspDir.length()); if (customJspBag.isCustomJspGlobal()) { File portalJspFile = new File(PortalUtil.getPortalWebDir() + portalJsp); File portalJspBackupFile = getPortalJspBackupFile(portalJspFile); if (portalJspBackupFile.exists()) { try { FileUtil.copyFile(portalJspBackupFile, portalJspFile); } catch (IOException e) { return; } portalJspBackupFile.delete(); } else if (portalJspFile.exists()) { portalJspFile.delete(); } } else { portalJsp = CustomJspRegistryUtil.getCustomJspFileName(contextId, portalJsp); File portalJspFile = new File(PortalUtil.getPortalWebDir() + portalJsp); if (portalJspFile.exists()) { portalJspFile.delete(); } } } if (!customJspBag.isCustomJspGlobal()) { CustomJspRegistryUtil.unregisterServletContextName(contextId); } _customJspBagsMap.remove(serviceReference); }
@Override public synchronized void removedService( ServiceReference<InvokerPortletFactory> serviceReference, InvokerPortletFactory invokerPortletFactory) { Registry registry = RegistryUtil.getRegistry(); registry.ungetService(serviceReference); serviceReference = registry.getServiceReference(InvokerPortletFactory.class); if (serviceReference != null) { _invokerPortletFactory = registry.getService(serviceReference); _serviceRanking = GetterUtil.getLong(serviceReference.getProperty("service.ranking")); } }
@Override public synchronized InvokerPortletFactory addingService( ServiceReference<InvokerPortletFactory> serviceReference) { Registry registry = RegistryUtil.getRegistry(); InvokerPortletFactory invokerPortletFactory = registry.getService(serviceReference); long serviceRanking = GetterUtil.getLong(serviceReference.getProperty("service.ranking")); if ((_invokerPortletFactory == null) || (serviceRanking > _serviceRanking)) { _invokerPortletFactory = invokerPortletFactory; _serviceRanking = serviceRanking; } return invokerPortletFactory; }
@Test public void testGetCustomJspBags() { Map<ServiceReference<CustomJspBag>, CustomJspBag> customJspBags = CustomJspBagRegistryUtil.getCustomJspBags(); for (Entry<ServiceReference<CustomJspBag>, CustomJspBag> entry : customJspBags.entrySet()) { ServiceReference<CustomJspBag> serviceReference = entry.getKey(); String contextId = GetterUtil.getString(serviceReference.getProperty("context.id")); if (!contextId.equals("TestCustomJspBag")) { continue; } return; } Assert.fail(); }
@Override public void removedService( ServiceReference<ResourceBundle> serviceReference, ResourceBundle resourceBundle) { Registry registry = RegistryUtil.getRegistry(); registry.ungetService(serviceReference); String languageId = GetterUtil.getString(serviceReference.getProperty("language.id"), StringPool.BLANK); Locale locale = null; if (Validator.isNotNull(languageId)) { locale = LocaleUtil.fromLanguageId(languageId, true); } else { locale = new Locale(StringPool.BLANK); } Map<String, String> languageMap = _oldLanguageMaps.get(serviceReference); _putLanguageMap(locale, languageMap); }
@Override public CustomJspBag addingService(ServiceReference<CustomJspBag> serviceReference) { Registry registry = RegistryUtil.getRegistry(); CustomJspBag customJspBag = registry.getService(serviceReference); List<String> customJsps = customJspBag.getCustomJsps(); if (customJsps.isEmpty()) { getCustomJsps( customJspBag.getURLContainer(), customJspBag.getCustomJspDir(), customJspBag.getCustomJsps()); customJsps = customJspBag.getCustomJsps(); if (customJsps.isEmpty()) { return null; } } if (_log.isDebugEnabled()) { StringBundler sb = new StringBundler(customJsps.size() * 2); sb.append("Custom JSP files:\n"); for (int i = 0; i < customJsps.size(); i++) { String customJsp = customJsps.get(0); sb.append(customJsp); if ((i + 1) < customJsps.size()) { sb.append(StringPool.NEW_LINE); } } Log log = SanitizerLogWrapper.allowCRLF(_log); log.debug(sb.toString()); } String contextId = GetterUtil.getString(serviceReference.getProperty("context.id")); if (customJspBag.isCustomJspGlobal() && !_customJspBagsMap.isEmpty()) { try { verifyCustomJsps(contextId, customJspBag); } catch (DuplicateCustomJspException e) { return null; } } _customJspBagsMap.put(serviceReference, customJspBag); String contextName = GetterUtil.getString(serviceReference.getProperty("context.name")); try { initCustomJspBag(contextId, contextName, customJspBag); } catch (Exception e) { return null; } return customJspBag; }
protected void verifyCustomJsps(String contextId, CustomJspBag customJspBag) throws DuplicateCustomJspException { Set<String> customJsps = new HashSet<>(); for (String customJsp : customJspBag.getCustomJsps()) { String portalJsp = getPortalJsp(customJsp, customJspBag.getCustomJspDir()); customJsps.add(portalJsp); } Map<String, String> conflictingCustomJsps = new HashMap<>(); for (Map.Entry<ServiceReference<CustomJspBag>, CustomJspBag> entry : _customJspBagsMap.entrySet()) { CustomJspBag currentCustomJspBag = entry.getValue(); if (!currentCustomJspBag.isCustomJspGlobal()) { continue; } ServiceReference<CustomJspBag> serviceReference = entry.getKey(); String contextName = GetterUtil.getString(serviceReference.getProperty("context.name")); List<String> currentCustomJsps = currentCustomJspBag.getCustomJsps(); for (String currentCustomJsp : currentCustomJsps) { String currentPortalJsp = getPortalJsp(currentCustomJsp, currentCustomJspBag.getCustomJspDir()); if (customJsps.contains(currentPortalJsp)) { conflictingCustomJsps.put(currentPortalJsp, contextName); } } } if (conflictingCustomJsps.isEmpty()) { return; } _log.error(contextId + " conflicts with the installed hooks"); if (_log.isDebugEnabled()) { Log log = SanitizerLogWrapper.allowCRLF(_log); StringBundler sb = new StringBundler(conflictingCustomJsps.size() * 4 + 2); sb.append("Colliding JSP files in "); sb.append(contextId); sb.append(StringPool.NEW_LINE); int i = 0; for (Map.Entry<String, String> entry : conflictingCustomJsps.entrySet()) { sb.append(entry.getKey()); sb.append(" with "); sb.append(entry.getValue()); if ((i + 1) < conflictingCustomJsps.size()) { sb.append(StringPool.NEW_LINE); } i++; } log.debug(sb.toString()); } throw new DuplicateCustomJspException(); }