]> source.dussan.org Git - vaadin-framework.git/commitdiff
Improved portlet configuration resolution. (#7814)
authorSauli Tähkäpää <sauli@vaadin.com>
Thu, 13 Mar 2014 11:27:23 +0000 (13:27 +0200)
committerSauli Tähkäpää <sauli@vaadin.com>
Wed, 26 Mar 2014 10:54:16 +0000 (12:54 +0200)
Refactored static path resolution in VaadinPortletService.
Refactored theme name resolution in VaadinPortletService.
Refactored widgetset name resolution in VaadinPortletService.

Change-Id: I44c5ffaa7530383843205aadd8da7642899a04c9

server/src/com/vaadin/server/VaadinPortletRequest.java
server/src/com/vaadin/server/VaadinPortletService.java
server/tests/src/com/vaadin/server/VaadinPortletRequestTests.java [new file with mode: 0644]
server/tests/src/com/vaadin/server/VaadinPortletServiceTests.java

index 9a1e0e7f0795f39c28ecaf05937793c6d9f62baa..eae367a9923610199f9586dedcc11a5d638e9282 100644 (file)
@@ -23,6 +23,7 @@ import java.text.ParseException;
 import java.util.Enumeration;
 
 import javax.portlet.ClientDataRequest;
+import javax.portlet.PortletPreferences;
 import javax.portlet.PortletRequest;
 import javax.portlet.PortletSession;
 import javax.portlet.ResourceRequest;
@@ -191,6 +192,23 @@ public class VaadinPortletRequest extends PortletRequestWrapper implements
         return getRequest().getPortalContext().getProperty(name);
     }
 
