[Yanel-commits] rev 22882 - in public/yanel/trunk/src: build core/java/org/wyona/yanel/servlet webapp/xslt

josias at wyona.com josias at wyona.com
Thu Feb 22 18:32:46 CET 2007


Author: josias
Date: 2007-02-22 18:32:45 +0100 (Thu, 22 Feb 2007)
New Revision: 22882

Modified:
   public/yanel/trunk/src/build/global_de.properties
   public/yanel/trunk/src/build/global_en.properties
   public/yanel/trunk/src/core/java/org/wyona/yanel/servlet/YanelServlet.java
   public/yanel/trunk/src/webapp/xslt/xmlInfo2xhtml.xsl
Log:
apply i18n transformer to info and error screens. this includes a patch by andreas, see bug #5195, thanks.

Modified: public/yanel/trunk/src/build/global_de.properties
===================================================================
--- public/yanel/trunk/src/build/global_de.properties	2007-02-22 17:30:05 UTC (rev 22881)
+++ public/yanel/trunk/src/build/global_de.properties	2007-02-22 17:32:45 UTC (rev 22882)
@@ -2,3 +2,5 @@
 allRightsReserved = Alle Rechte vorbehalten 
 pageInfo = Seiten Info 
 search = Suche 
+error404 = Seite nicht gefunden - 404
+anErrorOccurred = Ein Fehler ist aufgetreten

Modified: public/yanel/trunk/src/build/global_en.properties
===================================================================
--- public/yanel/trunk/src/build/global_en.properties	2007-02-22 17:30:05 UTC (rev 22881)
+++ public/yanel/trunk/src/build/global_en.properties	2007-02-22 17:32:45 UTC (rev 22882)
@@ -2,3 +2,6 @@
 allRightsReserved = All rights reserved 
 pageInfo = Page Info 
 search = Search 
+error404 = Page not found - 404
+anErrorOccurred = An error occurred
+

Modified: public/yanel/trunk/src/core/java/org/wyona/yanel/servlet/YanelServlet.java
===================================================================
--- public/yanel/trunk/src/core/java/org/wyona/yanel/servlet/YanelServlet.java	2007-02-22 17:30:05 UTC (rev 22881)
+++ public/yanel/trunk/src/core/java/org/wyona/yanel/servlet/YanelServlet.java	2007-02-22 17:32:45 UTC (rev 22882)
@@ -1,5 +1,7 @@
 package org.wyona.yanel.servlet;
 
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.BufferedReader;
 import java.io.InputStream;
@@ -17,8 +19,14 @@
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpSession;
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
 import javax.xml.transform.Transformer;
 import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.sax.SAXResult;
+import javax.xml.transform.sax.SAXTransformerFactory;
+import javax.xml.transform.sax.TransformerHandler;
 import javax.xml.transform.stream.StreamSource;
 
 import org.wyona.yanel.core.Path;
@@ -38,6 +46,8 @@
 import org.wyona.yanel.core.attributes.viewable.ViewDescriptor;
 import org.wyona.yanel.core.navigation.Node;
 import org.wyona.yanel.core.navigation.Sitetree;
+import org.wyona.yanel.core.serialization.SerializerFactory;
+import org.wyona.yanel.core.transformation.I18nTransformer2;
 import org.wyona.yanel.core.util.DateUtil;
 import org.wyona.yanel.core.map.Map;
 import org.wyona.yanel.core.map.Realm;
@@ -51,14 +61,20 @@
 import org.wyona.security.core.api.IdentityManager;
 import org.wyona.security.core.api.PolicyManager;
 import org.wyona.security.core.api.Role;
+import org.wyona.security.core.api.User;
 
 import org.apache.log4j.Category;
