package lookup;

import java.io.IOException;

import org.jdom.Document;
import org.jdom.Element;

import trading.XMLRepository;
import trading.exceptions.ReadException;
import trading.exceptions.WriteException;


public class Lookup_ontology
{
	//Concepts
	private QueryForm queryForm;
	private PolicySeq policySeq;
	private OfferSeq offerSeq;
	private OfferSeqMatch offerSeqMatch;
	
	//Action
	private Query query;
	
	//Predicates
	private UnknownQueryForm unknownQueryForm;
	private PolicyTypeMismatch policyTypeMismatch;	
	private InvalidPolicyName invalidPolicyName;
	private DuplicatePolicyName duplicatePolicyName;
	private QueryError queryError;
	private EmptyOfferSeq emptyOfferSeq;
	private NotEmptyOfferSeq notEmptyOfferSeq;
	
	public Lookup_ontology()
	{
		queryForm = new QueryForm();
		policySeq = new PolicySeq();
		offerSeq = new OfferSeq();
		offerSeqMatch = new OfferSeqMatch();
		
		query = new Query();
		
		unknownQueryForm = new UnknownQueryForm();
		policyTypeMismatch = new PolicyTypeMismatch();
		invalidPolicyName = new InvalidPolicyName();
		duplicatePolicyName = new DuplicatePolicyName();
		queryError = new QueryError();
		emptyOfferSeq = new EmptyOfferSeq();
		notEmptyOfferSeq = new NotEmptyOfferSeq();
	}

	public void setQueryForm(QueryForm queryForm)
	{
		this.queryForm = queryForm;
	}

	public QueryForm getQueryForm()
	{
		return queryForm;
	}

	public void setPolicySeq(PolicySeq policySeq)
	{
		this.policySeq = policySeq;
	}

	public PolicySeq getPolicySeq()
	{
		return policySeq;
	}

	public void setOfferSeq(OfferSeq offerSeq) 
	{
		this.offerSeq = offerSeq;
	}

	public OfferSeq getOfferSeq() 
	{
		return offerSeq;
	}

	public void setOfferSeqMatch(OfferSeqMatch offerSeqMatch) 
	{
		this.offerSeqMatch = offerSeqMatch;
	}

	public OfferSeqMatch getOfferSeqMatch() 
	{
		return offerSeqMatch;
	}

	public void setQuery(Query query) {
		this.query = query;
	}

	public Query getQuery() {
		return query;
	}

	public void setUnknownQueryForm(UnknownQueryForm unknownQueryForm)
	{
		this.unknownQueryForm = unknownQueryForm;
	}

	public UnknownQueryForm getUnknownQueryForm() 
	{
		return unknownQueryForm;
	}

	public void setPolicyTypeMismatch(PolicyTypeMismatch policyTypeMismatch) 
	{
		this.policyTypeMismatch = policyTypeMismatch;
	}

	public PolicyTypeMismatch getPolicyTypeMismatch() 
	{
		return policyTypeMismatch;
	}

	public void setInvalidPolicyName(InvalidPolicyName invalidPolicyName) 
	{
		this.invalidPolicyName = invalidPolicyName;
	}

	public InvalidPolicyName getInvalidPolicyName() 
	{
		return invalidPolicyName;
	}

	public void setDuplicatePolicyName(DuplicatePolicyName duplicatePolicyName) 
	{
		this.duplicatePolicyName = duplicatePolicyName;
	}

	public DuplicatePolicyName getDuplicatePolicyName() 
	{
		return duplicatePolicyName;
	}

	public void setQueryError(QueryError queryError) 
	{
		this.queryError = queryError;
	}

	public QueryError getQueryError() 
	{
		return queryError;
	}

	public void setEmptyOfferSeq(EmptyOfferSeq emptyOfferSeq) 
	{
		this.emptyOfferSeq = emptyOfferSeq;
	}

	public EmptyOfferSeq getEmptyOfferSeq() 
	{
		return emptyOfferSeq;
	}

	public void setNotEmptyOfferSeq(NotEmptyOfferSeq notEmptyOfferSeq) 
	{
		this.notEmptyOfferSeq = notEmptyOfferSeq;
	}

	public NotEmptyOfferSeq getNotEmptyOfferSeq() 
	{
		return notEmptyOfferSeq;
	}

