package com.k_int.aggregator.dpp.actions;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;

import com.k_int.aggregator.datamodel.ResourceInstanceHDO;
import com.k_int.euinside.client.module.validation.Validate;
import com.k_int.euinside.client.module.validation.ValidationResult;
import com.opensymphony.xwork2.ActionSupport;

public class ResourceValidateJsonAction extends ActionSupport 
{
	private static final long serialVersionUID = -6100923898613156214L;
	private transient SessionFactory factory;
	private static Log log = LogFactory.getLog(ResourceValidateJsonAction.class);
	private String resourceId;
	private String resourceTypeId;
	private ValidationResult validationResult;
	  
	public void setSessionFactory(org.hibernate.SessionFactory factory) {
		this.factory = factory;
	}
	
	public String execute() throws Exception
	{
		String retval = SUCCESS;
		Session databaseSession = null;
		
		try {
			databaseSession = factory.openSession();
			if ((resourceId != null) && 
		    	!resourceId.isEmpty() &&
		    	(resourceTypeId != null) && 
		    	!resourceTypeId.isEmpty()) {
				long id = Long.parseLong(resourceId);
				Query q = databaseSession.createQuery("from ResourceInstanceHDO r where r.resource.id = ? and r.resourceType.identifier = ?");
				q.setParameter(0, id);
				q.setParameter(1, resourceTypeId);
				ResourceInstanceHDO instance = (ResourceInstanceHDO) q.uniqueResult();
				if (instance != null) {
					validationResult = Validate.sendBytes("notSet", instance.getContent());
				}
			}  
		} catch (HibernateException e ) {
			log.error("Problem with fetching record", e);
		} finally {
			if (databaseSession != null) {
				try {
					databaseSession.close();
				} catch (Exception e) {
				}
			}
		}
		
		return(retval);
	}
	
	public String getResourceId() {
		return(resourceId);
	}
	
	public void setResourceId(String resourceId) {
		this.resourceId = resourceId;
	}
	
	public String getResourceTypeId() {
		return(resourceTypeId);
	}
	
	public void setResourceTypeId(String resourceTypeId) {
		this.resourceTypeId = resourceTypeId;
	}
	
	public ValidationResult getValidationResult() {
		return(validationResult);
	}
}
