package gr.aegean.syros.jetspeed.portal.portlets;

/**
 * <p>Title: Portlets</p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c) 2002</p>
 * <p>Company: University of the Aegean</p>
 * @author Evangelos Vlachogiannis
 * @version 1.0
 */
import org.apache.turbine.util.RunData;
import org.apache.turbine.om.security.User;
import org.apache.ecs.ConcreteElement;
import org.apache.ecs.StringElement;
import org.apache.jetspeed.portal.portlets.AbstractPortlet;
import org.apache.jetspeed.portal.service.*;
import org.apache.jetspeed.portal.PortletException;
import org.apache.jetspeed.portal.PortletConfig;
import org.apache.jetspeed.services.JetspeedSecurity;
import org.apache.jetspeed.services.TemplateLocator;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.Template;
import org.jdom.Document;
import org.jdom.input.SAXBuilder;
import javax.servlet.http.HttpServletRequest;
import java.io.StringWriter;

public class XMLVelocityPortlet extends AbstractPortlet
{

    /**
    By default the data is non cacheable
    */
    public void init() throws PortletException
    {
        setCacheable( false );
    }

  public ConcreteElement getContent (RunData runData)
  {
    if (!JetspeedSecurity.checkPermission(runData, JetspeedSecurity.PERMISSION_VIEW, this))
    {
      return new StringElement("Sorry, you have no permission to see this portlet");
    }
    HttpServletRequest req = runData.getRequest();
    String path = runData.getServletContext().getRealPath("/");
    String vmtemplate = getPortletConfig().getInitParameter("vmtemplate");
    String xmlurlfile = getPortletConfig().getInitParameter("xmlfile");
    StringWriter w = new StringWriter();
    StringBuffer out = new StringBuffer();
    Template template = null;

    try
    {
      Velocity.init();
      SAXBuilder builder;
      Document root = null;
      try
      {
        builder = new SAXBuilder(  "org.apache.xerces.parsers.SAXParser" );
        root = builder.build(xmlurlfile);
      }
      catch( Exception ee)
      {
        System.out.println("Exception building Document : " + ee);
      }
      VelocityContext context = new VelocityContext();
      context.put("root", root);
      String templatepath =TemplateLocator.locatePortletTemplate(runData,vmtemplate);
      template = Velocity.getTemplate(templatepath);
      template.merge( context , w);
//root.getRootElement().getChild("properties").getChild("title").getText(); -- into vm
    }
    catch( Exception e )
    {
      System.out.println("Exception : " + e);
    }
    finally
    {
      if ( w != null)
      {
        try
        {
          w.flush();
          w.close();
        }
        catch( Exception ee )
        {
          System.out.println("Exception : " + ee );
        }
      }
    }
    return (new StringElement(w.toString()));
  }
}
