| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| package org.apache.sling.scripting.thymeleaf.internal; |
| |
| import java.util.regex.Pattern; |
| |
| import org.apache.commons.lang3.StringUtils; |
| import org.apache.sling.api.resource.Resource; |
| import org.apache.sling.scripting.thymeleaf.TemplateModeProvider; |
| import org.osgi.framework.Constants; |
| import org.osgi.service.component.annotations.Activate; |
| import org.osgi.service.component.annotations.Component; |
| import org.osgi.service.component.annotations.Deactivate; |
| import org.osgi.service.component.annotations.Modified; |
| import org.osgi.service.metatype.annotations.Designate; |
| import org.slf4j.Logger; |
| import org.slf4j.LoggerFactory; |
| import org.thymeleaf.templatemode.TemplateMode; |
| |
| @Component( |
| immediate = true, |
| property = { |
| Constants.SERVICE_DESCRIPTION + "=Pattern TemplateModeProvider for Sling Scripting Thymeleaf", |
| Constants.SERVICE_VENDOR + "=The Apache Software Foundation" |
| } |
| ) |
| @Designate( |
| ocd = PatternTemplateModeProviderConfiguration.class |
| ) |
| public class PatternTemplateModeProvider implements TemplateModeProvider { |
| |
| private Pattern htmlPattern; |
| |
| private Pattern xmlPattern; |
| |
| private Pattern textPattern; |
| |
| private Pattern javascriptPattern; |
| |
| private Pattern cssPattern; |
| |
| private Pattern rawPattern; |
| |
| private final Logger logger = LoggerFactory.getLogger(PatternTemplateModeProvider.class); |
| |
| public PatternTemplateModeProvider() { |
| } |
| |
| @Activate |
| private void activate(final PatternTemplateModeProviderConfiguration configuration) { |
| logger.debug("activating"); |
| configure(configuration); |
| } |
| |
| @Modified |
| private void modified(final PatternTemplateModeProviderConfiguration configuration) { |
| logger.debug("modifying"); |
| configure(configuration); |
| } |
| |
| @Deactivate |
| private void deactivate() { |
| logger.debug("deactivating"); |
| } |
| |
| private void configure(final PatternTemplateModeProviderConfiguration configuration) { |
| // HTML |
| htmlPattern = StringUtils.isNotBlank(configuration.htmlPattern()) ? Pattern.compile(configuration.htmlPattern()) : null; |
| logger.debug("configured HTML pattern: {}", htmlPattern); |
| // XML |
| xmlPattern = StringUtils.isNotBlank(configuration.xmlPattern()) ? Pattern.compile(configuration.xmlPattern()) : null; |
| logger.debug("configured XML pattern: {}", xmlPattern); |
| // TEXT |
| textPattern = StringUtils.isNotBlank(configuration.textPattern()) ? Pattern.compile(configuration.textPattern()) : null; |
| logger.debug("configured TEXT pattern: {}", textPattern); |
| // JAVASCRIPT |
| javascriptPattern = StringUtils.isNotBlank(configuration.javascriptPattern()) ? Pattern.compile(configuration.javascriptPattern()) : null; |
| logger.debug("configured JAVASCRIPT pattern: {}", javascriptPattern); |
| // CSS |
| cssPattern = StringUtils.isNotBlank(configuration.cssPattern()) ? Pattern.compile(configuration.cssPattern()) : null; |
| logger.debug("configured CSS pattern: {}", cssPattern); |
| // RAW |
| rawPattern = StringUtils.isNotBlank(configuration.rawPattern()) ? Pattern.compile(configuration.rawPattern()) : null; |
| logger.debug("configured RAW pattern: {}", rawPattern); |
| } |
| |
| @Override |
| public TemplateMode provideTemplateMode(final Resource resource) { |
| final String path = resource.getPath(); |
| if (htmlPattern != null && htmlPattern.matcher(path).matches()) { |
| return TemplateMode.HTML; |
| } |
| if (xmlPattern != null && xmlPattern.matcher(path).matches()) { |
| return TemplateMode.XML; |
| } |
| if (textPattern != null && textPattern.matcher(path).matches()) { |
| return TemplateMode.TEXT; |
| } |
| if (javascriptPattern != null && javascriptPattern.matcher(path).matches()) { |
| return TemplateMode.JAVASCRIPT; |
| } |
| if (cssPattern != null && cssPattern.matcher(path).matches()) { |
| return TemplateMode.CSS; |
| } |
| if (rawPattern != null && rawPattern.matcher(path).matches()) { |
| return TemplateMode.RAW; |
| } |
| return null; |
| } |
| |
| } |