/** * Copyright (c) 2000-present Liferay, Inc. All rights reserved. * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. */ package com.liferay.frontend.image.editor.web.internal.portlet.action; import com.liferay.frontend.image.editor.capability.ImageEditorCapability; import com.liferay.frontend.image.editor.web.internal.constants.ImageEditorPortletKeys; import com.liferay.frontend.image.editor.web.internal.portlet.tracker.ImageEditorCapabilityTracker; import com.liferay.frontend.image.editor.web.internal.portlet.tracker.ImageEditorCapabilityTracker.ImageEditorCapabilityDescriptor; import com.liferay.portal.kernel.language.LanguageUtil; import com.liferay.portal.kernel.portlet.bridges.mvc.MVCRenderCommand; import com.liferay.portal.kernel.template.Template; import com.liferay.portal.kernel.theme.ThemeDisplay; import com.liferay.portal.kernel.util.GetterUtil; import com.liferay.portal.kernel.util.ParamUtil; import com.liferay.portal.kernel.util.Portal; import com.liferay.portal.kernel.util.ResourceBundleLoader; import com.liferay.portal.kernel.util.StringPool; import com.liferay.portal.kernel.util.WebKeys; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.ResourceBundle; import javax.portlet.RenderRequest; import javax.portlet.RenderResponse; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import org.osgi.service.component.annotations.Component; import org.osgi.service.component.annotations.Reference; /** * @author Bruno Basto */ @Component( immediate = true, property = { "javax.portlet.name=" + ImageEditorPortletKeys.IMAGE_EDITOR, "mvc.command.name=/", "mvc.command.name=/image_editor/view" }, service = MVCRenderCommand.class ) public class ViewMVCRenderCommand implements MVCRenderCommand { @Override public String render( RenderRequest renderRequest, RenderResponse renderResponse) { Template template = getTemplate(renderRequest); Map<String, Object> imageEditorCapabilitiesContext = new HashMap<>(); imageEditorCapabilitiesContext.put( "tools", getImageEditorToolsContexts(renderRequest)); template.put("imageEditorCapabilities", imageEditorCapabilitiesContext); String entityURL = ParamUtil.getString(renderRequest, "entityURL"); template.put("image", entityURL); ThemeDisplay themeDisplay = (ThemeDisplay)renderRequest.getAttribute( WebKeys.THEME_DISPLAY); template.put("pathThemeImages", themeDisplay.getPathThemeImages()); String eventName = ParamUtil.getString(renderRequest, "eventName"); template.put("saveEventName", eventName); String saveFileName = ParamUtil.getString( renderRequest, "saveFileName"); template.put("saveFileName", saveFileName); String saveParamName = ParamUtil.getString( renderRequest, "saveParamName"); template.put("saveParamName", saveParamName); String saveURL = ParamUtil.getString(renderRequest, "saveURL"); template.put("saveURL", saveURL); Locale locale = themeDisplay.getLocale(); ResourceBundle resourceBundle = _resourceBundleLoader.loadResourceBundle(locale); Map<String, Object> strings = new HashMap<>(); strings.put("apply", LanguageUtil.get(locale, "apply")); strings.put("cancel", LanguageUtil.get(locale, "cancel")); strings.put("save", LanguageUtil.get(locale, "save")); for (String key : resourceBundle.keySet()) { strings.put(key, LanguageUtil.get(resourceBundle, key)); } template.put("strings", strings); return "ImageEditor"; } protected List<List<ImageEditorCapabilityDescriptor>> getImageEditorCapabilityDescriptorsList( List<ImageEditorCapabilityDescriptor> imageEditorCapabilityDescriptors) { Map<String, List<ImageEditorCapabilityDescriptor>> imageEditorCapabilityDescriptorsMap = new HashMap<>(); for (ImageEditorCapabilityDescriptor imageEditorCapabilityDescriptor : imageEditorCapabilityDescriptors) { Map<String, Object> properties = imageEditorCapabilityDescriptor.getProperties(); String category = GetterUtil.getString( properties.get( "com.liferay.frontend.image.editor.capability.category")); if (!imageEditorCapabilityDescriptorsMap.containsKey(category)) { imageEditorCapabilityDescriptorsMap.put( category, new ArrayList<ImageEditorCapabilityDescriptor>()); } List<ImageEditorCapabilityDescriptor> curImageEditorCapabilityDescriptors = imageEditorCapabilityDescriptorsMap.get(category); curImageEditorCapabilityDescriptors.add( imageEditorCapabilityDescriptor); } return new ArrayList<>(imageEditorCapabilityDescriptorsMap.values()); } protected List<Map<String, Object>> getImageEditorToolsContexts( RenderRequest renderRequest) { List<Map<String, Object>> imageEditorToolsContexts = new ArrayList<>(); ThemeDisplay themeDisplay = (ThemeDisplay)renderRequest.getAttribute( WebKeys.THEME_DISPLAY); List<ImageEditorCapabilityDescriptor> toolImageEditorCapabilityDescriptors = _imageEditorCapabilityTracker. getImageEditorCapabilityDescriptors("tool"); if (toolImageEditorCapabilityDescriptors == null) { return imageEditorToolsContexts; } List<List<ImageEditorCapabilityDescriptor>> imageEditorCapabilityDescriptorsList = getImageEditorCapabilityDescriptorsList( toolImageEditorCapabilityDescriptors); for (List<ImageEditorCapabilityDescriptor> imageEditorCapabilityDescriptors : imageEditorCapabilityDescriptorsList) { Map<String, Object> context = new HashMap<>(); List<Map<String, Object>> controlContexts = new ArrayList<>(); String icon = StringPool.BLANK; for (ImageEditorCapabilityDescriptor imageEditorCapabilityDescriptor : imageEditorCapabilityDescriptors) { Map<String, Object> controlContext = new HashMap<>(); ImageEditorCapability imageEditorCapability = imageEditorCapabilityDescriptor.getImageEditorCapability(); controlContext.put( "label", imageEditorCapability.getLabel(themeDisplay.getLocale())); ServletContext servletContext = imageEditorCapability.getServletContext(); controlContext.put( "modulePath", servletContext.getContextPath()); Map<String, Object> properties = imageEditorCapabilityDescriptor.getProperties(); String variant = GetterUtil.getString( properties.get( "com.liferay.frontend.image.editor.capability." + "controls")); controlContext.put("variant", variant); HttpServletRequest request = _portal.getHttpServletRequest( renderRequest); imageEditorCapability.prepareContext(controlContext, request); controlContexts.add(controlContext); icon = GetterUtil.getString( properties.get( "com.liferay.frontend.image.editor.capability.icon")); } context.put("controls", controlContexts); context.put("icon", icon); imageEditorToolsContexts.add(context); } return imageEditorToolsContexts; } protected Template getTemplate(RenderRequest renderRequest) { return (Template)renderRequest.getAttribute(WebKeys.TEMPLATE); } @Reference private ImageEditorCapabilityTracker _imageEditorCapabilityTracker; @Reference private Portal _portal; @Reference( target = "(bundle.symbolic.name=com.liferay.frontend.image.editor.web)" ) private ResourceBundleLoader _resourceBundleLoader; }