package com.k_int.ciim;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.DefaultValue;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

import com.k_int.ciim.json.CIIMMediaFormatJSON;
import com.k_int.ciim.json.SchemaDefinitionJSON;
import com.k_int.ciim.kernel.CIIMDataManager;
import com.k_int.mimsy.ref.MimsyDataTypeEnum;
import com.sun.jersey.api.view.ImplicitProduces;


/**
 * REST Web Service
 *
 * @author Mark Johnson
 * curl -s -H 'Accept: application/json' http://localhost:8081/Template/CIIM/Schemas
 * ImplicitProduces("text/html;qs=5")   
 */

@XmlRootElement
@ImplicitProduces("application/json;qs=5")
@XmlAccessorType(XmlAccessType.FIELD)
@Path("/CIIM/Schemas")
@Component
public class Schemas implements ApplicationContextAware 
{
	 @XmlTransient
	 private ApplicationContext ctx;
	 
	 @XmlTransient
	 @Context HttpServletRequest request;
	 
	 @XmlTransient
	 private static Log log = LogFactory.getLog(Schemas.class);
	 
	 public void setApplicationContext(ApplicationContext ctx) 
	 {
	    this.ctx = ctx;
	 }
	   
	 @javax.annotation.PreDestroy
	 public void destroy() 
	 {
	 }
	   
	 /** Creates a new instance */
	 public Schemas() 
	 {
		 //log.debug("*** new Objects class contructor");
	 }

	 @javax.annotation.PostConstruct
	 public void init() 
	 {
		 //log.debug("*** new Objects class init");
	 }
	 
	 @Path("/results")
	 @GET
	 @Produces({MediaType.APPLICATION_JSON})
	 public List<SchemaDefinitionJSON> getSchemas(@DefaultValue("group") @QueryParam("type") String type)
	 {
		 List<SchemaDefinitionJSON> retval = null;
	 
		 CIIMDataManager cdm = (CIIMDataManager) ctx.getBean("CIIMDataManager");
		 
		 if(type != null && type.equalsIgnoreCase("*"))
		 {
			 retval = cdm.getAllSchemas();
		 }
		 else
		 {
			 retval = cdm.getSchemas(MimsyDataTypeEnum.valueOf(type.toUpperCase()));
		 }
		 
		 return retval;
	 }
}