+import org.apache.xalan.transformer.TransformerIdentityImpl;
+import org.apache.xml.resolver.tools.CatalogResolver;
+import org.apache.xml.serializer.Serializer;
 
 import org.apache.avalon.framework.configuration.Configuration;
 import org.apache.avalon.framework.configuration.DefaultConfigurationBuilder;
 
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
+import org.xml.sax.XMLReader;
+import org.xml.sax.helpers.XMLReaderFactory;
 
 /**
  *
@@ -346,7 +362,9 @@
                         if (vd != null) {
                             for (int i = 0; i < vd.length; i++) {
                                 Element descriptorElement = (Element) viewElement.appendChild(doc.createElement("descriptor"));
-                                descriptorElement.appendChild(doc.createTextNode(vd[i].getMimeType()));
+                                if (vd[i].getMimeType() != null) { 
+                                    descriptorElement.appendChild(doc.createTextNode(vd[i].getMimeType()));
+                                }
                                 descriptorElement.setAttributeNS(NAMESPACE, "id", vd[i].getId());
                             }
                         } else {
@@ -387,7 +405,9 @@
                         if (vd != null) {
                             for (int i = 0; i < vd.length; i++) {
                                 Element descriptorElement = (Element) viewElement.appendChild(doc.createElement("descriptor"));
-                                descriptorElement.appendChild(doc.createTextNode(vd[i].getMimeType()));
+                                if (vd[i].getMimeType() != null) {
+                                    descriptorElement.appendChild(doc.createTextNode(vd[i].getMimeType()));
+                                }
                                 descriptorElement.setAttributeNS(NAMESPACE, "id", vd[i].getId());
                             }
                         } else {
@@ -1344,6 +1364,7 @@
                 if (username != null) {
                     HttpSession session = request.getSession(true);
                     log.debug("Realm ID: " + realm.getID());
+                    
                     if (realm.getIdentityManager().authenticate(username, password)) {
                         log.info("Authentication successful: " + username);
                         session.setAttribute(IDENTITY_KEY, new Identity(username, null));
@@ -1509,8 +1530,29 @@
             } else {
                 // TODO: Use patchMimeType() !
                 response.setContentType("application/xhtml+xml; charset=" + DEFAULT_ENCODING);
-                Transformer transformer = TransformerFactory.newInstance().newTransformer(new StreamSource(xsltInfoAndException));
-                transformer.transform(new javax.xml.transform.dom.DOMSource(doc), new javax.xml.transform.stream.StreamResult(response.getWriter()));
+                
+                // create identity transformer which serves as a dom-to-sax transformer
+                TransformerIdentityImpl transformer = new TransformerIdentityImpl();
+                
+                // create xslt transformer:
+                SAXTransformerFactory saxTransformerFactory = (SAXTransformerFactory)SAXTransformerFactory.newInstance();
+                TransformerHandler xsltTransformer = saxTransformerFactory.newTransformerHandler(new StreamSource(xsltInfoAndException));
+                
+                // create i18n transformer:
+                I18nTransformer2 i18nTransformer = new I18nTransformer2("global", getLanguage(request));
+                CatalogResolver catalogResolver = new CatalogResolver();
+                i18nTransformer.setEntityResolver(new CatalogResolver());
+                
+                // create serializer:
+                Serializer serializer = SerializerFactory.getSerializer(SerializerFactory.XHTML_STRICT);
+                
+                // chain everything together (create a pipeline):
+                xsltTransformer.setResult(new SAXResult(i18nTransformer));
+                i18nTransformer.setResult(new SAXResult(serializer.asContentHandler()));
+                serializer.setOutputStream(response.getOutputStream());
+
+                // execute pipeline:
+                transformer.transform(new DOMSource(doc), new SAXResult(xsltTransformer));
             }
         } catch (Exception e) {
             log.error(e.getMessage(), e);
@@ -1519,6 +1561,28 @@
     }
 
     /**
+     * Get language with the following priorization: 1) yanel.meta.language query string parameter, 2) Accept-Language header, 3) Default en
+     */
+    private String getLanguage(HttpServletRequest request) {
+        String language = request.getParameter("yanel.meta.language");
+        if (language == null) {
+            language = request.getHeader("Accept-Language");
+            if (language != null) {
+                int commaIndex = language.indexOf(","); 
+                if (commaIndex > 0) {
+                    language = language.substring(0, commaIndex);
+                }
+                int dashIndex = language.indexOf("-"); 
+                if (dashIndex > 0) {
+                    language = language.substring(0, dashIndex);
+                }
+            }
+        }
+        if(language != null && language.length() > 0) return language;
+        return "en";
+    }
+
+    /**
      * Custom XHTML Form for authentication
      */
     public void getXHTMLAuthenticationForm(HttpServletRequest request, HttpServletResponse response, Realm realm, String message) throws ServletException, IOException {

Modified: public/yanel/trunk/src/webapp/xslt/xmlInfo2xhtml.xsl
===================================================================
--- public/yanel/trunk/src/webapp/xslt/xmlInfo2xhtml.xsl	2007-02-22 17:30:05 UTC (rev 22881)
+++ public/yanel/trunk/src/webapp/xslt/xmlInfo2xhtml.xsl	2007-02-22 17:32:45 UTC (rev 22882)
@@ -22,26 +22,26 @@
                   - 404
                 </xsl:when>
                 <xsl:when test="child::node()/yanel:exception">
-                  <i18n:text>- An error occurred</i18n:text>
+                  <i18n:message key="anErrorOccurred">- An error occurred</i18n:message>
                 </xsl:when>
                 <xsl:otherwise>
-                  <i18n:text>- Page Info</i18n:text>
+                  <i18n:message key="pageInfo">- Page Info</i18n:message>
                 </xsl:otherwise>
               </xsl:choose>
             </title>
           </head>
           <body>
 
-              <h1>Yanel
+              <h1>Yanel - 
               <xsl:choose>
                 <xsl:when test="/yanel:yanel/yanel:exception/@yanel:status = '404'">
-                  <i18n:text>- 404</i18n:text>
+                  <i18n:message key="error404">404</i18n:message>
                 </xsl:when>
                 <xsl:when test="child::node()/yanel:exception">
-                  <i18n:text>- An error occurred</i18n:text>
+                  <i18n:message key="anErrorOccurred">An error occurred</i18n:message>
                 </xsl:when>
                 <xsl:otherwise>
-                  <i18n:text>- Page Info</i18n:text>
+                  <i18n:message key="pageInfo">Page Info</i18n:message>
                 </xsl:otherwise>
               </xsl:choose>
               </h1>




More information about the Yanel-commits mailing list