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.portlet.dynamicdatamapping.registry;
016    
017    import com.liferay.portal.kernel.exception.PortalException;
018    import com.liferay.portal.kernel.io.unsync.UnsyncStringWriter;
019    import com.liferay.portal.kernel.language.LanguageUtil;
020    import com.liferay.portal.kernel.template.Template;
021    import com.liferay.portal.kernel.template.TemplateConstants;
022    import com.liferay.portal.kernel.template.TemplateManagerUtil;
023    import com.liferay.portal.kernel.template.TemplateResource;
024    import com.liferay.portal.kernel.template.URLTemplateResource;
025    import com.liferay.portlet.dynamicdatamapping.model.DDMFormField;
026    import com.liferay.portlet.dynamicdatamapping.render.DDMFormFieldRenderingContext;
027    
028    import java.io.Writer;
029    
030    import java.net.URL;
031    
032    import java.util.Locale;
033    
034    /**
035     * @author Marcellus Tavares
036     */
037    public abstract class BaseDDMFormFieldRenderer implements DDMFormFieldRenderer {
038    
039            @Override
040            public String render(
041                            DDMFormField ddmFormField,
042                            DDMFormFieldRenderingContext ddmFormFieldRenderingContext)
043                    throws PortalException {
044    
045                    Template template = TemplateManagerUtil.getTemplate(
046                            getTemplateLanguage(), getTemplateResource(), false);
047    
048                    template.put(TemplateConstants.NAMESPACE, getTemplateNamespace());
049    
050                    populateRequiredContext(
051                            template, ddmFormField, ddmFormFieldRenderingContext);
052    
053                    populateOptionalContext(
054                            template, ddmFormField, ddmFormFieldRenderingContext);
055    
056                    return render(template);
057            }
058    
059            protected TemplateResource getTemplateResource(String templatePath) {
060                    Class<?> clazz = getClass();
061    
062                    ClassLoader classLoader = clazz.getClassLoader();
063    
064                    URL templateURL = classLoader.getResource(templatePath);
065    
066                    return new URLTemplateResource(templateURL.getPath(), templateURL);
067            }
068    
069            protected void populateOptionalContext(
070                    Template template, DDMFormField ddmFormField,
071                    DDMFormFieldRenderingContext ddmFormFieldRenderingContext) {
072            }
073    
074            protected void populateRequiredContext(
075                    Template template, DDMFormField ddmFormField,
076                    DDMFormFieldRenderingContext ddmFormFieldRenderingContext) {
077    
078                    Locale locale = ddmFormFieldRenderingContext.getLocale();
079    
080                    template.put(
081                            "childElementsHTML",
082                            ddmFormFieldRenderingContext.getChildElementsHTML());
083                    template.put("dir", LanguageUtil.get(locale, "lang.dir"));
084                    template.put("label", ddmFormFieldRenderingContext.getLabel());
085                    template.put("name", ddmFormFieldRenderingContext.getName());
086                    template.put("value", ddmFormFieldRenderingContext.getValue());
087                    template.put("visible", ddmFormFieldRenderingContext.isVisible());
088            }
089    
090            protected String render(Template template) throws PortalException {
091                    Writer writer = new UnsyncStringWriter();
092    
093                    template.processTemplate(writer);
094    
095                    return writer.toString();
096            }
097    
098    }