+    /**
+     * Reads a portlet preference from the portlet of the request.
+     * 
+     * @param name
+     *            The name of the portlet preference. Cannot be
+     *            <code>null</code>.
+     * 
+     * @return The value of the portlet preference, <code>null</code> if the
+     *         preference is not defined.
+     */
+    public String getPortletPreference(String name) {
+        PortletRequest request = getRequest();
+        PortletPreferences preferences = request.getPreferences();
+
+        return preferences.getValue(name, null);
+    }
+
     @Override
     public VaadinPortletService getService() {
         return vaadinService;
index 42cf479c564774be2a90902f94448a68dd84a169..dceeec8e9158fda9a1ff538e1a540961a8c7021e 100644 (file)
@@ -81,11 +81,46 @@ public class VaadinPortletService extends VaadinService {
         return portlet;
     }
 
-    private static String getPortalProperty(VaadinRequest request,
-            String propertyName) {
+    private String getPortalProperty(VaadinRequest request, String propertyName) {
         return ((VaadinPortletRequest) request).getPortalProperty(propertyName);
     }
 
+    private String getParameter(VaadinRequest request, String name,
+            String defaultValue) {
+        VaadinPortletRequest portletRequest = (VaadinPortletRequest) request;
+
+        String preference = portletRequest.getPortletPreference(name);
+        if (preference != null) {
+            return preference;
+        }
+
+        String appOrSystemProperty = getAppOrSystemProperty(name, null);
+        if (appOrSystemProperty != null) {
+            return appOrSystemProperty;
+        }
+
+        String portalProperty = portletRequest.getPortalProperty(name);
+        if (portalProperty != null) {
+
+            // For backwards compatibility - automatically map old portal
+            // default widget set to default widget set
+            if (name.equals(Constants.PORTAL_PARAMETER_VAADIN_WIDGETSET)) {
+                return mapDefaultWidgetset(portalProperty);
+            }
+
+            return portalProperty;
+        }
+
+        return defaultValue;
+    }
+
+    private String getAppOrSystemProperty(String name, String defaultValue) {
+        DeploymentConfiguration deploymentConfiguration = getDeploymentConfiguration();
+
+        return deploymentConfiguration.getApplicationOrSystemProperty(name,
+                defaultValue);
+    }
+
     @Override
     public String getConfiguredWidgetset(VaadinRequest request) {
 
@@ -94,22 +129,17 @@ public class VaadinPortletService extends VaadinService {
                         VaadinPortlet.PARAMETER_WIDGETSET, null);
 
         if (widgetset == null) {
-            // If no widgetset defined for the application, check the
-            // portal property
-            widgetset = getPortalProperty(request,
-                    VaadinPortlet.PORTAL_PARAMETER_VAADIN_WIDGETSET);
-            if ("com.vaadin.portal.gwt.PortalDefaultWidgetSet"
-                    .equals(widgetset)) {
-                // For backwards compatibility - automatically map old portal
-                // default widget set to default widget set
-                widgetset = VaadinPortlet.DEFAULT_WIDGETSET;
-
-            }
+            widgetset = getParameter(request,
+                    Constants.PORTAL_PARAMETER_VAADIN_WIDGETSET,
+                    Constants.DEFAULT_WIDGETSET);
         }
 
-        if (widgetset == null) {
-            // If no widgetset defined for the portal, use the default
-            widgetset = VaadinPortlet.DEFAULT_WIDGETSET;
+        return widgetset;
+    }
+
+    private String mapDefaultWidgetset(String widgetset) {
+        if ("com.vaadin.portal.gwt.PortalDefaultWidgetSet".equals(widgetset)) {
+            return Constants.DEFAULT_WIDGETSET;
         }
 
         return widgetset;
@@ -117,17 +147,8 @@ public class VaadinPortletService extends VaadinService {
 
     @Override
     public String getConfiguredTheme(VaadinRequest request) {
-
-        // is the default theme defined by the portal?
-        String themeName = getPortalProperty(request,
-                Constants.PORTAL_PARAMETER_VAADIN_THEME);
-
-        if (themeName == null) {
-            // no, using the default theme defined by Vaadin
-            themeName = VaadinPortlet.DEFAULT_THEME_NAME;
-        }
-
-        return themeName;
+        return getParameter(request, Constants.PORTAL_PARAMETER_VAADIN_THEME,
+                Constants.DEFAULT_THEME_NAME);
     }
 
     @Override
@@ -137,24 +158,25 @@ public class VaadinPortletService extends VaadinService {
 
     @Override
     public String getStaticFileLocation(VaadinRequest request) {
-        String staticFileLocation = getPortalProperty(request,
-                Constants.PORTAL_PARAMETER_VAADIN_RESOURCE_PATH);
-        if (staticFileLocation != null) {
-            return trimTrailingSlashes(staticFileLocation);
-        } else {
-            // default for Liferay
-            return "/html";
-        }
+        // /html is default for Liferay
+        String staticFileLocation = getParameter(request,
+                Constants.PORTAL_PARAMETER_VAADIN_RESOURCE_PATH, "/html");
+
+        return trimTrailingSlashes(staticFileLocation);
+    }
+
+    private PortletContext getPortletContext() {
+        return getPortlet().getPortletContext();
     }
 
     @Override
     public String getMimeType(String resourceName) {
-        return getPortlet().getPortletContext().getMimeType(resourceName);
+        return getPortletContext().getMimeType(resourceName);
     }
 
     @Override
     public File getBaseDirectory() {
-        PortletContext context = getPortlet().getPortletContext();
+        PortletContext context = getPortletContext();
         String resultPath = context.getRealPath("/");
         if (resultPath != null) {
             return new File(resultPath);
diff --git a/server/tests/src/com/vaadin/server/VaadinPortletRequestTests.java b/server/tests/src/com/vaadin/server/VaadinPortletRequestTests.java
new file mode 100644 (file)
index 0000000..6e40c57
--- /dev/null
@@ -0,0 +1,52 @@
+package com.vaadin.server;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import javax.portlet.PortletPreferences;
+import javax.portlet.PortletRequest;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Matchers.*;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+public class VaadinPortletRequestTests {
+
+    private PortletRequest request;
+    private VaadinPortletRequest sut;
+    private VaadinPortletService service;
+    private PortletPreferences preferences;
+
+    @Before
+    public void setup() {
+        request = mock(PortletRequest.class);
+        service = mock(VaadinPortletService.class);
+
+        sut = new VaadinPortletRequest(request, service);
+
+        preferences = mock(PortletPreferences.class);
+        when(request.getPreferences()).thenReturn(preferences);
+    }
+
+    @Test
+    public void portletPreferenceIsFetched() {
+        when(preferences.getValue(eq("foo"), anyString())).thenReturn("bar");
+
+        String value = sut.getPortletPreference("foo");
+
+        assertThat(value, is("bar"));
+    }
+
+    @Test
+    public void defaultValueForPortletPreferenceIsNull() {
+        when(preferences.getValue(anyString(), isNull(String.class))).thenReturn(null);
+
+        String value = sut.getPortletPreference("foo");
+
+        assertNull(value);
+    }
+
+}
index c54a6dddce37e35bb0b2aa98fe04f36e5a012a4a..62befdc516adbca79e8d6ba1e4e5b9cd03df0457 100644 (file)
@@ -27,32 +27,165 @@ public class VaadinPortletServiceTests {
 
     private VaadinPortletService sut;
     private VaadinPortletRequest request;
+    private DeploymentConfiguration conf;
 
     @Before
     public void setup() throws ServiceException {
         VaadinPortlet portlet = mock(VaadinPortlet.class);
-        DeploymentConfiguration conf = mock(DeploymentConfiguration.class);
+        conf = mock(DeploymentConfiguration.class);
 
         sut = new VaadinPortletService(portlet, conf);
 
         request = mock(VaadinPortletRequest.class);
     }
 
-    private void mockRequestToReturnLocation(String location) {
-        when(request.getPortalProperty(
-                Constants.PORTAL_PARAMETER_VAADIN_RESOURCE_PATH))
+    private void mockFileLocationProperty(String location) {
+        mockPortalProperty(Constants.PORTAL_PARAMETER_VAADIN_RESOURCE_PATH,
+                location);
+    }
+
+    private void mockPortalProperty(String name, String value) {
+        when(request.getPortalProperty(name)).thenReturn(value);
+    }
+
+    private void mockFileLocationPreference(String location) {
+        when(
+                request.getPortletPreference(Constants.PORTAL_PARAMETER_VAADIN_RESOURCE_PATH))
                 .thenReturn(location);
     }
 
+    private void mockLocationDeploymentConfiguration(String location) {
+        when(
+                conf.getApplicationOrSystemProperty(
+                        Constants.PORTAL_PARAMETER_VAADIN_RESOURCE_PATH, null))
+                .thenReturn(location);
+    }
+
+    private String getStaticFileLocation() {
+        return sut.getStaticFileLocation(request);
+    }
+
+    private String getTheme() {
+        return sut.getConfiguredTheme(request);
+    }
+
+    private void mockThemeProperty(String theme) {
+        mockPortalProperty(Constants.PORTAL_PARAMETER_VAADIN_THEME, theme);
+    }
+
+    private void mockWidgetsetProperty(String widgetset) {
+        mockPortalProperty(Constants.PORTAL_PARAMETER_VAADIN_WIDGETSET,
+                widgetset);
+    }
+
+    private void mockWidgetsetConfiguration(String widgetset) {
+        when(
+                conf.getApplicationOrSystemProperty(
+                        Constants.PARAMETER_WIDGETSET, null)).thenReturn(
+                widgetset);
+    }
+
+    @Test
+    public void preferencesOverrideDeploymentConfiguration() {
+        mockFileLocationPreference("prefs");
+        mockLocationDeploymentConfiguration("conf");
+
+        String location = getStaticFileLocation();
+
+        assertThat(location, is("prefs"));
+    }
+
+    @Test
+    public void deploymentConfigurationOverridesProperties() {
+        mockFileLocationPreference(null);
+        mockLocationDeploymentConfiguration("conf");
+        mockFileLocationProperty("props");
+
+        String location = getStaticFileLocation();
+
+        assertThat(location, is("conf"));
+    }
+
     @Test
-    public void trailingSlashesAreTrimmedFromStaticFileLocation()
-            throws ServiceException {
+    public void defaultFileLocationIsSet() {
+        mockFileLocationPreference(null);
+        mockLocationDeploymentConfiguration(null);
+        mockFileLocationProperty(null);
+
+        String location = getStaticFileLocation();
 
-        mockRequestToReturnLocation("/content////");
+        assertThat(location, is("/html"));
+    }
+
+    @Test
+    public void trailingSlashesAreTrimmedFromStaticFileLocation() {
+        mockFileLocationPreference("/content////");
 
-        String staticFileLocation = sut
-                .getStaticFileLocation(request);
+        String staticFileLocation = getStaticFileLocation();
 
         assertThat(staticFileLocation, is("/content"));
     }
+
+    @Test
+    public void themeCanBeOverridden() {
+        mockThemeProperty("foobar");
+
+        String theme = getTheme();
+
+        assertThat(theme, is("foobar"));
+    }
+
+    @Test
+    public void defaultThemeIsSet() {
+        mockThemeProperty(null);
+
+        String theme = getTheme();
+
+        assertThat(theme, is(Constants.DEFAULT_THEME_NAME));
+    }
+
+    private String getWidgetset() {
+        return sut.getConfiguredWidgetset(request);
+    }
+
+    @Test
+    public void defaultWidgetsetIsSet() {
+        mockWidgetsetProperty(null);
+        mockWidgetsetConfiguration(null);
+
+        String widgetset = getWidgetset();
+
+        assertThat(widgetset, is(Constants.DEFAULT_WIDGETSET));
+    }
+
+    @Test
+    public void configurationWidgetsetOverridesProperty() {
+        mockWidgetsetProperty("foo");
+        mockWidgetsetConfiguration("bar");
+
+        String widgetset = getWidgetset();
+
+        assertThat(widgetset, is("bar"));
+    }
+
+    @Test
+    public void oldDefaultWidgetsetIsMappedToDefaultWidgetset() {
+        mockWidgetsetConfiguration(null);
+        mockWidgetsetProperty("com.vaadin.portal.gwt.PortalDefaultWidgetSet");
+
+        String widgetset = getWidgetset();
+
+        assertThat(widgetset, is(Constants.DEFAULT_WIDGETSET));
+    }
+
+    @Test
+    public void oldDefaultWidgetSetIsNotMappedToDefaultWidgetset() {
+        mockWidgetsetConfiguration("com.vaadin.portal.gwt.PortalDefaultWidgetSet");
+        mockWidgetsetProperty(null);
+
+        String widgetset = getWidgetset();
+
+        assertThat(widgetset,
+                is("com.vaadin.portal.gwt.PortalDefaultWidgetSet"));
+    }
 }