JaulTagJucasBean.java :  » Web-Framework » jucas » org » jucas » xml » Java Open Source

Java Open Source » Web Framework » jucas 
jucas » org » jucas » xml » JaulTagJucasBean.java
/*
 * License
 *
 *
 * Copyright (c) 2003 Essl Christian.  All rights 
 * reserved.
 * 
 * This Licence is based on the Apache Software Licence Version 1.1.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer. 
 *
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in
 *    the documentation and/or other materials provided with the
 *    distribution.
 *
 * 3. The end-user documentation included with the redistribution,
 *    if any, must include the following acknowledgment:  
 *       "This product includes software developed by Christian Essl 
 *        and others for project Jucas (http://www.jucas.org/)."
 *    Alternately, this acknowledgment may appear in the software itself,
 *    if and wherever such third-party acknowledgments normally appear.
 *
 * 4. The names "Jucas" and "Christian Essl" must
 *    not be used to endorse or promote products derived from this
 *    software without prior written permission. For written 
 *    permission, please contact essl_christian@jucas.org.
 *
 * 5. Products derived from this software may not be called "Jucas"
 *    or "Christian Essl", nor may "Jucas" or "Christian Essl"
 *    appear in their name, without prior written permission
 *    of Christian Essl (jucas@esslchristian.de).
 *
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED.  IN NO EVENT SHALL CHRISTIAN ESSL OR
 * OTHER CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 * ====================================================================
 *
 * 
 */
package org.jucas.xml;

import java.io.Writer;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;

import org.jaul.IExecuter;
import org.jaul.JaulAttributes;
import org.jaul.JaulContext;
import org.jaul.TagScript;

/**
 * Tag <jucas-bean name="name of bean" uri=" the uri from which the bean can
 * be instantiated" /&gt; <br><br>
 * This tag is the one by which you can create child jucas-beans the name is the
 * name under which it will be in {@link org.jucas.jaulpagebean.JaulPageBean}
 * . The uri defines the IJucasBean so that it can be loaded by a
 * IPageBeanLoader (see 
 * {@link org.jucas.ContainerHelper#createChildPageBean(String, URI)}).
 * @author chris
 *
 */
class JaulTagJucasBean implements IExecuter
{

  
  private ThreadLocal tLocal = new ThreadLocal();
  /**
   * Constructor for TagBean.
   */
  public JaulTagJucasBean()
  {
    super();
  }

  /**
   * @see org.jaul.IExecuter#execute(org.jaul.TagScript, org.jaul.JaulContext, java.io.Writer)
   */
  public void execute(TagScript script, JaulContext ctxt, Writer wr)
    throws Exception
  {
    JaulPageBean pageBean = ((JaulJucasContext)ctxt).getJaulPageBean();
    
    JaulAttributes atts = script.getAttributes();
    String name = atts.getExpression("name").evaluateAsString(ctxt);
    
    Object bean = pageBean.getVariable(name);
    
    if(bean == null){
      bean = this.createBean(ctxt, pageBean, atts, name);
      tLocal.set(bean);
      script.getBody().execute(ctxt, wr);
    }else{
      tLocal.set(bean);
    }

  }

  /**
   * @see org.jaul.IExecuter#getBean(org.jaul.TagScript, org.jaul.JaulContext)
   */
  public Object getBean(TagScript script, JaulContext ctxtIn) throws Exception
  {
    Object ret = tLocal.get();
    return ret;
  }

  private Object createBean(
    JaulContext ctxtIn,
    JaulPageBean pageBean,
    JaulAttributes atts,
    String name)
    throws URISyntaxException
  {
    //get the bean
    String uriS = atts.getExpressionAsString("uri", ctxtIn);
    URI uri = new URI(uriS);
    return pageBean.createComponent(name, uriS);
  }
  
  

  /**
   * @see org.jaul.IExecuter#getBeanClass(org.jaul.TagScript)
   */
  public Class getDefiningBeanClass(TagScript script, JaulContext ctxt)
  {
    return this.getClass();    
  }

  /**
   * @see org.jaul.IExecuter#compile(org.jaul.TagScript)
   */
  public void compile(TagScript tagScript)
  {
  }

}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.