[Yanel-commits] rev 26149 - public/yanel/trunk/src/resources/xml/src/java/org/wyona/yanel/impl/resources

michi at wyona.com michi at wyona.com
Thu Jul 19 15:30:30 CEST 2007


Author: michi
Date: 2007-07-19 15:30:30 +0200 (Thu, 19 Jul 2007)
New Revision: 26149

Modified:
   public/yanel/trunk/src/resources/xml/src/java/org/wyona/yanel/impl/resources/XMLResource.java
Log:
extends XML basic resource

Modified: public/yanel/trunk/src/resources/xml/src/java/org/wyona/yanel/impl/resources/XMLResource.java
===================================================================
--- public/yanel/trunk/src/resources/xml/src/java/org/wyona/yanel/impl/resources/XMLResource.java	2007-07-19 13:30:07 UTC (rev 26148)
+++ public/yanel/trunk/src/resources/xml/src/java/org/wyona/yanel/impl/resources/XMLResource.java	2007-07-19 13:30:30 UTC (rev 26149)
@@ -96,29 +96,11 @@
 /**
  *
  */
-public class XMLResource extends Resource implements ViewableV2, ModifiableV2, VersionableV2, CreatableV2, IntrospectableV1, TranslatableV1, WorkflowableV1 {
+public class XMLResource extends BasicXMLResource implements ModifiableV2, VersionableV2, CreatableV2, IntrospectableV1, TranslatableV1, WorkflowableV1 {
 
     private static Category log = Category.getInstance(XMLResource.class);
 
-    /**
-     *
-     */
-    public XMLResource() {
-    }
 
-    /**
-     *
-     */
-    public ViewDescriptor[] getViewDescriptors() {
-        ViewDescriptor[] vd = new ViewDescriptor[2];
-        vd[0] = new ViewDescriptor("default");
-        // NOTE: depends on XSLT ...
-        vd[0].setMimeType(null);
-        vd[1] = new ViewDescriptor("source");
-        vd[1].setMimeType("application/xml");
-        return vd;
-    }
-
     public View getView(String viewId) throws Exception {
         return getView(viewId, null);
     }
@@ -127,95 +109,12 @@
      * Generates view
      */
     public View getView(String viewId, String revisionName) throws Exception {
-        View defaultView = new View();
-        String mimeType = getMimeType(viewId);
-        defaultView.setMimeType(mimeType);
-
+        Repository repo = getRealm().getRepository();
         String yanelPath = getResourceConfigProperty("yanel-path");
-        //if (yanelPath == null) yanelPath = path.toString();
-
-        try {
-            Repository repo = getRealm().getRepository();
-
-            if (viewId != null && viewId.equals("source")) {
-                defaultView.setInputStream(getContentXML(repo, yanelPath, revisionName));
-                defaultView.setMimeType("application/xml");
-                return defaultView;
-            }
-
-            String[] xsltPath = getXSLTPath(getPath());
-            if (xsltPath != null) {
-                
-                // create reader:
-                XMLReader xmlReader = XMLReaderFactory.createXMLReader();
-                CatalogResolver catalogResolver = new CatalogResolver();
-                xmlReader.setEntityResolver(catalogResolver);
-                
-                // create xslt transformer:
-                SAXTransformerFactory tf = (SAXTransformerFactory)TransformerFactory.newInstance();
-                
-                TransformerHandler[] xsltHandlers = new TransformerHandler[xsltPath.length];
-                for (int i = 0; i < xsltPath.length; i++) {
-                    xsltHandlers[i] = tf.newTransformerHandler(new StreamSource(repo.getNode(xsltPath[i]).getInputStream()));
-                    xsltHandlers[i].getTransformer().setParameter("yanel.path.name", PathUtil.getName(getPath()));
-                    xsltHandlers[i].getTransformer().setParameter("yanel.path", getPath());
-                    xsltHandlers[i].getTransformer().setParameter("yanel.back2context", PathUtil.backToContext(realm, getPath()));
-                    xsltHandlers[i].getTransformer().setParameter("yarep.back2realm", PathUtil.backToRealm(getPath()));
-                    String userAgent = getRequest().getHeader("User-Agent");
-                    String os = getOS(userAgent);
-                    if (os != null) xsltHandlers[i].getTransformer().setParameter("os", os);
-                    String client = getClient(userAgent);
-                    if (client != null) xsltHandlers[i].getTransformer().setParameter("client", client);
-                    // localization
-                    xsltHandlers[i].getTransformer().setParameter("language", getRequestedLanguage());
-                    // language of this translation
-                    xsltHandlers[i].getTransformer().setParameter("content-language", getContentLanguage());
-
-                    // Username
-                    String username = getUsername();
-                    if (username != null) xsltHandlers[i].getTransformer().setParameter("username", username);
-                }
-                
-                // create i18n transformer:
-                I18nTransformer2 i18nTransformer = new I18nTransformer2("global", getRequestedLanguage(), getRealm().getDefaultLanguage());
-                i18nTransformer.setEntityResolver(catalogResolver);
-                
-                // create xinclude transformer:
-                XIncludeTransformer xIncludeTransformer = new XIncludeTransformer();
-                ResourceResolver resolver = new ResourceResolver(this);
-                xIncludeTransformer.setResolver(resolver);
-                
-                // create serializer:
-                Serializer serializer = SerializerFactory.getSerializer(SerializerFactory.XHTML_STRICT);
-                ByteArrayOutputStream baos = new ByteArrayOutputStream();
-                
-                // chain everything together (create a pipeline):
-                xmlReader.setContentHandler(xsltHandlers[0]);
-                for (int i=0; i<xsltHandlers.length-1; i++) {
-                    xsltHandlers[i].setResult(new SAXResult(xsltHandlers[i+1]));
-                }
-                xsltHandlers[xsltHandlers.length-1].setResult(new SAXResult(xIncludeTransformer));
-                xIncludeTransformer.setResult(new SAXResult(i18nTransformer));
-                i18nTransformer.setResult(new SAXResult(serializer.asContentHandler()));
-                serializer.setOutputStream(baos);
-                
-                // execute pipeline:
-                xmlReader.parse(new InputSource(getContentXML(repo, yanelPath, revisionName)));
-                
-                // write result into view:
-                defaultView.setInputStream(new ByteArrayInputStream(baos.toByteArray()));
-                return defaultView;
-            } else {
-                log.debug("Mime-Type: " + mimeType);
-                defaultView.setInputStream(getContentXML(repo, yanelPath, revisionName));
-            }
-        } catch(Exception e) {
-            log.error(e + " (" + getPath() + ", " + getRealm() + ")", e);
-            throw new Exception(e);
-        }
-
-        return defaultView;
+        InputStream xmlInputStream = getContentXML(repo, yanelPath, revisionName);
+        return getXMLView(viewId, xmlInputStream);
     }
+    
 
     /**
      * Get initial content as XML
@@ -236,7 +135,7 @@
                 } else {
                     log.error("No XML like mime-type: " + getPath() + " (yanel-path: " + yanelPath + ")");
                 }
-	    } else if (ResourceAttributeHelper.hasAttributeImplemented(res, "Viewable", "2")) {
+            } else if (ResourceAttributeHelper.hasAttributeImplemented(res, "Viewable", "2")) {
                 // TODO: Pass the request ...
                 View view = ((ViewableV2) res).getView(null);
                 if (view.getMimeType().indexOf("xml") >= 0) {
@@ -338,17 +237,6 @@
     }
 
     /**
-     * Get XSLT path
-     */
-    private String[] getXSLTPath(String path) throws Exception {
-        String[] xsltPath = getResourceConfigProperties("xslt");
-        if (xsltPath != null) return xsltPath;
-        log.info("No XSLT Path within: " + path);
-        return null;
-    }
-
-
-    /**
      *
      */
     public boolean delete() throws Exception {
@@ -433,11 +321,6 @@
         return node.isCheckedOut();
     }
 
-
-    public boolean exists() throws Exception {
-        return getRealm().getRepository().existsNode(getPath());
-    }
-
     /**
      * Get size of generated page
      */
@@ -456,38 +339,8 @@
         return -1;
     }
 
-    /**
-     * Get operating system
-     */
-    public String getOS(String userAgent) {
-        if (userAgent.indexOf("Linux") > 0) {
-            return "unix";
-        } else if (userAgent.indexOf("Mac OS X") > 0) {
-            return "unix";
-        } else if (userAgent.indexOf("Windows") > 0) {
-            return "windows";
-        } else {
-            log.warn("Operating System could not be recognized: " + userAgent);
-            return null;
-        }
-    }
 
     /**
-     * Get client
-     */
-    public String getClient(String userAgent) {
-        if (userAgent.indexOf("Firefox") > 0) {
-            return "firefox";
-        } else if (userAgent.indexOf("MSIE") > 0) {
-            return "msie";
-        } else {
-            log.warn("Client could not be recognized: " + userAgent);
-            return null;
-        }
-    }
-    
-
-    /**
      *
      */
     public void create(HttpServletRequest request) {
@@ -696,12 +549,4 @@
         return WorkflowHelper.getWorkflowIntrospection(this);
     }
 
-    /**
-     * Get username from session
-     */
-    private String getUsername() {
-        Identity identity = getEnvironment().getIdentity();
-        if (identity != null) return identity.getUsername();
-        return null;
-    }
 }



More information about the Yanel-commits mailing list