	public void save_properties(String path)
	{
		XMLRepository XMLRep;

		Element Lookup_elem;
			Element Concepts_elem;
		  		Element QueryForm_elem;
		      		Element QueryForm_id_elem;
		      		Element QueryForm_uri_elem;
		      		Element QueryForm_type_elem;
		      		Element QueryForm_source_elem;
		      		Element QueryForm_target_elem;
		      	Element PolicySeq_elem;
		       		Element PolicySeq_value_elem;
		       	Element OfferSeq_elem;
		       		Element OfferSeq_id_elem;
		       		Element OfferSeq_uri_elem;
		       	Element OfferSeqMatch_elem;
		       		Element OfferSeqMatch_id_elem;
		       		Element OfferSeqMatch_uri_elem;
	       	Element Actions_elem;
	       		Element Query_elem;
	       			Element Query_id_elem;
   			Element Predicates_elem;
   				Element UnknownQueryForm_elem;
   				Element PolicyTypeMismatch_elem;
   				Element InvalidPolicyName_elem;
   				Element DuplicatePolicyName_elem;
   				Element QueryError_elem;
   				Element EmptyOfferSeq_elem;
   				Element NotEmptyOfferSeq_elem;		    	

		Document doc;

		Lookup_elem = new Element("Lookup");
			Concepts_elem = new Element("Concept");
				QueryForm_elem = new Element("QueryForm");
					QueryForm_id_elem = new Element("id");
					QueryForm_uri_elem = new Element("uri");
					QueryForm_type_elem = new Element("type");
					QueryForm_source_elem = new Element("source");
					QueryForm_target_elem = new Element("target");
				PolicySeq_elem = new Element("PolicySeq");
					PolicySeq_value_elem = new Element("value");
				OfferSeq_elem = new Element("OfferSeq");
					OfferSeq_id_elem = new Element("id");
					OfferSeq_uri_elem = new Element("uri");
				OfferSeqMatch_elem = new Element("OfferSeqMatch");
					OfferSeqMatch_id_elem = new Element("id");
					OfferSeqMatch_uri_elem = new Element("uri");
			Actions_elem = new Element("Action");
				Query_elem = new Element("Query");
					Query_id_elem = new Element("id");
			Predicates_elem = new Element("Predicate");
				UnknownQueryForm_elem = new Element("UnknownQueryForm");
				PolicyTypeMismatch_elem = new Element("PolicyTypeMismatch");
				InvalidPolicyName_elem = new Element("InvalidPolicyName");
				DuplicatePolicyName_elem = new Element("DuplicatePolicyName");
				QueryError_elem = new Element("QueryError");
				EmptyOfferSeq_elem = new Element("EmptyOfferSeq");
				NotEmptyOfferSeq_elem = new Element("NotEmptyOfferSeq");

		doc = null;
		
		//Set the properties of each element
		QueryForm_id_elem.setText(queryForm.getId()+"");
		QueryForm_uri_elem.setText(queryForm.getUri());
		QueryForm_type_elem.setText(queryForm.getType());
		QueryForm_source_elem.setText(queryForm.getSource());
		QueryForm_target_elem.setText(queryForm.getTarget());
		
		QueryForm_elem.addContent(QueryForm_id_elem);
		QueryForm_elem.addContent(QueryForm_uri_elem);
		QueryForm_elem.addContent(QueryForm_type_elem);
		QueryForm_elem.addContent(QueryForm_source_elem);
		QueryForm_elem.addContent(QueryForm_target_elem);
		PolicySeq_elem.addContent(PolicySeq_value_elem);
		OfferSeq_elem.addContent(OfferSeq_id_elem);
		OfferSeq_elem.addContent(OfferSeq_uri_elem);
		OfferSeqMatch_elem.addContent(OfferSeqMatch_id_elem);
		OfferSeqMatch_elem.addContent(OfferSeqMatch_uri_elem);
		
		Query_elem.addContent(Query_id_elem);
		
		Concepts_elem.addContent(QueryForm_elem);
		Concepts_elem.addContent(PolicySeq_elem);
		Concepts_elem.addContent(OfferSeq_elem);
		Concepts_elem.addContent(OfferSeqMatch_elem);
		
		Actions_elem.addContent(Query_elem);
		
		Predicates_elem.addContent(UnknownQueryForm_elem);
		Predicates_elem.addContent(PolicyTypeMismatch_elem);
		Predicates_elem.addContent(InvalidPolicyName_elem);
		Predicates_elem.addContent(DuplicatePolicyName_elem);
		Predicates_elem.addContent(QueryError_elem);
		Predicates_elem.addContent(EmptyOfferSeq_elem);
		Predicates_elem.addContent(NotEmptyOfferSeq_elem);
		
		Lookup_elem.addContent(Concepts_elem);
		Lookup_elem.addContent(Actions_elem);
		Lookup_elem.addContent(Predicates_elem);
		
		
		XMLRep = new XMLRepository();
		
		try
		{
			doc = new Document(Lookup_elem);

			XMLRep.write_file(path, doc);

			//this.save_links_repository();
		}
		catch(WriteException e)
		{
			
			System.out.println("Exception: WriteException...");
			System.out.println(e.toString());
			System.out.println();
		}
		
	}
	
