[Yanel-dev] Re: [Yanel-commits] rev 29163 - in public/yanel/trunk/src/impl/java/org/wyona/yanel/impl/resources: . usecase usecase/thread

simon litwan simon.litwan at wyona.com
Fri Nov 23 15:54:55 CET 2007


i think  we can safely remove following file, right?

public/yanel/trunk/src/impl/java/org/wyona/yanel/impl/resources/usecase/UsecaseView.java


cheers

simon


michi at wyona.com schrieb:
> Author: michi
> Date: 2007-11-23 12:03:35 +0100 (Fri, 23 Nov 2007)
> New Revision: 29163
>
> Modified:
>    public/yanel/trunk/src/impl/java/org/wyona/yanel/impl/resources/BasicXMLResource.java
>    public/yanel/trunk/src/impl/java/org/wyona/yanel/impl/resources/usecase/ExecutableUsecaseResource.java
>    public/yanel/trunk/src/impl/java/org/wyona/yanel/impl/resources/usecase/UsecaseResource.java
>    public/yanel/trunk/src/impl/java/org/wyona/yanel/impl/resources/usecase/UsecaseView.java
>    public/yanel/trunk/src/impl/java/org/wyona/yanel/impl/resources/usecase/thread/ThreadUsecaseResource.java
> Log:
> configurable view descriptor added
>
> Modified: public/yanel/trunk/src/impl/java/org/wyona/yanel/impl/resources/BasicXMLResource.java
> ===================================================================
> --- public/yanel/trunk/src/impl/java/org/wyona/yanel/impl/resources/BasicXMLResource.java	2007-11-23 11:03:13 UTC (rev 29162)
> +++ public/yanel/trunk/src/impl/java/org/wyona/yanel/impl/resources/BasicXMLResource.java	2007-11-23 11:03:35 UTC (rev 29163)
> @@ -19,6 +19,9 @@
>  import java.io.ByteArrayInputStream;
>  import java.io.ByteArrayOutputStream;
>  import java.io.InputStream;
> +import java.util.Enumeration;
> +import java.util.HashMap;
> +import java.util.Properties;
>  
>  import javax.xml.transform.Transformer;
>  import javax.xml.transform.TransformerFactory;
> @@ -27,9 +30,13 @@
>  import javax.xml.transform.sax.TransformerHandler;
>  import javax.xml.transform.stream.StreamSource;
>  
> +import org.apache.avalon.framework.configuration.Configuration;
> +import org.apache.avalon.framework.configuration.ConfigurationException;
> +import org.apache.avalon.framework.configuration.ConfigurationUtil;
>  import org.apache.log4j.Category;
>  import org.apache.xml.resolver.tools.CatalogResolver;
>  import org.apache.xml.serializer.Serializer;
> +import org.w3c.dom.Document;
>  import org.wyona.security.core.api.Identity;
>  import org.wyona.yanel.core.Resource;
>  import org.wyona.yanel.core.api.attributes.ViewableV2;
> @@ -40,6 +47,8 @@
>  import org.wyona.yanel.core.transformation.I18nTransformer2;
>  import org.wyona.yanel.core.transformation.XIncludeTransformer;
>  import org.wyona.yanel.core.util.PathUtil;
> +import org.wyona.yanel.impl.resources.xml.ConfigurableViewDescriptor;
> +import org.wyona.yanel.impl.resources.usecase.UsecaseException;
>  import org.wyona.yarep.core.Repository;
>  import org.xml.sax.InputSource;
>  import org.xml.sax.XMLReader;
> @@ -52,24 +61,68 @@
>  
>      private static Category log = Category.getInstance(BasicXMLResource.class);
>  
> +    protected static String DEFAULT_VIEW_ID = "default";
>      protected static String SOURCE_VIEW_ID = "source";
> +    
> +    protected static String SERIALIZER_OMIT_XML_DECLARATION = "serializer-omit-xml-declaration";
> +    protected static String SERIALIZER_DOCTYPE_PUBLIC = "serializer-doctype-public";
> +    protected static String SERIALIZER_DOCTYPE_SYSTEM = "serializer-doctype-system";
>  
> +    protected HashMap viewDescriptors;
> +    
> +    public ViewDescriptor getViewDescriptor(String viewId) {
> +        ViewDescriptor[] viewDescriptors = getViewDescriptors();
> +        for (int i = 0; i < viewDescriptors.length; i++) {
> +            if (viewDescriptors[i].getId().equals(viewId)) {
> +                return viewDescriptors[i];
> +            }
> +        }
> +        return null;
> +    }
> +    
>      /**
>       * @see org.wyona.yanel.core.api.attributes.ViewableV2#getViewDescriptors()
>       */
>      public ViewDescriptor[] getViewDescriptors() {
> -        ViewDescriptor[] vd = new ViewDescriptor[2];
> +        if (this.viewDescriptors != null) {
> +            return (ViewDescriptor[])this.viewDescriptors.values().toArray(new ViewDescriptor[this.viewDescriptors.size()]); 
> +        }
>          try {
> -            vd[0] = new ViewDescriptor("default");
> -            vd[0].setMimeType(getMimeType(null));
> -
> -            vd[1] = new ViewDescriptor(SOURCE_VIEW_ID);
> -            vd[1].setMimeType(getMimeType(SOURCE_VIEW_ID));
> +            this.viewDescriptors = new HashMap();
> +            // reads views from configuration:
> +            Document customConfigDoc = getConfiguration().getCustomConfiguration();
> +            if (customConfigDoc != null) {
> +                Configuration config = ConfigurationUtil.toConfiguration(customConfigDoc.getDocumentElement());
> +                Configuration viewsConfig = config.getChild("views");
> +                Configuration[] viewConfigs = viewsConfig.getChildren("view");
> +                for (int i = 0; i < viewConfigs.length; i++) {
> +                    String id = viewConfigs[i].getAttribute("id");
> +                    ConfigurableViewDescriptor viewDescriptor = new ConfigurableViewDescriptor(id);
> +                    viewDescriptor.configure(viewConfigs[i]);
> +                    this.viewDescriptors.put(id, viewDescriptor);
> +                }
> +            } else {
> +                // no custom config
> +                ConfigurableViewDescriptor[] vd = new ConfigurableViewDescriptor[2];
> +                vd[0] = new ConfigurableViewDescriptor(DEFAULT_VIEW_ID);
> +                String mimeType = getResourceConfigProperty("mime-type");
> +                vd[0].setMimeType(mimeType);
> +                this.viewDescriptors.put(DEFAULT_VIEW_ID, vd[0]);
> +                
> +                vd[1] = new ConfigurableViewDescriptor(SOURCE_VIEW_ID);
> +                mimeType = getResourceConfigProperty("source-view-mime-type");
> +                vd[1].setMimeType(mimeType);
> +                this.viewDescriptors.put(SOURCE_VIEW_ID, vd[1]);
> +                return vd;
> +            }
>          } catch (Exception e) {
> -            log.error(e.getMessage(), e);
> +            String errorMsg = "Error configuring resource: " + getPath() + ": " + e.toString();
> +            log.error(errorMsg, e);
> +            // TODO: throw exception
> +            return null;
>          }
> -
> -        return vd;
> +        
> +        return null;
>      }
>  
>      /**
> @@ -84,14 +137,18 @@
>       * @see org.wyona.yanel.core.api.attributes.ViewableV2#getMimeType(java.lang.String)
>       */
>      public String getMimeType(String viewId) throws Exception {
> -        if (viewId != null && viewId.equals(SOURCE_VIEW_ID)) {
> -            String mimeType = getResourceConfigProperty("source-view-mime-type");
> -            if (mimeType != null) return mimeType;
> -        } else {
> -            String mimeType = getResourceConfigProperty("mime-type");
> -            if (mimeType != null) return mimeType;
> +        String mimeType = null;
> +        ViewDescriptor viewDescriptor = getViewDescriptor(viewId);
> +        if (viewDescriptor != null) {
> +            mimeType = viewDescriptor.getMimeType();
>          }
> -        return "application/xml";
> +        if (mimeType == null) {
> +            mimeType = this.getResourceConfigProperty("mime-type");
> +        }
> +        if (mimeType != null) {
> +            return mimeType;
> +        }
> +        return "application/xhtml+xml";
>      }
>  
>      /**
> @@ -111,6 +168,10 @@
>  
>      public View getXMLView(String viewId, InputStream xmlInputStream) throws Exception {
>          View view = new View();
> +        if (viewId == null) {
> +            viewId = DEFAULT_VIEW_ID;
> +        }
> +        ConfigurableViewDescriptor viewDescriptor = (ConfigurableViewDescriptor)getViewDescriptor(viewId);
>          String mimeType = getMimeType(viewId);
>          view.setMimeType(mimeType);
>  
> @@ -119,11 +180,9 @@
>  
>              if (viewId != null && viewId.equals(SOURCE_VIEW_ID)) {
>                  view.setInputStream(xmlInputStream);
> -                view.setMimeType(getMimeType(viewId));
>                  return view;
>              }
>  
> -
>              // create reader:
>              XMLReader xmlReader = XMLReaderFactory.createXMLReader();
>              CatalogResolver catalogResolver = new CatalogResolver();
> @@ -133,10 +192,13 @@
>              // create xslt transformer:
>              SAXTransformerFactory tf = (SAXTransformerFactory)TransformerFactory.newInstance();
>  
> -            String[] xsltPath = getXSLTPath(getPath());
> -            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()));
> +            String[] xsltPaths = viewDescriptor.getXSLTPaths();
> +            if (xsltPaths == null || xsltPaths.length == 0) {
> +                xsltPaths = getXSLTPath(getPath());
> +            }
> +            TransformerHandler[] xsltHandlers = new TransformerHandler[xsltPaths.length];
> +            for (int i = 0; i < xsltPaths.length; i++) {
> +                xsltHandlers[i] = tf.newTransformerHandler(new StreamSource(repo.getNode(xsltPaths[i]).getInputStream()));
>                  passTransformerParameters(xsltHandlers[i].getTransformer());
>              }
>  
> @@ -150,14 +212,8 @@
>              xIncludeTransformer.setResolver(resolver);
>  
>              // create serializer:
> -            Serializer serializer = null;
> -            if (getMimeType(viewId).equals("text/html")) {
> -                serializer = SerializerFactory.getSerializer(SerializerFactory.HTML_TRANSITIONAL);
> -            } else if (getMimeType(viewId).equals("application/xhtml+xml")) {
> -                    serializer = SerializerFactory.getSerializer(SerializerFactory.XHTML_STRICT);
> -            } else {
> -                serializer = SerializerFactory.getSerializer(SerializerFactory.XML);
> -            }
> +            Serializer serializer = createSerializer(viewDescriptor);
> +            
>              ByteArrayOutputStream baos = new ByteArrayOutputStream();
>  
>              // chain everything together (create a pipeline):
> @@ -188,6 +244,45 @@
>      }
>  
>      /**
> +     * Creates an html or xml serializer for the given view id.
> +     * @param viewId
> +     * @return serializer
> +     * @throws Exception
> +     */
> +    protected Serializer createSerializer(ConfigurableViewDescriptor viewDescriptor) throws Exception {
> +        Serializer serializer = null;
> +        String serializerKey = viewDescriptor.getSerializerKey();
> +        if (serializerKey != null) {
> +            serializer = SerializerFactory.getSerializer(serializerKey);
> +            if (serializer == null) {
> +                throw new Exception("could not create serializer for key: " + serializerKey);
> +            }
> +        } else {
> +            String mimeType = getMimeType(viewDescriptor.getId());
> +
> +            if (mimeType.equals("text/html")) {
> +                serializer = SerializerFactory.getSerializer(SerializerFactory.HTML_TRANSITIONAL);
> +            } else if (mimeType.equals("application/xml")) {
> +                serializer = SerializerFactory.getSerializer(SerializerFactory.XML);
> +            } else {
> +                serializer = SerializerFactory.getSerializer(SerializerFactory.XHTML_STRICT);
> +            }
> +        }
> +        // allow to override xml declaration and doctype:
> +        Properties properties = viewDescriptor.getSerializerProperties();
> +        if (properties != null) {
> +            Enumeration propNames = properties.propertyNames();
> +            while (propNames.hasMoreElements()) {
> +                String name = (String)propNames.nextElement();
> +                String value = properties.getProperty(name);
> +
> +                serializer.getOutputFormat().setProperty(name, value);
> +            }
> +        }
> +        return serializer;
> +    }
> +    
> +    /**
>       * Gets the names of the i18n message catalogues used for the i18n transformation.
>       * Looks for an rc config property named 'i18n-catalogue'. Defaults to 'global'.
>       * @return i18n catalogue name
> @@ -228,6 +323,7 @@
>          // username
>          String username = getUsername();
>          if (username != null) transformer.setParameter("username", username);
> +        transformer.setParameter("yanel.reservedPrefix", "yanel"); // TODO don't hardcode
>      }
>  
>      /**
>
> Modified: public/yanel/trunk/src/impl/java/org/wyona/yanel/impl/resources/usecase/ExecutableUsecaseResource.java
> ===================================================================
> --- public/yanel/trunk/src/impl/java/org/wyona/yanel/impl/resources/usecase/ExecutableUsecaseResource.java	2007-11-23 11:03:13 UTC (rev 29162)
> +++ public/yanel/trunk/src/impl/java/org/wyona/yanel/impl/resources/usecase/ExecutableUsecaseResource.java	2007-11-23 11:03:35 UTC (rev 29163)
> @@ -21,6 +21,7 @@
>  import java.util.List;
>  
>  import org.apache.log4j.Category;
> +import org.wyona.yanel.core.attributes.viewable.View;
>  
>  /**
>   * The standard executable usecase works as follows:
> @@ -37,6 +38,7 @@
>  
>      private static Category log = Category.getInstance(ExecutableUsecaseResource.class);
>      
> +    protected static final String VIEW_DEFAULT = "default";
>      protected static final String VIEW_DONE = "done";
>      protected static final String VIEW_CANCEL = "cancel";
>      
> @@ -54,7 +56,7 @@
>          this.errorMessages = new LinkedList();
>      }
>  
> -    protected UsecaseView processUsecase(String viewID) throws UsecaseException {
> +    protected View processUsecase(String viewID) throws UsecaseException {
>          if (getParameter(PARAM_SUBMIT) != null) {
>              if (!checkPreconditions() || hasErrors()) {
>                  return generateView(VIEW_DEFAULT);
>
> Modified: public/yanel/trunk/src/impl/java/org/wyona/yanel/impl/resources/usecase/UsecaseResource.java
> ===================================================================
> --- public/yanel/trunk/src/impl/java/org/wyona/yanel/impl/resources/usecase/UsecaseResource.java	2007-11-23 11:03:13 UTC (rev 29162)
> +++ public/yanel/trunk/src/impl/java/org/wyona/yanel/impl/resources/usecase/UsecaseResource.java	2007-11-23 11:03:35 UTC (rev 29163)
> @@ -19,6 +19,7 @@
>  import java.io.ByteArrayInputStream;
>  import java.io.ByteArrayOutputStream;
>  import java.io.FileOutputStream;
> +import java.io.InputStream;
>  import java.io.UnsupportedEncodingException;
>  import java.util.Enumeration;
>  import java.util.HashMap;
> @@ -51,6 +52,8 @@
>  import org.wyona.yanel.core.transformation.I18nTransformer2;
>  import org.wyona.yanel.core.transformation.XIncludeTransformer;
>  import org.wyona.yanel.core.util.PathUtil;
> +import org.wyona.yanel.impl.resources.xml.ConfigurableViewDescriptor;
> +import org.wyona.yanel.impl.resources.BasicXMLResource;
>  import org.wyona.yarep.core.Repository;
>  import org.xml.sax.InputSource;
>  import org.xml.sax.XMLReader;
> @@ -59,14 +62,10 @@
>  /**
>   *
>   */
> -public class UsecaseResource extends Resource implements ViewableV2 {
> +public class UsecaseResource extends BasicXMLResource {
>  
>      private static Category log = Category.getInstance(UsecaseResource.class);
>  
> -    protected static final String VIEW_DEFAULT = "default";
> -
> -    protected HashMap views;
> -
>      /**
>       *
>       */
> @@ -77,70 +76,55 @@
>          init();
>          return processUsecase(viewID);
>      }
> -
> +    
>      protected void init() throws UsecaseException {
> -        // reads views from configuration:
> -        try {
> -            this.views = new HashMap();
> -            Document customConfigDoc = getConfiguration().getCustomConfiguration();
> -            if (customConfigDoc != null) {
> -                Configuration config = ConfigurationUtil.toConfiguration(customConfigDoc.getDocumentElement());
> -                Configuration viewsConfig = config.getChild("views");
> -                Configuration[] viewConfigs = viewsConfig.getChildren("view");
> -                for (int i = 0; i < viewConfigs.length; i++) {
> -                    String id = viewConfigs[i].getAttribute("id");
> -                    String type = viewConfigs[i].getAttribute("type");
> -                    UsecaseView view = new UsecaseView(id, type);
> -                    view.configure(viewConfigs[i]);
> -                    this.views.put(id, view);
> -                }
> -            }
> -        } catch (ConfigurationException e) {
> -            String errorMsg = "Error configuring usecase: " + getName() + ": " + e.toString();
> -            log.error(errorMsg, e);
> -            throw new UsecaseException(errorMsg, e);
> -        }
> +        // implement in subclass
>      }
> -
> -    protected UsecaseView processUsecase(String viewID) throws UsecaseException {
> +    
> +    protected View processUsecase(String viewID) throws UsecaseException {
>          return generateView(viewID);
>      }
> -
> -    protected UsecaseView generateView(String viewID) throws UsecaseException {
> +    
> +    protected View generateView(String viewID) throws UsecaseException {
>          if (viewID == null || viewID.length() == 0) {
> -            viewID = VIEW_DEFAULT;
> +            viewID = DEFAULT_VIEW_ID;
>          }
> -        UsecaseView view = (UsecaseView)this.views.get(viewID);
> -
> -        if (view == null) {
> -            throw new UsecaseException("Usecase " + getName() + " has no view with id: " + viewID);
> +        try {
> +            ConfigurableViewDescriptor viewDescriptor = (ConfigurableViewDescriptor)getViewDescriptor(viewID); 
> +           
> +            if (viewDescriptor == null) {
> +                throw new UsecaseException("Usecase " + getName() + " has no view with id: " + viewID);
> +            }
> +            
> +            if (viewDescriptor.getType().equals(ConfigurableViewDescriptor.TYPE_JELLY)) {
> +                InputStream xmlInputStream = getJellyXML(viewDescriptor);
> +                return getXMLView(viewID, xmlInputStream);
> +            /*} else if (viewDescriptor.getType().equals(ViewDescriptor.TYPE_REDIRECT)) {
> +                String redirectURL = getRedirectURL(viewDescriptor);
> +                UsecaseView view = new UsecaseView(viewDescriptor.getId(), UsecaseView.TYPE_REDIRECT);
> +                view.setRedirectURL(redirectURL);
> +                return view;*/
> +            } else if (viewDescriptor.getType().equals(ConfigurableViewDescriptor.TYPE_CUSTOM)) {
> +                return renderCustomView(viewDescriptor);
> +            } else {
> +                throw new UsecaseException("Usecase " + getName() + " has invalid view type: " + viewDescriptor.getType());
> +            }
> +        } catch (Exception e) {
> +            String errorMsg = "Error generating view of usecase: " + getName() + ": " + e;
> +            log.error(errorMsg, e);
> +            throw new UsecaseException(errorMsg, e);
>          }
> -
> -        if (view.getType().equals(UsecaseView.TYPE_JELLY)) {
> -            String viewTemplate = view.getTemplate();
> -            renderJellyView(view, viewTemplate);
> -            return view;
> -        } else if (view.getType().equals(UsecaseView.TYPE_REDIRECT)) {
> -            String redirectURL = getRedirectURL(view);
> -            view.setRedirectURL(redirectURL);
> -            return view;
> -        } else if (view.getType().equals(UsecaseView.TYPE_CUSTOM)) {
> -            renderCustomView(view);
> -            return view;
> -        } else {
> -            throw new UsecaseException("Usecase " + getName() + " has invalid view type: " + view.getType());
> -        }
>      }
> -
> +    
>      protected String getName() {
>          return "name";
>      }
>  
> -    protected void renderJellyView(UsecaseView view, String viewTemplate) throws UsecaseException {
> +    protected InputStream getJellyXML(ConfigurableViewDescriptor viewDescriptor) throws UsecaseException {
>          try {
> -            String viewId = view.getID();
> +            String viewTemplate = viewDescriptor.getTemplate();
>              Repository repo = this.getRealm().getRepository();
> -
> +            
>              JellyContext jellyContext = new JellyContext();
>              jellyContext.setVariable("resource", this);
>              jellyContext.setVariable("yanel.back2context", PathUtil.backToContext(realm, getPath()));
> @@ -150,127 +134,31 @@
>              jellyContext.setVariable("yanel.reservedPrefix", this.getYanel().getReservedPrefix());
>              //jellyContext.setVariable("request", request);
>  
> -            // at first we write the jelly output to a stream,
> -            // instead of feeding it directly to the sax pipeline,
> -            // because otherwise there is an error: EmptyStackException
>              ByteArrayOutputStream jellyResultStream = new ByteArrayOutputStream();
>              XMLOutput jellyOutput = XMLOutput.createXMLOutput(jellyResultStream);
> -
> +            
>              //String viewTemplate = view.getTemplate();
>              jellyContext.runScript(new InputSource(repo.getNode(viewTemplate).getInputStream()), jellyOutput);
>              jellyOutput.flush();
> -
> -            // create reader:
> -            XMLReader xmlReader = XMLReaderFactory.createXMLReader();
> -            CatalogResolver catalogResolver = new CatalogResolver();
> -            xmlReader.setEntityResolver(catalogResolver);
> -
> -            // create xslt transformer:
> -            SAXTransformerFactory tf = (SAXTransformerFactory)TransformerFactory.newInstance();
> -
> -            String[] xsltPath = getResourceConfigProperties("xslt");
> -
> -            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("yanel.globalHtdocsPath", PathUtil.getGlobalHtdocsPath(this));
> -                xsltHandlers[i].getTransformer().setParameter("yanel.resourcesHtdocsPath", PathUtil.getResourcesHtdocsPath(this));
> -                xsltHandlers[i].getTransformer().setParameter("yanel.back2realm", PathUtil.backToRealm(getPath()));
> -                xsltHandlers[i].getTransformer().setParameter("yarep.back2realm", PathUtil.backToRealm(getPath())); // for backwards compatibility
> -                xsltHandlers[i].getTransformer().setParameter("language", getRequestedLanguage());
> -                xsltHandlers[i].getTransformer().setParameter("yanel.reservedPrefix", this.getYanel().getReservedPrefix());
> -            }
> -
> -            // create i18n transformer:
> -            I18nTransformer2 i18nTransformer = new I18nTransformer2("global", getRequestedLanguage(), getRealm().getDefaultLanguage());
> -            i18nTransformer.setEntityResolver(catalogResolver);
> -
> -            // create xinclude transformer:
> -            XIncludeTransformer xIncludeTransformer = new XIncludeTransformer();
> -            SourceResolver resolver = new SourceResolver(this);
> -            xIncludeTransformer.setResolver(resolver);
> -
> -            // create serializer
> -            Serializer serializer = null;
> -            if (getMimeType(viewId).equals("text/html")) {
> -                serializer = SerializerFactory.getSerializer(SerializerFactory.HTML_TRANSITIONAL);
> -            } else if (getMimeType(viewId).equals("application/xhtml+xml")) {
> -                    serializer = SerializerFactory.getSerializer(SerializerFactory.XHTML_STRICT);
> -            } else {
> -                serializer = SerializerFactory.getSerializer(SerializerFactory.XML);
> -            }
> -
> -            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(new ByteArrayInputStream(jellyResultStream.toByteArray())));
> -
> -            view.setInputStream(new ByteArrayInputStream(baos.toByteArray()));
> -            view.setMimeType(getMimeType(viewId));
> +            return new ByteArrayInputStream(jellyResultStream.toByteArray());
>          } catch (Exception e) {
>              String errorMsg = "Error creating jelly view of usecase: " + getName() + ": " + e;
>              log.error(errorMsg, e);
>              throw new UsecaseException(errorMsg, e);
>          }
>      }
> -
> -    protected String getRedirectURL(UsecaseView view) {
> -        return view.getRedirectURL();
> +        
> +    protected String getRedirectURL(ConfigurableViewDescriptor viewDescriptor) {
> +        return viewDescriptor.getRedirectURL();
>      }
> -
> -    protected void renderCustomView(UsecaseView view) throws UsecaseException {
> +    
> +    protected View renderCustomView(ConfigurableViewDescriptor viewDescriptor) throws UsecaseException {
>          // implement in subclass
> +        return null;
>      }
> -
> -
> +    
>      public boolean exists() throws Exception {
>          return true;
>      }
>  
> -    public String getMimeType(String viewId) throws Exception {
> -        String mimeType = getResourceConfigProperty("mime-type");
> -        if (mimeType != null) return mimeType;
> -        return "application/xhtml+xml";
> -    }
> -
> -    public long getSize() throws Exception {
> -        // TODO Auto-generated method stub
> -        return -1;
> -    }
> -
> -    public ViewDescriptor[] getViewDescriptors() {
> -        // TODO: call init() instead of return null
> -        if (this.views != null) {
> -            ViewDescriptor[] descriptors = new ViewDescriptor[this.views.size()];
> -
> -            Iterator iter = this.views.keySet().iterator();
> -            int i = 0;
> -            while (iter.hasNext()) {
> -                UsecaseView view = (UsecaseView)iter.next();
> -                descriptors[i] = new ViewDescriptor(view.getID());
> -                String mimeType = view.getMimeType();
> -                if (mimeType == null || mimeType.length() == 0) {
> -                    mimeType = "application/xhtml+xml";
> -                }
> -                descriptors[i].setMimeType(mimeType);
> -                i++;
> -            }
> -            return descriptors;
> -        }
> -        return null;
> -    }
> -
>  }
>
> Modified: public/yanel/trunk/src/impl/java/org/wyona/yanel/impl/resources/usecase/UsecaseView.java
> ===================================================================
> --- public/yanel/trunk/src/impl/java/org/wyona/yanel/impl/resources/usecase/UsecaseView.java	2007-11-23 11:03:13 UTC (rev 29162)
> +++ public/yanel/trunk/src/impl/java/org/wyona/yanel/impl/resources/usecase/UsecaseView.java	2007-11-23 11:03:35 UTC (rev 29163)
> @@ -1,89 +0,0 @@
> -/*
> - * Copyright 2006 Wyona
> - *
> - *  Licensed under the Apache License, Version 2.0 (the "License");
> - *  you may not use this file except in compliance with the License.
> - *  You may obtain a copy of the License at
> - *
> - *      http://www.wyona.org/licenses/APACHE-LICENSE-2.0
> - *
> - *  Unless required by applicable law or agreed to in writing, software
> - *  distributed under the License is distributed on an "AS IS" BASIS,
> - *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> - *  See the License for the specific language governing permissions and
> - *  limitations under the License.
> - */
> -
> -package org.wyona.yanel.impl.resources.usecase;
> -
> -
> -import org.wyona.yanel.core.attributes.viewable.View;
> -import org.apache.avalon.framework.configuration.Configuration;
> -import org.apache.avalon.framework.configuration.ConfigurationException;
> -import org.apache.log4j.Category;
> -
> -/**
> - *
> - */
> -public class UsecaseView extends View {
> -
> -    private static Category log = Category.getInstance(UsecaseView.class);
> -    
> -    public static final String TYPE_JELLY = "jelly";
> -    public static final String TYPE_REDIRECT = "redirect";
> -    public static final String TYPE_CUSTOM = "custom";
> -    
> -    protected String template;
> -    protected String type;
> -    protected String id;
> -    protected String redirectURL;
> -
> -    /**
> -     *
> -     */
> -    public UsecaseView(String id, String type) {
> -        this.id = id;
> -        this.type = type;
> -    }
> -    
> -    /**
> -     * 
> -     */
> -    public void configure(Configuration config) throws ConfigurationException {
> -        if (getType().equals(TYPE_JELLY)) {
> -            setTemplate(config.getChild("template").getValue());
> -        }
> -        if (getType().equals(TYPE_REDIRECT)) {
> -            setRedirectURL(config.getChild("url").getValue());
> -        }
> -    }
> -
> -    public String getRedirectURL() {
> -        return redirectURL;
> -    }
> -
> -    public void setRedirectURL(String redirectURL) {
> -        this.redirectURL = redirectURL;
> -    }
> -
> -    public String getTemplate() {
> -        return template;
> -    }
> -
> -    public void setTemplate(String template) {
> -        this.template = template;
> -    }
> -
> -    public String getType() {
> -        return type;
> -    }
> -
> -    public void setType(String type) {
> -        this.type = type;
> -    }
> -    
> -    public String getID() {
> -        return this.id;
> -    }
> -
> -}
>
> Modified: public/yanel/trunk/src/impl/java/org/wyona/yanel/impl/resources/usecase/thread/ThreadUsecaseResource.java
> ===================================================================
> --- public/yanel/trunk/src/impl/java/org/wyona/yanel/impl/resources/usecase/thread/ThreadUsecaseResource.java	2007-11-23 11:03:13 UTC (rev 29162)
> +++ public/yanel/trunk/src/impl/java/org/wyona/yanel/impl/resources/usecase/thread/ThreadUsecaseResource.java	2007-11-23 11:03:35 UTC (rev 29163)
> @@ -7,9 +7,9 @@
>  import javax.servlet.http.HttpSession;
>  
>  import org.apache.log4j.Category;
> +import org.wyona.yanel.core.attributes.viewable.View;
>  import org.wyona.yanel.impl.resources.usecase.ExecutableUsecaseResource;
>  import org.wyona.yanel.impl.resources.usecase.UsecaseException;
> -import org.wyona.yanel.impl.resources.usecase.UsecaseView;
>  
>  /**
>   * A resource which executes a background thread and shows periodical status information.
> @@ -26,8 +26,8 @@
>      /**
>       * @see org.wyona.yanel.impl.resources.usecase.UsecaseResource#processUsecase(java.lang.String)
>       */
> -    protected UsecaseView processUsecase(String viewID) throws UsecaseException {
> -        UsecaseView view = null;
> +    protected View processUsecase(String viewID) throws UsecaseException {
> +        View view = null;
>          try {
>              HttpSession session = getEnvironment().getRequest().getSession();
>             
>
> _______________________________________________
> Yanel-commits mailing list
> Yanel-commits at wyona.com
> http://lists.wyona.org/cgi-bin/mailman/listinfo/yanel-commits
>   



More information about the Yanel-development mailing list