package net.pascalalma.xml;

import java.util.Date;

import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLStreamWriter;

import net.pascalalma.model.Employee;
import net.pascalalma.model.Holiday;
import net.pascalalma.model.HolidayRequest;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class HolidayResponseWriter
{
  private static final Log LOG = LogFactory.getLog(HolidayResponseWriter.class);
  
  private static final String HR_NS_URI="http://www.pascalalma.net/hr/schemas";
  private static final String HR_NS_PREFIX="hr";
  
  public static void writeResponse(HolidayRequest hr,
      XMLStreamWriter streamwriter) throws Exception
  {
    
    try {
    // create XML response message
    streamwriter.writeStartDocument();
    streamwriter.setPrefix(HR_NS_PREFIX, HR_NS_URI);
    streamwriter.setDefaultNamespace(HR_NS_URI); 
    
    LOG.info("writeStartElement HolidayResponse");
    streamwriter.flush();
    
    streamwriter.writeStartElement(HR_NS_PREFIX,"HolidayResponse", HR_NS_URI);
    streamwriter.writeNamespace(HR_NS_PREFIX, HR_NS_URI);
    streamwriter.writeComment("Test comment");
    streamwriter.flush();
    
    LOG.info("writeStartElement Status");
    streamwriter.writeStartElement(HR_NS_PREFIX,"Status", HR_NS_URI);
    streamwriter.flush();
    
    if (hr.getEmployee().getNumber() < 100)
    {
      LOG.info("writeCharacters DENIED");
      streamwriter.writeCharacters("DENIED");
    } 
    else
    {
      LOG.info("writeCharacters APPROVED");
      streamwriter.writeCharacters("APPROVED");
    }
    streamwriter.flush();
    streamwriter.writeEndElement(); // status
    streamwriter.writeEndElement(); // HolidayResponse
    //streamwriter.writeEndDocument(); // End document
    streamwriter.flush();
    } catch (Throwable t)
    {
      t.printStackTrace();
    }
  }
  
  public static void main(String[] args)
  {
    
    Holiday h = new Holiday();
    h.setStartDate(new Date());
    h.setEndDate(new Date());
    Employee e = new Employee();
    e.setNumber(123);
    e.setFirstName("Pascal");
    e.setLastName("Alma");
    HolidayRequest hr = new HolidayRequest();
    hr.setEmployee(e);
    hr.setHoliday(h);
    
    XMLOutputFactory outputFactory=XMLOutputFactory.newInstance();

    
    //XMLStreamWriter.writeStartDocument("UTF-8","1.0");

    try
    {
      XMLStreamWriter streamwriter=outputFactory.createXMLStreamWriter(System.out);
      
      HolidayResponseWriter.writeResponse(hr, streamwriter);
    } catch (Exception e1)
    {
      // TODO Auto-generated catch block
      e1.printStackTrace();
    }
    
  }
}