	public void load_properties(String path)
	{
		XMLRepository XMLRep = new XMLRepository();
		
		try
		{
			Document doc = XMLRep.read_file(path);
			
			Element Lookup_elem = doc.getRootElement();
				Element Concepts_elem = Lookup_elem.getChild("Concept");
			  		Element QueryForm_elem = Concepts_elem.getChild("QueryForm");
			      		Element QueryForm_id_elem = QueryForm_elem.getChild("id");
			      		Element QueryForm_uri_elem = QueryForm_elem.getChild("uri");
			      		Element QueryForm_type_elem = QueryForm_elem.getChild("type");
			      		Element QueryForm_source_elem = QueryForm_elem.getChild("source");
			      		Element QueryForm_target_elem = QueryForm_elem.getChild("target");
			      	Element PolicySeq_elem = Concepts_elem.getChild("PolicySeq");
			       		Element PolicySeq_value_elem = PolicySeq_elem.getChild("value");
			       	Element OfferSeq_elem = Concepts_elem.getChild("OfferSeq");
			       		Element OfferSeq_id_elem = OfferSeq_elem.getChild("id");
			       		Element OfferSeq_uri_elem = OfferSeq_elem.getChild("uri");
			       	Element OfferSeqMatch_elem = Concepts_elem.getChild("OfferSeqMatch");
			       		Element OfferSeqMatch_id_elem = OfferSeqMatch_elem.getChild("id");
			       		Element OfferSeqMatch_uri_elem = OfferSeqMatch_elem.getChild("uri");
		       	Element Actions_elem = Lookup_elem.getChild("Action");
		       		Element Query_elem = Actions_elem.getChild("Query");
		       			Element Query_id_elem = Query_elem.getChild("id");
	   			Element Predicates_elem = Lookup_elem.getChild("Predicate");
	   				Element UnknownQueryForm_elem = Predicates_elem.getChild("UnknownQueryForm");
	   				Element PolicyTypeMismatch_elem = Predicates_elem.getChild("PolicyTypeMismatch");
	   				Element InvalidPolicyName_elem = Predicates_elem.getChild("InvalidPolicyName");
	   				Element DuplicatePolicyName_elem = Predicates_elem.getChild("DuplicatePolicyName");
	   				Element QueryError_elem = Predicates_elem.getChild("QueryError");
	   				Element EmptyOfferSeq_elem = Predicates_elem.getChild("EmptyOfferSeq");
	   				Element NotEmptyOfferSeq_elem = Predicates_elem.getChild("NotEmptyOfferSeq");
	   				
	   				this.queryForm.setId(new Integer(QueryForm_id_elem.getText()));
	   				this.queryForm.setUri(QueryForm_uri_elem.getText());
	   				this.queryForm.setType(QueryForm_type_elem.getText());
	   				this.queryForm.setSource(QueryForm_source_elem.getText());
	   				this.queryForm.setTarget(QueryForm_target_elem.getText());
	   				
	   				//this.policySeq.setValue(PolicySeq_value_elem.getText());
	   				
	   				//this.offerSeq.setId(new Integer(OfferSeq_id_elem.getText()));
	   				//this.offerSeq.setUri(OfferSeq_uri_elem.getText());
	   				
	   				//this.offerSeqMatch.setId(new Integer(OfferSeqMatch_id_elem.getText()));
	   				//this.offerSeqMatch.setUri(OfferSeqMatch_uri_elem.getText());
	   				
	   				//this.query.setId(new Integer(Query_id_elem.getText()));
	   				
	   				//this.unknownQueryForm.setReturned_message(returned_message)
		}
		catch (ReadException e)
		{
			e.printStackTrace();
		}
		catch (IOException e)
		{
			e.printStackTrace();
		}

	}
}
