gatein SVN: r3817 - exo/portal/branches/3.1.x/webui/portal/src/main/java/org/exoplatform/portal/webui/application.
by do-not-reply@jboss.org
Author: hoang_to
Date: 2010-08-13 07:28:14 -0400 (Fri, 13 Aug 2010)
New Revision: 3817
Modified:
exo/portal/branches/3.1.x/webui/portal/src/main/java/org/exoplatform/portal/webui/application/UIGadget.java
Log:
EXOGTN-19: Refresh problem on gadgets after saving user preference
Modified: exo/portal/branches/3.1.x/webui/portal/src/main/java/org/exoplatform/portal/webui/application/UIGadget.java
===================================================================
--- exo/portal/branches/3.1.x/webui/portal/src/main/java/org/exoplatform/portal/webui/application/UIGadget.java 2010-08-13 11:25:43 UTC (rev 3816)
+++ exo/portal/branches/3.1.x/webui/portal/src/main/java/org/exoplatform/portal/webui/application/UIGadget.java 2010-08-13 11:28:14 UTC (rev 3817)
@@ -391,11 +391,7 @@
public void addUserPref(String addedUserPref) throws Exception
{
DataStorage service = getApplicationComponent(DataStorage.class);
- org.exoplatform.portal.pom.spi.gadget.Gadget gadget = service.load(state, ApplicationType.GADGET);
- if (gadget == null)
- {
- gadget = new org.exoplatform.portal.pom.spi.gadget.Gadget();
- }
+ org.exoplatform.portal.pom.spi.gadget.Gadget gadget = new org.exoplatform.portal.pom.spi.gadget.Gadget();
//
gadget.addUserPref(addedUserPref);
13 years, 10 months
gatein SVN: r3816 - exo/portal/branches/3.1.x/web/eXoResources/src/main/webapp/javascript/eXo/portal.
by do-not-reply@jboss.org
Author: hoang_to
Date: 2010-08-13 07:25:43 -0400 (Fri, 13 Aug 2010)
New Revision: 3816
Modified:
exo/portal/branches/3.1.x/web/eXoResources/src/main/webapp/javascript/eXo/portal/UIPortal.js
Log:
EXOGTN-18: Edit/Delete icons on portlet 's info bar are not showed in IE7 when the language is Arabic
Modified: exo/portal/branches/3.1.x/web/eXoResources/src/main/webapp/javascript/eXo/portal/UIPortal.js
===================================================================
--- exo/portal/branches/3.1.x/web/eXoResources/src/main/webapp/javascript/eXo/portal/UIPortal.js 2010-08-13 11:20:05 UTC (rev 3815)
+++ exo/portal/branches/3.1.x/web/eXoResources/src/main/webapp/javascript/eXo/portal/UIPortal.js 2010-08-13 11:25:43 UTC (rev 3816)
@@ -98,6 +98,56 @@
}
newLayer.parentNode.style.top = -height + "px";
editBlock.style.display = "block";
+
+ //resize width of portlet/container control if IE + LTR align BEGIN
+
+ var uiInfoBar = DOMUtil.findFirstDescendantByClass(editBlock, "div", "UIInfoBar");
+
+ if( uiInfoBar && (eXo.core.Browser.isIE6() || (eXo.core.Browser.isIE7() && eXo.core.I18n.isRT()))){
+ //resize width of portlet/container only one time
+ if(uiInfoBar.style.width == ""){
+ var dragControlArea = DOMUtil.findFirstDescendantByClass(uiInfoBar, "div", "DragControlArea");
+
+ var portletIcon = DOMUtil.findFirstDescendantByClass(uiInfoBar, "div", "PortletIcon");
+ var editPortletPropertiesIcon = DOMUtil.findFirstDescendantByClass(uiInfoBar, "a", "EditPortletPropertiesIcon");
+ var deletePortletIcon = DOMUtil.findFirstDescendantByClass(uiInfoBar, "a", "DeletePortletIcon");
+
+ var contarnerIcon = DOMUtil.findFirstDescendantByClass(uiInfoBar, "div", "ContainerIcon");
+ var editContainerIcon = DOMUtil.findFirstDescendantByClass(uiInfoBar, "a", "EditContainerIcon");
+ var deleteContainerIcon = DOMUtil.findFirstDescendantByClass(uiInfoBar, "a", "DeleteContainerIcon");
+
+ var uiInfoBarWidth = dragControlArea.offsetWidth;
+
+ if(DOMUtil.hasClass(portlet, "UIPortlet")){
+ uiInfoBarWidth += portletIcon.offsetWidth;
+
+ if(editPortletPropertiesIcon){
+ uiInfoBarWidth += editPortletPropertiesIcon.offsetWidth;
+ }
+
+ if(deletePortletIcon){
+ uiInfoBarWidth += deletePortletIcon.offsetWidth;
+ }
+ }
+
+ if(DOMUtil.hasClass(portlet, "UIContainer")){
+ uiInfoBarWidth += contarnerIcon.offsetWidth
+
+ if(editContainerIcon){
+ uiInfoBarWidth += editContainerIcon.offsetWidth;
+ }
+
+ if(deleteContainerIcon){
+ uiInfoBarWidth += deleteContainerIcon.offsetWidth;
+ }
+ }
+
+ uiInfoBar.style.width= uiInfoBarWidth + 35 + "px";
+ }
+
+ }
+ //resize width of portlet/container control if IE + LTR align END
+
} else {
editBlock.style.display = "none";
if(!DOMUtil.hasClass(portlet, "UIPortlet")) {
13 years, 10 months
gatein SVN: r3815 - exo/portal/branches/3.1.x/component/resources/src/main/java/org/exoplatform/services/resources.
by do-not-reply@jboss.org
Author: hoang_to
Date: 2010-08-13 07:20:05 -0400 (Fri, 13 Aug 2010)
New Revision: 3815
Modified:
exo/portal/branches/3.1.x/component/resources/src/main/java/org/exoplatform/services/resources/ExoResourceBundle.java
Log:
EXOGTN-16: Properties files are incorrectly read
Modified: exo/portal/branches/3.1.x/component/resources/src/main/java/org/exoplatform/services/resources/ExoResourceBundle.java
===================================================================
--- exo/portal/branches/3.1.x/component/resources/src/main/java/org/exoplatform/services/resources/ExoResourceBundle.java 2010-08-13 10:30:04 UTC (rev 3814)
+++ exo/portal/branches/3.1.x/component/resources/src/main/java/org/exoplatform/services/resources/ExoResourceBundle.java 2010-08-13 11:20:05 UTC (rev 3815)
@@ -20,14 +20,10 @@
package org.exoplatform.services.resources;
import java.io.Serializable;
-import java.util.ArrayList;
import java.util.Enumeration;
-import java.util.List;
import java.util.ListResourceBundle;
import java.util.Map;
import java.util.ResourceBundle;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
/**
* May 7, 2004
@@ -78,7 +74,7 @@
String key = keys.nextElement();
if (key != null)
{
- map.put(key, getString(key));
+ map.put(key.trim(), getString(key));
}
}
}
13 years, 10 months
gatein SVN: r3814 - exo/portal/branches/3.1.x/docs/reference-guide/en/modules/PortalDevelopment.
by do-not-reply@jboss.org
Author: hoang_to
Date: 2010-08-13 06:30:04 -0400 (Fri, 13 Aug 2010)
New Revision: 3814
Modified:
exo/portal/branches/3.1.x/docs/reference-guide/en/modules/PortalDevelopment/DefaultPortalNavigationConfiguration.xml
Log:
EXOGTN-32: Document the gatein objects xsd
Modified: exo/portal/branches/3.1.x/docs/reference-guide/en/modules/PortalDevelopment/DefaultPortalNavigationConfiguration.xml
===================================================================
--- exo/portal/branches/3.1.x/docs/reference-guide/en/modules/PortalDevelopment/DefaultPortalNavigationConfiguration.xml 2010-08-13 03:48:40 UTC (rev 3813)
+++ exo/portal/branches/3.1.x/docs/reference-guide/en/modules/PortalDevelopment/DefaultPortalNavigationConfiguration.xml 2010-08-13 10:30:04 UTC (rev 3814)
@@ -181,28 +181,36 @@
When <literal>#{...}</literal> syntax is used, the enclosed property name serves as a key that is automatically passed to internationalization mechanism
so the literal property name is replaced by a localized value taken from the associated properties file matching the current locale.
</para>
+
+<programlisting role="XML">
+ <![CDATA[
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<node-navigation
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.gatein.org/xml/ns/gatein_objects_1_0 http://www.gatein.org/xml/ns/gatein_objects_1_0"
+ xmlns="http://www.gatein.org/xml/ns/gatein_objects_1_0">
+ <priority>1</priority>
+ <page-nodes>
+ <node>
+ <uri>home</uri>
+ <name>home</name>
+ <label>#{portal.classic.home}</label>
+ <page-reference>portal::classic::homepage</page-reference>
+ </node>
+ <node>
+ <uri>sitemap</uri>
+ <name>sitemap</name>
+ <label>#{portal.classic.sitemap}</label>
+ <visibility>DISPLAYED</visibility>
+ <page-reference>portal::classic::sitemap</page-reference>
+ </node>
+ </page-nodes>
+</node-navigation>
+
+ ]]>
+</programlisting>
+
-<programlisting role="XML"><?xml version="1.0" encoding="UTF-8"?>
-<node-navigation>
- <owner-type>portal</owner-type>
- <owner-id>classic</owner-id>
- <priority>1</priority>
- <page-nodes>
- <node>
- <uri>home</uri>
- <name>home</name>
- <label>#{portal.classic.home}</label>
- <page-reference>portal::classic::homepage</page-reference>
- </node>
- <node>
- <uri>webexplorer</uri>
- <name>webexplorer</name>
- <label>#{portal.classic.webexplorer}</label>
- <page-reference>portal::classic::webexplorer</page-reference>
- </node>
- </page-nodes>
-</node-navigation>
-</programlisting>
<para>
This navigation tree can have multiple views inside portlets (such as the breadcrumbs portlet) that render the current view node, the site map or the menu portlets.
</para>
@@ -221,42 +229,58 @@
This configuration file structure is very similar to <filename>portal.xml</filename> and it can also contain container tags.
Each application can decide whether to render the portlet border, the window state, the icons or portlet's mode.
</para>
+
+<programlisting role="XML">
+ <![CDATA[
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<page-set
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.gatein.org/xml/ns/gatein_objects_1_0 http://www.gatein.org/xml/ns/gatein_objects_1_0"
+ xmlns="http://www.gatein.org/xml/ns/gatein_objects_1_0">
+
+ <page>
+ <name>homepage</name>
+ <title>Home Page</title>
+ <access-permissions>Everyone</access-permissions>
+ <edit-permission>*:/platform/administrators</edit-permission>
+ <portlet-application>
+ <portlet>
+ <application-ref>web</application-ref>
+ <portlet-ref>HomePagePortlet</portlet-ref>
+ <preferences>
+ <preference>
+ <name>template</name>
+ <value>system:/templates/groovy/webui/component/UIHomePagePortlet.gtmpl</value>
+ <read-only>false</read-only>
+ </preference>
+ </preferences>
+ </portlet>
+ <title>Home Page portlet</title>
+ <access-permissions>Everyone</access-permissions>
+ <show-info-bar>false</show-info-bar>
+ <show-application-state>false</show-application-state>
+ <show-application-mode>false</show-application-mode>
+ </portlet-application>
+ </page>
+ <page>
+ <name>sitemap</name>
+ <title>Site Map</title>
+ <access-permissions>Everyone</access-permissions>
+ <edit-permission>*:/platform/administrators</edit-permission>
+ <portlet-application>
+ <portlet>
+ <application-ref>web</application-ref>
+ <portlet-ref>SiteMapPortlet</portlet-ref>
+ </portlet>
+ <title>SiteMap</title>
+ <access-permissions>Everyone</access-permissions>
+ <show-info-bar>false</show-info-bar>
+ </portlet-application>
+ </page>
+</page-set>
+]]>
+</programlisting>
-<programlisting role="XML"><?xml version="1.0" encoding="ISO-8859-1"?>
-<page-set>
- <page>
- <page-id>portal::classic::homepage</page-id>
- <owner-type>portal</owner-type>
- <owner-id>classic</owner-id>
- <name>homepage</name>
- <title>Home Page</title>
- <access-permissions>Everyone</access-permissions>
- <edit-permission>*:/platform/administrators</edit-permission>
- <application>
- <instance-id>portal#classic:/web/HomePagePortlet/homepageportlet</instance-id>
- <title>Home Page portlet</title>
- <show-info-bar>false</show-info-bar>
- <show-application-state>false</show-application-state>
- <show-application-mode>false</show-application-mode>
- </application>
- </page>
-
- <page>
- <page-id>portal::classic::webexplorer</page-id>
- <owner-type>portal</owner-type>
- <owner-id>classic</owner-id>
- <name>webexplorer</name>
- <title>Web Explorer</title>
- <access-permissions>*:/platform/users</access-permissions>
- <edit-permission>*:/platform/administrators</edit-permission>
- <application>
- <instance-id>group#platform/users:/web/BrowserPortlet/WebExplorer</instance-id>
- <title>Web Explorer</title>
- <show-info-bar>false</show-info-bar>
- </application>
- </page>
-</page-set>
-</programlisting>
</listitem>
</varlistentry>
<varlistentry>
13 years, 10 months
gatein SVN: r3813 - portal/trunk/testsuite/selenium-snifftests/src/suite/org/exoplatform/portal/selenium/NewSnifftest.
by do-not-reply@jboss.org
Author: hangnguyen
Date: 2010-08-12 23:48:40 -0400 (Thu, 12 Aug 2010)
New Revision: 3813
Modified:
portal/trunk/testsuite/selenium-snifftests/src/suite/org/exoplatform/portal/selenium/NewSnifftest/Test_SNF_PRL_07_UsersManagement.html
Log:
TestVN-356:Clean and Improve existing Selenium for GateIn
Modified: portal/trunk/testsuite/selenium-snifftests/src/suite/org/exoplatform/portal/selenium/NewSnifftest/Test_SNF_PRL_07_UsersManagement.html
===================================================================
--- portal/trunk/testsuite/selenium-snifftests/src/suite/org/exoplatform/portal/selenium/NewSnifftest/Test_SNF_PRL_07_UsersManagement.html 2010-08-12 14:20:29 UTC (rev 3812)
+++ portal/trunk/testsuite/selenium-snifftests/src/suite/org/exoplatform/portal/selenium/NewSnifftest/Test_SNF_PRL_07_UsersManagement.html 2010-08-13 03:48:40 UTC (rev 3813)
@@ -222,6 +222,11 @@
<td></td>
</tr>
<tr>
+ <td>waitForElementPresent</td>
+ <td>firstName</td>
+ <td></td>
+</tr>
+<tr>
<td>type</td>
<td>firstName</td>
<td>Test_SNF_PRL_07_edit</td>
13 years, 10 months
gatein SVN: r3812 - in components/wsrp/trunk/consumer: src/main/java/org/gatein/wsrp/services and 2 other directories.
by do-not-reply@jboss.org
Author: chris.laprun(a)jboss.com
Date: 2010-08-12 10:20:29 -0400 (Thu, 12 Aug 2010)
New Revision: 3812
Added:
components/wsrp/trunk/consumer/src/test/java/org/gatein/wsrp/consumer/services/
components/wsrp/trunk/consumer/src/test/java/org/gatein/wsrp/consumer/services/SOAPServiceFactoryTestCase.java
Modified:
components/wsrp/trunk/consumer/pom.xml
components/wsrp/trunk/consumer/src/main/java/org/gatein/wsrp/services/SOAPServiceFactory.java
Log:
- GTNWSRP-56: Parse WSDL before building the service as we might encounter semi-random service name, rendering impossible
to create the service client for sure using the de-facto standard name. There are still some cases that we don't support.
Modified: components/wsrp/trunk/consumer/pom.xml
===================================================================
--- components/wsrp/trunk/consumer/pom.xml 2010-08-12 12:29:15 UTC (rev 3811)
+++ components/wsrp/trunk/consumer/pom.xml 2010-08-12 14:20:29 UTC (rev 3812)
@@ -83,6 +83,11 @@
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
</dependency>
+ <dependency>
+ <groupId>wsdl4j</groupId>
+ <artifactId>wsdl4j</artifactId>
+ <version>1.6.2</version>
+ </dependency>
<dependency>
<groupId>org.gatein.wsrp</groupId>
Modified: components/wsrp/trunk/consumer/src/main/java/org/gatein/wsrp/services/SOAPServiceFactory.java
===================================================================
--- components/wsrp/trunk/consumer/src/main/java/org/gatein/wsrp/services/SOAPServiceFactory.java 2010-08-12 12:29:15 UTC (rev 3811)
+++ components/wsrp/trunk/consumer/src/main/java/org/gatein/wsrp/services/SOAPServiceFactory.java 2010-08-12 14:20:29 UTC (rev 3812)
@@ -43,11 +43,17 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import javax.wsdl.Definition;
+import javax.wsdl.Port;
+import javax.wsdl.WSDLException;
+import javax.wsdl.factory.WSDLFactory;
+import javax.wsdl.xml.WSDLReader;
import javax.xml.namespace.QName;
import javax.xml.ws.BindingProvider;
import javax.xml.ws.Service;
import java.net.MalformedURLException;
import java.net.URI;
+import java.net.URL;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@@ -64,9 +70,9 @@
private boolean isV2 = false;
private static final String WSRP_V1_URN = "urn:oasis:names:tc:wsrp:v1:wsdl";
- private final static QName V1_SERVICE = new QName(WSRP_V1_URN, "WSRPService");
+ private static final String WSRP_V1_BINDING = "urn:oasis:names:tc:wsrp:v1:bind";
private static final String WSRP_V2_URN = "urn:oasis:names:tc:wsrp:v2:wsdl";
- private final static QName V2_SERVICE = new QName(WSRP_V2_URN, "WSRPService");
+ private static final String WSRP_V2_BINDING = "urn:oasis:names:tc:wsrp:v2:bind";
private Map<Class, Object> services = new ConcurrentHashMap<Class, Object>();
private String markupURL;
@@ -219,13 +225,17 @@
try
{
ParameterValidation.throwIllegalArgExceptionIfNullOrEmpty(wsdlDefinitionURL, "WSDL URL", "SOAPServiceFactory");
- URI wsdlURL = new URI(wsdlDefinitionURL);
+ URL wsdlURL = new URI(wsdlDefinitionURL).toURL();
+ WSDLInfo wsdlInfo = new WSDLInfo(wsdlDefinitionURL);
+
// try to get v2 of service if possible, first
+ QName wsrp2 = wsdlInfo.getWSRP2ServiceQName();
+ QName wsrp1 = wsdlInfo.getWSRP1ServiceQName();
Service service;
- try
+ if (wsrp2 != null)
{
- service = Service.create(wsdlURL.toURL(), V2_SERVICE);
+ service = Service.create(wsdlURL, wsrp2);
WSRPV2MarkupPortType markupPortType = service.getPort(WSRPV2MarkupPortType.class);
services.put(WSRPV2MarkupPortType.class, markupPortType);
@@ -247,40 +257,34 @@
setAvailable(true);
isV2 = true;
}
- catch (IllegalArgumentException e)
+ else if (wsrp1 != null)
{
- // if exception message contains both URNs, then it should mean that we only have V1 service, so get that
- // todo: we could allow user to choose what happens here instead of proceeding automatically...
- String message = e.getMessage();
- if (message.contains(WSRP_V1_URN) && message.contains(WSRP_V2_URN))
- {
- service = Service.create(wsdlURL.toURL(), V1_SERVICE);
+ service = Service.create(wsdlURL, wsrp1);
- WSRPV1MarkupPortType markupPortType = service.getPort(WSRPV1MarkupPortType.class);
- services.put(WSRPV1MarkupPortType.class, markupPortType);
- markupURL = (String)((BindingProvider)markupPortType).getRequestContext().get(BindingProvider.ENDPOINT_ADDRESS_PROPERTY);
+ WSRPV1MarkupPortType markupPortType = service.getPort(WSRPV1MarkupPortType.class);
+ services.put(WSRPV1MarkupPortType.class, markupPortType);
+ markupURL = (String)((BindingProvider)markupPortType).getRequestContext().get(BindingProvider.ENDPOINT_ADDRESS_PROPERTY);
- WSRPV1ServiceDescriptionPortType sdPort = service.getPort(WSRPV1ServiceDescriptionPortType.class);
- services.put(WSRPV1ServiceDescriptionPortType.class, sdPort);
- serviceDescriptionURL = (String)((BindingProvider)sdPort).getRequestContext().get(BindingProvider.ENDPOINT_ADDRESS_PROPERTY);
+ WSRPV1ServiceDescriptionPortType sdPort = service.getPort(WSRPV1ServiceDescriptionPortType.class);
+ services.put(WSRPV1ServiceDescriptionPortType.class, sdPort);
+ serviceDescriptionURL = (String)((BindingProvider)sdPort).getRequestContext().get(BindingProvider.ENDPOINT_ADDRESS_PROPERTY);
- WSRPV1PortletManagementPortType managementPortType = service.getPort(WSRPV1PortletManagementPortType.class);
- services.put(WSRPV1PortletManagementPortType.class, managementPortType);
- portletManagementURL = (String)((BindingProvider)managementPortType).getRequestContext().get(BindingProvider.ENDPOINT_ADDRESS_PROPERTY);
+ WSRPV1PortletManagementPortType managementPortType = service.getPort(WSRPV1PortletManagementPortType.class);
+ services.put(WSRPV1PortletManagementPortType.class, managementPortType);
+ portletManagementURL = (String)((BindingProvider)managementPortType).getRequestContext().get(BindingProvider.ENDPOINT_ADDRESS_PROPERTY);
- WSRPV1RegistrationPortType registrationPortType = service.getPort(WSRPV1RegistrationPortType.class);
- services.put(WSRPV1RegistrationPortType.class, registrationPortType);
- registrationURL = (String)((BindingProvider)registrationPortType).getRequestContext().get(BindingProvider.ENDPOINT_ADDRESS_PROPERTY);
+ WSRPV1RegistrationPortType registrationPortType = service.getPort(WSRPV1RegistrationPortType.class);
+ services.put(WSRPV1RegistrationPortType.class, registrationPortType);
+ registrationURL = (String)((BindingProvider)registrationPortType).getRequestContext().get(BindingProvider.ENDPOINT_ADDRESS_PROPERTY);
- setFailed(false);
- setAvailable(true);
- isV2 = false;
- }
- else
- {
- throw new IllegalArgumentException("Couldn't find any WSRP service in specified WSDL: " + wsdlDefinitionURL);
- }
+ setFailed(false);
+ setAvailable(true);
+ isV2 = false;
}
+ else
+ {
+ throw new IllegalArgumentException("Couldn't find any WSRP service in specified WSDL: " + wsdlDefinitionURL);
+ }
}
catch (MalformedURLException e)
{
@@ -351,4 +355,95 @@
return new V1RegistrationService(port);
}
}
+
+ protected class WSDLInfo
+ {
+ private final QName wsrp2ServiceQName;
+ private final QName wsrp1ServiceQName;
+
+ public WSDLInfo(String wsdlURL) throws WSDLException
+ {
+ WSDLFactory wsdlFactory = WSDLFactory.newInstance();
+ WSDLReader wsdlReader = wsdlFactory.newWSDLReader();
+
+ wsdlReader.setFeature("javax.wsdl.verbose", false);
+ wsdlReader.setFeature("javax.wsdl.importDocuments", false);
+
+ Definition definition = wsdlReader.readWSDL(wsdlURL);
+ Map<QName, javax.wsdl.Service> services = definition.getServices();
+ int serviceNb = services.size();
+ if (serviceNb > 2)
+ {
+ throw new WSDLException(WSDLException.OTHER_ERROR,
+ "The specified WSDL contains more than 2 services definitions when we expected at most 2: one for WSRP 1 and one for WSRP 2.");
+ }
+
+ QName wsrp1 = null, wsrp2 = null;
+ for (QName name : services.keySet())
+ {
+ String ns = name.getNamespaceURI();
+ javax.wsdl.Service service = services.get(name);
+
+ // if the namespace is using one of the WSRP-defined ones, we have a potential candidate
+ if (WSRP_V1_URN.equals(ns) || WSRP_V2_URN.equals(ns))
+ {
+ // but we need to check that the port namespaces to really know which version of the service we've found
+ // this is needed for http://www.netunitysoftware.com/wsrp2interop/WsrpProducer.asmx?Operation=...
+ // where the WSRP1 service name has the WSRP2 global target namespace so we need more processing :(
+ Map<String, Port> ports = service.getPorts();
+ String bindingNSURI = null;
+ for (Port port : ports.values())
+ {
+ String newBindingNS = port.getBinding().getQName().getNamespaceURI();
+ if (bindingNSURI != null && !bindingNSURI.equals(newBindingNS))
+ {
+ throw new WSDLException(WSDLException.OTHER_ERROR, "Inconsistend NS in port bindings. Aborting.");
+ }
+ bindingNSURI = newBindingNS;
+ }
+ if (WSRP_V1_BINDING.equals(bindingNSURI))
+ {
+ wsrp1 = checkPotentialServiceName(wsrp1, name, ns);
+ }
+ else if (WSRP_V2_BINDING.equals(bindingNSURI))
+ {
+ wsrp2 = checkPotentialServiceName(wsrp2, name, ns);
+ }
+ }
+ else
+ {
+ log.debug("Unknown service namespace: " + ns);
+ }
+ }
+
+ wsrp2ServiceQName = wsrp2;
+ wsrp1ServiceQName = wsrp1;
+
+ if (wsrp1 == null && wsrp2 == null)
+ {
+ throw new WSDLException(WSDLException.INVALID_WSDL,
+ "Found no service definition with WSRP specification namespaces.");
+ }
+ }
+
+ public QName getWSRP2ServiceQName()
+ {
+ return wsrp2ServiceQName;
+ }
+
+ public QName getWSRP1ServiceQName()
+ {
+ return wsrp1ServiceQName;
+ }
+
+ private QName checkPotentialServiceName(QName potentiallyExisting, QName candidate, String namespace) throws WSDLException
+ {
+ if (potentiallyExisting != null)
+ {
+ throw new WSDLException(WSDLException.OTHER_ERROR, "Found 2 different services using the "
+ + namespace + " namespace. Cannot decide which one to use for service so aborting.");
+ }
+ return candidate;
+ }
+ }
}
Added: components/wsrp/trunk/consumer/src/test/java/org/gatein/wsrp/consumer/services/SOAPServiceFactoryTestCase.java
===================================================================
--- components/wsrp/trunk/consumer/src/test/java/org/gatein/wsrp/consumer/services/SOAPServiceFactoryTestCase.java (rev 0)
+++ components/wsrp/trunk/consumer/src/test/java/org/gatein/wsrp/consumer/services/SOAPServiceFactoryTestCase.java 2010-08-12 14:20:29 UTC (rev 3812)
@@ -0,0 +1,96 @@
+/*
+ * JBoss, a division of Red Hat
+ * Copyright 2010, Red Hat Middleware, LLC, and individual
+ * contributors as indicated by the @authors tag. See the
+ * copyright.txt in the distribution for a full listing of
+ * individual contributors.
+ *
+ * This 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 software 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.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.gatein.wsrp.consumer.services;
+
+import junit.framework.TestCase;
+import org.gatein.wsrp.services.SOAPServiceFactory;
+import org.oasis.wsrp.v1.WSRPV1MarkupPortType;
+import org.oasis.wsrp.v1.WSRPV1PortletManagementPortType;
+import org.oasis.wsrp.v1.WSRPV1RegistrationPortType;
+import org.oasis.wsrp.v1.WSRPV1ServiceDescriptionPortType;
+import org.oasis.wsrp.v2.WSRPV2MarkupPortType;
+import org.oasis.wsrp.v2.WSRPV2PortletManagementPortType;
+import org.oasis.wsrp.v2.WSRPV2RegistrationPortType;
+import org.oasis.wsrp.v2.WSRPV2ServiceDescriptionPortType;
+
+import javax.wsdl.WSDLException;
+
+/**
+ * @author <a href="mailto:chris.laprun@jboss.com">Chris Laprun</a>
+ * @version $Revision$
+ */
+public class SOAPServiceFactoryTestCase extends TestCase
+{
+ private SOAPServiceFactory factory;
+ public static final Class[] WSRP2_PORT_TYPES = new Class[]{WSRPV2MarkupPortType.class, WSRPV2ServiceDescriptionPortType.class, WSRPV2PortletManagementPortType.class, WSRPV2RegistrationPortType.class};
+ public static final Class[] WSRP1_PORT_TYPES = new Class[]{WSRPV1MarkupPortType.class, WSRPV1ServiceDescriptionPortType.class, WSRPV1PortletManagementPortType.class, WSRPV1RegistrationPortType.class};
+
+ @Override
+ protected void setUp() throws Exception
+ {
+ factory = new SOAPServiceFactory();
+ }
+
+ public void testSimpleV2Service() throws Exception
+ {
+ factory.setWsdlDefinitionURL("http://www.netunitysoftware.com/wsrp2interop/WsrpProducer.asmx?Operation=...");
+ checkPorts(WSRP2_PORT_TYPES);
+ }
+
+ public void testSimpleV1Service() throws Exception
+ {
+ factory.setWsdlDefinitionURL("http://www.netunitysoftware.com/wsrp2interop/WsrpProducer.asmx?Operation=...");
+ checkPorts(WSRP1_PORT_TYPES);
+ }
+
+ public void testBothServices() throws Exception
+ {
+ factory.setWsdlDefinitionURL("http://www.netunitysoftware.com/wsrp2interop/WsrpProducer.asmx?Operation=...");
+ checkPorts(WSRP2_PORT_TYPES);
+ }
+
+ public void testDefaultDotNetWSDLCompositeService() throws Exception
+ {
+ factory.setWsdlDefinitionURL("http://www.netunitysoftware.com/wsrp2interop/WsrpProducer.asmx?WSDL");
+ try
+ {
+ checkPorts(WSRP2_PORT_TYPES);
+ fail();
+ }
+ catch (Exception e)
+ {
+ assertTrue(e instanceof WSDLException);
+ WSDLException wsdlEx = (WSDLException)e;
+ assertEquals(WSDLException.INVALID_WSDL, wsdlEx.getFaultCode());
+ }
+ }
+
+ private void checkPorts(Class[] ports) throws Exception
+ {
+ for (Class portClass : ports)
+ {
+ assertNotNull(factory.getService(portClass));
+ }
+ }
+}
13 years, 10 months
gatein SVN: r3811 - in portal/branches/branched-r3776: webui/portal/src/main/java/org/exoplatform/portal/application/localization and 1 other directory.
by do-not-reply@jboss.org
Author: trong.tran
Date: 2010-08-12 08:29:15 -0400 (Thu, 12 Aug 2010)
New Revision: 3811
Added:
portal/branches/branched-r3776/webui/portal/src/main/java/org/exoplatform/portal/application/localization/HttpRequestWrapper.java
portal/branches/branched-r3776/webui/portal/src/main/java/org/exoplatform/portal/application/localization/LocalizationFilter.java
Modified:
portal/branches/branched-r3776/web/portal/src/main/webapp/WEB-INF/web.xml
Log:
GTNPORTAL-1355 Locale is not set correctly in login form when login failed
Modified: portal/branches/branched-r3776/web/portal/src/main/webapp/WEB-INF/web.xml
===================================================================
--- portal/branches/branched-r3776/web/portal/src/main/webapp/WEB-INF/web.xml 2010-08-12 07:43:42 UTC (rev 3810)
+++ portal/branches/branched-r3776/web/portal/src/main/webapp/WEB-INF/web.xml 2010-08-12 12:29:15 UTC (rev 3811)
@@ -1,19 +1,19 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
+<?xml version="1.0" encoding="ISO-8859-1" ?>
<!--
Copyright (C) 2009 eXo Platform SAS.
-
+
This 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 software 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.
-
+
You should have received a copy of the GNU Lesser General Public
License along with this software; if not, write to the Free
Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
@@ -21,9 +21,11 @@
-->
-<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
- "http://java.sun.com/dtd/web-app_2_3.dtd">
-<web-app>
+<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
+ http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
+ version="2.4">
<display-name>portal</display-name>
<!--Uncomment for clustered setup-->
@@ -34,31 +36,33 @@
<context-param>
<param-name>org.exoplatform.frameworks.jcr.command.web.fckeditor.digitalAssetsWorkspace</param-name>
<param-value>portal</param-value>
- <description>Binary assets workspace name</description>
</context-param>
<context-param>
<param-name>org.exoplatform.frameworks.jcr.command.web.fckeditor.digitalAssetsPath</param-name>
<param-value>/</param-value>
- <description>Binary assets path</description>
</context-param>
-
+
<!-- ================================================================== -->
<!-- RESOURCE FILTER TO CACHE MERGED JAVASCRIPT AND CSS -->
<!-- ================================================================== -->
+ <filter>
+ <filter-name>LocalizationFilter</filter-name>
+ <filter-class>org.exoplatform.portal.application.localization.LocalizationFilter</filter-class>
+ </filter>
<filter>
<filter-name>GenericFilter</filter-name>
<filter-class>org.exoplatform.web.filter.GenericFilter</filter-class>
</filter>
<filter>
- <filter-name>ResourceRequestFilter</filter-name>
- <filter-class>org.exoplatform.portal.application.ResourceRequestFilter</filter-class>
+ <filter-name>ResourceRequestFilter</filter-name>
+ <filter-class>org.exoplatform.portal.application.ResourceRequestFilter</filter-class>
</filter>
-
+
<filter>
<filter-name>ThreadLocalSessionProviderInitializedFilter</filter-name>
<filter-class>org.exoplatform.frameworks.jcr.web.ThreadLocalSessionProviderInitializedFilter</filter-class>
- </filter>
+ </filter>
<filter>
<filter-name>SetCurrentIdentityFilter</filter-name>
@@ -66,17 +70,17 @@
</filter>
-
- <filter>
- <filter-name>RestEncodingFilter</filter-name>
- <filter-class>org.exoplatform.services.rest.servlet.RestEncodingFilter</filter-class>
- <init-param>
- <param-name>REQUEST_ENCODING</param-name>
- <param-value>UTF-8</param-value>
- </init-param>
- </filter>
<filter>
+ <filter-name>RestEncodingFilter</filter-name>
+ <filter-class>org.exoplatform.services.rest.servlet.RestEncodingFilter</filter-class>
+ <init-param>
+ <param-name>REQUEST_ENCODING</param-name>
+ <param-value>UTF-8</param-value>
+ </init-param>
+ </filter>
+
+ <filter>
<filter-name>CacheUserProfileFilter</filter-name>
<filter-class>org.exoplatform.web.CacheUserProfileFilter</filter-class>
</filter>
@@ -101,6 +105,15 @@
<url-pattern>/*</url-pattern>
</filter-mapping>
+ <filter-mapping>
+ <filter-name>LocalizationFilter</filter-name>
+ <url-pattern>/*</url-pattern>
+ <dispatcher>INCLUDE</dispatcher>
+ <dispatcher>FORWARD</dispatcher>
+ <dispatcher>REQUEST</dispatcher>
+ <dispatcher>ERROR</dispatcher>
+ </filter-mapping>
+
<filter-mapping>
<filter-name>GenericFilter</filter-name>
<url-pattern>/*</url-pattern>
@@ -108,29 +121,29 @@
<filter-mapping>
<filter-name>ResourceRequestFilter</filter-name>
- <url-pattern>*.css</url-pattern>
+ <url-pattern>*.css</url-pattern>
</filter-mapping>
-
+
<filter-mapping>
<filter-name>ResourceRequestFilter</filter-name>
- <url-pattern>*.gif</url-pattern>
+ <url-pattern>*.gif</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>ResourceRequestFilter</filter-name>
- <url-pattern>*.png</url-pattern>
+ <url-pattern>*.png</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>ResourceRequestFilter</filter-name>
- <url-pattern>*.jpg</url-pattern>
+ <url-pattern>*.jpg</url-pattern>
</filter-mapping>
<filter-mapping>
- <filter-name>ResourceRequestFilter</filter-name>
- <url-pattern>/javascript/*</url-pattern>
+ <filter-name>ResourceRequestFilter</filter-name>
+ <url-pattern>/javascript/*</url-pattern>
</filter-mapping>
-
+
<filter-mapping>
<filter-name>SetCurrentIdentityFilter</filter-name>
<url-pattern>/*</url-pattern>
@@ -140,12 +153,12 @@
<filter-name>ThreadLocalSessionProviderInitializedFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
-
+
<filter-mapping>
<filter-name>CacheUserProfileFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
-
+
<filter-mapping>
<filter-name>RestEncodingFilter</filter-name>
<url-pattern>/rest/*</url-pattern>
@@ -158,36 +171,35 @@
<listener-class>org.exoplatform.web.GenericHttpListener</listener-class>
</listener>
<listener>
- <listener-class>org.exoplatform.portal.application.PortalSessionListener</listener-class>
+ <listener-class>org.exoplatform.portal.application.PortalSessionListener</listener-class>
</listener>
<listener>
<listener-class>org.exoplatform.services.security.web.JAASConversationStateListener</listener-class>
- </listener>
+ </listener>
<!-- ================================================================== -->
<!-- SERVLET -->
- <!-- ================================================================== -->
+ <!-- ================================================================== -->
<servlet>
- <servlet-name>portal</servlet-name>
- <servlet-class>org.exoplatform.portal.application.PortalController</servlet-class>
+ <servlet-name>portal</servlet-name>
+ <servlet-class>org.exoplatform.portal.application.PortalController</servlet-class>
<init-param>
- <param-name>webui.configuration</param-name>
- <param-value>app:/WEB-INF/webui-configuration.xml</param-value>
+ <param-name>webui.configuration</param-name>
+ <param-value>app:/WEB-INF/webui-configuration.xml</param-value>
</init-param>
- <load-on-startup>1</load-on-startup>
+ <load-on-startup>1</load-on-startup>
</servlet>
-
+
<servlet>
<servlet-name>RestServer</servlet-name>
- <description>eXo - Platform REST Server</description>
<servlet-class>org.exoplatform.services.rest.servlet.RestServlet</servlet-class>
<load-on-startup>4</load-on-startup>
</servlet>
-
+
<servlet>
- <servlet-name>javascript</servlet-name>
- <servlet-class>org.exoplatform.portal.webui.javascript.JavascriptServlet</servlet-class>
+ <servlet-name>javascript</servlet-name>
+ <servlet-class>org.exoplatform.portal.webui.javascript.JavascriptServlet</servlet-class>
</servlet>
-
+
<servlet>
<servlet-name>Controller</servlet-name>
<servlet-class>org.exoplatform.frameworks.jcr.web.CommandControllerServlet</servlet-class>
@@ -232,114 +244,114 @@
</servlet-mapping>
- <!-- ================================================================= -->
+ <!-- ================================================================= -->
<servlet-mapping>
- <servlet-name>InitiateLoginServlet</servlet-name>
- <url-pattern>/initiatelogin</url-pattern>
+ <servlet-name>InitiateLoginServlet</servlet-name>
+ <url-pattern>/initiatelogin</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ErrorLoginServlet</servlet-name>
<url-pattern>/errorlogin</url-pattern>
</servlet-mapping>
<servlet-mapping>
- <servlet-name>PortalLoginController</servlet-name>
- <url-pattern>/login</url-pattern>
+ <servlet-name>PortalLoginController</servlet-name>
+ <url-pattern>/login</url-pattern>
</servlet-mapping>
<servlet-mapping>
- <servlet-name>javascript</servlet-name>
- <url-pattern>/javascript/*</url-pattern>
+ <servlet-name>javascript</servlet-name>
+ <url-pattern>/javascript/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
- <servlet-name>portal</servlet-name>
- <url-pattern>/private/*</url-pattern>
+ <servlet-name>portal</servlet-name>
+ <url-pattern>/private/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
- <servlet-name>portal</servlet-name>
- <url-pattern>/public/*</url-pattern>
+ <servlet-name>portal</servlet-name>
+ <url-pattern>/public/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
- <servlet-name>portal</servlet-name>
- <url-pattern>/admin/*</url-pattern>
+ <servlet-name>portal</servlet-name>
+ <url-pattern>/admin/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
- <servlet-name>portal</servlet-name>
- <url-pattern>/service</url-pattern>
+ <servlet-name>portal</servlet-name>
+ <url-pattern>/service</url-pattern>
</servlet-mapping>
<servlet-mapping>
- <servlet-name>portal</servlet-name>
- <url-pattern>/upload/*</url-pattern>
+ <servlet-name>portal</servlet-name>
+ <url-pattern>/upload/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
- <servlet-name>portal</servlet-name>
- <url-pattern>/download/*</url-pattern>
+ <servlet-name>portal</servlet-name>
+ <url-pattern>/download/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>RestServer</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
-
+
<servlet-mapping>
<servlet-name>Controller</servlet-name>
<url-pattern>/connector</url-pattern>
- </servlet-mapping>
-
+ </servlet-mapping>
+
<servlet-mapping>
<servlet-name>GateInServlet</servlet-name>
<url-pattern>/gateinservlet</url-pattern>
</servlet-mapping>
<session-config>
- <session-timeout>30</session-timeout>
+ <session-timeout>30</session-timeout>
</session-config>
<!-- The Welcome File List for IBM WebSphere -->
-
+
<welcome-file-list>
<welcome-file>/index.jsp</welcome-file>
</welcome-file-list>
-
+
<security-constraint>
<web-resource-collection>
- <web-resource-name>user authentication</web-resource-name>
- <url-pattern>/private/*</url-pattern>
- <http-method>POST</http-method>
- <http-method>GET</http-method>
+ <web-resource-name>user authentication</web-resource-name>
+ <url-pattern>/private/*</url-pattern>
+ <http-method>POST</http-method>
+ <http-method>GET</http-method>
</web-resource-collection>
<auth-constraint>
- <role-name>users</role-name>
+ <role-name>users</role-name>
</auth-constraint>
<user-data-constraint>
- <transport-guarantee>NONE</transport-guarantee>
+ <transport-guarantee>NONE</transport-guarantee>
</user-data-constraint>
</security-constraint>
<security-constraint>
<web-resource-collection>
- <web-resource-name>admin authentication</web-resource-name>
- <url-pattern>/admin/*</url-pattern>
- <http-method>POST</http-method>
- <http-method>GET</http-method>
+ <web-resource-name>admin authentication</web-resource-name>
+ <url-pattern>/admin/*</url-pattern>
+ <http-method>POST</http-method>
+ <http-method>GET</http-method>
</web-resource-collection>
<auth-constraint>
- <role-name>admin</role-name>
+ <role-name>admin</role-name>
</auth-constraint>
<user-data-constraint>
- <transport-guarantee>NONE</transport-guarantee>
+ <transport-guarantee>NONE</transport-guarantee>
</user-data-constraint>
</security-constraint>
<login-config>
- <auth-method>FORM</auth-method>
- <realm-name>gatein-domain</realm-name>
+ <auth-method>FORM</auth-method>
+ <realm-name>gatein-domain</realm-name>
<form-login-config>
- <form-login-page>/initiatelogin</form-login-page>
+ <form-login-page>/initiatelogin</form-login-page>
<form-error-page>/errorlogin</form-error-page>
</form-login-config>
</login-config>
<security-role>
- <description>a simple user role</description>
- <role-name>users</role-name>
+ <description>a simple user role</description>
+ <role-name>users</role-name>
</security-role>
<security-role>
<description>the admin role</description>
- <role-name>admin</role-name>
+ <role-name>admin</role-name>
</security-role>
</web-app>
Added: portal/branches/branched-r3776/webui/portal/src/main/java/org/exoplatform/portal/application/localization/HttpRequestWrapper.java
===================================================================
--- portal/branches/branched-r3776/webui/portal/src/main/java/org/exoplatform/portal/application/localization/HttpRequestWrapper.java (rev 0)
+++ portal/branches/branched-r3776/webui/portal/src/main/java/org/exoplatform/portal/application/localization/HttpRequestWrapper.java 2010-08-12 12:29:15 UTC (rev 3811)
@@ -0,0 +1,97 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2010, Red Hat, Inc., and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This 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 software 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.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.exoplatform.portal.application.localization;
+
+import org.exoplatform.portal.application.PortalRequestContext;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletRequestWrapper;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Locale;
+
+/**
+ * @author <a href="mailto:mstrukel@redhat.com">Marko Strukelj</a>
+ */
+public class HttpRequestWrapper extends HttpServletRequestWrapper
+{
+ private static final List<Locale> EMPTY_LOCALE_LIST = Collections.emptyList();
+
+ /**
+ * Constructs a request object wrapping the given request.
+ *
+ * @throws IllegalArgumentException if the request is null
+ */
+ public HttpRequestWrapper(HttpServletRequest request)
+ {
+ super(request);
+ }
+
+ /**
+ * Note: Keep the implementation here in sync with {@link org.exoplatform.portal.webui.application.ExoUserContext#getLocale}
+ * @return
+ */
+ @Override
+ public Locale getLocale()
+ {
+ if (PortalRequestContext.getCurrentInstance() != null)
+ return getRequest().getLocale();
+
+ Locale current = LocalizationFilter.getCurrentLocale();
+ if (current != null)
+ return current;
+
+ return getRequest().getLocale();
+ }
+
+ @Override
+ public Enumeration getLocales()
+ {
+ Locale current = LocalizationFilter.getCurrentLocale();
+ if (PortalRequestContext.getCurrentInstance() != null || current == null)
+ return getRequest().getLocales();
+
+ Locale loc = getLocale();
+ if (loc == null)
+ {
+ return Collections.enumeration(EMPTY_LOCALE_LIST);
+ }
+ else
+ {
+ LinkedList<Locale> locs = new LinkedList<Locale>();
+ locs.add(loc);
+
+ Enumeration<Locale> clientLocs = (Enumeration<Locale>) getRequest().getLocales();
+ while (clientLocs.hasMoreElements())
+ {
+ current = clientLocs.nextElement();
+ if (current.getLanguage().equals(loc.getLanguage()) && current.getCountry().equals(loc.getCountry()))
+ continue;
+ locs.add(current);
+ }
+
+ return Collections.enumeration(locs);
+ }
+ }
+}
Added: portal/branches/branched-r3776/webui/portal/src/main/java/org/exoplatform/portal/application/localization/LocalizationFilter.java
===================================================================
--- portal/branches/branched-r3776/webui/portal/src/main/java/org/exoplatform/portal/application/localization/LocalizationFilter.java (rev 0)
+++ portal/branches/branched-r3776/webui/portal/src/main/java/org/exoplatform/portal/application/localization/LocalizationFilter.java 2010-08-12 12:29:15 UTC (rev 3811)
@@ -0,0 +1,195 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2010, Red Hat, Inc., and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This 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 software 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.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.exoplatform.portal.application.localization;
+
+import org.exoplatform.container.ExoContainer;
+import org.exoplatform.container.ExoContainerContext;
+import org.exoplatform.container.RootContainer;
+import org.exoplatform.portal.Constants;
+import org.exoplatform.portal.application.PortalRequestContext;
+import org.exoplatform.services.log.ExoLogger;
+import org.exoplatform.services.log.Log;
+import org.exoplatform.services.organization.OrganizationService;
+import org.exoplatform.services.organization.UserProfile;
+import org.exoplatform.services.resources.LocaleConfig;
+import org.exoplatform.services.resources.LocaleConfigService;
+import org.exoplatform.services.resources.LocaleContextInfo;
+import org.exoplatform.services.resources.LocalePolicy;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Locale;
+import java.util.Set;
+
+/**
+ * This filter provides {@link HttpServletRequest#getLocale()} and {@link HttpServletRequest#getLocales()}
+ * override for extra-portlet requests (i.e. unbridged .jsp). Thanks to this dynamic resources can be localized
+ * to keep in synch with the rest of the portal.
+ *
+ * A concrete example for this is login/jsp/login.jsp used when authentication fails at portal login.
+ *
+ * By default {@link HttpServletRequest#getLocale()} and {@link HttpServletRequest#getLocales()} reflect
+ * browser language preference. When using this filter these two calls employ the same Locale determination algorithm
+ * that LocalizationLifecycle uses.
+ *
+ * This filter can be activated / deactivated via portal module's web.xml
+ *
+ * @author <a href="mailto:mstrukel@redhat.com">Marko Strukelj</a>
+ */
+public class LocalizationFilter implements Filter
+{
+ private static Log log = ExoLogger.getLogger("portal:LocalizationFilter");
+
+ private static ThreadLocal<Locale> currentLocale = new ThreadLocal<Locale>();
+
+ public void init(FilterConfig filterConfig) throws ServletException
+ {
+ }
+
+ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
+ {
+
+ HttpServletRequest req = (HttpServletRequest) request;
+ HttpServletResponse res = (HttpServletResponse) response;
+
+ try
+ {
+ // Due to forwards, and includes the filter might be reentered
+ // If current requestContext exists use its Locale
+ PortalRequestContext context = PortalRequestContext.getCurrentInstance();
+ if (context != null && context.getLocale() != null)
+ {
+ // No need to wrap if reentered
+ boolean skipWrapping = currentLocale.get() != null;
+ // overwrite any already set currentLocale
+ currentLocale.set(context.getLocale());
+ if (!skipWrapping)
+ {
+ req = new HttpRequestWrapper(req);
+ }
+ chain.doFilter(req, res);
+ return;
+ }
+
+ // If reentered we don't need to wrap
+ if (currentLocale.get() != null)
+ {
+ chain.doFilter(request, response);
+ return;
+ }
+
+
+ // Initialize currentLocale
+ ExoContainer container = ExoContainerContext.getCurrentContainerIfPresent();
+ if (container == null)
+ {
+ // Nothing we can do, move on
+ chain.doFilter(req, res);
+ return;
+ }
+
+ if (container instanceof RootContainer)
+ container = (ExoContainer) container.getComponentInstance("portal");
+
+ LocaleConfigService localeConfigService = (LocaleConfigService)
+ container.getComponentInstanceOfType(LocaleConfigService.class);
+ LocalePolicy localePolicy = (LocalePolicy) container.getComponentInstanceOfType(LocalePolicy.class);
+
+ LocaleContextInfo localeCtx = new LocaleContextInfo();
+
+ Set<Locale> supportedLocales = new HashSet();
+ for (LocaleConfig lc: localeConfigService.getLocalConfigs())
+ {
+ supportedLocales.add(lc.getLocale());
+ }
+ localeCtx.setSupportedLocales(supportedLocales);
+
+ localeCtx.setBrowserLocales(Collections.list(request.getLocales()));
+ localeCtx.setCookieLocales(LocalizationLifecycle.getCookieLocales(req));
+ localeCtx.setUserProfileLocale(getUserProfileLocale(container, req.getRemoteUser()));
+ localeCtx.setRemoteUser(req.getRemoteUser());
+
+ localeCtx.setPortalLocale(Locale.ENGLISH);
+ Locale locale = localePolicy.determineLocale(localeCtx);
+ if (!supportedLocales.contains(locale))
+ {
+ if (log.isWarnEnabled())
+ log.warn("Unsupported locale returned by LocalePolicy: " + localePolicy + ". Falling back to 'en'.");
+ locale = Locale.ENGLISH;
+ }
+
+ currentLocale.set(locale);
+ chain.doFilter(new HttpRequestWrapper(req), res);
+ }
+ catch(Exception e)
+ {
+ throw new RuntimeException("LocalizationFilter exception: ", e);
+ }
+ finally
+ {
+ currentLocale.remove();
+ }
+ }
+
+ private Locale getUserProfileLocale(ExoContainer container, String user)
+ {
+ UserProfile userProfile = null;
+ OrganizationService svc = (OrganizationService)
+ container.getComponentInstanceOfType(OrganizationService.class);
+
+ if (user != null)
+ {
+ try
+ {
+ userProfile = svc.getUserProfileHandler().findUserProfileByName(user);
+ }
+ catch (Exception ignored)
+ {
+ log.error("IGNORED: Failed to load UserProfile for username: " + user, ignored);
+ }
+
+ if (userProfile == null && log.isWarnEnabled())
+ log.warn("Could not load user profile for " + user + ". Using default portal locale.");
+ }
+
+ String lang = userProfile == null ? null : userProfile.getUserInfoMap().get(Constants.USER_LANGUAGE);
+ return (lang != null) ? new Locale(lang) : null;
+ }
+
+ public void destroy()
+ {
+ }
+
+ public static Locale getCurrentLocale()
+ {
+ return currentLocale.get();
+ }
+}
13 years, 10 months
gatein SVN: r3810 - portal/trunk.
by do-not-reply@jboss.org
Author: bdaw
Date: 2010-08-12 03:43:42 -0400 (Thu, 12 Aug 2010)
New Revision: 3810
Modified:
portal/trunk/pom.xml
Log:
GTNPORTAL-1404 - Upgrade PicketLink IDM to 1.1.5.CR02
GTNPORTAL-1335 - Always show message " User "name" has already the same membership in the group "name" althought it was deleted in Membership Management
GTNPORTAL-1309 - GateIn LDAP usernames are not case sensitive
GTNPORTAL-1405 - Changing membership type deletes a user from a group when LDAP is used
Modified: portal/trunk/pom.xml
===================================================================
--- portal/trunk/pom.xml 2010-08-12 07:35:20 UTC (rev 3809)
+++ portal/trunk/pom.xml 2010-08-12 07:43:42 UTC (rev 3810)
@@ -47,7 +47,7 @@
<org.gatein.common.version>2.0.2-GA</org.gatein.common.version>
<org.gatein.wci.version>2.0.1-GA</org.gatein.wci.version>
<org.gatein.pc.version>2.1.1-GA</org.gatein.pc.version>
- <org.picketlink.idm>1.1.5.CR01</org.picketlink.idm>
+ <org.picketlink.idm>1.1.5.CR02</org.picketlink.idm>
<org.gatein.wsrp.version>1.1.1-GA</org.gatein.wsrp.version>
<org.gatein.mop.version>1.0.3-GA</org.gatein.mop.version>
<org.slf4j.version>1.5.6</org.slf4j.version>
13 years, 10 months
gatein SVN: r3809 - in epp/docs/branches/EPP_5_0_Branch/Reference_Guide/en-US/modules: AuthenticationAndIdentity and 3 other directories.
by do-not-reply@jboss.org
Author: smumford
Date: 2010-08-12 03:35:20 -0400 (Thu, 12 Aug 2010)
New Revision: 3809
Modified:
epp/docs/branches/EPP_5_0_Branch/Reference_Guide/en-US/modules/AuthenticationAndIdentity/BackendConfiguration.xml
epp/docs/branches/EPP_5_0_Branch/Reference_Guide/en-US/modules/AuthenticationAndIdentity/SSO.xml
epp/docs/branches/EPP_5_0_Branch/Reference_Guide/en-US/modules/GadgetDevelopment/Gadgets.xml
epp/docs/branches/EPP_5_0_Branch/Reference_Guide/en-US/modules/PortalDevelopment/InternationalizationConfiguration.xml
epp/docs/branches/EPP_5_0_Branch/Reference_Guide/en-US/modules/PortletDevelopment/Standard.xml
epp/docs/branches/EPP_5_0_Branch/Reference_Guide/en-US/modules/WSRP.xml
Log:
JBEPP-370: Various rendering changes focussed on images and code samples
Modified: epp/docs/branches/EPP_5_0_Branch/Reference_Guide/en-US/modules/AuthenticationAndIdentity/BackendConfiguration.xml
===================================================================
--- epp/docs/branches/EPP_5_0_Branch/Reference_Guide/en-US/modules/AuthenticationAndIdentity/BackendConfiguration.xml 2010-08-12 04:54:05 UTC (rev 3808)
+++ epp/docs/branches/EPP_5_0_Branch/Reference_Guide/en-US/modules/AuthenticationAndIdentity/BackendConfiguration.xml 2010-08-12 07:35:20 UTC (rev 3809)
@@ -35,8 +35,8 @@
</para>
<programlistingco>
<areaspec>
- <area coords="5" id="area-Reference_Guide-PicketLink_IDM_integration-Configuration_files-JBossIDMServiceImpl" />
- <area coords="22" id="area-Reference_Guide-PicketLink_IDM_integration-Configuration_files-JBossIDMOrganizationServiceImpl" />
+ <area coords="6 90" id="area-Reference_Guide-PicketLink_IDM_integration-Configuration_files-JBossIDMServiceImpl" />
+ <area coords="22 80" id="area-Reference_Guide-PicketLink_IDM_integration-Configuration_files-JBossIDMOrganizationServiceImpl" />
</areaspec>
<programlisting language="XML" role="XML"><xi:include parse="text" href="../../extras/Authentication_Identity_BackendConfiguration/default96.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /></programlisting>
Modified: epp/docs/branches/EPP_5_0_Branch/Reference_Guide/en-US/modules/AuthenticationAndIdentity/SSO.xml
===================================================================
--- epp/docs/branches/EPP_5_0_Branch/Reference_Guide/en-US/modules/AuthenticationAndIdentity/SSO.xml 2010-08-12 04:54:05 UTC (rev 3808)
+++ epp/docs/branches/EPP_5_0_Branch/Reference_Guide/en-US/modules/AuthenticationAndIdentity/SSO.xml 2010-08-12 07:35:20 UTC (rev 3809)
@@ -755,9 +755,12 @@
Tomcat should start and be able to access <ulink type="http" url="http://localhost:8888/opensso/UI/Login?realm=gatein">http://localhost:8888/opensso/UI/Login?realm=gatein</ulink>.
</para>
<mediaobject>
- <imageobject>
- <imagedata fileref="images/AuthenticationAndIdentity/SSO/opensso-shot.png" format="PNG" width="444" />
+ <imageobject role="html">
+ <imagedata fileref="images/AuthenticationAndIdentity/SSO/opensso-shot.png" format="PNG" align="center" scale="110" />
</imageobject>
+ <imageobject role="fo">
+ <imagedata fileref="images/AuthenticationAndIdentity/SSO/opensso-shot.png" format="PNG" align="center" contentwidth="150mm" />
+ </imageobject>
</mediaobject>
<note>
<para>
Modified: epp/docs/branches/EPP_5_0_Branch/Reference_Guide/en-US/modules/GadgetDevelopment/Gadgets.xml
===================================================================
--- epp/docs/branches/EPP_5_0_Branch/Reference_Guide/en-US/modules/GadgetDevelopment/Gadgets.xml 2010-08-12 04:54:05 UTC (rev 3808)
+++ epp/docs/branches/EPP_5_0_Branch/Reference_Guide/en-US/modules/GadgetDevelopment/Gadgets.xml 2010-08-12 07:35:20 UTC (rev 3809)
@@ -83,19 +83,25 @@
<section id="sect-Reference_Guide-Gadgets-Existing_Gadgets">
<title>Existing Gadgets</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="images/GadgetDevelopment/Liste.png" format="PNG" width="444" />
- </imageobject>
- </mediaobject>
+ <mediaobject>
+ <imageobject role="html">
+ <imagedata fileref="images/GadgetDevelopment/Liste.png" format="PNG" align="center" scale="130" />
+ </imageobject>
+ <imageobject role="fo">
+ <imagedata fileref="images/GadgetDevelopment/Liste.png" format="PNG" align="center" contentwidth="150mm" />
+ </imageobject>
+ </mediaobject>
</section>
<section id="sect-Reference_Guide-Gadgets-Create_a_new_Gadget">
<title>Create a new Gadget</title>
<mediaobject>
- <imageobject>
- <imagedata fileref="images/GadgetDevelopment/New.png" format="PNG" width="444" />
+ <imageobject role="html">
+ <imagedata fileref="images/GadgetDevelopment/New.png" format="PNG" align="center" scale="130" />
</imageobject>
+ <imageobject role="fo">
+ <imagedata fileref="images/GadgetDevelopment/New.png" format="PNG" align="center" contentwidth="150mm" />
+ </imageobject>
</mediaobject>
</section>
@@ -105,9 +111,12 @@
This is the reference to a remote gadget (stock one).
</para>
<mediaobject>
- <imageobject>
- <imagedata fileref="images/GadgetDevelopment/Import.png" format="PNG" width="444" />
+ <imageobject role="html">
+ <imagedata fileref="images/GadgetDevelopment/Import.png" format="PNG" align="center" scale="130" />
</imageobject>
+ <imageobject role="fo">
+ <imagedata fileref="images/GadgetDevelopment/Import.png" format="PNG" align="center" contentwidth="150mm" />
+ </imageobject>
</mediaobject>
</section>
@@ -117,9 +126,12 @@
After referencing the gadget successfully, then import it into the local repository.
</para>
<mediaobject>
- <imageobject>
- <imagedata fileref="images/GadgetDevelopment/Imported.png" format="PNG" width="444" />
+ <imageobject role="html">
+ <imagedata fileref="images/GadgetDevelopment/Imported.png" format="PNG" align="center" scale="130" />
</imageobject>
+ <imageobject role="fo">
+ <imagedata fileref="images/GadgetDevelopment/Imported.png" format="PNG" align="center" contentwidth="150mm" />
+ </imageobject>
</mediaobject>
</section>
@@ -129,9 +141,12 @@
Edit it from the Web the imported Gadget to modify it:
</para>
<mediaobject>
- <imageobject>
- <imagedata fileref="images/GadgetDevelopment/EditImportedOnline.png" format="PNG" width="444" />
+ <imageobject role="html">
+ <imagedata fileref="images/GadgetDevelopment/EditImportedOnline.png" format="PNG" align="center" scale="130" />
</imageobject>
+ <imageobject role="fo">
+ <imagedata fileref="images/GadgetDevelopment/EditImportedOnline.png" format="PNG" align="center" contentwidth="150mm" />
+ </imageobject>
</mediaobject>
</section>
@@ -141,9 +156,12 @@
Edit it from your IDE thanks to the WebDAV protocol:
</para>
<mediaobject>
- <imageobject>
- <imagedata fileref="images/GadgetDevelopment/EditImportedWebDAV.png" format="PNG" width="444" />
+ <imageobject role="html">
+ <imagedata fileref="images/GadgetDevelopment/EditImportedWebDAV.png" format="PNG" align="center" scale="130" />
</imageobject>
+ <imageobject role="fo">
+ <imagedata fileref="images/GadgetDevelopment/EditImportedWebDAV.png" format="PNG" align="center" contentwidth="150mm" />
+ </imageobject>
</mediaobject>
</section>
@@ -153,9 +171,12 @@
View it from the Dashboard when you drag and drop the Gadget from listing to the dashboard.
</para>
<mediaobject>
- <imageobject>
- <imagedata fileref="images/GadgetDevelopment/Dashboard.png" format="PNG" width="444" />
+ <imageobject role="html">
+ <imagedata fileref="images/GadgetDevelopment/Dashboard.png" format="PNG" align="center" scale="130" />
</imageobject>
+ <imageobject role="fo">
+ <imagedata fileref="images/GadgetDevelopment/Dashboard.png" format="PNG" align="center" contentwidth="150mm" />
+ </imageobject>
</mediaobject>
</section>
Modified: epp/docs/branches/EPP_5_0_Branch/Reference_Guide/en-US/modules/PortalDevelopment/InternationalizationConfiguration.xml
===================================================================
--- epp/docs/branches/EPP_5_0_Branch/Reference_Guide/en-US/modules/PortalDevelopment/InternationalizationConfiguration.xml 2010-08-12 04:54:05 UTC (rev 3808)
+++ epp/docs/branches/EPP_5_0_Branch/Reference_Guide/en-US/modules/PortalDevelopment/InternationalizationConfiguration.xml 2010-08-12 07:35:20 UTC (rev 3809)
@@ -170,8 +170,8 @@
</para>
<programlistingco>
<areaspec>
- <area coords="6" id="area-Reference_Guide-i18n.rb.service.classpath_resources" />
- <area coords="24" id="area-Reference_Guide-i18n.rb.service.portal_resource_names" />
+ <area coords="6 60" id="area-Reference_Guide-i18n.rb.service.classpath_resources" />
+ <area coords="24 60" id="area-Reference_Guide-i18n.rb.service.portal_resource_names" />
</areaspec>
<programlisting language="XML" role="XML"><xi:include parse="text" href="../../extras/PortalDevelopment_InternationalizationConfiguration/default151.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /></programlisting>
Modified: epp/docs/branches/EPP_5_0_Branch/Reference_Guide/en-US/modules/PortletDevelopment/Standard.xml
===================================================================
--- epp/docs/branches/EPP_5_0_Branch/Reference_Guide/en-US/modules/PortletDevelopment/Standard.xml 2010-08-12 04:54:05 UTC (rev 3808)
+++ epp/docs/branches/EPP_5_0_Branch/Reference_Guide/en-US/modules/PortletDevelopment/Standard.xml 2010-08-12 07:35:20 UTC (rev 3809)
@@ -325,10 +325,10 @@
<programlistingco>
<areaspec>
- <area coords="8" id="area-Reference_Guide-Deploying_your_first_Portlet-Application_Descriptors.portletname" />
- <area coords="9" id="area-Reference_Guide-Deploying_your_first_Portlet-Application_Descriptors.portletclass" />
- <area coords="12" id="area-Reference_Guide-Deploying_your_first_Portlet-Application_Descriptors.supports" />
- <area coords="15" id="area-Reference_Guide-Deploying_your_first_Portlet-Application_Descriptors.portletinfo" />
+ <area coords="8 70" id="area-Reference_Guide-Deploying_your_first_Portlet-Application_Descriptors.portletname" />
+ <area coords="9 70" id="area-Reference_Guide-Deploying_your_first_Portlet-Application_Descriptors.portletclass" />
+ <area coords="12 70" id="area-Reference_Guide-Deploying_your_first_Portlet-Application_Descriptors.supports" />
+ <area coords="15 70" id="area-Reference_Guide-Deploying_your_first_Portlet-Application_Descriptors.portletinfo" />
</areaspec>
<programlisting language="XML" role="XML"><xi:include parse="text" href="../../extras/PortletDevelopment_Standard/default245.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /></programlisting>
@@ -506,14 +506,14 @@
<section id="sect-Reference_Guide-JavaServer_Pages_Portlet_Example-Portlet_Class">
<title>Portlet Class</title>
<para>
- The code below is from the <filename> jsphellouser/src/main/java/org/jboss/portal/portlet/samples/JSPHelloUserPortlet.java </filename> Java source. It is split in different pieces.
+ The code below is from the <filename> jsphellouser/src/main/java/org/jboss/portal/portlet/samples/JSPHelloUserPortlet.java</filename> Java source. It is split in different pieces.
</para>
<programlistingco>
<areaspec>
- <area coords="18" id="area-Reference_Guide-JavaServer_Pages_Portlet_Example-Portlet_Class.doView" />
- <area coords="21" id="area-Reference_Guide-JavaServer_Pages_Portlet_Example-Portlet_Class.renderParameter" />
- <area coords="25" id="area-Reference_Guide-JavaServer_Pages_Portlet_Example-Portlet_Class.requestDispatcher" />
- <area coords="26" id="area-Reference_Guide-JavaServer_Pages_Portlet_Example-Portlet_Class.include" />
+ <area coords="18 80" id="area-Reference_Guide-JavaServer_Pages_Portlet_Example-Portlet_Class.doView" />
+ <area coords="21 80" id="area-Reference_Guide-JavaServer_Pages_Portlet_Example-Portlet_Class.renderParameter" />
+ <area coords="25 80" id="area-Reference_Guide-JavaServer_Pages_Portlet_Example-Portlet_Class.requestDispatcher" />
+ <area coords="26 80" id="area-Reference_Guide-JavaServer_Pages_Portlet_Example-Portlet_Class.include" />
</areaspec>
<programlisting language="Java" role="Java"><xi:include parse="text" href="../../extras/PortletDevelopment_Standard/JSPHelloUserPortlet.java" xmlns:xi="http://www.w3.org/2001/XInclude" /></programlisting>
@@ -616,9 +616,9 @@
</para>
<programlistingco>
<areaspec>
- <area coords="2" id="area-Reference_Guide-JavaServer_Pages_Portlet_Example-Portlet_Class.processAction" />
- <area coords="5" id="area-Reference_Guide-JavaServer_Pages_Portlet_Example-Portlet_Class.getActionParameter" />
- <area coords="6" id="area-Reference_Guide-JavaServer_Pages_Portlet_Example-Portlet_Class.setRenderParameter" />
+ <area coords="2 100" id="area-Reference_Guide-JavaServer_Pages_Portlet_Example-Portlet_Class.processAction" />
+ <area coords="5 80" id="area-Reference_Guide-JavaServer_Pages_Portlet_Example-Portlet_Class.getActionParameter" />
+ <area coords="6 80" id="area-Reference_Guide-JavaServer_Pages_Portlet_Example-Portlet_Class.setRenderParameter" />
</areaspec>
<programlisting language="Java" role="Java"><xi:include parse="text" href="../../extras/PortletDevelopment_Standard/default249.java" xmlns:xi="http://www.w3.org/2001/XInclude" /></programlisting>
@@ -801,10 +801,10 @@
</para>
<programlistingco>
<areaspec>
- <area coords="9" id="area-Reference_Guide-JavaServer_Pages_Portlet_Example-JSF_example_using_the_JBoss_Portlet_Bridge.portlet" />
- <area coords="21" id="area-Reference_Guide-JavaServer_Pages_Portlet_Example-JSF_example_using_the_JBoss_Portlet_Bridge.view" />
- <area coords="26" id="area-Reference_Guide-JavaServer_Pages_Portlet_Example-JSF_example_using_the_JBoss_Portlet_Bridge.edit" />
- <area coords="31" id="area-Reference_Guide-JavaServer_Pages_Portlet_Example-JSF_example_using_the_JBoss_Portlet_Bridge.help" />
+ <area coords="9 80" id="area-Reference_Guide-JavaServer_Pages_Portlet_Example-JSF_example_using_the_JBoss_Portlet_Bridge.portlet" />
+ <area coords="21 80" id="area-Reference_Guide-JavaServer_Pages_Portlet_Example-JSF_example_using_the_JBoss_Portlet_Bridge.view" />
+ <area coords="26 80" id="area-Reference_Guide-JavaServer_Pages_Portlet_Example-JSF_example_using_the_JBoss_Portlet_Bridge.edit" />
+ <area coords="31 80" id="area-Reference_Guide-JavaServer_Pages_Portlet_Example-JSF_example_using_the_JBoss_Portlet_Bridge.help" />
</areaspec>
<programlisting language="XML" role="XML"><xi:include parse="text" href="../../extras/PortletDevelopment_Standard/default254.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /></programlisting>
Modified: epp/docs/branches/EPP_5_0_Branch/Reference_Guide/en-US/modules/WSRP.xml
===================================================================
--- epp/docs/branches/EPP_5_0_Branch/Reference_Guide/en-US/modules/WSRP.xml 2010-08-12 04:54:05 UTC (rev 3808)
+++ epp/docs/branches/EPP_5_0_Branch/Reference_Guide/en-US/modules/WSRP.xml 2010-08-12 07:35:20 UTC (rev 3809)
@@ -937,7 +937,7 @@
</para>
<mediaobject>
<imageobject role="html">
- <imagedata fileref="images/WSRP/erase_registration.png" format="PNG" align="center" scale="100" />
+ <imagedata fileref="images/WSRP/erase_registration.png" format="PNG" align="center" scale="80" />
</imageobject>
<imageobject role="fo">
<imagedata fileref="images/WSRP/erase_registration.png" format="PNG" align="center" contentwidth="140mm" />
13 years, 10 months
gatein SVN: r3808 - in portal/branches/branched-r3776: component/web/controller/src/main/java/org/exoplatform/web/application and 8 other directories.
by do-not-reply@jboss.org
Author: trong.tran
Date: 2010-08-12 00:54:05 -0400 (Thu, 12 Aug 2010)
New Revision: 3808
Added:
portal/branches/branched-r3776/component/resources/src/main/java/org/exoplatform/services/resources/LocaleContextInfo.java
portal/branches/branched-r3776/component/resources/src/main/java/org/exoplatform/services/resources/LocalePolicy.java
portal/branches/branched-r3776/component/web/controller/src/main/java/org/exoplatform/web/application/ApplicationRequestPhaseLifecycle.java
portal/branches/branched-r3776/component/web/controller/src/main/java/org/exoplatform/web/application/Phase.java
portal/branches/branched-r3776/webui/portal/src/main/java/org/exoplatform/portal/application/localization/
portal/branches/branched-r3776/webui/portal/src/main/java/org/exoplatform/portal/application/localization/DefaultLocalePolicyService.java
portal/branches/branched-r3776/webui/portal/src/main/java/org/exoplatform/portal/application/localization/LocalizationLifecycle.java
portal/branches/branched-r3776/webui/portal/src/main/java/org/exoplatform/portal/application/localization/NoBrowserLocalePolicyService.java
Modified:
portal/branches/branched-r3776/portlet/exoadmin/src/main/java/org/exoplatform/organization/webui/component/UIUserInfo.java
portal/branches/branched-r3776/web/portal/src/main/webapp/WEB-INF/webui-configuration.xml
portal/branches/branched-r3776/webui/portal/src/main/java/conf/portal/configuration.xml
portal/branches/branched-r3776/webui/portal/src/main/java/org/exoplatform/portal/application/PortalRequestContext.java
portal/branches/branched-r3776/webui/portal/src/main/java/org/exoplatform/portal/application/PortalRequestHandler.java
portal/branches/branched-r3776/webui/portal/src/main/java/org/exoplatform/portal/application/PortalStateManager.java
portal/branches/branched-r3776/webui/portal/src/main/java/org/exoplatform/portal/application/UserProfileLifecycle.java
portal/branches/branched-r3776/webui/portal/src/main/java/org/exoplatform/portal/webui/application/ExoUserContext.java
portal/branches/branched-r3776/webui/portal/src/main/java/org/exoplatform/portal/webui/portal/UILanguageSelector.java
portal/branches/branched-r3776/webui/portal/src/main/java/org/exoplatform/portal/webui/portal/UIPortal.java
portal/branches/branched-r3776/webui/portal/src/main/java/org/exoplatform/portal/webui/portal/UIPortalComposer.java
portal/branches/branched-r3776/webui/portal/src/main/java/org/exoplatform/portal/webui/workspace/UIPortalApplication.java
Log:
GTNPORTAL-1306 Fix getting wrong locale in PortletRequest
and provide a pluggable mechanism for determining of the preferred locale
Added: portal/branches/branched-r3776/component/resources/src/main/java/org/exoplatform/services/resources/LocaleContextInfo.java
===================================================================
--- portal/branches/branched-r3776/component/resources/src/main/java/org/exoplatform/services/resources/LocaleContextInfo.java (rev 0)
+++ portal/branches/branched-r3776/component/resources/src/main/java/org/exoplatform/services/resources/LocaleContextInfo.java 2010-08-12 04:54:05 UTC (rev 3808)
@@ -0,0 +1,190 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2010, Red Hat, Inc., and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This 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 software 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.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.exoplatform.services.resources;
+
+import java.util.List;
+import java.util.Locale;
+import java.util.Set;
+
+/**
+ * Data structure that holds the inputs for {@link LocalePolicy} pluggable policies mechanism.
+ *
+ * @author <a href="mailto:mstrukel@redhat.com">Marko Strukelj</a>
+ */
+public class LocaleContextInfo
+{
+ private Set<Locale> supportedLocales;
+ private List<Locale> browserLocales;
+ private List<Locale> cookieLocales;
+ private Locale userProfileLocale;
+ private String remoteUser;
+ private Locale portalLocale;
+
+ /**
+ * Setter for supportedLocales
+ * @param supportedLocales locales supported by portal
+ */
+ public void setSupportedLocales(Set<Locale> supportedLocales)
+ {
+ this.supportedLocales = supportedLocales;
+ }
+
+ /**
+ * Getter for supportedLocales
+ * @return supportedLocales
+ */
+ public Set<Locale> getSupportedLocales()
+ {
+ return supportedLocales;
+ }
+
+ /**
+ * Setter for browserLocales
+ * @param browserLocales list of locales as preferred by client's browser
+ */
+ public void setBrowserLocales(List<Locale> browserLocales)
+ {
+ this.browserLocales = browserLocales;
+ }
+
+ /**
+ * Getter for browserLocales
+ * @return browserLocales
+ */
+ public List<Locale> getBrowserLocales()
+ {
+ return browserLocales;
+ }
+
+ /**
+ * Setter for cookieLocales
+ * @param cookieLocales locales stored in user's browser cookie
+ */
+ public void setCookieLocales(List<Locale> cookieLocales)
+ {
+ this.cookieLocales = cookieLocales;
+ }
+
+ /**
+ * Getter for cookieLocales
+ * @return cookieLocales
+ */
+ public List<Locale> getCookieLocales()
+ {
+ return cookieLocales;
+ }
+
+ /**
+ * Setter for userProfileLocale
+ * @param userProfileLocale locale loaded from user's profile
+ */
+ public void setUserProfileLocale(Locale userProfileLocale)
+ {
+ this.userProfileLocale = userProfileLocale;
+ }
+
+ /**
+ * Getter for userProfileLocale
+ * @return userProfileLocale
+ */
+ public Locale getUserProfileLocale()
+ {
+ return userProfileLocale;
+ }
+
+ /**
+ * Setter for remoteUser
+ * @param remoteUser username of the currently logged in user. Null for anonymous users.
+ */
+ public void setRemoteUser(String remoteUser)
+ {
+ this.remoteUser = remoteUser;
+ }
+
+ /**
+ * Getter for remoteUser
+ * @return remoteUser
+ */
+ public String getRemoteUser()
+ {
+ return remoteUser;
+ }
+
+ /**
+ * Setter for portalLocale
+ * @param portalLocale default locale configured for the portal
+ */
+ public void setPortalLocale(Locale portalLocale)
+ {
+ this.portalLocale = portalLocale;
+ }
+
+ /**
+ * Getter for portalLocale
+ * @return portalLocale
+ */
+ public Locale getPortalLocale()
+ {
+ return portalLocale;
+ }
+
+ /**
+ * Helper method that returns the locale only if it's supported by portal.
+ * Otherwise it returns null.
+ *
+ * @param locale locale to check
+ * @return locale if supported, null otherwise
+ */
+ public Locale getLocaleIfSupported(Locale locale)
+ {
+ if (supportedLocales.contains(locale))
+ return locale;
+ return null;
+ }
+
+ /**
+ * Helper method to convert String representation of Locale into Locale object.
+ * @param portalLocaleName String representation of Locale
+ * @return locale
+ */
+ public static Locale getLocale(String portalLocaleName)
+ {
+ int pos = portalLocaleName.indexOf("_");
+ if (pos < 0)
+ return new Locale(portalLocaleName);
+
+ return new Locale(portalLocaleName.substring(0, pos), portalLocaleName.substring(pos+1));
+ }
+
+ /**
+ * Helper method to get a String representation of the Locale
+ * @param locale
+ * @return String representation of the locale
+ */
+ public static String getLocaleAsString(Locale locale)
+ {
+ if (locale.getCountry().length() == 0)
+ return locale.getLanguage();
+
+ return locale.getLanguage() + "_" + locale.getCountry();
+ }
+}
Added: portal/branches/branched-r3776/component/resources/src/main/java/org/exoplatform/services/resources/LocalePolicy.java
===================================================================
--- portal/branches/branched-r3776/component/resources/src/main/java/org/exoplatform/services/resources/LocalePolicy.java (rev 0)
+++ portal/branches/branched-r3776/component/resources/src/main/java/org/exoplatform/services/resources/LocalePolicy.java 2010-08-12 04:54:05 UTC (rev 3808)
@@ -0,0 +1,41 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2010, Red Hat, Inc., and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This 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 software 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.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.exoplatform.services.resources;
+
+import java.util.Locale;
+
+/**
+ * This interface represents a pluggable mechanism for different locale determining algorithms
+ *
+ * @author <a href="mailto:mstrukel@redhat.com">Marko Strukelj</a>
+ */
+public interface LocalePolicy
+{
+ /**
+ * Determine the Locale to be used for current request
+ *
+ * @param localeContext locale context info available to implementations
+ * as inputs to use when determining appropriate Locale
+ * @return Locale to be used for current user's request
+ */
+ public Locale determineLocale(LocaleContextInfo localeContext);
+}
Added: portal/branches/branched-r3776/component/web/controller/src/main/java/org/exoplatform/web/application/ApplicationRequestPhaseLifecycle.java
===================================================================
--- portal/branches/branched-r3776/component/web/controller/src/main/java/org/exoplatform/web/application/ApplicationRequestPhaseLifecycle.java (rev 0)
+++ portal/branches/branched-r3776/component/web/controller/src/main/java/org/exoplatform/web/application/ApplicationRequestPhaseLifecycle.java 2010-08-12 04:54:05 UTC (rev 3808)
@@ -0,0 +1,47 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2010, Red Hat, Inc., and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This 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 software 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.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.exoplatform.web.application;
+
+/**
+ * Interface that extends {@link ApplicationLifecycle} with request phase methods that allow interception of
+ * before/after ACTION phase, and before/after RENDER phase of request processing.
+ *
+ * @author <a href="mailto:mstrukel@redhat.com">Marko Strukelj</a>
+ */
+public interface ApplicationRequestPhaseLifecycle<E extends RequestContext> extends ApplicationLifecycle<E>
+{
+ /**
+ * Perform any processing required at the beginning of {@link Phase#ACTION} or {@link Phase#RENDER} phase.
+ * @param app Application
+ * @param context current RequestContext
+ * @param phase starting phase
+ */
+ public void onStartRequestPhase(Application app, E context, Phase phase);
+
+ /**
+ * Perform any processing required at the end of {@link Phase#ACTION} or {@link Phase#RENDER} phase.
+ * @param app Application
+ * @param context current RequestContext
+ * @param phase ending phase
+ */
+ public void onEndRequestPhase(Application app, E context, Phase phase);
+}
Added: portal/branches/branched-r3776/component/web/controller/src/main/java/org/exoplatform/web/application/Phase.java
===================================================================
--- portal/branches/branched-r3776/component/web/controller/src/main/java/org/exoplatform/web/application/Phase.java (rev 0)
+++ portal/branches/branched-r3776/component/web/controller/src/main/java/org/exoplatform/web/application/Phase.java 2010-08-12 04:54:05 UTC (rev 3808)
@@ -0,0 +1,33 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2010, Red Hat, Inc., and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This 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 software 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.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.exoplatform.web.application;
+
+/**
+ * Enum representing request processing phases.
+ *
+ * @author <a href="mailto:mstrukel@redhat.com">Marko Strukelj</a>
+ */
+public enum Phase
+{
+ ACTION,
+ RENDER
+}
Modified: portal/branches/branched-r3776/portlet/exoadmin/src/main/java/org/exoplatform/organization/webui/component/UIUserInfo.java
===================================================================
--- portal/branches/branched-r3776/portlet/exoadmin/src/main/java/org/exoplatform/organization/webui/component/UIUserInfo.java 2010-08-12 03:55:48 UTC (rev 3807)
+++ portal/branches/branched-r3776/portlet/exoadmin/src/main/java/org/exoplatform/organization/webui/component/UIUserInfo.java 2010-08-12 04:54:05 UTC (rev 3808)
@@ -21,6 +21,7 @@
import org.exoplatform.commons.serialization.api.annotations.Serialized;
import org.exoplatform.portal.Constants;
+import org.exoplatform.portal.application.PortalRequestContext;
import org.exoplatform.portal.webui.util.Util;
import org.exoplatform.portal.webui.workspace.UIPortalApplication;
import org.exoplatform.portal.webui.workspace.UIWorkingWorkspace;
@@ -134,7 +135,8 @@
LocaleConfig localeConfig = localeConfigService.getLocaleConfig(language);
if (localeConfig == null)
localeConfig = localeConfigService.getDefaultLocaleConfig();
- uiApp.setLocale(localeConfig.getLocale());
+ PortalRequestContext prqCtx = PortalRequestContext.getCurrentInstance();
+ prqCtx.setLocale(localeConfig.getLocale());
uiApp.setOrientation(localeConfig.getOrientation());
uiApp.localizeNavigations();
Modified: portal/branches/branched-r3776/web/portal/src/main/webapp/WEB-INF/webui-configuration.xml
===================================================================
--- portal/branches/branched-r3776/web/portal/src/main/webapp/WEB-INF/webui-configuration.xml 2010-08-12 03:55:48 UTC (rev 3807)
+++ portal/branches/branched-r3776/web/portal/src/main/webapp/WEB-INF/webui-configuration.xml 2010-08-12 04:54:05 UTC (rev 3808)
@@ -38,6 +38,7 @@
<listener>org.exoplatform.webui.application.MonitorApplicationLifecycle</listener>
<listener>org.exoplatform.portal.application.UserProfileLifecycle</listener>
<listener>org.exoplatform.portal.application.concurrent.PortalConcurrencyMonitorLifecycle</listener>
+ <listener>org.exoplatform.portal.application.localization.LocalizationLifecycle</listener>
</application-lifecycle-listeners>
<events>
Modified: portal/branches/branched-r3776/webui/portal/src/main/java/conf/portal/configuration.xml
===================================================================
--- portal/branches/branched-r3776/webui/portal/src/main/java/conf/portal/configuration.xml 2010-08-12 03:55:48 UTC (rev 3807)
+++ portal/branches/branched-r3776/webui/portal/src/main/java/conf/portal/configuration.xml 2010-08-12 04:54:05 UTC (rev 3808)
@@ -30,5 +30,11 @@
<component>
<type>org.exoplatform.portal.application.PortalStatisticService</type>
- </component>
+ </component>
+
+ <component>
+ <key>org.exoplatform.services.resources.LocalePolicy</key>
+ <!--type>org.exoplatform.portal.application.NoBrowserLocalePolicyService</type-->
+ <type>org.exoplatform.portal.application.localization.DefaultLocalePolicyService</type>
+ </component>
</configuration>
Modified: portal/branches/branched-r3776/webui/portal/src/main/java/org/exoplatform/portal/application/PortalRequestContext.java
===================================================================
--- portal/branches/branched-r3776/webui/portal/src/main/java/org/exoplatform/portal/application/PortalRequestContext.java 2010-08-12 03:55:48 UTC (rev 3807)
+++ portal/branches/branched-r3776/webui/portal/src/main/java/org/exoplatform/portal/application/PortalRequestContext.java 2010-08-12 04:54:05 UTC (rev 3808)
@@ -116,6 +116,8 @@
private Map<String, String[]> parameterMap;
+ private Locale locale = Locale.ENGLISH;
+
public JavascriptManager getJavascriptManager()
{
return jsmanager_;
@@ -169,12 +171,10 @@
// Reconstructing the getPathInfo from the non server decoded values.
String servletPath = URLDecoder.decode(req.getServletPath(), "UTF-8");
String contextPath = URLDecoder.decode(req.getContextPath(), "UTF-8");
- String pathInfo = requestURI_.substring((servletPath + contextPath).length());
+ String pathInfo = "/";
+ if (requestURI_.length() > servletPath.length() + contextPath.length())
+ pathInfo = requestURI_.substring(servletPath.length() + contextPath.length());
- if (pathInfo == null || pathInfo.length() == 0)
- {
- pathInfo = "/";
- }
int colonIndex = pathInfo.indexOf("/", 1);
if (colonIndex < 0)
{
@@ -241,9 +241,14 @@
return ((UIPortalApplication)uiApplication_).getOrientation();
}
+ public void setLocale(Locale locale)
+ {
+ this.locale = locale;
+ }
+
public Locale getLocale()
{
- return ((UIPortalApplication)uiApplication_).getLocale();
+ return locale;
}
@SuppressWarnings("unchecked")
Modified: portal/branches/branched-r3776/webui/portal/src/main/java/org/exoplatform/portal/application/PortalRequestHandler.java
===================================================================
--- portal/branches/branched-r3776/webui/portal/src/main/java/org/exoplatform/portal/application/PortalRequestHandler.java 2010-08-12 03:55:48 UTC (rev 3807)
+++ portal/branches/branched-r3776/webui/portal/src/main/java/org/exoplatform/portal/application/PortalRequestHandler.java 2010-08-12 04:54:05 UTC (rev 3808)
@@ -26,6 +26,8 @@
import org.exoplatform.web.WebAppController;
import org.exoplatform.web.WebRequestHandler;
import org.exoplatform.web.application.ApplicationLifecycle;
+import org.exoplatform.web.application.ApplicationRequestPhaseLifecycle;
+import org.exoplatform.web.application.Phase;
import org.exoplatform.web.application.RequestFailure;
import org.exoplatform.webui.application.WebuiRequestContext;
import org.exoplatform.webui.core.UIApplication;
@@ -104,11 +106,17 @@
if (!context.isResponseComplete() && !context.getProcessRender())
{
+ startRequestPhaseLifecycle(app, context, lifecycles, Phase.ACTION);
uiApp.processAction(context);
+ endRequestPhaseLifecycle(app, context, lifecycles, Phase.ACTION);
}
if (!context.isResponseComplete())
+ {
+ startRequestPhaseLifecycle(app, context, lifecycles, Phase.RENDER);
uiApp.processRender(context);
+ endRequestPhaseLifecycle(app, context, lifecycles, Phase.RENDER);
+ }
if (uiApp != null)
uiApp.setLastAccessApplication(System.currentTimeMillis());
@@ -149,4 +157,25 @@
WebuiRequestContext.setCurrentInstance(null);
}
}
+
+ private void startRequestPhaseLifecycle(PortalApplication app, PortalRequestContext context,
+ List<ApplicationLifecycle> lifecycles, Phase phase)
+ {
+ for (ApplicationLifecycle lifecycle : lifecycles)
+ {
+ if (lifecycle instanceof ApplicationRequestPhaseLifecycle)
+ ((ApplicationRequestPhaseLifecycle) lifecycle).onStartRequestPhase(app, context, phase);
+ }
+ }
+
+ private void endRequestPhaseLifecycle(PortalApplication app, PortalRequestContext context,
+ List<ApplicationLifecycle> lifecycles, Phase phase)
+ {
+ for (ApplicationLifecycle lifecycle : lifecycles)
+ {
+ if (lifecycle instanceof ApplicationRequestPhaseLifecycle)
+ ((ApplicationRequestPhaseLifecycle) lifecycle).onEndRequestPhase(app, context, phase);
+ }
+ }
+
}
Modified: portal/branches/branched-r3776/webui/portal/src/main/java/org/exoplatform/portal/application/PortalStateManager.java
===================================================================
--- portal/branches/branched-r3776/webui/portal/src/main/java/org/exoplatform/portal/application/PortalStateManager.java 2010-08-12 03:55:48 UTC (rev 3807)
+++ portal/branches/branched-r3776/webui/portal/src/main/java/org/exoplatform/portal/application/PortalStateManager.java 2010-08-12 04:54:05 UTC (rev 3808)
@@ -141,7 +141,7 @@
// For now do nothing....
}
- private UserPortalConfig getUserPortalConfig(PortalRequestContext context) throws Exception
+ public static UserPortalConfig getUserPortalConfig(PortalRequestContext context) throws Exception
{
ExoContainer appContainer = context.getApplication().getApplicationServiceContainer();
UserPortalConfigService service_ = (UserPortalConfigService)appContainer.getComponentInstanceOfType(UserPortalConfigService.class);
Modified: portal/branches/branched-r3776/webui/portal/src/main/java/org/exoplatform/portal/application/UserProfileLifecycle.java
===================================================================
--- portal/branches/branched-r3776/webui/portal/src/main/java/org/exoplatform/portal/application/UserProfileLifecycle.java 2010-08-12 03:55:48 UTC (rev 3807)
+++ portal/branches/branched-r3776/webui/portal/src/main/java/org/exoplatform/portal/application/UserProfileLifecycle.java 2010-08-12 04:54:05 UTC (rev 3808)
@@ -31,7 +31,7 @@
{
public static final String USER_PROFILE_ATTRIBUTE_NAME = "PortalUserProfile";
- private final ThreadLocal<UserProfile> currentUserProfile = new ThreadLocal<UserProfile>();
+ private final static ThreadLocal<UserProfile> currentUserProfile = new ThreadLocal<UserProfile>();
@SuppressWarnings("unused")
public void onInit(Application app)
@@ -55,15 +55,15 @@
}
}
-
+
currentUserProfile.set(userProfile);
context.setAttribute(this.USER_PROFILE_ATTRIBUTE_NAME, userProfile);
}
-
+
@SuppressWarnings("unused")
public void onFailRequest(Application app, WebuiRequestContext context, RequestFailure failureType) throws Exception
{
-
+
}
@SuppressWarnings("unused")
Added: portal/branches/branched-r3776/webui/portal/src/main/java/org/exoplatform/portal/application/localization/DefaultLocalePolicyService.java
===================================================================
--- portal/branches/branched-r3776/webui/portal/src/main/java/org/exoplatform/portal/application/localization/DefaultLocalePolicyService.java (rev 0)
+++ portal/branches/branched-r3776/webui/portal/src/main/java/org/exoplatform/portal/application/localization/DefaultLocalePolicyService.java 2010-08-12 04:54:05 UTC (rev 3808)
@@ -0,0 +1,142 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2010, Red Hat, Inc., and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This 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 software 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.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.exoplatform.portal.application.localization;
+
+import org.exoplatform.services.resources.LocaleContextInfo;
+import org.exoplatform.services.resources.LocalePolicy;
+import org.picocontainer.Startable;
+
+import java.util.List;
+import java.util.Locale;
+
+/**
+ * This service represents a default policy for determining LocaleConfig to be used for user's session.
+ * This service is registered through portal services configuration file: conf/portal/configuration.xml
+ * Custom locale determination policy can be implemented by overriding or completely replacing this class,
+ * and registering an alternative implementation.
+ *
+ * @see NoBrowserLocalePolicyService
+ *
+ * @author <a href="mailto:mstrukel@redhat.com">Marko Strukelj</a>
+ */
+public class DefaultLocalePolicyService implements LocalePolicy, Startable
+{
+ /**
+ * @see LocalePolicy#determineLocale(LocaleContextInfo)
+ */
+ public Locale determineLocale(LocaleContextInfo context)
+ {
+ Locale locale = null;
+ if (context.getRemoteUser() == null)
+ locale = getLocaleConfigForAnonymous(context);
+ else
+ locale = getLocaleConfigForRegistered(context);
+
+ if (locale == null)
+ locale = context.getPortalLocale();
+
+ return locale;
+ }
+
+ /**
+ * Override this method to change the LocaleConfig determination for registered users.
+ * Default is: use user's profile language, if not available fall back to LOCALE cookie,
+ * and finally if that is not available either fall back to browser language preference.
+ *
+ * @param context locale context info available to implementations in order to determine appropriate Locale
+ * @return Locale representing a language to use, or null
+ */
+ protected Locale getLocaleConfigForRegistered(LocaleContextInfo context)
+ {
+ Locale locale = context.getLocaleIfSupported(context.getUserProfileLocale());
+ if (locale == null)
+ locale = getLocaleConfigFromCookie(context);
+ if (locale == null)
+ locale = getLocaleConfigFromBrowser(context);
+
+ return locale;
+ }
+
+ /**
+ * Override this method to change the Locale determination based on browser language preferences.
+ * If you want to disable the use of browser language preferences simply return null.
+ *
+ * @param context locale context info available to implementations in order to determine appropriate Locale
+ * @return Locale representing a language to use, or null
+ */
+ protected Locale getLocaleConfigFromBrowser(LocaleContextInfo context)
+ {
+ List<Locale> locales = context.getBrowserLocales();
+ for (Locale loc: locales)
+ return context.getLocaleIfSupported(loc);
+
+ return null;
+ }
+
+ /**
+ * Override this method to change Locale determination for users that aren't logged in.
+ * By default the request's LOCALE cookie is used, if that is not available the browser
+ * language preferences are used.
+ *
+ * @param context locale context info available to implementations in order to determine appropriate Locale
+ * @return Locale representing a language to use, or null
+ */
+ protected Locale getLocaleConfigForAnonymous(LocaleContextInfo context)
+ {
+ Locale locale = getLocaleConfigFromCookie(context);
+ if (locale == null)
+ locale = getLocaleConfigFromBrowser(context);
+
+ return locale;
+ }
+
+ /**
+ * Override this method to change the Locale determination based on browser cookie.
+ * If you want to disable the use of browser cookies simply return null.
+ *
+ * @param context locale context info available to implementations in order to determine appropriate Locale
+ * @return Locale representing a language to use, or null
+ */
+ protected Locale getLocaleConfigFromCookie(LocaleContextInfo context)
+ {
+ List<Locale> locales = context.getCookieLocales();
+ for (Locale locale: locales)
+ return context.getLocaleIfSupported(locale);
+
+ return null;
+ }
+
+ /**
+ * Starter interface method
+ */
+ public void start()
+ {
+ }
+
+ /**
+ * Starter interface method
+ */
+ public void stop()
+ {
+ }
+
+}
Added: portal/branches/branched-r3776/webui/portal/src/main/java/org/exoplatform/portal/application/localization/LocalizationLifecycle.java
===================================================================
--- portal/branches/branched-r3776/webui/portal/src/main/java/org/exoplatform/portal/application/localization/LocalizationLifecycle.java (rev 0)
+++ portal/branches/branched-r3776/webui/portal/src/main/java/org/exoplatform/portal/application/localization/LocalizationLifecycle.java 2010-08-12 04:54:05 UTC (rev 3808)
@@ -0,0 +1,314 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2010, Red Hat, Inc., and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This 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 software 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.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.exoplatform.portal.application.localization;
+
+import org.exoplatform.container.ExoContainer;
+import org.exoplatform.portal.Constants;
+import org.exoplatform.portal.application.PortalRequestContext;
+import org.exoplatform.portal.application.PortalStateManager;
+import org.exoplatform.portal.application.UserProfileLifecycle;
+import org.exoplatform.portal.config.UserPortalConfig;
+import org.exoplatform.services.log.ExoLogger;
+import org.exoplatform.services.log.Log;
+import org.exoplatform.services.organization.OrganizationService;
+import org.exoplatform.services.organization.UserProfile;
+import org.exoplatform.services.resources.LocaleConfig;
+import org.exoplatform.services.resources.LocaleConfigService;
+import org.exoplatform.services.resources.LocaleContextInfo;
+import org.exoplatform.services.resources.LocalePolicy;
+import org.exoplatform.web.application.Application;
+import org.exoplatform.web.application.ApplicationRequestPhaseLifecycle;
+import org.exoplatform.web.application.Phase;
+import org.exoplatform.web.application.RequestFailure;
+import org.exoplatform.webui.application.WebuiRequestContext;
+
+import javax.servlet.http.Cookie;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Locale;
+import java.util.Set;
+
+/**
+ * This class takes care of loading / initializing / saving the current Locale.
+ * Current Locale is used to create properly localized response to current request.
+ *
+ * At the beginning of request {@link LocalePolicy} is used to determine the
+ * initial Locale to be used for processing the request.
+ *
+ * This Locale is then set on current {@link org.exoplatform.portal.application.PortalRequestContext} (it's presumed that current
+ * {@link org.exoplatform.web.application.RequestContext} is of type PortalRequestContext) by calling
+ * {@link org.exoplatform.portal.application.PortalRequestContext#setLocale}.
+ *
+ * During request processing {@link org.exoplatform.portal.application.PortalRequestContext#getLocale} is the ultimate reference consulted by any
+ * rendering code that needs to know about current Locale.
+ *
+ * When this Locale is changed during action processing, the new Locale choice is saved
+ * into user's profile or into browser's cookie in order to be used by future requests.
+ *
+ * This Lifecycle depends on UserProfileLifecycle being registered before this one, as it relies on it
+ * for loading the user profile. See WEB-INF/webui-configuration.xml in web/portal module.
+ *
+ * @author <a href="mailto:mstrukel@redhat.com">Marko Strukelj</a>
+ */
+public class LocalizationLifecycle implements ApplicationRequestPhaseLifecycle<WebuiRequestContext>
+{
+ private static final String COOKIE_NAME = "LOCALE";
+
+ private static final ThreadLocal<Locale> calculatedLocale = new ThreadLocal<Locale>();
+
+ private static Log log = ExoLogger.getLogger("portal:LocalizationLifecycle");
+
+ /**
+ * @see org.exoplatform.web.application.ApplicationLifecycle#onInit
+ */
+ public void onInit(Application app) throws Exception
+ {
+ }
+
+ /**
+ * Initialize Locale to be used for the processing of current request
+ *
+ * @see org.exoplatform.web.application.ApplicationLifecycle#onStartRequest
+ */
+ public void onStartRequest(Application app, WebuiRequestContext context) throws Exception
+ {
+ if (context instanceof PortalRequestContext == false)
+ throw new IllegalArgumentException("Expected PortalRequestContext, but got: " + context);
+
+ PortalRequestContext reqCtx = (PortalRequestContext) context;
+ ExoContainer container = app.getApplicationServiceContainer();
+
+ LocaleConfigService localeConfigService = (LocaleConfigService)
+ container.getComponentInstanceOfType(LocaleConfigService.class);
+ LocalePolicy localePolicy = (LocalePolicy) container.getComponentInstanceOfType(LocalePolicy.class);
+
+ LocaleContextInfo localeCtx = new LocaleContextInfo();
+
+ Set<Locale> supportedLocales = new HashSet();
+ for (LocaleConfig lc: localeConfigService.getLocalConfigs())
+ {
+ supportedLocales.add(lc.getLocale());
+ }
+ localeCtx.setSupportedLocales(supportedLocales);
+
+ HttpServletRequest request = HttpServletRequest.class.cast(context.getRequest());
+ localeCtx.setBrowserLocales(Collections.list(request.getLocales()));
+
+ localeCtx.setCookieLocales(getCookieLocales(request));
+ localeCtx.setUserProfileLocale(getUserProfileLocale(reqCtx));
+ localeCtx.setRemoteUser(reqCtx.getRemoteUser());
+
+ UserPortalConfig userPortalConfig = null;
+ try
+ {
+ userPortalConfig = PortalStateManager.getUserPortalConfig(reqCtx);
+ if (userPortalConfig == null)
+ log.warn("No UserPortalConfig available! Portal locale set to 'en'");
+ }
+ catch(Exception ignored)
+ {
+ if (log.isDebugEnabled())
+ log.debug("IGNORED: Failed to load UserPortalConfig: ", ignored);
+ }
+
+ String portalLocaleName = "en";
+ if (userPortalConfig != null)
+ portalLocaleName = userPortalConfig.getPortalConfig().getLocale();
+
+ Locale portalLocale = LocaleContextInfo.getLocale(portalLocaleName);
+ localeCtx.setPortalLocale(portalLocale);
+
+ Locale locale = localePolicy.determineLocale(localeCtx);
+ if (!supportedLocales.contains(locale))
+ {
+ if (log.isWarnEnabled())
+ log.warn("Unsupported locale returned by LocalePolicy: " + localePolicy + ". Falling back to 'en'.");
+ locale = Locale.ENGLISH;
+ }
+ reqCtx.setLocale(locale);
+ calculatedLocale.set(locale);
+ }
+
+ /**
+ * @see org.exoplatform.web.application.ApplicationRequestPhaseLifecycle#onStartRequestPhase
+ */
+ public void onStartRequestPhase(Application app, WebuiRequestContext context, Phase phase)
+ {
+ }
+
+ /**
+ * Save any locale change - to cookie for anonymous users, to profile for logged-in users
+ *
+ * @see org.exoplatform.web.application.ApplicationRequestPhaseLifecycle#onEndRequestPhase
+ */
+ public void onEndRequestPhase(Application app, WebuiRequestContext context, Phase phase)
+ {
+ if (phase == Phase.ACTION)
+ {
+ // if onStartRequest survived the cast, this one should as well - no check necessary
+ PortalRequestContext reqCtx = (PortalRequestContext) context;
+ Locale loc = reqCtx.getLocale();
+ Locale remembered = calculatedLocale.get();
+ calculatedLocale.remove();
+ if (loc != null && (remembered == null || !loc.equals(remembered)))
+ saveLocale(reqCtx, loc);
+ }
+ }
+
+ /**
+ * @see org.exoplatform.web.application.ApplicationLifecycle#onEndRequest
+ */
+ public void onEndRequest(Application app, WebuiRequestContext context) throws Exception
+ {
+ }
+
+ /**
+ * @see org.exoplatform.web.application.ApplicationLifecycle#onFailRequest
+ */
+ public void onFailRequest(Application app, WebuiRequestContext context, RequestFailure failureType) throws Exception
+ {
+ }
+
+ /**
+ * @see org.exoplatform.web.application.ApplicationLifecycle#onDestroy
+ */
+ public void onDestroy(Application app) throws Exception
+ {
+ }
+
+ /**
+ * Use {@link UserProfile} already loaded by {@link org.exoplatform.portal.application.UserProfileLifecycle} or load one ourselves.
+ * @param context current PortalRequestContext
+ * @return Locale from user's profile or null
+ */
+ private Locale getUserProfileLocale(PortalRequestContext context)
+ {
+ String lang = null;
+
+ UserProfile userProfile = getLoadedProfile(context);
+ lang = userProfile == null ? null : userProfile.getUserInfoMap().get(Constants.USER_LANGUAGE);
+ return (lang != null) ? new Locale(lang) : null;
+ }
+
+ private UserProfile loadUserProfile(ExoContainer container, PortalRequestContext context)
+ {
+ UserProfile userProfile = null;
+ OrganizationService svc = (OrganizationService)
+ container.getComponentInstanceOfType(OrganizationService.class);
+
+ String user = context.getRemoteUser();
+ if (user != null)
+ {
+ try
+ {
+ userProfile = svc.getUserProfileHandler().findUserProfileByName(user);
+ }
+ catch (Exception ignored)
+ {
+ log.error("IGNORED: Failed to load UserProfile for username: " + user, ignored);
+ }
+
+ if (userProfile == null && log.isWarnEnabled())
+ log.warn("Could not load user profile for " + user + ". Using default portal locale.");
+ }
+ return userProfile;
+ }
+
+ private UserProfile getLoadedProfile(PortalRequestContext context)
+ {
+ return (UserProfile) context.getAttribute(UserProfileLifecycle.USER_PROFILE_ATTRIBUTE_NAME);
+ }
+
+ public static List<Locale> getCookieLocales(HttpServletRequest request)
+ {
+ Cookie [] cookies = request.getCookies();
+ if (cookies != null)
+ {
+ for (Cookie cookie: cookies)
+ {
+ if (COOKIE_NAME.equals(cookie.getName()))
+ {
+ List<Locale> locales = new ArrayList<Locale>();
+ locales.add(LocaleContextInfo.getLocale(cookie.getValue()));
+ return locales;
+ }
+ }
+ }
+ return Collections.emptyList();
+ }
+
+ private void saveLocale(PortalRequestContext context, Locale loc)
+ {
+ String user = context.getRemoteUser();
+ if (user != null)
+ {
+ saveLocaleToUserProfile(context, loc, user);
+ }
+ else
+ {
+ saveLocaleToCookie(context, loc);
+ }
+ }
+
+ private void saveLocaleToCookie(PortalRequestContext context, Locale loc)
+ {
+ HttpServletResponse res = context.getResponse();
+ Cookie cookie = new Cookie(COOKIE_NAME, LocaleContextInfo.getLocaleAsString(loc));
+ cookie.setMaxAge(Integer.MAX_VALUE);
+ cookie.setPath("/");
+ res.addCookie(cookie);
+ }
+
+ private void saveLocaleToUserProfile(PortalRequestContext context, Locale loc, String user)
+ {
+ ExoContainer container = context.getApplication().getApplicationServiceContainer();
+ OrganizationService svc = (OrganizationService)
+ container.getComponentInstanceOfType(OrganizationService.class);
+
+ // Don't rely on UserProfileLifecycle loaded UserProfile when doing
+ // an update to avoid a potential overwrite of other changes
+ UserProfile userProfile = loadUserProfile(container, context);
+ if (userProfile != null)
+ {
+ userProfile.getUserInfoMap().put(Constants.USER_LANGUAGE, loc.getLanguage());
+ try
+ {
+ svc.getUserProfileHandler().saveUserProfile(userProfile, false);
+ }
+ catch (Exception ignored)
+ {
+ log.error("IGNORED: Failed to save profile for user: " + user, ignored);
+ userProfile = null;
+ }
+ }
+
+ if (userProfile == null)
+ {
+ if (log.isWarnEnabled())
+ log.warn("Unable to save locale into profile for user: " + user);
+ }
+ }
+}
Added: portal/branches/branched-r3776/webui/portal/src/main/java/org/exoplatform/portal/application/localization/NoBrowserLocalePolicyService.java
===================================================================
--- portal/branches/branched-r3776/webui/portal/src/main/java/org/exoplatform/portal/application/localization/NoBrowserLocalePolicyService.java (rev 0)
+++ portal/branches/branched-r3776/webui/portal/src/main/java/org/exoplatform/portal/application/localization/NoBrowserLocalePolicyService.java 2010-08-12 04:54:05 UTC (rev 3808)
@@ -0,0 +1,47 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2010, Red Hat, Inc., and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This 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 software 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.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.exoplatform.portal.application.localization;
+
+import org.exoplatform.services.resources.LocaleContextInfo;
+
+import java.util.Locale;
+
+/**
+ * This implementation of {@link org.exoplatform.services.resources.LocalePolicy} disregards client browser language preference.
+ * Localization will therefore not be affected by different OS or browser language settings.
+ *
+ * @author <a href="mailto:mstrukel@redhat.com">Marko Strukelj</a>
+ */
+public class NoBrowserLocalePolicyService extends DefaultLocalePolicyService
+{
+ /**
+ * Override super method with no-op.
+ *
+ * @param context locale context info available to implementations in order to determine appropriate Locale
+ * @return null
+ */
+ @Override
+ protected Locale getLocaleConfigFromBrowser(LocaleContextInfo context)
+ {
+ return null;
+ }
+}
Modified: portal/branches/branched-r3776/webui/portal/src/main/java/org/exoplatform/portal/webui/application/ExoUserContext.java
===================================================================
--- portal/branches/branched-r3776/webui/portal/src/main/java/org/exoplatform/portal/webui/application/ExoUserContext.java 2010-08-12 03:55:48 UTC (rev 3807)
+++ portal/branches/branched-r3776/webui/portal/src/main/java/org/exoplatform/portal/webui/application/ExoUserContext.java 2010-08-12 04:54:05 UTC (rev 3808)
@@ -19,8 +19,8 @@
package org.exoplatform.portal.webui.application;
+import org.exoplatform.portal.application.PortalRequestContext;
import org.exoplatform.services.organization.UserProfile;
-import org.gatein.common.util.Tools;
import org.gatein.pc.api.invocation.resolver.AttributeResolver;
import org.gatein.pc.api.invocation.resolver.PrincipalAttributeResolver;
import org.gatein.pc.api.spi.UserContext;
@@ -29,6 +29,7 @@
import java.util.Enumeration;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.LinkedList;
import java.util.List;
import java.util.Locale;
import java.util.Map;
@@ -119,23 +120,52 @@
return Collections.unmodifiableMap(filteredMap);
}
- /** Returns the client request locale or <code>Locale.ENGLISH</code> if no request was provided. */
+ /**
+ * Returns current PortalRequestContext's locale. It falls back to
+ * clientRequest locale ({@link HttpServletRequest#getLocale}), or <code>Locale.ENGLISH</code>
+ * if clientRequest object is not available.
+ */
public Locale getLocale()
{
+ PortalRequestContext context = PortalRequestContext.getCurrentInstance();
+
+ if(context != null) {
+ Locale loc = context.getLocale();
+ if (loc != null)
+ return loc;
+ }
+
return clientRequest != null ? clientRequest.getLocale() : Locale.ENGLISH;
}
- /** Returns the client request locales or an empty list if no request was provided. */
+ /**
+ * Returns the list of client request locales, making sure the first one in the List
+ * is the same as what getLocale() method returns.
+ */
@SuppressWarnings("unchecked")
public List<Locale> getLocales()
{
- if (clientRequest == null)
+ Locale loc = getLocale();
+ if (loc == null)
{
return EMPTY_LOCALE_LIST;
}
else
{
- return Tools.toList((Enumeration<Locale>)clientRequest.getLocales());
+ LinkedList<Locale> locs = new LinkedList<Locale>();
+ locs.add(loc);
+ if (clientRequest != null)
+ {
+ Enumeration<Locale> clientLocs = (Enumeration<Locale>) clientRequest.getLocales();
+ while (clientLocs.hasMoreElements())
+ {
+ Locale current = clientLocs.nextElement();
+ if (current.getLanguage().equals(loc.getLanguage()) && current.getCountry().equals(loc.getCountry()))
+ continue;
+ locs.add(current);
+ }
+ }
+ return Collections.unmodifiableList(locs);
}
}
Modified: portal/branches/branched-r3776/webui/portal/src/main/java/org/exoplatform/portal/webui/portal/UILanguageSelector.java
===================================================================
--- portal/branches/branched-r3776/webui/portal/src/main/java/org/exoplatform/portal/webui/portal/UILanguageSelector.java 2010-08-12 03:55:48 UTC (rev 3807)
+++ portal/branches/branched-r3776/webui/portal/src/main/java/org/exoplatform/portal/webui/portal/UILanguageSelector.java 2010-08-12 04:54:05 UTC (rev 3808)
@@ -21,21 +21,13 @@
import org.exoplatform.container.ExoContainer;
import org.exoplatform.container.ExoContainerContext;
-import org.exoplatform.portal.Constants;
-import org.exoplatform.portal.config.model.PageNavigation;
-import org.exoplatform.portal.config.model.PageNode;
-import org.exoplatform.portal.config.model.PortalConfig;
+import org.exoplatform.portal.application.PortalRequestContext;
import org.exoplatform.portal.webui.util.Util;
import org.exoplatform.portal.webui.workspace.UIMaskWorkspace;
import org.exoplatform.portal.webui.workspace.UIPortalApplication;
-import org.exoplatform.services.organization.OrganizationService;
-import org.exoplatform.services.organization.UserProfile;
-import org.exoplatform.services.organization.UserProfileHandler;
import org.exoplatform.services.resources.LocaleConfig;
import org.exoplatform.services.resources.LocaleConfigService;
-import org.exoplatform.services.resources.ResourceBundleManager;
import org.exoplatform.services.resources.ResourceBundleService;
-import org.exoplatform.webui.application.WebuiRequestContext;
import org.exoplatform.webui.config.annotation.ComponentConfig;
import org.exoplatform.webui.config.annotation.EventConfig;
import org.exoplatform.webui.core.UIContainer;
@@ -180,18 +172,10 @@
LocaleConfig localeConfig = localeConfigService.getLocaleConfig(language);
if (localeConfig == null)
localeConfig = localeConfigService.getDefaultLocaleConfig();
- uiApp.setLocale(localeConfig.getLocale());
+ PortalRequestContext prqCtx = PortalRequestContext.getCurrentInstance();
+ prqCtx.setLocale(localeConfig.getLocale());
uiApp.setOrientation(localeConfig.getOrientation());
uiApp.localizeNavigations();
- OrganizationService orgService = event.getSource().getApplicationComponent(OrganizationService.class);
- String remoteUser = event.getRequestContext().getRemoteUser();
- if (remoteUser != null)
- {
- UserProfile userProfile = orgService.getUserProfileHandler().findUserProfileByName(remoteUser);
- userProfile.getUserInfoMap().put(Constants.USER_LANGUAGE, language);
- UserProfileHandler hanlder = orgService.getUserProfileHandler();
- hanlder.saveUserProfile(userProfile, true);
- }
}
}
Modified: portal/branches/branched-r3776/webui/portal/src/main/java/org/exoplatform/portal/webui/portal/UIPortal.java
===================================================================
--- portal/branches/branched-r3776/webui/portal/src/main/java/org/exoplatform/portal/webui/portal/UIPortal.java 2010-08-12 03:55:48 UTC (rev 3807)
+++ portal/branches/branched-r3776/webui/portal/src/main/java/org/exoplatform/portal/webui/portal/UIPortal.java 2010-08-12 04:54:05 UTC (rev 3808)
@@ -238,7 +238,7 @@
uiPageBody.setPageBody(selectedNode_, this);
//Refresh locale
- Locale locale = Util.getUIPortalApplication().getLocale();
+ Locale locale = Util.getPortalRequestContext().getLocale();
localizePageNavigation(navigation, locale);
}
Modified: portal/branches/branched-r3776/webui/portal/src/main/java/org/exoplatform/portal/webui/portal/UIPortalComposer.java
===================================================================
--- portal/branches/branched-r3776/webui/portal/src/main/java/org/exoplatform/portal/webui/portal/UIPortalComposer.java 2010-08-12 03:55:48 UTC (rev 3807)
+++ portal/branches/branched-r3776/webui/portal/src/main/java/org/exoplatform/portal/webui/portal/UIPortalComposer.java 2010-08-12 04:54:05 UTC (rev 3808)
@@ -220,7 +220,7 @@
// TODO dang.tung - change layout when portal get language from UIPortal
// (user and browser not support)
// ----------------------------------------------------------------------------------------------------
- String portalAppLanguage = uiPortalApp.getLocale().getLanguage();
+ String portalAppLanguage = prContext.getLocale().getLanguage();
OrganizationService orgService = getApplicationComponent(OrganizationService.class);
UserProfile userProfile = orgService.getUserProfileHandler().findUserProfileByName(remoteUser);
String userLanguage = userProfile.getUserInfoMap().get(Constants.USER_LANGUAGE);
@@ -231,7 +231,7 @@
{
if (!portalAppLanguage.equals(userLanguage) && !portalAppLanguage.equals(browserLanguage))
{
- uiPortalApp.setLocale(localeConfig.getLocale());
+ prContext.setLocale(localeConfig.getLocale());
//editPortal.refreshNavigation(localeConfig.getLocale());
uiPortalApp.localizeNavigations();
}
Modified: portal/branches/branched-r3776/webui/portal/src/main/java/org/exoplatform/portal/webui/workspace/UIPortalApplication.java
===================================================================
--- portal/branches/branched-r3776/webui/portal/src/main/java/org/exoplatform/portal/webui/workspace/UIPortalApplication.java 2010-08-12 03:55:48 UTC (rev 3807)
+++ portal/branches/branched-r3776/webui/portal/src/main/java/org/exoplatform/portal/webui/workspace/UIPortalApplication.java 2010-08-12 04:54:05 UTC (rev 3808)
@@ -46,6 +46,7 @@
import org.exoplatform.services.organization.UserProfile;
import org.exoplatform.services.resources.LocaleConfig;
import org.exoplatform.services.resources.LocaleConfigService;
+import org.exoplatform.services.resources.LocaleContextInfo;
import org.exoplatform.services.resources.Orientation;
import org.exoplatform.services.resources.ResourceBundleManager;
import org.exoplatform.web.application.javascript.JavascriptConfigService;
@@ -94,8 +95,6 @@
private String nodePath_;
- private Locale locale_ = Locale.ENGLISH;
-
private Orientation orientation_ = Orientation.LT;
final static public String UI_WORKING_WS_ID = "UIWorkingWorkspace";
@@ -144,10 +143,9 @@
// dang.tung - set portal language by user preference -> browser ->
// default
// ------------------------------------------------------------------------------
- String portalLanguage = null;
LocaleConfigService localeConfigService = getApplicationComponent(LocaleConfigService.class);
OrganizationService orgService = getApplicationComponent(OrganizationService.class);
- LocaleConfig localeConfig = localeConfigService.getLocaleConfig(userPortalConfig_.getPortalConfig().getLocale());
+
String user = context.getRemoteUser();
String portalSkin = null;
@@ -156,7 +154,6 @@
UserProfile userProfile = orgService.getUserProfileHandler().findUserProfileByName(user);
if (userProfile != null)
{
- portalLanguage = userProfile.getUserInfoMap().get(Constants.USER_LANGUAGE);
portalSkin = userProfile.getUserInfoMap().get(Constants.USER_SKIN);
}
else
@@ -165,24 +162,25 @@
log.warn("Could not load user profile for " + user + ". Using default portal locale.");
}
}
- localeConfig = localeConfigService.getLocaleConfig(portalLanguage);
- String localeLanguage = (localeConfig.getLocale().getCountry().length() > 0) ? localeConfig.getLocale()
- .getLanguage()
- + "_" + localeConfig.getLocale().getCountry() : localeConfig.getLocale().getLanguage();
- if (portalLanguage == null || !portalLanguage.equals(localeLanguage))
+
+ Locale locale = context.getLocale();
+ if (locale == null)
{
- // if user language no support by portal -> get browser language if no
- // ->
- // get portal
- portalLanguage = context.getRequest().getLocale().getLanguage();
- localeConfig = localeConfigService.getLocaleConfig(portalLanguage);
- if (!portalLanguage.equals(localeConfig.getLanguage()))
- {
- localeConfig = localeConfigService.getLocaleConfig(userPortalConfig_.getPortalConfig().getLocale());
- }
+ if (log.isWarnEnabled())
+ log.warn("No locale set on PortalRequestContext! Falling back to 'en'.");
+ locale = Locale.ENGLISH;
}
- setLocale(localeConfig.getLocale());
+
+ String localeName = LocaleContextInfo.getLocaleAsString(locale);
+ LocaleConfig localeConfig = localeConfigService.getLocaleConfig(localeName);
+ if (localeConfig == null)
+ {
+ if (log.isWarnEnabled())
+ log.warn("Unsupported locale set on PortalRequestContext: " + localeName + "! Falling back to 'en'.");
+ localeConfig = localeConfigService.getLocaleConfig(Locale.ENGLISH.getLanguage());
+ }
setOrientation(localeConfig.getOrientation());
+
// -------------------------------------------------------------------------------
context.setUIApplication(this);
@@ -305,14 +303,9 @@
public Locale getLocale()
{
- return locale_;
+ return Util.getPortalRequestContext().getLocale();
}
- public void setLocale(Locale locale)
- {
- locale_ = locale;
- }
-
public void setModeState(int mode)
{
this.modeState = mode;
13 years, 10 months